eBus Manager

Hallo zusammen!

Ich möchte hier auch mein eBus-Projekt vorstellen. Ich bin nur dank der Hilfe aus diesem Forum überhaupt erst soweit gekommen und vielleicht ist dafür hier etwas Nützliches für wen anderen dabei.

Kurz vorweg, ich habe eine Vaillant atmoTEC plus Gastherme (mit Warmwasserspeicher) und einen VRT 370 Regler, welche über den eBus miteinander verbunden sind. Da habe ich mich dazugehängt, um die Heizung über den Computer überwachen und steuern zu können.

Meine Skripte sind klarerweise an meine spezielle Situation und meine Ziele angepasst.

Nun aber zu den Details:

Konzept

Konzeptionell kann man die ganze Lösung in mehrere Schichten unterteilen:

Schicht 1: Physischer Zugriff

Ich habe den [b]eBus Koppler Ethernet[/b] von E-Service Online in Verwendung, welcher den physischen Zugriff auf den eBus herstellt, den Datenstrom abgreift, diesen via Ethernet an den Computer weiterleitet, wo er über eine virtuelle COM-Schnittstelle abgegriffen werden kann.

Zusätzlich habe ich den eBus Koppler an eine [b]WLAN-Bridge[/b] angeschlossen, sodass ich kein Ethernet-Kabel zum eBus Koppler brauche, sondern via WLAN vom Computer darauf zugreifen kann.

Schicht 2: Datenstrom-Management

Ich habe mit C# einen [b]eBus Connector[/b] entwickelt, welcher im Hintergrund als Windows-Service läuft, den Datenstrom von der virtuellen COM-Schnittstelle in einzelne Nachrichten unterteilt und dann jede Nachricht einzeln als UDP-Paket an IP-Symcon weiterleitet.

Außerdem lauscht der eBus Connector auf UDP-Pakete von IP-Symcon, welche zu sendende eBus Nachrichten enthalten, die dann vom eBus Connector mit dem Bus synchronisiert verschickt werden.

Schicht 3: Low-level Funktionen

Im Skript eBusManager.php sind alle low-level Funktionen zusammengefasst. Dazu gehört das Interpretieren von empfangenen Nachrichten entsprechend des Protokolls: welches Byte bedeutet was (QQ, ZZ, PB, SB, NN, DB1, …, DBn, CRC, ACK usw.), A9 expandieren, CRC berechnen usw. Der eigentliche Inhalt (Befehl und Daten-Bytes) wird erst in der nächsten Schicht behandelt. Weitere Funktionen sind das Erzeugen von Nachrichten aus gegebenen Parametern (Befehl und Daten), Funktionen zum Kodieren und Dekodieren von Werten (z.B. DATA2c) usw.

Schicht 4: High-level Funktionen

Das Skript eBusEmpfaenger.php wird (als Ziel-Skript der Register-Variable des UDP-Sockets, der die Verbindung zum eBus Connector herstellt) beim Empfang einer jeden Nachricht aufgerufen und verarbeitet dann die entsprechende Nachricht. Hier wird der Inhalt der Nachrichten analysiert und die empfangenen Werte werden in IP-Symcon Variablen gespeichert.

Das Skript eBusSender.php enthält Funktionen zum Senden von eBus Nachrichten, z.B. „Zeitfenster setzen“, „Temperatur auslesen“ usw., wobei nur die Ziel-Werte (z.B. Soll-Temperatur) angegeben werden müssen und die Funktionen selber wissen, was mit welchem Befehl gemacht werden muss. Zum Setzen von Werten werden entsprechende Nachrichten gesendet und zum Auslesen von Werten werden die nötigen Anfragen geschickt. Die Antworten auf solche Anfragen (mit den gewünschten Werten) werden im Empfänger-Skript behandelt, welches die Werte in die entsprechenden IP-Symcon Variablen schreibt.

