Wolf Heizungssteuerung mit ISM7 MQTT

Begonnen von tomhead, 10 Mai 2025, 14:04:13

Vorheriges Thema - Nächstes Thema

tomhead

Hallo, ich habe seit ca. 1 Jahr eine neue Wolf Heizung mit Wärmepumpe und der Wolf Link Home ISM7 Smart Set Anbindung. Da ich gerne einige Werte in FHEM / FTUI darstellen wollte, war bisher für mich der einzige Weg über den Wolf-Smartset Adapter in iOBroker und dann von iOBroker über die FHEM Verbindung zu FHEM. Leider ist die Verbindung über die Wolf Server sehr unzuverlässig: zum einen wird öfter mal bei zu vielen Anfragen nach einer gewissen Zeit die IP-Adresse gesperrt oder der Wold-Server verweigert generell die Verbindung oder ist nicht erreichbar. Da ich immer stündlich den aktuellen Strompreis von Tibber in die Wolf Einstellungen übertragen will, ist es dann lästig, wenn die Verbindung mal wieder nicht geht.

Ich hatte zwar auch schon mal einen Versuch über eBus Adapter gestartet, bin dann aber an den fehlenden Registern für meine Wärmepumpe gescheitert.

Heute habe ich nun einen neuen Weg versucht, der zumindest zum Auslesen der Werte aus der Wolf-Anlage schon sehr gut funktioniert: über ism7mqtt was ich hier gefunden habe (Danke an zivillian dafür).
Dazu habe ich mir die beiden ZIP-Dateien:
- ism7config-linux-x64.zip
- ism7ism7mqtt-linux-x64.zip
heruntergeladen und auf einem Debian-Linux unter proxmox installiert (habe dafür einen Dell Wyse 5070 MiniPC auf dem iOBroker, Raspberrymatic und nun auch ism7mqtt laufen).

Danach beide Dateien ins Home Verzeichnis von Debian kopiert und wie folgt installiert:
sudo mkdir /opt/ism7mqtt
sudo chown $USER:$USER !$
mkdir /opt/ism7mqtt/makeconfig
unzip -u ism7config-linux-arm64.zip -d /opt/ism7mqtt/makeconfig/
chmod +x  /opt/ism7mqtt/makeconfig/createdump
chmod +x  /opt/ism7mqtt/makeconfig/ism7config
unzip -u ism7mqtt-linux-arm64.zip -d /opt/ism7mqtt/
chmod +x /opt/ism7mqtt/ism7mqtt
chmod +x /opt/ism7mqtt/createdump

Anschliessend eine Datei /etc/systemd/system/ism7mqtt.service mit folgendem Inhalt erstellen:
[Unit]
Description=ism7mqtt daemon
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

StartLimitIntervalSet=500
StartLimitBurst=5

[Service]

Restart=always
RestartSec=5s
ExecStart=/opt/ism7mqtt/ism7mqtt -i <ISM7 IPADDRESS>  -p <ISM7 PASSWORD> -t /opt/ism7mqtt/parameter.json -m <FHEM IP ADDRESS> -mqttport <FHEM MQTT Port>

[Install]
WantedBy=multi-user.target
Alias=ism7mqtt.service

wobei <ISM7 IPADDRESS> die IP-Adresse von eurem Wolf ISM7 ist, <ISM7 PASSWORD> das Passwort auf dem Aufkleber von eurem Wolf ISM7 (oder, falls ihr es bei der Einrichtung geändert habt, das geänderte Passwort), <FHEM IP ADDRESS> die IP-Adresse von eurem FHEM-System und <FHEM MQTT Port> der Port von eurem MQTT Server in eurem FHEM (müsst ihr natürlich schon vorher installiert haben).

