Ebusd mit eBUS-Adapter-V5/RPi Zero W und Wolf Therme CGW-2 sowie Node Red Steuerung

Begonnen von welder, 20 Februar 2024, 09:16:02

Vorheriges Thema - Nächstes Thema

welder

Hallo Community,
ich habe wohl ein Problem mit dem laden der csv Dateien bei meiner Wolf Therme.
Ich hatte mir den eBUS Adapter Shield v5 von John bestellt.
Nun habe ich mich so durchgekämpft, nachdem ich einige Zusammenhänge verstehen musste.

Was ist also mein Stand:
der Adapter ist per USB an einem Raspberry Pi 3B+ angeschlossen und natürlich am eBus meiner Wolf Therme CGW-2.
Auf dem Raspberry ist Debian 11 installiert und anschließend nach der Beschreibung (john30/ebusd-debian) ebusd.

Meine /etc/default/ebusd hat folgenden Eintrag:

EBUSD_OPTS="--scanconfig -d ens:/dev/ttyACM0 --mqtthost=192.168.178.70 --mqttport=1883 --mqtttopic=ebusd/%circuit/%name --httpport=8889 --htmlpath=/var/ebusd/html"

Auf dem eBUS Adapter habe ich die Option "eBUS: enhanced via USB" eingestellt und es wird folgendes angezeigt:

Chip ID: xxxxxxxxx, ESP32-C3, rev 4
Hostname: ebus-85ba701
Up time: 960
Free heap: 120876
ebusd connected: yes (inactive)
eBUS signal: acquired

Die Ausgabe inaktiv ist wohl schon mal nicht so gut...

Wenn ich in der Konsole "ebusctl info" ausführe erhalte ich:

version: ebusd 23.3.23.3
update check: OK
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[4106].1[4106]
signal: acquired
symbol rate: 57
max symbol rate: 77
min arbitration micros: 1
max arbitration micros: 6
min symbol latency: 4
max symbol latency: 5
scan: finished
reconnects: 0
masters: 4
messages: 15
conditional: 0
poll: 0
update: 4
address 03: master #11
address 08: slave #11, scanned "MF=Wolf;ID= !;SW=4002;HW=0000"
address 30: master #3
address 31: master #8, ebusd
address 35: slave #3, scanned "MF=Wolf;ID=;SW=0204;HW=0100"
address 36: slave #8, ebusd
address 50: slave, scanned "MF=Wolf;ID= !;SW=4002;HW=0000"
address f1: master #10
Ich denke, dass die nicht geladenen csv Dateien das Problem sind.
Ich habe die Dateien auch schon mal in den Ordner auf dem RPI kopiert und in den Eintrag "EBUSD_OPTS" in der /etc/default/ebusd entsprechend über die Option -c angepasst. Dazu hatte ich den Ordner "ebusd-2.x.x" genutzt.

Zusätzlich habe ich die GPIO Pins und TCP probiert und den Eintrag "EBUSD_OPTS" entsprechend angepasst.
Es scheint auch anfänglich zu funktionieren. Dann wird auch kurz "ebusd connected: yes" ohne "(inactive)" angezeigt.
Nun komm ich nicht so recht weiter und weiß auch noch wo ich ansetzen soll. Mache ich was falsch oder habe ich was übersehen?

Ich hoffe, dass ich in der Beschreibung nichts vergessen habe und ihr mir auf die Sprünge helfen könnt.

Beste Grüße
welder

Noch eine kleine Ergänzung zu den LED's am Adapter: Die grüne LED leuchtet dauerhaft und die blaue ganz kurz alle 3 Sekunden.
Das war mir jetzt noch in den Sinn gekommen...

welder

Ich bin etwas vorangekommen und möchte das hier als Antwort dokumentieren.
Einerseits hilft es vielleicht jemanden und ich komme ggf. noch ein wenig weiter...

Wie gesagt habe ich eine Wolf CGW 2 Gastherme.
Ich habe sehr viel ausprobiert und schlussendlich die Datei https://forum.fhem.de/index.php?topic=95173.msg889316#msg889316 von pink99panther genommen.

Nun wird erstmal die broadcast.csv geladen:

version: ebusd 23.3.23.3
update check: OK, broadcast.csv: different version available
device: /dev/ttyAMA0, serial high speed, enhanced, firmware 8.1[4106].1[4106]
signal: acquired
symbol rate: 58
max symbol rate: 79
scan: finished
reconnects: 0
masters: 4
messages: 299
conditional: 0
poll: 0
update: 152
address 03: master #11
address 08: slave #11, scanned "MF=Wolf;ID= !;SW=4002;HW=0000"
address 30: master #3
address 31: master #8, ebusd
address 35: slave #3, scanned "MF=Wolf;ID=;SW=0204;HW=0100"
address 36: slave #8, ebusd
address 50: slave, scanned "MF=Wolf;ID= !;SW=4002;HW=0000"
address f1: master #10

Nun werden mir auch eine Menge Werte angezeigt, die mit dem BM2 meistens übereinstimmen. Da war ich schon mal sehr glücklich :-)
Es gibt teilweise eine ordentliche Verzögerung, aber das ist OK.

Nun stellen sich folgende Fragen für mich:

- Müssen die Dateien zur address08, address35 und address50 zwingend geladen werden? Was würde sich dahinter noch verbergen?

- Ist es möglich den Warmwasserbetrieb ein- und auszuschalten?
Die Warmwasser Solltemperatur könnte man ja auf 10°C reduzieren. Der Wert "brauchwassersolltemp" taucht im Eintrag "sollw" auch auf, so dass dieser vielleicht überschrieben werden könnte.

- Ist es möglich den Heizbetrieb ein- und auszuschalten?


welder

Ich möchte mir noch einmal selbst antworten, falls es zukünftig jemanden hilft...

Mein Ziel: Die Heizung und das Brauchwasser ein- und auszuschalten.

Was brache ich: Dazu habe ich den "eBUS Adapter Shield v5" bei John bestellt und mir einen RPi Zero W (W=WLAN) besorgt. Am Besten einen mit aufgelöteten GPIO Pins. Dann könnt ihr den Adapter direkt reitern.

Der Plan war, erstmal mit einem RPi 3b alles zu testen und dann auf einen RPi Zero W umzusteigen.

Ich habe eine Wolf CGW-2 20/120 mit einem AM sowie einem BM2. Das BM2 ist über eBus mit der Therme verbunden. Ich denke das sollte aber auch mit anderen Geräten von Wolf funktionieren wie beispielsweise der CGB-2.

Grundsätzlich soll dies eine kleine Anleitung werden, um gleiches in Zukunft zu tun.
Ich arbeite mit einem Windows Rechner über SSH, dem MQTT Explorer und Filezilla.

Dann los...

(Randnotiz: Mit dem RPi 3b funktionierte schlussendlich alles, aber die zuvor geposteten Dateien von Wolf haben mit dem RPi Zero nicht funktioniert.)

Ich habe also mit dem Ebus Adapter begonnen, ihn (ohne RPi) mit Strom versorgt und mich mit meinem Windows Rechner per Browser mit 192.168.4.1 verbunden.
Da geht ihr auf den Reiter Configuration->eBus und aktiviert "Raspberry Pi serial" und "Enhanced protocoll (default). Anschließend unten links "Save" und "Reboot". Das wars erstmal damit.