Manche Werte (z.B. Ist-Speichertemperatur) lassen sich rein durch das Abhören der Kommunikation zwischen Heizung und Regler aktuell halten. Andere Werte (z.B. Raum-Soll-Temperatur) müssen explizit abgefragt werden. Das Skript eBusMonitorRegler.php wird über ein Timer-Event zyklisch gestartet und fordert genau diese Werte regelmäßig an.

Zusätzlich gibt es noch die Skripte eBusMonitorSpeicher.php (überwacht die Speichertemperatur aufgrund des hier beschriebenen Problems und sendet einen Stopp-Befehl an die Heizung bei Überhitzung) und eBusMonitorService.php (startet die Windows-Services für den virtuellen COM-Port und den eBus Connector neu, wenn zu lange nichts mehr über den eBus empfangen wurde).

Schicht 5: Geschäftslogik

Mit den zuvor beschriebenen Funktionen ist es nun möglich, die Heizung zu steuern (über die vom Sender-Skript bereitgestellten Funktionen) und zu überwachen (hierzu sind keine Funktionsaufrufe notwendig, sondern es müssen nur die entsprechenden IP-Symcon Variablen ausgelesen werden, welche immer aktuell sein sollten). Dies kann verwendet werden, um die Heizung in die Haus-Automatisierung nach Wunsch einzubinden (z.B. Temperatur absenken, sobald man das Haus verlässt usw.).

Hier sind der Fantasie keine Grenzen gesetzt und daran werde ich mich als Nächstes machen, nachdem jetzt die nötigen Grundlagen dafür geschaffen sind.

IP-Symcon Setup

Hier ein paar Screenshots meines IP-Symcon Setups. Die Variablen sind nötig, weil darin die Daten aus empfangenen Nachrichten gespeichert werden. Die Struktur und die Namen sind egal, die Skripte greifen rein über die IDs zu, welche alle zentral im Skript eBusDefinitionen.php gespeichert sind. Dieses Skript muss also jeder an seine eigenen Bedürfnisse anpassen. Neben Variablen-IDs sind dort noch Parameter (z.B. Logging ein/aus), sonstige Konstanten und dergleichen enthalten.

Übersicht

Details

Skripte

Die ganze Logik ist in den sieben Skripten

[ul]
[li]eBusDefinitionen.php
[/li][li]eBusManager.php
[/li][li]eBusEmpfaenger.php
[/li][li]eBusSender.php
[/li][li]eBusMonitorRegler.php
[/li][li]eBusMonitorSpeicher.php
[/li][li]eBusMonitorService.php
[/li][/ul]
enthalten, welche oben schon näher beschrieben wurden. Wie zuvor gesagt, zum Lesen braucht man nur die entsprechenden IP-Symcon Variablen abfragen, zum Schreiben muss man nur eBusSender.php inkludieren und kann dann die jeweiligen Funktionen nutzen. In eBusDefinitionen.php wird alles parametrisiert.

Installer

Ich habe jetzt auch ein mit dem IPS RS Project Exporter erstelltes Installer-Skript hinzugefügt. Ich habe den Import nicht probiert, also kann ich leider für nichts garantieren. Ich weiß nicht, ob der Installer die originalen Objekt-IDs verwendet. Falls nicht, muss auf jeden Fall trotzdem noch eBusDefinitionen.php angepasst werden, aber man erspart sich dann zumindest das händische Anlegen aller Elemente. Die Events müssen nach dem Import auch noch händisch angelegt werden, glaube ich gelesen zu haben.

So, das war es auch schon! Über Feedback freue ich mich natürlich jederzeit!

Grüße an alle!

eBus Manager v1.4 Installer.zip (29.2 KB)

eBus Manager v1.4.zip (15.2 KB)

Moin terenyi,

ich habe mir das jetzt mal angeschaut - sieht schon wirklich sehr gut aus!

Kleine Anmerkung zur Installation bzw. Portierbarkeit: man kann in deinen Skripts ja alle Variablen in eBusDefinitionen.php definieren, muss diese aber vorher manuell anlegen und Profile zuweisen. Könnte man dies auf IPSInstaller oder IPS-RS-Project-Exporter umstellen? Würde die Installation bzw. Test unheimlich vereinfachen.

