Neues Modul LG-ThinQ

Begonnen von Shadow3561, 14 Januar 2026, 19:43:26

Vorheriges Thema - Nächstes Thema

Shadow3561

Moin,
angeregt durch diesen thread habe ich mich die letzte beiden Abende mit ChatGPT an ein Modul gewagt was Geräte aus der ThinQ App in FHEM abbilden und steuern kann. Dazu wird die offizielle LG-ThinQ-API-v2 benutzt.


Als erstes müssen wir auf diese Seite gehen
HIER
Hier ändern wir oben die Sprache auf deutsch und melden uns mit unserem LG-Account an.

Dann erstellen wir einen PAT (Personal Access Token). Diesen kopieren.

Als nächstes die Beiden Module im Anhang in euren Modulordner (fhem/FHEM) packen.
fhem Neustarten

Das Connect-Device anlegen mit
defmod <NAME> LGThinQ_Connect <PAT>wenn ihr wollt, dass eure LG_devices automatisch angelegt werden müsst ihr noch das
autocreateDevices Attribut auf 1 setzen (funktioniert natürlich nur wenn das autocreate in fhem aktiv ist). Dies wird nach dem holen der Deviceliste von LG wieder auf 0 gesetzt.

Jetzt einmal
set <NAME> connect ausführen.
Nun sollten eure LG Geräte automatisch angelegt werden.

Im Device Modul ist mapping eingebaut, aber nur für Klimaanlage und Kühlschrank. Weitere Mappings könnt ihr selbst im Modul ab Zeile 404 hinzufügen. Alle benötigten Infos über die, von LG gelieferten, readings bekommt ihr im Device-reading "apiStateRaw".

Die Set-Befehle werden automatisch angelegt, dazu wird das reading "apiProfileRaw" benötigt.

Probiert es einfach mal aus.
Mit freundlichen Grüßen
Daniel

Shadow3561

#1
Neue Version ist Oben angehängt.
stateformat wurde hinzugefügt.

ixsus300

Hi,

konnte es soweit mit meiner WP LG ThermaV verbinden. Kannst du mir einen Tipp geben wie ich nun genau weitere Readings ab Zeile 404 hinzufügen kann?
Folgende Infos im apiStateRaw Reading:

{"timestamp":"2026-01-20T16:22:19.217518","messageId":"o0KwmLctidQ7MtnpZkQ4fw","response":{"roomTemperatureInUnits":[{"waterCoolMinTemperature":5,"airHeatMinTemperature":16,"waterHeatMaxTemperature":65,"unit":"C","inWaterCurrentTemperature":46,"airCoolMinTemperature":16,"airCurrentTemperature":26,"airCoolMaxTemperature":30,"currentTemperature":48,"waterHeatMinTemperature":15,"outWaterCurrentTemperature":48,"waterCoolMaxTemperature":27,"targetTemperature":17,"airHeatMaxTemperature":30},{"waterCoolMaxTemperature":80,"targetTemperature":62,"airHeatMaxTemperature":86,"waterHeatMinTemperature":58,"outWaterCurrentTemperature":118,"currentTemperature":118,"airCoolMaxTemperature":86,"airCurrentTemperature":78,"unit":"F","airCoolMinTemperature":60,"inWaterCurrentTemperature":114,"airHeatMinTemperature":60,"waterHeatMaxTemperature":148,"waterCoolMinTemperature":40}],"temperature":{"targetTemperature":0,"unit":"C","heatMaxTemperature":65,"coolMaxTemperature":27,"currentTemperature":48,"heatMinTemperature":15,"coolMinTemperature":5},"boilerJobMode":{"currentJobMode":"AUTO"},"operation":{"boilerOperationMode":"POWER_ON","roomTempMode":"WATER","hotWaterMode":"ON","roomWaterMode":"OUT_WATER"},"hotWaterTemperatureInUnits":[{"unit":"C","minTemperature":30,"targetTemperature":52,"maxTemperature":80,"currentTemperature":52},{"maxTemperature":176,"currentTemperature":126,"targetTemperature":126,"minTemperature":86,"unit":"F"}]}}
Danke !

Shadow3561

#3
Moin,

