eBus Manager

Ja, klappt mit eBUS Manager. Die Befehle müssen aber im Code hinterlegt sein. Du musst eventuell ein paar Befehle anpassen.
Hatte es jahrelang auf Windows / IPS laufen und dann umgestellt auf QNAP / Docker-IPS.

Gruß
Klaus

Läuft das auch vollständig auf nem Raspi, oder benötige ich Windows?

Hallo Klaus,

ich brauche bitte wieder mal deine Hilfe!

Ist-Zustand:
Ich habe es jetzt geschafft in der Register-Variable die HEX Zeichen zu sehen :slight_smile:
Ist ja schon mal was, oder?

Frage:
Muss ich jetzt dein obiges Skript:

[if($_IPS['SENDER'] == "RegisterVariable")
{
        if ( !empty($_IPS['VALUE']) ) {
            $ebushex = Str2HexBlank($_IPS['VALUE']) ;   // binärer Datenstrom wird in HEX String umgewandelt
                    EBUS_NachrichtVerarbeitenNEW($ebushex);
        }
}


function Str2HexBlank($str) {
// erzeugt einen leserlichen HEX String mit Blanks
    $return = '';
    for($i = 0; $i < strlen($str); $i++) {
        $return .= strtoupper(bin2hex(substr($str, $i, 1))).' ';
    }
    return $return;
}

mit einem Ereignis aufrufen? Also bei Änderung RegisterVariable? Wo schreibt er den leserlichen HEX String denn hin?

Und was passiert dann? Was ist „EBUS_NachrichtVerarbeitenNEW“?

Ich brauche die einzelnen Werte ja in einer Variablen. z
.B. Außentemperatur

Vielen Dank und lg

Hallo Christian,

dass klingt ja gut. Der Datenstrom kommt jetzt also als Rohdatenstrom in der Registervariablen an. Du hast sicher auch den Cutter verwendet, um den Datenstrom in sinnvolle Stücke zu scheiden. Die Registervariable ruf dann noch das Script auf EBUS.EMPFAENGER auf, darin steckt dann der zitierte Code.

Ich muss hier noch ein paar Details erläutern. In der ursprünglichen Implementierung von terenyl hat man unter Windows einen Dienst genutzt, der die Daten bereits als „formatierte Hexwerte in Stringformat“ an die IO Schnittstelle übergab. Unter Linux bzw bei mir QNAP und die direkte Anbindung des eBUS - IP Gateways fehlt also diese Umwandlung, daher sind jetzt erstmal binäre Daten in der Registervariablen.
Hier greift die Funktion Str2HexBlank. Der Binärstrom aus der Registervariablen wird dann in einen leserlichen Textstring umgewandelt (jeweils zweistellig Hex und dann ein Leerzeichen). Damit hat man das Format, wie bei dem Original von terenyl. Ich hab da noch eine IF Abfrage eingebaut und rufe die Funktion EBUS_NachrichtVerarbeitenNEW auf. Die ist eine Modifikation gegenüber der Funktion EBUS_NachrichtVerarbeiten von terenyl.
Wenn Du das Script über die RegisterVariable startest, kannst Du dort probehalber mal die "formatierten Hexwerte in Stringformat in den Log schreiben. Da kannst Du dann in den IPS Meldungen mitlesen was der eBUS liefert.

Der nächste Schritt ist dann die Auswertung der eBUS Nachricht. Das hängt von den Geräten ab, die DU einsetzt. Ich habe die VR470 und den VR61. Die Befehle, die terenyl damals einprogrammiert hat haben bei mir ganz gut funktioniert. Ich habe den Code allerdings an einigen Stellen deutlich umgebaut. Sag Bescheid, was für eBUS Geräte Du hast. Ich kann Dir gerne per PM die Scripte zukommen lassen.

Gruß
Klaus

Guten Morgen Klaus!

JA, soweit habe ich das mit deiner Hilfe hinbekommen! :smiley:

Leider ist gestern Abend, als ich einene Screenshot machen wollte mein IPS abgeschmiert und lässt sich jetzt aus der Ferne nicht mehr verebinden.

Wenn ich auf DEBUG klicke kommen in etwa solche Zeilen:

22.10.2019 21:34 PROCESS AA
22.10.2019 21:36 PROCESS AA
22.10.2019 21:37 PROCESS 0B 00 FA 0C FF …
22.10.2019 21:38 PROCESS AA

Sehe ich richtig, das ich dann die Daten aus dem eBus im HEX Format habe?

Ich muss hier noch ein paar Details erläutern. In der ursprünglichen Implementierung von terenyl hat man unter Windows einen Dienst genutzt, der die Daten bereits als „formatierte Hexwerte in Stringformat“ an die IO Schnittstelle übergab. Unter Linux bzw bei mir QNAP und die direkte Anbindung des eBUS - IP Gateways fehlt also diese Umwandlung, daher sind jetzt erstmal binäre Daten in der Registervariablen.
Hier greift die Funktion Str2HexBlank. Der Binärstrom aus der Registervariablen wird dann in einen leserlichen Textstring umgewandelt (jeweils zweistellig Hex und dann ein Leerzeichen). Damit hat man das Format, wie bei dem Original von terenyl. Ich hab da noch eine IF Abfrage eingebaut und rufe die Funktion EBUS_NachrichtVerarbeitenNEW auf. Die ist eine Modifikation gegenüber der Funktion EBUS_NachrichtVerarbeiten von terenyl.

Ist das bei mir dann gleich wie bei dir?
Muss ich in der RegisterVariable dein obiges HEX-Script aufrufen, das wiederum dann das „EBUS_NachrichtVerarbeitenNEW“ aufruft, das ich wiederum in der php Datei Empfänger.php sitzt?

Wenn Du das Script über die RegisterVariable startest, kannst Du dort probehalber mal die "formatierten Hexwerte in Stringformat in den Log schreiben. Da kannst Du dann in den IPS Meldungen mitlesen was der eBUS liefert.

Wie schreibe ich etwas in das Log?

Der nächste Schritt ist dann die Auswertung der eBUS Nachricht. Das hängt von den Geräten ab, die DU einsetzt. Ich habe die VR470 und den VR61. Die Befehle, die terenyl damals einprogrammiert hat haben bei mir ganz gut funktioniert. Ich habe den Code allerdings an einigen Stellen deutlich umgebaut. Sag Bescheid, was für eBUS Geräte Du hast. Ich kann Dir gerne per PM die Scripte zukommen lassen.

Gruß
Klaus

Ja, der nächste große Schritt!

Vaillant Gerätschaften:

[ul]
[li]flexoTHERM VWF 87 /4 (LWP)[/li][li]aroCOLLECT Luft/Wasser (Außeneinheit/Lüfter)[/li][li]multiMATIC VRC 700 (Bedieneinheit im Wohnzimmer EG - 2.HK)[/li][li]Fernbedienung VR91 (Einliegerwohnung 1. HK)[/li][li]Vaillant VR 70 Mischer- und Solarmodul, Erweiterung für Mischerkreis (für 2.HK und Pufferspeichertemperaturen)[/li][li]recoVAIR360 (KWL)[/li][/ul]

Wobei ich ja schon mal froh wäre die Außentemperatur auszulesen :slight_smile:

Ich habe die Skripte von terenyi mal in meinem IPS Verzeichnis so angelegt. ebus_Manager.php, ebus_Empfänger.php, die ebus_Definitionen.php sowie die Variablen.

Sobald ich IPS wieder am laufen habe (wird leider Wochenende werden) melde ich mich nochmal mit ein paar Greenshots.

Vielen Vielen Dank und schönen Tag!
lg
Christian

Hallo Christian,
hier schon mal ein paar Ideen / Antworten von mir. Dein Absturz klingt nicht gut. Der Empfang der eBUS Nachrichten bringt etwas Last auf das IPSymcon System. Daher ist es wichtig den Cutter einzustellen und nur die sinnvollen Binärdaten per Script Aufruf zu verarbeiten. Daher auch die IF Abfrage am Anfang meines Scriptes. Falls doch mal nichts sinnvolles durchgereicht wird, schnell wieder beenden. Schau Dir mal Deinen ThreadCount an - meiner ist bei 40.

Debug sieht OK aus. Die Darstellung im Debug ist ebenfalls eine Stringkonvertierung.
Das ist bei Dir genauso wie bei mir.
Die Registervariable mit dem binären Datenstrom in die Function Str2HexBlank und dann kannst Du diese mit dem Script von rerenyi verarbeiten.

Du kannst es dann mit terenyi’s Version von EBUS_NachrichtVerarbeiten versuchen.

IPS_LogMessage(„eBus“, " … deine Nachricht für’s Log …");

Das ist eine ganze Menge. Da Vaillant die eBUS Nachrichten nicht veröffentlicht hat ist es etwas mühsam. Aber die Temperatur sollte schon klappen. Ich habe bei mir so um die 30 Parameter ausgelesen und steuer meine Heizung mit den entsprechenden eBUS Nachrichten.

hier meine aktuelle Struktur:

Gruß
Klaus

Hallo,

ins Log schreiben würde dann so aussehen?


 [if($_IPS['SENDER'] == "RegisterVariable")
 {
         if ( !empty($_IPS['VALUE']) ) {
             $ebushex = Str2HexBlank($_IPS['VALUE']) ;   // binärer Datenstrom wird in HEX String umgewandelt
                     // EBUS_NachrichtVerarbeitenNEW($ebushex);
                     IPS_LogMessage("eBus", $ebushex);
         }
 }


 function Str2HexBlank($str) {
 // erzeugt einen leserlichen HEX String mit Blanks
     $return = '';
     for($i = 0; $i < strlen($str); $i++) {
         $return .= strtoupper(bin2hex(substr($str, $i, 1))).' ';
     }
     return $return;
 }

Hab ich wohl vergeigt…

Debug sieht OK aus. Die Darstellung im Debug ist ebenfalls eine Stringkonvertierung.
Das ist bei Dir genauso wie bei mir.
Die Registervariable mit dem binären Datenstrom in die Function Str2HexBlank und dann kannst Du diese mit dem Script von rerenyi verarbeiten.

Du kannst es dann mit terenyi’s Version von EBUS_NachrichtVerarbeiten versuchen.

…also anstatt der Zeile:IPS_LogMessage(„eBus“, " … deine Nachricht für’s Log …");
schreibe ich dann:EBUS_NachrichtVerarbeiten($ebushex);

Findet er diese Funktion im „ebus_Empfaenger.php“ Skript automatisch?

Das ist eine ganze Menge. Da Vaillant die eBUS Nachrichten nicht veröffentlicht hat ist es etwas mühsam. Aber die Temperatur sollte schon klappen. Ich habe bei mir so um die 30 Parameter ausgelesen und steuer meine Heizung mit den entsprechenden eBUS Nachrichten.

Ans steuern denke ich jetzt noch gar nicht :slight_smile: Vielleicht später mal die KWL Lüftungsstufen umstellen.

Ich möchte mal die Uhreit abfragen (damit werde ich anfangen), die Außentemperatur und die Speichertemperaturen, VL und RL sowie die Temperaturen der KWL.

muss jetzt mal IPS wieder zum laufen bekommen und dann schrittweise zu kleinen Erfolgen kommen…

[ul]
[li]ins Log schreiben -> d.h. die Daten werden konvertiert und sind verfügbar[/li][li]die Uhrzeit anzeigen lassen -> d.h. die konvertierten Daten (dein Skript )werden dem Skript (terenyi) übergeben und es „sucht“ sich die auf den Bus gesendete Uhrzeit aus den Daten raus und schreibt sie in die IPS Variable[/li][/ul]

Vielen Dank und bis bald :slight_smile:
lg
Christian

Aber gleich noch eine Frage:

Wie sieht deine „ebus_Definitionen.php“ aus?

da gibt es doch einen Parameter mit UPD Socket:
// UDP Socket zur Kommunikation mit dem eBus Connector
define(‚EBUS‘, 36211);

Muss ich den ändern? Kann ich doch löschen diese Zeile, oder?

lg
Chri

Abend Klaus!

Hurra! Es sieht jetzt so aus:


Aber er kann nichts parsen…


Nach aktivieren der beiden Timer Monitor (Regler) und Monitor (Service)

Definitionen.php:
// UDP Socket zur Kommunikation mit dem eBus Connector
define(‚EBUS‘, 54914); //UDP Socket

oder sollte ich den eBus Client Socket nehmen?

Gute Nacht

Hallo Christian,

Du warst ja ganz schön fleißig. Hier ein paar Punkte:

…also anstatt der Zeile:
IPS_LogMessage(„eBus“, " … deine Nachricht für’s Log …");
schreibe ich dann:
EBUS_NachrichtVerarbeiten($ebushex);
Findet er diese Funktion im „ebus_Empfaenger.php“ Skript automatisch?

das sollte klappen, da du es ja mit include / require lädst

Ich möchte mal die Uhreit abfragen (damit werde ich anfangen), die Außentemperatur und die Speichertemperaturen, VL und RL sowie die Temperaturen der KWL.

Uhrzeit bei eBUS brauchst Du nicht abzufragen. Diese wird als Nachricht regelmäßig auf den eBUS gesendet.
Temperaturen und Einstellungen sind interessanter. Kennst Du die Anleitungen zum Entschlüsseln von eBUS Nachrichten?

Wie sieht deine „ebus_Definitionen.php“ aus?

ich habe zwei, zum einen die vom Original und dann eine eigene. Ich kann Sie Dir per PM schicken.

a gibt es doch einen Parameter mit UPD Socket:
// UDP Socket zur Kommunikation mit dem eBus Connector
define(‚EBUS‘, 36211);

Du musst den Client Socket nehmen. Die ursprüngliche Version von terenyi hat unter Windows mit dem UDP gearbeitet. Ist hier nicht mehr notwendig.
Wenn Du willst schock ich Dir meine überarbeitete Fassung der scripte.

Gruß
Klaus

Nein, kann man (ich) das? Cool


Wenn Du willst schock ich Dir meine überarbeitete Fassung der scripte.

Ja bitte. Ich habe ja eine LWP mit einer Multimatic, es sieht mit den Skripten vom TE so aus:

Status Modus: hier steht TAG, kann aber nicht stimmen

und das Monitor Regler Skript meldet einen Fehler:
Abort Processing during exceed of maximal ErrorCount: Instance does not implement this function
Error in Script /var/lib/symcon/scripts/eBusManager.php on Line 258