Jetzt wenden wir uns dem RPi zu.
Unter https://downloads.raspberrypi.org/raspbian/images/raspbian-2020-02-14/ habe ich das Image 2020-02-13-raspbian-buster runtergeladen und mit Win32DiskImager auf eine SD-Karte geschrieben.
Nun brauche ich Zugriff auf den RPi. Das habe ich folgendermaßen vorbereitet:
Bevor ihr die Karte entfernt, erstellt mit dem Editor eine Datei "ssh" (ohne Inhalt und ohne Dateiendung).
Nun noch eine weitere Datei "wpa_supplicant.conf". Deren Inhalt sieht folgendermaßen aus:
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="DEIN ROUTER"
psk="DEIN PASSWORT"
key_mgmt=WPA-PSK
}
Diese beiden Dateien kopierst du mit dem Windows Explorer einfach noch ins Hauptverzeichnis der SD Karte.
Nun im Explorer "Auswerfen",
-SD Karte aus dem Kartenleser entfernen,
-in den RPi stecken,
-RPi mit dem eBus Adapter über die GPIO-Pins verbinden (https://adapter.ebusd.eu/v5/raspberrypi.html),
-mit dem eBus deiner Heizung parallel verbinden und
-jetzt den RPi mit dem Netzteil verbinden.
Der erste Start dauert eine Weile...

Jetzt habe ich auf meinem Router die IP des RPi gesucht.
Nun Putty starten (die Eingabeaufforderung von Windows sollte aber auch funktionieren "ssh pi@IP" oder so...).
In Putty die IP aus dem Router eingeben. Port ist 22 und ConnectionType SSH.
(Wenn ein Fehler angezeigt wird, löscht unter Windows den Ordner "C:\Users\Benutzer\.ssh")
Jetzt anmelden mit Benutzer "pi" Passwort "raspberry".

Nun bin ich nach den 2 Beschreibungen gemischt vorgegangen.
https://forum.fhem.de/index.php?topic=46098.msg1090303#msg1090303
https://github.com/john30/ebusd?tab=readme-ov-file

Schlussendlich mit folgenden Befehlen:
sudo bash (-> für vorrübergehende root Rechte)
apt install git autoconf automake g++ make libmosquitto-dev (-> Do you want to continue? [Y/n] mit "Y" bestätigen)
git clone https://github.com/john30/ebusd.git
cd ebusd
./autogen.sh
make install-strip
systemctl enable ebusd (-> für den Autostart)
Das dauert alles eine Weile...

Jetzt die Datei ebusd anpassen und folgenden Befehl ausführen:
nano /etc/default/ebusdDen vorhandenen Eintrag am besten mit "#" auskommentieren und den folgenden einfügen:
ACHTUNG!!! Die IP des MQTT Servers und den Port müsst ihr auf euch anpassen. ggf. auch den Login -> mqtthost=XXX.XXX.XXX.XX --mqttport=1883
Der Eintrag ist auf den Anschluss über die GPIO Pins und die Wolf Dateien auf dem RPi konfiguriert. Solltet ihr eine andere Konstellation haben, muss das angepasst werden. z.B USB-"-d ens:/dev/ttyACM0" (https://adapter.ebusd.eu/v5/). Der Eintrag "latency" war Standardmäßig auf 50, den hab ich verändert.
EBUSD_OPTS="--scanconfig  --configpath=/etc/ebusd -d ens:/dev/ttyAMA0 --latency=20000 --mqtthost=XXX.XXX.XXX.XX --mqttport=1883 --mqtttopic=ebusd/%circuit/%name --httpport=8889 --htmlpath=/var/ebusd/html --enablehex"
Nun folgende Tastenkombination: STRG+X -> Y -> Enter (Datei gespeichert)

Die config.txt mit folgendem Befehl prüfen:
nano /boot/config.txtWenn die beide Einträge nicht vorhanden sind, einfach ergänzen:
dtoverlay=pi3-miniuart-bt
enable_uart=1
Nun wieder folgende Tastenkombination: STRG+X -> Y -> Enter (Datei gespeichert)

Da ich Dateien auf den RPi kopieren musste und es mir einfacher erschien mit "Filezilla" zu arbeiten müsste ich mir Rechte verschaffen...
nano /etc/ssh/sshd_configFolgenden Eintrag habe ich gemacht, um mir als root Zugriff zu gewähren. ->Der Eintrag sollte wieder entfernt werden.
PermitRootLogin yes
Nun brauche ich noch ein Root Passwort.
Wir haben ja immer noch Root Rechte also den folgenden Befehl eingeben:
passwdJetzt ein Passwort eingeben und wiederholen.

Nun müssen wir etwas im Thema springen und noch eine Sache erledigen.
Das führen wir nur durch, wenn wir über die GPIO-Pins auf dem RPi angeschlossen sind. Also nun folgenden Befehl ausführen:
raspi-config
Interface Options auswählen
Serial Port auswählen
Would you like a login shell to be accessible over serial? mit "Nein"/"No" beantworten
Would you like the serial port hardware to be enabled? mit "Ja"/"Yes" beantworten
beenden und neu booten bestätigen
NEUSTART

Nun habe ich mit Filezilla Zugriff auf den RPi:
- Server ist die IP des RPi
- Benutzername ist root
- das vergeben Passwort eingeben
- Port ist 22

Jetzt nur noch die folgenden Dateien/Ordner unter /etc/ebusd/ auf den RPi kopieren. Ich habe die Dateien in einem ZIP Archiv hochgeladen. Also einfach entpacken und kopieren:
broadcast.csv
_templates.csv
Wolf Ordner mit 08.csv und 35.csv

Wieder per Putty mit der IP des RPi (Benutzer:pi Passwort:raspberry) einloggen und folgenden Befehl ausführen:
sudo service ebusd restart
Mein Interface vom eBus Adapter zeigt mir folgendes:
ebusd connected: yes (inactive)
eBUS signal: acquired
Das irritiert mich ein wenig, aber es scheint erstmal alles zu funktionieren.

Nun habe ich mit dem Befehl "ebusctl i" folgenden Eintrag:
pi@raspberrypi:~ $ ebusctl i
version: ebusd 23.3.23.3-46-g38a6b7ba
update check: revision 23.3 available, device firmware 1[430a] available, broadcast.csv: different version available
device: /dev/ttyAMA0, serial high speed, enhanced, firmware 8.1[4106].1[4106]
signal: acquired
symbol rate: 42
max symbol rate: 113
min arbitration micros: 15
max arbitration micros: 26
min symbol latency: 4
max symbol latency: 6
scan: finished
reconnects: 0
masters: 4
messages: 49
conditional: 0
poll: 0
update: 5
address 03: master #11
address 08: slave #11, scanned "MF=Wolf;ID= !;SW=4002;HW=0000", loaded "wolf/08.csv"
address 30: master #3
address 31: master #8, ebusd
address 35: slave #3, scanned "MF=Wolf;ID=;SW=0204;HW=0100", loaded "wolf/35.csv"
address 36: slave #8, ebusd
address 50: slave, scanned "MF=Wolf;ID= !;SW=4002;HW=0000"
address f1: master #10
Die Dateien 08 und 35 werden also geladen.

Ich nutze den MQTT-Explorer um zu sehen, was auf dem MQTT Server so ankommt.

Das ist erstmal meine Konfiguration.

welder

Was kann ich nun damit anstellen?

Erstmal überprüfe ich über SSH mittels Putty mit "ebusctl find" was da zu finden ist:
pi@raspberrypi:~ $ ebusctl find
betrd_bm2 betriebsart = Warmwassernachlauf
betrd_bm2 bm2 = Brauchwasser_Heizen;Verbraucheraus;28.00;-;-;50.0;dc
betrd_bm2 netzbetriebsstunden = 2529
betrd_bm2 no_of_power_on = 40
betrd_bm2 raumtemp = 26.9
brauchwasser warmwasser_ist = 48.6
brauchwasser warmwasser_soll = no data stored
brauchwasser warmwasserdurchsatz = no data stored
brauchwasser warmwasserschnellstart = no data stored
brauchwasser wwspeicherhysterese = no data stored
brenner abgastemp = 58.0
brenner brennerbetriebsstunden = 716
brenner brennerstarts = 9589
brenner brennerstatus = Aus
brenner geblaesedrehzahl = no data stored
brenner ionisation = 3
brenner kesseltemp = 58.7
brenner modulationsgrad = 0
broadcast betrd = 0;40;-;57.5;56;49;13
broadcast sollw = 5.000;13.297;0;08;50.000
feuerung hg01 = no data stored
feuerung hg02 = no data stored
feuerung hg03 = no data stored
feuerung hg04 = no data stored
feuerung hg06 = no data stored
feuerung hg07 = no data stored
feuerung hg08 = no data stored
feuerung hg09 = no data stored
feuerung hg16 = no data stored
feuerung hg17 = no data stored
feuerung hg21 = no data stored
feuerung hg22 = no data stored
raumheizung druck = 1.14
raumheizung heatingmode = no data stored
raumheizung pumpendrehzahl = 55
raumheizung ruecklauftemp = 56.4
raumheizung vorlauf_ist = 60.9
raumheizung vorlauf_soll = no data stored
scan.08  = Wolf; !;4002;0000
scan.35  = Wolf;;0204;0100
scan.50  = Wolf; !;4002;0000
scan.f6  = no data stored

Mit dem Befehl "ebusctl r hg01" kann ich beispielsweise einzelne Werte die mir nicht angezeigt werden auslesen:
pi@raspberrypi:~ $ ebusctl r hg01
11.0
Diese Werte werden dann auch an den MQTT Server gesendet.

Das Wichtigste ist aber, dass ich mit folgenden Befehlen die Therme steuern kann (Danke an Alpha1974 https://forum.fhem.de/index.php?topic=29737.msg429088#msg429088) :
Heizprogramm_Automatik ebusctl hex 5023 0900 74 2701 00 5D010010

Heizprogramm_Automatik ebusctl hex 3050230900742701005D010010
Heizprogramm_Standby ebusctl hex 3050230900742700005D010010
set Heizprogramm_Sparbetrieb ebusctl hex 3050230900742703005D010010
set Heizprogramm_Dauerheizen ebusctl hex 3050230900742702005D010010

Brauchwasserprogramm_Standby ebusctl hex 3050230900752700005D010010
Brauchwasserprogramm_Auto    ebusctl hex 3050230900752701005D010010
Brauchwasserprogramm_Allways ebusctl hex 3050230900752702005D010010
Brauchwasserprogramm_1x ebusctl hex 3050230900752703005D010010

Den Status kann ich über folgende Befehle auslesen:
# Heizprogramm BM-2 abfragen
ebusctl hex 35502203ff7427
"020100") {"Automatik"}
"020300") {"Sparbetrieb"}
"020000") {"Standby"}
"020200") {"Dauerheizen"}}