so in etwa
Zitat(

    # -------- Raum / Wasser Temperaturen --------
    'temperature.currentTemperature' => {
        name => 'currentTemp',
    },
    'temperature.targetTemperature' => {
        name => 'targetTemp',
    },
    'temperature.coolMinTemperature' => {
        name => 'coolMinTemp',
    },
    'temperature.coolMaxTemperature' => {
        name => 'coolMaxTemp',
    },
    'temperature.heatMinTemperature' => {
        name => 'heatMinTemp',
    },
    'temperature.heatMaxTemperature' => {
        name => 'heatMaxTemp',
    },

    # -------- Raumtemperatur (Celsius) --------
    'roomTemperatureInUnits.0.airCurrentTemperature' => {
        name => 'roomAirTemp',
    },
    'roomTemperatureInUnits.0.currentTemperature' => {
        name => 'roomCurrentTemp',
    },
    'roomTemperatureInUnits.0.targetTemperature' => {
        name => 'roomTargetTemp',
    },

    # -------- Wasser Temperaturen --------
    'roomTemperatureInUnits.0.inWaterCurrentTemperature' => {
        name => 'waterInTemp',
    },
    'roomTemperatureInUnits.0.outWaterCurrentTemperature' => {
        name => 'waterOutTemp',
    },

    # -------- Boiler Job Mode --------
    'boilerJobMode.currentJobMode' => {
        name => 'boilerJobMode',
    },

    # -------- Operation Modes --------
    'operation.boilerOperationMode' => {
        name => 'boilerPower',
    },
    'operation.hotWaterMode' => {
        name => 'hotWaterMode',
    },
    'operation.roomTempMode' => {
        name => 'roomTempMode',
    },
    'operation.roomWaterMode' => {
        name => 'roomWaterMode',
    },

    # -------- Hot Water --------
    'hotWaterTemperatureInUnits.0.currentTemperature' => {
        name => 'hotWaterCurrentTemp',
    },
    'hotWaterTemperatureInUnits.0.targetTemperature' => {
        name => 'hotWaterTargetTemp',
    },
    'hotWaterTemperatureInUnits.0.minTemperature' => {
        name => 'hotWaterMinTemp',
    },
    'hotWaterTemperatureInUnits.0.maxTemperature' => {
        name => 'hotWaterMaxTemp',
    },
Hast du Set-Befehle bekommen um die WP zu steuern?

Mit freundlichen Grüßen

EDIT:
Neue Version mit readings für LG Wärmepumpe oben angehängt.

ixsus300

Hi,

TOP !! Danke !

ja im apiProfileRaw Reading:
Habe allerdings ein Token ohne Set Befehle eingebaut. Möchte nur auslesen.

{"response":{"property":{"boilerJobMode":{"currentJobMode":{"mode":["r","w"],"value":{"r":["HEAT","AUTO","COOL"],"w":["HEAT","AUTO","COOL"]},"type":"enum"}},"hotWaterTemperatureInUnits":[{"minTemperature":{"type":"number","mode":["r"]},"currentTemperature":{"mode":["r"],"type":"number"},"unit":"C","targetTemperature":{"type":"range","value":{"w":{"min":30,"max":80,"step":1},"r":{"min":30,"max":80,"step":1}},"mode":["r","w"]},"maxTemperature":{"mode":["r"],"type":"number"}},{"currentTemperature":{"type":"number","mode":["r"]},"minTemperature":{"mode":["r"],"type":"number"},"maxTemperature":{"mode":["r"],"type":"number"},"unit":"F","targetTemperature":{"value":{"r":{"step":2,"max":176,"min":86},"w":{"step":2,"min":86,"max":176}},"type":"range","mode":["r","w"]}}],"roomTemperatureInUnits":[{"airCoolTargetTemperature":{"mode":["w"],"value":{"w":{"min":18,"max":30,"step":1}},"type":"range"},"airHeatMinTemperature":{"mode":["r"],"type":"number"},"inWaterCurrentTemperature":{"mode":["r"],"type":"number"},"outWaterCurrentTemperature":{"type":"number","mode":["r"]},"airHeatMaxTemperature":{"mode":["r"],"type":"number"},"waterCoolMinTemperature":{"type":"number","mode":["r"]},"waterCoolTargetTemperature":{"mode":["w"],"type":"range","value":{"w":{"max":24,"min":5,"step":1}}},"waterHeatMaxTemperature":{"type":"number","mode":["r"]},"airCoolMinTemperature":{"type":"number","mode":["r"]},"airCurrentTemperature":{"type":"number","mode":["r"]},"airCoolMaxTemperature":{"mode":["r"],"type":"number"},"waterCoolMaxTemperature":{"type":"number","mode":["r"]},"waterHeatTargetTemperature":{"value":{"w":{"max":57,"min":14,"step":1}},"type":"range","mode":["w"]},"currentTemperature":{"type":"number","mode":["r"]},"targetTemperature":{"mode":["r"],"type":"number"},"unit":"C","airHeatTargetTemperature":{"value":{"w":{"step":1,"max":30,"min":16}},"type":"range","mode":["w"]},"waterHeatMinTemperature":{"type":"number","mode":["r"]}},{"waterCoolTargetTemperature":{"mode":["w"],"value":{"w":{"min":40,"max":76,"step":2}},"type":"range"},"waterCoolMinTemperature":{"mode":["r"],"type":"number"},"waterHeatMaxTemperature":{"type":"number","mode":["r"]},"waterCoolMaxTemperature":{"mode":["r"],"type":"number"},"waterHeatTargetTemperature":{"mode":["w"],"type":"range","value":{"w":{"step":2,"max":134,"min":58}}},"currentTemperature":{"mode":["r"],"type":"number"},"waterHeatMinTemperature":{"type":"number","mode":["r"]},"unit":"F","airHeatTargetTemperature":{"mode":["w"],"type":"range","value":{"w":{"step":2,"max":86,"min":60}}},"targetTemperature":{"type":"number","mode":["r"]},"airCurrentTemperature":{"mode":["r"],"type":"number"},"airCoolMinTemperature":{"type":"number","mode":["r"]},"airCoolMaxTemperature":{"mode":["r"],"type":"number"},"inWaterCurrentTemperature":{"type":"number","mode":["r"]},"airHeatMinTemperature":{"type":"number","mode":["r"]},"airHeatMaxTemperature":{"type":"number","mode":["r"]},"outWaterCurrentTemperature":{"type":"number","mode":["r"]},"airCoolTargetTemperature":{"mode":["w"],"type":"range","value":{"w":{"min":64,"max":86,"step":2}}}}],"temperature":{"heatTargetTemperature":{"mode":["w"],"type":"number"},"coolTargetTemperature":{"type":"number","mode":["w"]},"currentTemperature":{"type":"number","mode":["r"]},"coolMinTemperature":{"mode":["r"],"type":"number"},"unit":{"mode":["r"],"value":{"r":["C"]},"type":"enum"},"targetTemperature":{"mode":["r"],"type":"number"},"heatMinTemperature":{"type":"number","mode":["r"]},"coolMaxTemperature":{"mode":["r"],"type":"number"},"heatMaxTemperature":{"type":"number","mode":["r"]}},"operation":{"boilerOperationMode":{"mode":["r","w"],"value":{"w":["POWER_ON","POWER_OFF"],"r":["POWER_ON","POWER_OFF"]},"type":"enum"},"hotWaterMode":{"mode":["r","w"],"value":{"w":["OFF","ON"],"r":["OFF","ON"]},"type":"enum"},"roomTempMode":{"mode":["r"],"value":{"r":["AIR","WATER"]},"type":"enum"},"roomWaterMode":{"mode":["r"],"type":"enum","value":{"r":["OUT_WATER","IN_WATER"]}}}}},"timestamp":"2026-01-20T17:13:01.043307","messageId":"QduesqWEVjr-zEppFOprww"}

mfg

Shadow3561

#5
Zitatja im apiProfileRaw Reading:
das ist klar, die Daten werden vom Mode abgerufen und als reading gespeichert um daraus mögliche Set-Befehle an zu legen.

Was ich meine ist, werden dir die Set-Befehle oben angeboten?

Mit freundlichen Grüßen

ixsus300


Shadow3561