Dann muss noch eine parameter.json Datei im Verzeichnis /opt/ism7mqtt/makeconfig erstellt werden. Dies macht ihr, indem ihr
ism7config -i <ism7 ip/host> -p <ism7 password>
aufruft. Wenn das noch nicht geht, dann noch den Pfad in Debian eintragen über PATH=/opt/ism7mqtt/makeconfig:$PATH.
Dann sollten die Parameter von eurer Heizung abgerufen werden und in der parameter.json Datei im Verzeichnis /opt/ism7mqtt/makeconfig gespeichert werden. Wenn das fertig ist (kann etwas dauern), dann die parameter.json Datei ins Verzeichnis /opt/ism7mqtt kopieren.
Danach
sudo systemctl daemon-reload
sudo chmod 600 /etc/systemd/system/ism7mqtt.service
sudo systemctl enable ism7mqtt.service
sudo systemctl start ism7mqtt.service
sudo systemctl status ism7mqtt.service
und dann sollte folgende Antwort kommen
● ism7mqtt.service - ism7mqtt daemon
     Loaded: loaded (/etc/systemd/system/ism7mqtt.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-05-10 11:46:07 CEST; 33min ago
   Main PID: 6511 (ism7mqtt)
      Tasks: 13 (limit: 4491)
     Memory: 66.0M
        CPU: 18.361s
     CGroup: /system.slice/ism7mqtt.service
             └─6511 /opt/ism7mqtt/ism7mqtt -i 192.168.0.xxx -p xxxxxxx -t /opt/ism7mqtt/parameter.json -m 192.168.0.xx -mqttport xxxx

In FHEM sollte dann automatisch das device unter MQTT angelegt werden und nach und nach alle Readings der Heizung sichtbar werden.
1x_Warmwasser_text         Aus      2025-05-10 11:48:59
1x_Warmwasser_value              0        2025-05-10 11:48:59
3-Wege-Umschaltventil_HZ/K_text  Heizen   2025-05-10 12:57:11
3-Wege-Umschaltventil_HZ/K_value 0       2025-05-10 12:57:11
...


Allerdings bräuchte ich jetzt nochmal Hilfe von euch um auch Werte zurück schreiben zu können, also z.B. den Strompreis anzupassen oder das Heizprogramm zu ändern.
Laut zivillian's Github Page sollte das so funktionieren:
To do so you publish the following JSON payload to topic Wolf/192.168.0.x/MK_BM-2_0x85/set

{
    "Programmwahl": {
        "360051": {
            "value": 0
        }
    }
}

wobei die Logik Wolf/<ism7 ip address>/<device type>_<device bus address>/set sein soll.
Mir ist aber noch nicht klar, wie ich das aus FHEM raus aus dem MQTT Device der Heizung an ism7mqtt auf dem Debian system senden soll. Und ich habe auch noch nicht rausgefunden, was genau der device type ist und wo ich den in der parameter.json Datei finde...

Update: OK, device type habe ich gefunden, das wären bei mir BM-2_0x35, CGB-2_0x18, CHA_0x8, DHK_BM-2_0x35 und WWSystem_BM-2_0x35.
Bliebe noch die Frage, wir ich die entsprechenden Befehle von FHEM aus setzen kann...?

VG,
Tom

tomhead

Hm, ich komm da nicht weiter, wenn ich Werte auch ändern /schreiben will:
Habe jetzt schon alles mögliche probiert, aber bisher ohne Erfolg. Hat da noch jemand einen Tip?
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x8/set/Hybridbetrieb/270130//value $EVENT
Habe auch CHA_0x3 probiert, weil das lt. parameter.json die WriteBusAdress ist, während CHA_0x8 die ReadBusAdress
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x3/set/Hybridbetrieb/270130//value $EVENTHat aber auch nicht funktioniert.
Ich hatte in einem anderen Beitrag gesehen, dass da auch andere schon dran gearbeitet haben, aber die Lösung habe ich da auch nicht gefunden.
Auch der Test2 von noby95 https://forum.fhem.de/index.php?msg=1297341 geht bei mir nicht mit dem o.g. Beispiel.

Wäre klasse, wenn jemand helfen könnte...

VG,
Tom

TomLee

Hallo,

liest sich schon so, das es klappen sollte wie Du es versuchst. Funzt vlt. nur nicht wg. der doppelten Slashes vor value?
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x3/set/Hybridbetrieb/270130/value $EVENT
Gruß Thomas

tomhead

Danke für den Hinweis, ist wohl beim ständigen rumprobieren reingerutscht. Hab es auf einen Slash korrigiert, geht aber leider auch nicht :-(

TomLee

Wenn Du nur ein Wolf/192.168.0.205/CHA_0x8 sendest, kommt da was zurück?

tomhead

Wie meinst du das? Steh da gerade am Schlauch. Wie soll ich das senden?

VG, Tom

Beta-User

In dem repo steht doch, dass man entweder JSON an das allgemeine "set"-Topic senden kann, ODER Klartext an das "property".
Aber nicht beides vermischen.
Zitat von: TomLee am 17 Mai 2025, 20:40:53Hallo,

liest sich schon so, das es klappen sollte wie Du es versuchst. Funzt vlt. nur nicht wg. der doppelten Slashes vor value?
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x3/set/Hybridbetrieb/270130/value $EVENT
Gruß Thomas
Das sollte mit $EVTPART1 klappen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

tomhead

@Beta-User: Danke für den Hinweis. Hab es jetzt endlich geschafft.
Der korrekte Befehl mit setList lautet
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x8/set/Hybridbetrieb/value $EVTPART1
Musste, damit es funktioniert, anders als im repo noch die Nummer beim property Name weglassen.
Vielen Dank nochmals für die Tipps.
VG, Tom

tomhead

Hallo, jetzt bräuchte ich bitte nochmal Hilfe: ich habe bei Tibber einen variablen Stromtarif, somit würde ich gerne jede Stunde den aktuellen Strompreis an die Wolf Wärmepumpe senden lassen bzw. den aktuellen Strompreis im Reading Aktueller_Strompreis schreiben. Ich hätte das über ein notify versucht, dass zusätzlich einen Status meiner PV-Anlage abfragt, dass wenn genügend Überschuss aus der PV Anlage kommt, den Strompreis z.B. auf 1cent in der Wolf Wärmepumpe setzt (Hintergrund: habe eine Hybridheizung aus Gas und Wärempumpe, so dass die Wolf Steuerung immer anhand des aktuellen Gas- und Strompreises die  ökonomische Variante wählt. Wenn aber PV-Überschuss vorhanden, dann ist der Strom ja quasi kostenlos, deshalb dann der Ansatz mit dem 1cent statt dem richtigen Strompreis).

Mir ist aber nicht ganz klar, wie das notify aussehen müsste:
EVU_Tibber_connect:current_price:.* {if(Value("PV_Leistung_Status") eq "1") { fhem("set Wolf_1921680205:Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis 1") } else  { fhem("set Wolf_1921680205:Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis { ReadingsNum("EVU_Tibber_connect","current_price",0) }") } }Damit habe ich jedenfalls noch einen Syntax Error, der durch das { ReadingsNum("EVU_Tibber_connect","current_price",0) } erzeugt wird. Weiss jemand, wie das richtig lauten müsste, damit der aktueller Wert aus EVU_Tibber_connect:current_price an Wolf_1921680205:Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis übergeben wird? Funktioniert das überhaupt mit einem set Befehl?

Vielen Dank und Grüße, Tom

tobi01001

So in etwa... Zumindest der else-Zweig.
EVU_Tibber_connect:current_price:.* {
if(Value("PV_Leistung_Status") eq "1") {
  fhem("set Wolf_1921680205:Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis 1");
} else  {
    fhem("set Wolf_1921680205:Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis ".ReadingsNum("EVU_Tibber_connect","current_price",0));
}
}
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Beta-User

Die ClientId (CID) hat im set-Topic nix verloren...

Überhaupt kommt mit der set-Befehl schräg vor.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

tobi01001

#11
Zitat von: Beta-User am 24 Mai 2025, 13:54:00Überhaupt kommt mit der set-Befehl schräg vor.
Mir auch... hatte den : übersehen.

weiter oben sind die setList Attribute... Demnach könnte ein
set Wolf_1921680205 Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis 1 der Sache näher kommen.
Zumindest im MQTT2-Device kann man ja die setList Befehle vom Topic trennen was das Ganze lesbarer und eingängiger machen sollte. Das ist im obigne Beispiel mit Hybridbetrieb ja auch geschehen.

Von daher denke ich, dass man vor dem notify erstmal das MQTT device anschauen sollte und schauen, dass und wie man den Preis da setzen kann.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Beta-User

Zitat von: tobi01001 am 24 Mai 2025, 14:39:18
Zitat von: Beta-User am 24 Mai 2025, 13:54:00Überhaupt kommt mit der set-Befehl schräg vor.
Mir auch... hatte den : übersehen.

weiter oben sind die setList Attribute... Demnach könnte ein
set Wolf_1921680205 Wolf/192.168.0.205/CHA_0x8/Aktueller_Strompreis 1 der Sache näher kommen.

Nope.

set sollte was setzbares sein, in der Regel ein Reading...
Nix mit Topic-Struktur.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

tomhead

Vielen Dank Beta-User und tobi01001 für eure Hilfe und Tipps. Nach etwas probieren hat es nun wie folgt funktioniert:

Zuerst habe ich per setList Strompreis definiert:
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x8/set/Hybridbetrieb/value $EVTPART1\
Strompreis:0,1.0,2.0,3.0,4,5,10,15,20,25.0,30 Wolf/192.168.0.205/CHA_0x8/set/Aktueller_Strompreis $EVTPART1

Dann funktioniert das notify nun so:
define set_Strompreis_Wolf_WP notify EVU_Tibber_connect:current_price:.* {\
if(Value("PV_Leistung_Status") eq "1") {\
  fhem("set Wolf_1921680205 Strompreis 1");;\
} else  {\
    fhem("set Wolf_1921680205 Strompreis ".ReadingsNum("EVU_Tibber_connect","current_price",0));;\
}\
}

Ich hatte nur vorher noch mit einem anderen Problem zu kämpfen, weil die Wolf Steuerung über das ism7mqtt zuerst gar keine Befehle mehr schreiben wollte, selbst das vorher schon mal erfolgreich getestete
attr Wolf_1921680205 setList Hybridbetrieb:0,1,2 Wolf/192.168.0.205/CHA_0x8/set/Hybridbetrieb/value $EVTPART1hat nicht mehr funktioniert.
Meine Vermutung ist, dass beide Einstellungen in der Fachmann-Ebene in der Wolfsteuerung versteckt sind. Erst als ich mich dort über das Wolf Smartset Portal mit dem Fachmann Kennwort eingeloggt hatte, nahm die Anlage auch über das ism7mqtt wieder die Werte an. Mal schauen, wie lange das nun funktioniert....

Also nochmal vielen Dank an euch.
VG,Tom