FHEM Forum

FHEM - Energiemanagement und Energieerzeugung => Solaranlagen => Thema gestartet von: aaameyer am 30 November 2025, 22:45:46

Titel: LG ThermaV via Modbus RTU-TCP Gateway
Beitrag von: aaameyer am 30 November 2025, 22:45:46
Für alle die vor einer ähnlichen Herausforderung stehen, möchte ich folgende Codeschnipsel teilen, da nur so eine Open Source Community leben kann:
LG ThermaV via Modbus RTU-TCP Gateway
#Default Modbus-Addr 01, Baudrate: 9600, Databit 8, Parität: none, Stoppbit 1
define LG_ThermaV ModbusAttr 1 30 192.168.6.16:8887 TCP
attr LG_ThermaV event-on-change-reading Durchflussrate:1,Kompressordrehzahl:5,Temperatur_.*:0.5,.*
attr LG_ThermaV silentReconnect 1

attr LG_ThermaV dev-c-defPoll 1
attr LG_ThermaV dev-i-defPoll 1
attr LG_ThermaV dev-d-defPoll 1
attr LG_ThermaV dev-h-defPoll 1

attr LG_ThermaV dev-type-Temperature-format %.1f °C
attr LG_ThermaV dev-type-Temperature-expr $val/10
attr LG_ThermaV dev-type-Steamtemperature-format %.1f °C
attr LG_ThermaV dev-type-Steamtemperature-expr $val/100
attr LG_ThermaV dev-type-Flow-format %.1f l/min
attr LG_ThermaV dev-type-Flow-expr $val/10

attr LG_ThermaV obj-c0-reading Zustand_Heizung
attr LG_ThermaV obj-c0-map 0:Aus, 1:Ein
attr LG_ThermaV obj-c0-set 1
attr LG_ThermaV obj-c1-reading Zustand_DHW
attr LG_ThermaV obj-c1-map 0:Aus, 1:Ein
attr LG_ThermaV obj-c1-set 1
attr LG_ThermaV obj-c2-reading Zustand_Ruhemodus
attr LG_ThermaV obj-c2-map 0:Aus, 1:Ein
attr LG_ThermaV obj-c2-set 1
attr LG_ThermaV obj-c3-reading Desinfektionsbetrieb
attr LG_ThermaV obj-c3-map 0:Status halten, 1:Desinfektionsbetrieb
attr LG_ThermaV obj-c4-reading Status_Notaus
attr LG_ThermaV obj-c4-map 0:Normalbetrieb, 1:Notaus
attr LG_ThermaV obj-c5-reading Notaus_Trigger
attr LG_ThermaV obj-c5-map 0:Status halten, 1:Notaus

attr LG_ThermaV obj-d0-reading Status_Wasserdurchfluss
attr LG_ThermaV obj-d0-map 0:Durchflussrate OK, 1:Durchflussrate zu niedrig
attr LG_ThermaV obj-d1-reading Status_Wasserpumpe
attr LG_ThermaV obj-d1-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d2-reading Status_Wasserpumpe_Extern
attr LG_ThermaV obj-d2-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d3-reading Status_Kompressor
attr LG_ThermaV obj-d3-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d4-reading Status_Abtauen
attr LG_ThermaV obj-d4-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d5-reading Status_DHW
attr LG_ThermaV obj-d5-map 0:Inaktiv, 1:Aktiv
attr LG_ThermaV obj-d6-reading Status_DHW_Desinfektion
attr LG_ThermaV obj-d6-map 0:Inaktiv, 1:Aktiv
attr LG_ThermaV obj-d6-reading Status_Ruhemodus
attr LG_ThermaV obj-d6-map 0:Inaktiv, 1:Aktiv
attr LG_ThermaV obj-d10-reading Status_Zusatzheizung_1_Stufe
attr LG_ThermaV obj-d10-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d11-reading Status_Zusatzheizung_2_Stufe
attr LG_ThermaV obj-d11-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d12-reading Status_Zusatzheizung_DHW
attr LG_ThermaV obj-d12-map 0:Aus, 1:Ein
attr LG_ThermaV obj-d13-reading Status_Fehlermeldung
attr LG_ThermaV obj-d13-map 0:Kein Fehler, 1:Fehler
# Nicht installiert
#attr LG_ThermaV obj-d16-reading Status_Mischpumpe
#attr LG_ThermaV obj-d16-map 0:Aus, 1:Ein