Danke& Gruß, Axel

Gute Idee, das mit dem Installer - wusste gar nicht, dass es sowas gibt!

Ich habe die Files gerade auf Version 1.1 upgedated und dabei gleich auch ein mit dem IPS RS Project Exporter erstelltes Installer-Skript hinzugefügt.

Wie ich oben schon geschrieben habe: Ich habe den Import nicht probiert, also kann ich leider für nichts garantieren. Ich weiß nicht, ob der Installer die originalen Objekt-IDs verwendet. Falls nicht, muss auf jeden Fall trotzdem noch eBusDefinitionen.php angepasst werden, aber man erspart sich dann zumindest das händische Anlegen aller Elemente. Die Events müssen nach dem Import auch noch händisch angelegt werden, glaube ich gelesen zu haben. Das Erstellen der Definitionen für eBusDefinitionen.php (falls überhaupt nötig) lässt sich sicher auch noch skripten, aber das überlasse ich jemand anderem als Übung. :wink:

Ich glaube, ich muss meine eBus-Struktur beizeiten mal komplett einreißen und neu machen. Das sieht sehr gut aus wie du es gelöst hast :slight_smile:

Habe jetzt noch auf die Version 1.2 upgedated, wo ich die Abfrage des Heizungsstatus (wie er beim Drücken der i-Taste direkt auf der Heizung angezeigt wird) hinzugefügt habe. Das sollte es damit dann aber für’s Erste mal gewesen sein.

Ok, ein Update noch (v1.3): Monitor verbessert.
Aber das war’s jetzt wirklich…

Super Projekt - großer Respekt! Und funktioniert auch mit Raketenschnecke’s Installer (Ereignisse müssen händisch aktiviert werden). Leider ist meine Weishaupt gar nicht gewillt die gleichen Befehle wie die Vaillant zu nutzen. Kommt nichts sinnvolles an. Thomas, Du hast eine PN!

Thomas, nach einem reboot auf meinen 2008R2 x64 startet der eBus Manager (asl Dienst) nur, um sich dann nach ca. 1 Minute einfach zu beenden. Neu-Installation behebt das Problem bis zum nächsten reboot.

EDIT: „Allow Service to interact with the desktop“ behebt das Problem.

Dass die Weishaupt gar nicht will, ist leider nicht überraschend, da die „oberen Schichten“ meiner Lösung (eBusSender.php und eBusEmpfaenger.php) nur Vaillant-Befehle senden und auswerten, welche die Weishaupt sicher weder sendet, noch annimmt.

Von meiner Lösung solltest du aber zumindest die „unteren Schichten“ vewenden können (d.h. eBus Connector und eBusManager.php), da dort die generischen Funktionen enthalten sind, die das eBus Protokoll an sich dekodieren, aber noch nicht die Nutzdaten und Hersteller-spezifischen Befehle verarbeiten.

Danke für die Info! Wusste gar nicht mal, dass es diese Einstellung gibt. :wink:

Bei mir (Windows 8) ist das zwar nicht angehakt und es gibt auch keine Probleme, aber wenn das bei dir hilft, dann umso besser.

Ansonsten hätte ich bei Problemen generell vorgeschlagen, den eBus Connector zuerst mal in der Konsole laufen zu lassen (um zu sehen, ob das Problem am Service Wrapper oder am eBus Connector selbst oder etwa an dem darunterliegenden virtuellen COM-Port liegt). Wenn es als Service läuft, bietet sich dann noch an, das Event-Log auf Meldungen (vom Service selbst und von Windows) zu checken.

Habe jetzt auf Version 1.4 upgedated.

Wichtigste Änderungen:

[ul]
[li]EBUS_Kodieren und EBUS_Dekodieren angepasst, sodass diese Funktionen für DATA2b und DATA2c das Low-Byte zuerst annehmen bzw. ausgeben.
[/li][li]eBusMonitor.php in eBusMonitorRegler.php, eBusMonitorService.php und eBusMonitorSpeicher.php aufgeteilt. Letzteres überwacht, ob der Warmwasserspeicher zu heiß wird und sendet dann einen Stopp-Befehl an die Heizung. Ob das gegen das Problem hilft, kann ich selbst noch nicht sagen, das wird erst die Zeit zeigen.
[/li][/ul]

Hallo,

woran kann es liegen das bei mir nichts decodiert wird ?
Ich versuche eine auroMatic 620 (die ist schon älter) mit Speicher und Solar auszulesen:

als Antwort bekomme ich immer das:

| [FEHLER] Keine Variable für den Datensatz mit der Adresse 04 vorhanden: 10 26 B5 09 03 0D 04 00 8C 00 03 21 FF A9 01 E6 00
[FEHLER] Ungültige Master-Nachrichten-Länge: 10 26 B5 09 01 18 3F 00 0A 00 00 00 00 00 00 00 00 00 00 9F 00


Was mache ich falsch ?

Gruß

Kann sein, dass deine Heizung nur Daten / Befehle sendet, die vom eBus Manager nicht verarbeitet werden (ist auf meine Heizung ausgerichtet). Füge am besten mal

IPS_LogMessage("eBus", $HexString);

ganz am Anfang von EBUS_NachrichtVerarbeiten (in eBusEmpfaenger.php) ein, dann sollte alles ausgegeben werden, das empfangen wird (egal ob und wie es verarbeitet wird).

Der eBus Manager ist nicht eingestellt, eine Variable mit der Adresse 04h zu verarbeiten. Deren Format und die ID der IPS-Variable, in die das Ergebnis gespeichert werden soll, müsstest du in EBUS_VariableUndFormat($Adresse) in eBusDefinitionen.php hinzufügen.

Welche Variable ist das eigentlich mit der Adresse 04h?

Der eBus Manager verarbeitet nur die Befehle B5 09 mit den Daten 0D und 0E, welche jeweils 3 Datenbytes haben. Der Befehl B5 09 mit einem Datenbyte kommt bei mir nicht vor, den müsstest du dem eBus Empfänger also erst beibringen.

Hallo Thomas,

Welche Variable ist das eigentlich mit der Adresse 04h?

Nach analyseVaillant3.xls müsste dies der Parameter d.90 sein.

d.90 Status digitaler Regler 1 = erkannt, 0 = nicht erkannt (eBUS Adresse <=10)

Gruss Klaus.

Also Adresse 4 ist in meiner Liste DcfIsValid oder Tanksetpoint_DK.

Die Adresse 04 gibt es in der analyseVaillant3.xls tatsächlich zweimal.
Einmal für d.07

d.7 Warmstarttemperatur Sollwert (nur bei VCW plus) 40 bis 65 °C
Speicherwassertemperatur Sollwert (nur bei VC) 15 °C im Linksanschlag, dann 40 bis 70 °C

und einmal für d.90

d.90 Status digitaler Regler 1 = erkannt, 0 = nicht erkannt (eBUS Adresse <=10)

Gruss Klaus.

Adressen werden generell mehrfach verwendet, hängt dann davon ab, welches Gerät man anspricht.

Es ist aber beides mal die 08. Kann ja mal vorkommen.

Gruss Klaus.

Danke an alle erstmal,
könnt ihr aus dem LOGauszug etwas auslesen ?

IPS_LogMessage("eBus", $HexString);