# Brauchwasserprogramm BM-2 abfragen
ebusctl hex 35502203ff7527
Brauchwasserprogramm_Standby "020000"
Brauchwasserprogramm_Auto "020100"
Brauchwasserprogramm_Allways    "020200"
Brauchwasserprogramm_1x "020300"

Die Datei 35.csv entsprechend zu konfigurieren, dass ich auch schreiben kann, ist mir leider nicht gelungen.
Aber die "read" Einträge konnte ich etwas anpassen.

Leider konnte ich keinen Wert selbst auslesen. Ich bin mir gar nicht sicher, ob das BM2 den "Status" überhaupt sendet oder nur die daraus folgenden Befehle.
Aber ich habe nur eine ganz grobe Vorstellung was da passiert. Das wissen sicher die Insider wie John30, Reinhart, Prof. Dr. Peter Henning usw.

welder

#4
So nun der letzte Teil: Wie steuere ich das nun.
Ich nutze Node Red zur Steuerung einiger Dinge auf einem weiteren RPi.

In Node Red lese ich die Werte per MQTT aus und zeige sie im Dashbord an.
Dazu nutze ich "MQTT in" mit dem Topic "ebusd/betrd_bm2/betriebsart". Dann noch den MQTT Server eintragen, also die IP, den Port, Login und Protokoll V3.1.
So lese ich alle relevanten Daten ein und einige weitere, um zu lernen.

Zum Schreiben nutze ich "sshexec". Das Paket (@arcsoft/node-red-sshtools - 0.0.12) kann über "Palette verwalten" nachgeladen werden.
Dort kann der Befehl wie in der Konsole eingeben werden. Damit lese ich auch in Intervallen die Werte aus, die nicht automatisch geladen werden.

Nun kann ich die Heizung darüber auch steuern. Beispielsweise wird die Brauchwasseraufwärmung abgeschaltet, wenn die Alarmanlage scharf ist. Das macht dann im laufe des Tages die PV Anlage.

So das sollte es gewesen sein. Ich hoffe, dass es einigen Interessierten eine Hilfe ist.
Auf jeden Fall vielen Dank an John30 und alle anderen die sich hier einbringen, solche Dinge wie den Adapter auf die Beine stellen UND anderen zugänglich machen. Hut ab!!! Ich habe höchsten Respekt.