über serielles RS-232 Interface (ohne ISG Web)

Die LWWP von Stiebel Eltron bzw. Tecalor können mittels FHEM und einem selbst gebauten Kabel kostengünstig in Loxone eingebunden werden.

Das benötigte Kabel wird hier beschrieben: https://robert.penz.name/heat-pump-lwz/

Eine gute Beschreibung, wie man das ganze mittels FHEM umsetzt ist hier beschrieben: https://wiki.fhem.de/wiki/Tecalor_THZ_W%C3%A4rmepumpe

FHEM kann auf einem Raspberry Pi (am besten gleich ein Pi 3) mittels loxberry (sollte man sowieso haben) als Plugin installieren.

Läuft das ganze dann auf FHEM, können erst einmal ganz einfach alle benötigten Daten von einer XML dabei geparsed werden.

Der Aufruf sieht hier wie folgt aus: 

http://ip_des_loxberry_mit_fhem:8083/fhem?cmd=xmllist%20Mythz&XHR=1

Dort sucht ihr einfach nach den für euch interessanten Parametern und könnte diese z.B. für die Außentemperatur wie folgt auslesen.

Legt einen neuen Virtuellen HTTP Eingang an mit der oben genannten Adresse.

Darunter dann einen Virtuellen HTTP Eingang Befehl. Bei Befehlserkennung dann 

outsideTemp:\v

für die Außentemperatur.

Dies wiederholt ihr für alle eure Parameter.

Um die Daten direkt bei Werteänderungen zu erhalten lassen wir uns die Daten von FHEM per UDP an unseren Miniserver senden.

Dabei schickt FHEM einen langen string mit allen für uns relevanten Werten den wir dann im Miniserver nur noch mittels Befehlserkennung zerpflücken müssen.

Die fhem.cfg um folgende Einträge erweiteren:

#Heizung einbinden define Mythz THZ /dev/ttyUSB1@115200 attr Mythz devStateIcon opened:10px-kreis-gruen disconnected:10px-kreis-rot attr Mythz event-min-interval .*:900 attr Mythz event-on-change-reading .* attr Mythz firmware 5.39 attr Mythz interval_sBoostDHWTotal 3600 attr Mythz interval_sBoostHCTotal 3600 attr Mythz interval_sDHW 120 attr Mythz interval_sDisplay 120 attr Mythz interval_sElectrDHWTotal 3600 attr Mythz interval_sElectrHCTotal 3600 attr Mythz interval_sFlowRate 3600 attr Mythz interval_sGlobal 120 attr Mythz interval_sHC1 120 attr Mythz interval_sHeatDHWTotal 3600 attr Mythz interval_sHeatHCTotal 3600 attr Mythz interval_sHeatRecoveredTotal 28800 attr Mythz interval_sHistory 28800 attr Mythz interval_sLast10errors 3600 attr Mythz room Heizung attr Mythz userReadings mode_sommer_winter {(split' ',ReadingsVal("Mythz","sHC1",0))[15]}, AussenTemp {(split ' ',ReadingsVal("Mythz","sGlobal",0))[1]}, VorlaufTemp {(split ' ',ReadingsVal("Mythz","sGlobal",0))[3]}, RuecklaufTemp {(split ' ',ReadingsVal("Mythz","sGlobal",0))[5]}, WWTemp {(split ' ',ReadingsVal("Mythz","sDHW",0))[1]}, WWsoll {(split ' ',ReadingsVal("Mythz","sDHW",0))[5]}, AussenTempGef {(split ' ',ReadingsVal("Mythz","sGlobal",0))[65]}, HC1_ist {(split ' ',ReadingsVal("Mythz","sHC1",0))[13]}, HC1_soll {(split ' ',ReadingsVal("Mythz","sHC1",0))[11]}, Integral {(split ' ',ReadingsVal("Mythz","sHC1",0))[7]}, Compressor {(split ' ',ReadingsVal("Mythz","sDisplay",0))[3]}, Luefterdrehzahl {(split ' ',ReadingsVal("Mythz","sGlobal",0))[61]}, Schaltprogramm {(split ' ',ReadingsVal("Mythz","sDisplay",0))[1]}, Heizen {(split ' ',ReadingsVal("Mythz","sDisplay",0))[5]}, HeizenWW {(split ' ',ReadingsVal("Mythz","sDisplay",0))[7]}, Booster {(split ' ',ReadingsVal("Mythz","sDisplay",0))[9]}, filter_beide {(split ' ',ReadingsVal("Mythz","sDisplay",0))[11]}, Lueftung {(split ' ',ReadingsVal("Mythz","sDisplay",0))[13]}, heizkreispumpe {(split ' ',ReadingsVal("Mythz","sDisplay",0))[15]}, defrost {(split ' ',ReadingsVal("Mythz","sDisplay",0))[17]}, filter_oben {(split ' ',ReadingsVal("Mythz","sDisplay",0))[19]}, filter_unten {(split ' ',ReadingsVal("Mythz","sDisplay",0))[21]}, fehleranzahl {(split ' ',ReadingsVal("Mythz","sLast10errors",0))[1]}, heatrecovertotal {(split ' ',ReadingsVal("Mythz","sHeatRecoveredTotal",0))[0]}, flowrate {(split ' ',ReadingsVal("Mythz","sGlobal",0))[87]/10}, evurelease {(split ' ',ReadingsVal("Mythz","sGlobal",0))[47]}, #Plots define FileLog_Mythz FileLog ./log/Mythz-%Y-%m.log Mythz attr FileLog_Mythz archivedir ./log/archive/ attr FileLog_Mythz nrarchive 2 define Mythz_Plot1_Temp SVG FileLog_Mythz:Mythz_Plot1_Temp:CURRENT attr Mythz_Plot1_Temp label "Außen $data{currval6}°C, WW $data{currval1}°C, HC1-Soll $data{currval4}°C, HC1-Ist $data{currval5}°C, Vorlauf $data{currval2}°C, Rücklauf $data{currval3}°C" attr Mythz_Plot1_Temp plotsize 840,420 attr Mythz_Plot1_Temp room Heizung_Plot define Mythz_Plot2_HC1Offset_Integral SVG FileLog_Mythz:thz2:CURRENT attr Mythz_Plot2_HC1Offset_Integral label sprintf("HC1Ist-HC1Soll %0.1fK, Integralwert %0.1f", $data{currval1}, $data{currval2}) attr Mythz_Plot2_HC1Offset_Integral plotsize 840,210 attr Mythz_Plot2_HC1Offset_Integral room Heizung_Plot define Mythz_Plot3_Internals SVG FileLog_Mythz:Mythz_Plot3_Internals:CURRENT attr Mythz_Plot3_Internals label "TimeStamp: $data{currdate1}" attr Mythz_Plot3_Internals plotsize 840,210 attr Mythz_Plot3_Internals room Heizung_Plot define Mythz_Plot4_Fans SVG FileLog_Mythz:thz4:CURRENT attr Mythz_Plot4_Fans label "Zu-Soll $data{currval1}%, Zu-Ist $data{currval2}Hz, Ab-Soll $data{currval3}%, Ab-Ist $data{currval4}Hz, Fort-Ist $data{currval5}Hz" attr Mythz_Plot4_Fans plotsize 840,210 attr Mythz_Plot4_Fans room Heizung_Plot #notify define HeizungToLoxone notify .*:AussenTemp.* {HeizungToLoxone("$NAME")} define HeizungToLoxone2 notify .*:WWTemp.* {HeizungToLoxone("$NAME")} define HeizungToLoxone3 notify .*:HC1_ist.* {HeizungToLoxone("$NAME")}

Der notify wird drei mal getriggert.

Idee dahinter ist, falls sich ein Wert nur selten ändert, wird das notify und somit der UDP Versand der Daten durch einen der beiden anderen Werteänderungen angestoßen.

Die 99_myUtils.pm um folgende Einträge erweitern:

Jetzt wird bei jeder Werteänderung von AussenTemp, WWTemp oder HC1_ist alle Daten von FHEM an Loxone geschickt.

Auf der Loxoneseite jetzt die Vorlage einbinden und die ganzen Eingänge anlegen.

Die Erkennung für AussenTemp ist im Beispiel mit drin. Die anderen Werte müsst ihr einfach mittels weiterer Virtueller UDP Eingangs Befehle erweiteren und die Befehlserkennung jeweils um ein  \# \v ergänzen. Die letzte Zeile der 99_myUtils.pm zeigt euch an, an welcher Stelle welcher Wert kommt.

Werte schreiben:

Um Werte zu schreiben nutzen wir die Bedienung von FHEM mittels http:

Im Beispiel setzen wir die Raumtemperatur für den Tag.

Dazu wird ein Virtueller Ausgang angelegt und darin ein Virtueller Ausgangsbefehl.

Im Virtuellen Ausgang steht die IP des loxberry mit FHEM und der Port 8083.

Im Virtuellen Ausgangsbefehl kommt dann der komplette Pfad zum Wert den wir ändern wollen.

Hier im Beispiel ist auch gleich zu erkennen wie Werte, welche wir in Loxone eingeben, direkt als Wert an FHEM geschickt werden (hierfür ist das <v.1> zuständig; Wert wird mit einer Nachkommastelle übergeben).

Für alle anderen Werte die man ändern will, geht man nach dem gleichen Schema vor.