11.03.2013 14:51:30.816 | 0 | CUSTOM | eBus | [FEHLER] Keine Variable für den Datensatz mit der Adresse 04 vorhanden: 10 26 B5 09 03 0D 04 00 8C 00 03 21 FF A9 01 E6 00
11.03.2013 14:51:31.269 | 0 | CUSTOM | eBus | 10 EC B5 04 01 12 DA 00 0A 00 80 00 00 00 00 80 00 00 00 28 00
11.03.2013 14:51:31.609 | 0 | CUSTOM | eBus | 10 EC B5 04 01 10 D8 00 0A 00 80 00 80 00 80 00 80 66 03 9A 00
11.03.2013 14:51:32.028 | 0 | CUSTOM | eBus | 10 EC B5 04 01 0F C7 00 0A 21 FF 21 FF 21 FF 21 FF 01 01 05 00
11.03.2013 14:51:32.859 | 0 | CUSTOM | eBus | 10 FE B5 05 04 27 00 5A 00 DD
11.03.2013 14:51:34.877 | 0 | CUSTOM | eBus | 10 23 B5 05 07 2B 0F 01 00 00 00 00 B0 00 00 00 00
11.03.2013 14:51:36.804 | 0 | CUSTOM | eBus | 10 03 B5 01 05 C0 00 00 08 01 BA 00
11.03.2013 14:51:37.099 | 0 | CUSTOM | eBus | 10 26 B5 09 04 0E 10 00 01 08 00 00 00 00
11.03.2013 14:51:38.835 | 0 | CUSTOM | eBus | 10 EC B5 04 01 01 C9 00 09 00 02 00 00 00 07 00 01 00 31 00
11.03.2013 14:51:39.231 | 0 | CUSTOM | eBus | 10 EC B5 04 01 0D C5 00 05 00 00 00 80 00 4C 00
11.03.2013 14:51:39.543 | 0 | CUSTOM | eBus | 10 26 B5 09 03 0D 04 00 8C 00 03 21 FF A9 01 E6 00
11.03.2013 14:51:39.544 | 0 | CUSTOM | eBus | [FEHLER] Keine Variable für den Datensatz mit der Adresse 04 vorhanden: 10 26 B5 09 03 0D 04 00 8C 00 03 21 FF A9 01 E6 00
11.03.2013 14:51:40.163 | 0 | CUSTOM | eBus | 10 EC B5 04 01 12 DA 00 0A 00 80 00 00 00 00 80 00 00 00 28 00
11.03.2013 14:51:40.543 | 0 | CUSTOM | eBus | 10 EC B5 04 01 0F C7 00 0A 21 FF 21 FF 21 FF 21 FF 01 01 05 00
11.03.2013 14:51:42.698 | 0 | CUSTOM | eBus | 10 FE B5 05 04 27 00 5A 00 DD
11.03.2013 14:51:44.659 | 0 | CUSTOM | eBus | 10 EC B5 04 01 11 D9 00 06 46 07 03 3C 07 03 37 00
11.03.2013 14:51:44.976 | 0 | CUSTOM | eBus | 10 26 B5 04 01 01 D8 00 09 16 03 00 00 02 80 00 01 00 C3 00
11.03.2013 14:51:46.743 | 0 | CUSTOM | eBus | 10 EC B5 05 07 2B 0F 01 00 00 00 00 F1 00 00 00 00
11.03.2013 14:51:47.080 | 0 | CUSTOM | eBus | 10 03 05 01 05 A9 01 38 38 02 00 E1
11.03.2013 14:51:47.588 | 0 | CUSTOM | eBus | 10 26 B5 09 04 0E 10 00 01 08 00 00 00 00
11.03.2013 14:51:47.915 | 0 | CUSTOM | eBus | 10 EC B5 04 01 12 DA 00 0A 00 80 00 00 00 00 80 00 00 00 28 00
11.03.2013 14:51:48.711 | 0 | CUSTOM | eBus | 10 26 B5 04 01 0D D4 00 05 00 00 00 80 00 4C 00
11.03.2013 14:51:49.363 | 0 | CUSTOM | EM1010CUL | Type 2 Addr:05, SEQ: 163 CNT: 662 Basis: 53608448 DIFF: 71 TIME:256 CUM: 53609.110 5MIN: 0.710 PEAK: 0 TOP: 0.000
11.03.2013 14:51:50.514 | 0 | CUSTOM | eBus | 10 26 B5 09 03 0D 04 00 8C 00 03 21 FF A9 01 E6 00
11.03.2013 14:51:50.514 | 0 | CUSTOM | eBus | [FEHLER] Keine Variable für den Datensatz mit der Adresse 04 vorhanden: 10 26 B5 09 03 0D 04 00 8C 00 03 21 FF A9 01 E6 00
11.03.2013 14:51:50.797 | 0 | CUSTOM | eBus | 10 FE 07 00 09 40 02 01 52 14 11 03 00 13 09
11.03.2013 14:51:52.063 | 0 | CUSTOM | eBus | 10 26 B5 09 01 18 3F 00 0A 00 00 00 00 00 00 00 00 00 00 9F 00
11.03.2013 14:51:52.064 | 0 | CUSTOM | eBus | [FEHLER] Ungültige Master-Nachrichten-Länge: 10 26 B5 09 01 18 3F 00 0A 00 00 00 00 00 00 00 00 00 00 9F 00
11.03.2013 14:51:52.785 | 0 | CUSTOM | eBus | 10 EC B5 04 01 10 D8 00 0A 00 80 00 80 00 80 00 80 66 03 9A 00
11.03.2013 14:51:53.120 | 0 | CUSTOM | eBus | 10 EC B5 04 01 0F C7 00 0A 21 FF 21 FF 21 FF 21 FF 01 01 05 00
11.03.2013 14:51:54.540 | 0 | CUSTOM | eBus | 10 FE B5 05 04 27 00 5A 00 DD
11.03.2013 14:51:55.859 | 0 | CUSTOM | eBus | 10 26 B5 05 07 2B 0F 01 00 00 00 00 32 00 00 00 00
11.03.2013 14:51:56.188 | 0 | CUSTOM | eBus | 10 EC B5 04 01 12 DA 00 0A 00 80 00 00 00 00 80 00 00 00 28 00
11.03.2013 14:51:56.543 | 0 | CUSTOM | eBus | 10 03 B5 01 05 C0 00 00 08 01 BA
11.03.2013 14:51:56.830 | 0 | CUSTOM | eBus | 10 26 B5 09 04 0E 10 00 01 08 00 00 00 00
11.03.2013 14:51:58.546 | 0 | CUSTOM | eBus | 10 50 B5 04 01 01 FE 00 09 16 03 00 00 03 81 00 01 00 12 00