attr LG_ThermaV obj-i0-reading Fehlerkennung
attr LG_ThermaV obj-i2-reading Temperatur_Ruecklauf
attr LG_ThermaV obj-i2-type Temperature
attr LG_ThermaV obj-i3-reading Temperatur_Vorlauf
attr LG_ThermaV obj-i3-type Temperature
attr LG_ThermaV obj-i4-reading Temperatur_Vorlauf_Zusatzheizung
attr LG_ThermaV obj-i4-type Temperature
attr LG_ThermaV obj-i5-reading Temperatur_DHW
attr LG_ThermaV obj-i5-type Temperature
attr LG_ThermaV obj-i7-reading Temperatur_Raumluft
attr LG_ThermaV obj-i7-type Temperature
attr LG_ThermaV obj-i8-reading Durchflussrate
attr LG_ThermaV obj-i8-type Flow
attr LG_ThermaV obj-i12-reading Temperatur_Aussenluft
attr LG_ThermaV obj-i12-type Temperature
attr LG_ThermaV obj-i16-reading Temperatur_Fluessiggas
attr LG_ThermaV obj-i16-type Steamtemperature
attr LG_ThermaV obj-i18-reading Temperatur_Absaugung
attr LG_ThermaV obj-i18-type Steamtemperature
attr LG_ThermaV obj-i19-reading Temperatur_Heissgas
attr LG_ThermaV obj-i19-type Steamtemperature
attr LG_ThermaV obj-i20-reading Temperatur_Dampf_vor_Verdampfer
attr LG_ThermaV obj-i20-type Steamtemperature
attr LG_ThermaV obj-i21-reading Temperatur_Dampf_nach_Verdampfer
attr LG_ThermaV obj-i21-type Steamtemperature
attr LG_ThermaV obj-i22-reading Temperatur_Dampfdruck_Kondensator_1
attr LG_ThermaV obj-i22-type Steamtemperature
attr LG_ThermaV obj-i23-reading Temperatur_Dampfdruck_Kondensator_2
attr LG_ThermaV obj-i23-type Steamtemperature
attr LG_ThermaV obj-i24-reading Kompressordrehzahl
attr LG_ThermaV obj-i24-format %d Hz

attr LG_ThermaV obj-h0-reading Betriebsmodus
attr LG_ThermaV obj-h0-map 0:Kuehlen, 4:Heizung, 3:Auto
attr LG_ThermaV obj-h0-set 1
attr LG_ThermaV obj-h1-reading Steuermethode
attr LG_ThermaV obj-h1-map 0:Vorlauf Temperatur Steuerung, 1:Rücklauf Temperatur Steuerung, 2:Raumluft Steuerung
attr LG_ThermaV obj-h1-set 1
attr LG_ThermaV obj-h2-reading Solltemperatur_HK1
attr LG_ThermaV obj-h2-type Temperature
attr LG_ThermaV obj-h2-set 1
# Kein Sensor installiert
#attr LG_ThermaV obj-h3-reading Raumluft_HK1
#attr LG_ThermaV obj-h3-type Temperature
attr LG_ThermaV obj-h4-reading Schaltwert_Ziel_HK1
attr LG_ThermaV obj-h4-format %d K
attr LG_ThermaV obj-h4-set 1
attr LG_ThermaV obj-h8-reading DHW_Solltemperatur
attr LG_ThermaV obj-h8-type Temperature
attr LG_ThermaV obj-h8-set 1
Die kompletten Register sind via Internetsuche zu finden (da ich kein Copyright verletzen will, poste ich die hier nicht), für mich haben diese aber ausgereicht und man kann sich anhand der Vorlage auch schnell andere Register hinzufügen.
Wichtig ist, dass man zu Beginn der Kommunikation ein Coil abfragt und dann die Kommunikation kontinuierlich erfolgt, da sonnst die WP in einen Fehlerzustand geht und nicht von selbst wieder herauskommt. Laut LG Support ist dies kein Bug sondern ein Feature. Daher habe ich mir auch ein paar Watchdog DOIF's gebaut um mitzubekommen wenn was nicht stimmt:
define Watchdog_ThermaV_Connection_doif DOIF ([+00:35] and [?LG_ThermaV:Temperatur_Aussenluft:sec]>43200)\
(set pushMsg message Problem: LG ThermaV nicht erreichbar)\
(set sendMail message Subject='Problem: LG ThermaV' Prüfe ob das Device über Modbus erreichbar ist)\
DOELSE

attr Watchdog_ThermaV_Connection_doif repeatcmd 17500
attr Watchdog_ThermaV_Connection_doif repeatsame 10
define Watchdog_ThermaV_Fehler_doif DOIF ([LG_ThermaV:Fehlerkennung] != 0)\
(set pushMsg message Problem: LG ThermaV Fehlercode $EVENT)\
(set sendMail message Subject='Problem: LG ThermaV Fehlercode' LG ThermaV Fehlercode $EVENT)\
DOELSE

attr Watchdog_ThermaV_Fehler_doif repeatcmd 17500
attr Watchdog_ThermaV_Fehler_doif repeatsame 10
Hier noch eine Anregung wie man überwacht ob sonst noch was an der Heizung nicht stimmt:
define Watchdog_ThermaV_HeizungTemperatur_doif DOIF ([KNX:temperature_setpoint-get:d] > [KNX:temperature-get:d]+1)\
(set pushMsg message Problem: LG ThermaV Heizung Temperatur nicht erreicht)\
(set sendMail message Subject='Problem: LG ThermaV Heizung Temperatur nicht erreicht' LG ThermaV Heizung Temperatur nicht erreicht)\
DOELSE

attr Watchdog_ThermaV_HeizungTemperatur_doif wait 43200
attr Watchdog_ThermaV_HeizungTemperatur_doif repeatcmd 17500
attr Watchdog_ThermaV_HeizungTemperatur_doif repeatsame 10