Welche Variable ist das eigentlich mit der Adresse 04h?

Der eBus Manager verarbeitet nur die Befehle B5 09 mit den Daten 0D und 0E, welche jeweils 3 Datenbytes haben. Der Befehl B5 09 mit einem Datenbyte kommt bei mir nicht vor, den müsstest du dem eBus Empfänger also erst beibringen.[/QUOTE]

[QUOTE=KlaRa;191829]Die Adresse 04 gibt es in der analyseVaillant3.xls tatsächlich zweimal.
Einmal für d.07

und einmal für d.90

d.90 Status digitaler Regler 1 = erkannt, 0 = nicht erkannt (eBUS Adresse <=10)

Ich habe einen Speicher angeschlossen (VC15), dieser wird allerdings zu 97% fremd beheizt. Diese Heizleistung ist der auromatic620 nicht bekannt. Wenn der Speicher warm ist (72Grad) schaltet die Fremdheizung ab. In der Therme ist gar kein Steuergerät mehr drin. Das war vorher eine 430. Ich habe nur die auromatic620 für den Mischer und wenn der Speicher nicht warm genug ist dann kommt der Brenner zur Unterstützung.

Dekodieren scheint aber fehlerfrei zu laufen:
305.498 ausgelesen
1 CRC Fehler und 5 Parsefehler

Ich lege mir mal eine Variable 04 für den VC15 an…

Gruß:cool:

08 ist die Geräteadresse am Bus. Was ich meinte, ist die ID des Geräts, in dem Sinne, ob es Heizung Modell A oder Modell B oder Regler Modell A oder Modell B usw. ist. Siehe angehängtes Excel-File, Sheet „SymList“, Spalte K.

Vaillant.part1.rar (900 KB)

Vaillant.part2.rar (330 KB)