Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter LG ThinQ

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter LG ThinQ

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Paul Kersey @ofri2607 last edited by Paul Kersey

      @ofri2607 Kannst du mir dein Skript für die Fensterabfrage mal zeigen oder so?

      ofri2607 1 Reply Last reply Reply Quote 0
      • ofri2607
        ofri2607 @Paul Kersey last edited by

        @paul-kersey
        Grundsätzlich sehr gerne, nur ist das Script mittlerweile sehr umfangreich (und auch noch nicht komplett fehlerfrei), da ich damit sowohl die Heizung im Winter als auch die Klima im Sommer steuere und alle DP‘s über linkedDevices aufgebaut habe; damit wird es vermutlich nicht so einfach zu lesen sein.
        Ich kann dir aber in den nächsten Tagen mal den Teil mit der Fenstersteuerung und den nativen Datenpunkten zusammenstellen.

        P 1 Reply Last reply Reply Quote 0
        • P
          Paul Kersey @ofri2607 last edited by

          @ofri2607 Wäre nett, danke.

          ofri2607 1 Reply Last reply Reply Quote 0
          • ofri2607
            ofri2607 @Lucky_ESA last edited by

            @lucky_esa
            Ok, habe mal einen ganz schnellen Blick auf das Template geworfen.
            Wenn du was einbaust, könntest du mir dann auch

            "SetDisplayControl": {
                    "_comment": "SET_ë””ìŠ¤í”Œë ˆì´í‘œì‹œìœ ë¬´",
                    "cmd": "Control",
                    "cmdOpt": "Set",
                    "value": "{\"DisplayControl\":\"{{DisplayControl}}\"}"
                  },
            
            

            mit einbauen? Ich vermute, dass das die Steuerung der Displaybeleuchtung am Innengerät ist.
            Die würde mir bei den thinq2 Geräte auch fehlen; der snapshot DP ist vorhanden und passt bei den thinq2 Geräte auch, nur ein- und ausschalten habe ich bei den remote DP‘s nicht gefunden.

            L 1 Reply Last reply Reply Quote 0
            • L
              Lucky_ESA Developer Most Active @ofri2607 last edited by Lucky_ESA

              @ofri2607

              mit einbauen? Ich vermute, dass das die Steuerung der Displaybeleuchtung am Innengerät ist.
              Die würde mir bei den thinq2 Geräte auch fehlen; der snapshot DP ist vorhanden und passt bei den thinq2 Geräte auch, nur ein- und ausschalten habe ich bei den remote DP‘s nicht gefunden.

              Bei dem thinq2 Gerät hatte ich den DP .remote.sendJSON hinzugefügt. Hier kannst du selber einen JSON versenden. Das habe ich ganz weit oben beschrieben...Stelle mal auf Debug und versende was dann poste hier den JSON.
              Dann können wir den Request zusammenstellen.

              Gruß//Lucky

              ofri2607 1 Reply Last reply Reply Quote 0
              • P
                Paul Kersey last edited by

                @lucky_esa Mache heute Nachmittag, muss erstmal schauen, wo man Debug einstellt.

                Ich vermute du brauchst dann irgendwelche Logs?

                1 Reply Last reply Reply Quote 0
                • ofri2607
                  ofri2607 @Paul Kersey last edited by

                  @paul-kersey sagte in Test Adapter LG ThinQ v0.0.1:

                  @ofri2607 Wäre nett, danke.

                  Hier der Auszug zur Fenstersteuerung aus meinem Script, sollte soweit funktionieren.
                  Ich habe dir mal meine nativen DP's dazu drinnen gelassen, diese musst du durch deine ersetzen.
                  Es ist auch eine Automatikfunktion eingebaut (über diesen DP schalte ich über die VIS die Steuerung ein bzw. aus); diesen muss du manuell anlegen.

                  /*******************************************************************************************************
                   * Klimaanlage - Fenstersteuerung
                   * *****************************************************************************************************
                   * v0.1 - 28.06.2023 - Ersterstellung
                   *******************************************************************************************************
                   * Steuerung der Klimaanlage in Abhängigkeit der Fensteröffnung
                   * mit der Möglichkeit die Steuerung zu deaktivieren
                   * (Automatik true/false als eigenen Datenpunkt manuell anlegen)
                   *******************************************************************************************************/
                   
                  /*******************************************************************************************************
                   * Setup-Bereich
                   *******************************************************************************************************/
                  	//Datenpunkte Fenster - Fenster geöffnet = true, geschlossen = false
                          //im Array mehrere Fenster möglich
                  	const l_windows = [																					
                  		'hmip.0.devices.3014F711A000109D89A225A2.channels.1.windowOpen',					            
                                  'hmip.0.devices.3014F711A00000DF299B4643.channels.1.windowOpen'
                  	];									
                  																										
                  	//Datenpunkte Klimaanlage Betrieb
                          //Klimaanlage ist ein- oder ausgeschalten (0/1)
                  	const l_coolingOperation = 'lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.snapshot.airState.operation'; 
                          //Befehl für Klimaanlage ein / aus (0/1)      
                          const l_coolingOperationSet = 'lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.remote.basicCtrl.operation';     
                  	
                  	//Datenpunkte Klimaanlage für definierte Starttemperatur und Ventilatoreinstellung beim Fensterschließen
                  	//=> siehe setCoolingState und Auswahlmöglichkeit bei alle Fenster geschlossen
                          //Sollwert für Klimaanlage
                  	const l_coolingSetpoint = 'lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.snapshot.airState.tempState.target';
                          //Setzen von Sollwert
                          const l_coolingSetpointSet = 'lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.remote.basicCtrl.target';
                          //Ventilatordrehzahl (2 = Gering bis 6 = Hoch, 8 = Auto)          
                          const l_coolingWind = 'lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.snapshot.airState.windStrength';
                          //Befehl für Ventilatordrehzahl         
                          const l_coolingWindSet = 'lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.remote.basicCtrl.windStrength';       
                  	
                  	//Datenpunkte User - Automatikeinstellung für Fenstersteuerung (true/false) => muss manuell angelegt werden
                  	const l_coolingAuto = '0_userdata.0.Klimaanlage.SZ-Automatik';
                  	
                           //Usereinstellungen
                  	const delay = 15000;	//Zeit in ms für Zeitverzögerung in der Prüfung und ggf. Senden weiterer Befehle
                  	
                  	//**************************************************************************************************/
                  	//Logging
                          const logging = true;
                          const logInfo = "Klimaanlage: ";
                  
                  /*******************************************************************************************************/
                      const dpObj = {
                          "func": 	l_coolingOperation,
                  	"funcSet": 	l_coolingOperationSet,
                          "temp": 	l_coolingSetpoint,
                  	"tempSet": 	l_coolingSetpointSet,
                          "wind": 	l_coolingWind,
                  	"windSet": 	l_coolingWindSet,
                      };
                      let operationWhileAuto = false;
                      const timer = ms => new Promise(res => setTimeout(res, ms));    
                  	
                      function checkWindowOpen() {
                  	let open = false;
                  	for (let i = 0; i < l_windows.length; i++) {
                  		if (getState(l_windows[i]).val) open = true;
                  	};
                  	return open;
                       };
                  	
                       function init(opFlag) {
                  	if (getState(l_coolingAuto).val) {
                  		let openWindow = checkWindowOpen();
                  		if (openWindow && getState(l_coolingOperation).val === 1) {
                  			operationWhileAuto = opFlag;
                  			let success = setCoolingState({"func": 0});
                  			if (success && logging) log(logInfo + "Fenster geöffnet, Klimaanlage ausgeschalten", "info");
                  		};
                  	} else {
                  		operationWhileAuto = false;
                  		if (logging) log(logInfo + "Automatik für Fenstersteuerung ist ausgeschalten", "info");
                  	};
                      };
                  	
                      async function setCoolingState(setObj){
                  	//Möglichkeiten im Aufruf, z.B.
                  	//setCoolingState({"func": 1, "temp": 22, "wind": 8});
                  	//setCoolingState({"func": 0});		
                          for (const key in setObj) {
                              if (dpObj[key] !== undefined) {
                                  let dpState = dpObj[key];
                                  let dpSet = dpObj[key + "Set"];
                                  if (!existsState(dpState) || !existsState(dpSet)) {
                  		        log(logInfo + "Datenpunkt für '" + key + "' nicht vorhanden", "error");
                  			return false;
                                  };
                                  if (getState(dpSet).val != setObj[key] || getState(dpSet).val != getState(dpState).val) {
                                      if (logging) log(logInfo + "Befehl " + key + " = " + setObj[key] + " senden", "debug");
                                      await setStateAsync(dpSet, setObj[key]);
                                      for(let i = 1 ; i < 3 ; i++) {
                                          await timer(delay);
                                          let stateVal = getState(dpState).val;
                                          let setVal = getState(dpSet).val;
                                          if (stateVal != setVal) {
                                              if (i == 1) {
                                                  if (logging) log(logInfo + "Zeiterverzögerung in Rückmeldung des Befehls " + key + " = " + setObj[key], "warn");
                                              } else {
                  				log(logInfo + "Senden des Befehls " + key + " = " + setObj[key] + " nicht erfolgreich", "error");
                                                  setState(dpSet, stateVal);
                  				return false;
                                              };
                                          } else {
                                              break;
                                          };
                                      };
                                  };
                              };
                          };
                  	return true;
                      };
                  	
                  /*******************************************************************************************************
                   * Hauptprogrammteil
                   *******************************************************************************************************/
                  //Programmstart
                  	init(true);
                  
                  //Eventhandler
                  	//Ein Fenster wurde geöffnet oder alle Fenster sind geschlossen
                  	on({id: l_windows, change: "any"}, function(){
                  		if (getState(l_coolingAuto).val) {
                  			let openWindow = checkWindowOpen();
                  			//Ein Fenster geöffnet und Klimaanlage in Betrieb
                  			if (openWindow && getState(l_coolingOperation).val === 1) {
                  				operationWhileAuto = true;
                  				let success = setCoolingState({"func": 0});
                  				if (success && logging) log(logInfo + "Fenster geöffnet, Klimaanlage ausgeschalten", "info");
                  			};
                  			//Alle Fenster geschlossen und Klima war zuvor in Betrieb
                  			if (!openWindow && operationWhileAuto){
                  				operationWhileAuto = false;
                  				//Wenn EINE definierte Starttemperatur und Ventilatoreinstellung verwendet werden soll, dann folgende Zeile
                  				//let success = setCoolingState({"func": 1, "temp": 22, "wind": 8});
                  				//Wenn KEINE definierte Starttemperatur und Ventilatoreinstellung verwendet werden soll, dann folgende Zeile
                  				let success = setCoolingState({"func": 1});
                  				if (success && logging) log(logInfo + "Fenster geschlossen, Klimaanlage eingeschalten", "info");
                  			};
                  		};
                  	});
                  	
                  	//Automatik oder Klimaanlage (über Fernbedienung oder App) wurde ein- oder ausgeschalten
                  	on({id: [l_coolingAuto, l_coolingOperation], change: "any"}, function(){
                                 let openWindow = checkWindowOpen();
                                 init(!openWindow);
                  	});
                  

                  P 1 Reply Last reply Reply Quote 0
                  • ofri2607
                    ofri2607 @Lucky_ESA last edited by

                    @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                    Hier kannst du selber einen JSON versenden. Das habe ich ganz weit oben beschrieben...

                    Hallo Lucky,
                    ich habe mir jetzt mal das Template vom thinq2 Geräte mal genauer angesehen; ok, ist heftig.
                    Zur Beschreibung habe ich den Post und den Post von dir gefunden, oder habe ich da noch etwas übersehen?
                    Da bräuchte ich noch etwas Hilfe:
                    Bei meinem thinq2 Gerät würde es mir noch um das Ein- und Ausschalten der Displaybeleuchtung gehen. Der Status an sich ist im DP lg-thinq.0.dfbdfc44-8efb-148a-acc9-44cb8b32f2ea.snapshot.airState.lightingState.displayControl enthalten.
                    Im Template müsste das ja dann

                    "airState.lightingState.displayControl":{
                    	"data_type":"enum",
                    	"default":"0",
                    	"value_mapping":{
                    		"0":"@RAC_LED_ON",
                    		"1":"@RAC_LED_OFF",
                    		"2":"@NON",
                    		"3":"@NON",
                    		"4":"@NON",
                    		"5":"@NON",
                    		"6":"@NON",
                    		"7":"@NON",
                    		"8":"@NON",
                    		"9":"@NON",
                    		"10":"@NON",
                    		"11":"@AC_LED_OFF_W",
                    		"12":"@AC_LED_ON_W",
                    		"13":"@AC_LED_AUTO_W"
                    	}
                    }
                    

                    sein, oder?
                    Ich würde aber mal einschätzen, dass das nicht das ist, was als sendJSON versendet werden soll?

                    Zu lightingState hätte ich dann im Template noch das gefunden, wo ich annehmen würde, dass es ein Befehl ist (wobei ich aus den Bezeichnungen befürchte, dass es nicht das gewünschte ist):

                    {
                    	"ctrlKey":"settingInfo",
                    	"comment":"원격제어-설정",
                    	"command":"Get|Set",
                    	"dataKey":"airState.powerSave.basic|airState.miscFuncState.autoDry|airState.lightingState.magicBrightness|airState.lightingState.mood|airState.voice.spkVolume|airState.tempState.unit",
                    	"dataValue":"{%airState.powerSave.basic%}|{%airState.miscFuncState.autoDry%}|{%airState.lightingState.magicBrightness}|{%airState.lightingState.mood%}|{%airState.voice.spkVolume%}|{%airState.tempState.unit%}"
                    }
                    

                    Müsste ich dann genau diesen Teil in .remote.sendJSON eintragen? Sieht auch ganz anders aus, als in deinem Post oben zur WM.

                    Bevor ich da jetzt an die Klima irgendwas schicke, frage ich lieber nochmal nach.
                    BG Oliver

                    L 2 Replies Last reply Reply Quote 0
                    • L
                      Lucky_ESA Developer Most Active @ofri2607 last edited by

                      @ofri2607 Du musst den Adapter auf Debug stellen und dann z. Bsp. deine Klimanlage einschalten. Den JSON den ich benötige fängt im Log mit sendCommandToDevice an.

                      Gruß//Lucky

                      ofri2607 1 Reply Last reply Reply Quote 0
                      • L
                        Lucky_ESA Developer Most Active last edited by

                        Hallo AC thinq1 Nutzer, @tombox hat mir die Daten zugesendet die versendet werden. Könnt ihr nun vom GIT laden und testen, wobei ich es eigentlich schon getestet habe...

                        Gruß//Lucky

                        ofri2607 2 Replies Last reply Reply Quote 1
                        • L
                          Lucky_ESA Developer Most Active @ofri2607 last edited by

                          @ofri2607 Eher Link hier

                          Kannst ja mal diesen JSON testen. Auch wenn der Code in dem Template vorhanden ist, muss es nicht bei dir funktionieren.

                          {"ctrlKey":"settingInfo","command":"Set","dataKey":"airState.lightingState.displayControl","dataValue":1,"dataSetList":null,"dataGetList":null}
                          

                          Gruß//Lucky

                          ofri2607 1 Reply Last reply Reply Quote 1
                          • ofri2607
                            ofri2607 @Lucky_ESA last edited by

                            @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                            z. Bsp. deine Klimanlage einschalten. Den JSON den ich benötige fängt im Log mit sendCommandToDevice

                            Herzlichen Dank für deinen Antwort, da hatte ich dich zuerst Missverstanden.

                            Einschalten liefert folgendes json im Log:

                            sendCommandToDevice: {"ctrlKey":"basicCtrl","command":"Operation","dataKey":"airState.operation","dataValue":"1","dataSetList":null,"dataGetList":null}
                            

                            Änderung im Sollwert folgendes:

                            sendCommandToDevice: {"ctrlKey":"basicCtrl","command":"Set","dataKey":"airState.tempState.target","dataValue":22,"dataSetList":null,"dataGetList":null}
                            
                            1 Reply Last reply Reply Quote 0
                            • ofri2607
                              ofri2607 @Lucky_ESA last edited by ofri2607

                              @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                              Kannst ja mal diesen JSON testen

                              Leider nein, liefert

                              {"resultCode":"0000","result":{"data":""}}	
                              

                              und Display bleibt an bzw. aus - habe beide dataValue probiert.
                              Unter snapshot.airState.lightingState.displayControl kommen die mit der FB geschalteten States sauber an, auch wenn witziger Weise 0 = an und 1 = aus ist.

                              1 Reply Last reply Reply Quote 0
                              • ofri2607
                                ofri2607 @Lucky_ESA last edited by

                                @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                                Könnt ihr nun vom GIT laden und testen,

                                Nur zur Sicherheit, auch wieder den Ordner xxx.remote löschen?

                                L 1 Reply Last reply Reply Quote 0
                                • L
                                  Lucky_ESA Developer Most Active @ofri2607 last edited by

                                  @ofri2607 sagte in Test Adapter LG ThinQ v0.0.1:

                                  @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                                  Könnt ihr nun vom GIT laden und testen,

                                  Nur zur Sicherheit, auch wieder den Ordner xxx.remote löschen?

                                  Nein, aber du hast ein thinq2 Geräte und daher sind die Änderungen auf dem GIT für dich nicht relevant. Schade das du dein Display dann nicht einschalten kannst.
                                  Wenn was mit der APP nicht zu schalten ist, können wir nicht wissen was versendet werden muss. Es kann auch sein das es nicht möglich ist.

                                  Gruß//Lucky

                                  ofri2607 1 Reply Last reply Reply Quote 0
                                  • ofri2607
                                    ofri2607 @Lucky_ESA last edited by

                                    @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                                    Nein, aber du hast ein thinq2 Gerät

                                    Naja, sowohl als auch, ich habe zwei thinq2 und ein thinq1 Gerät.
                                    Ja, das mit dem Display ist Schade, aber herzlichen Dank für deine Bemühungen. Ich habe mir ein paar Automatiken / auch Zeitplan im Javascript gebaut und da hätte ich gerne im Schlafzimmer das Display in der Nacht automatisch mit ausschalten wollen, man wird ja faul mit der Zeit und will sich den Griff zur FB ersparen 😉 - ist aber jetzt absolut nicht's Essentielles.

                                    Und jetzt gehe ich mal das thinq1 Gerät testen

                                    L 1 Reply Last reply Reply Quote 0
                                    • L
                                      Lucky_ESA Developer Most Active @ofri2607 last edited by

                                      @ofri2607 Stimmt, du hast ja beide Geräte...Bin verwirrt 🙂

                                      Gruß//Lucky

                                      L 1 Reply Last reply Reply Quote 0
                                      • L
                                        Lucky_ESA Developer Most Active @Lucky_ESA last edited by

                                        @lucky_esa sagte in Test Adapter LG ThinQ v0.0.1:

                                        @ofri2607 Stimmt, du hast ja beide Geräte...Bin verwirrt 🙂

                                        Gruß//Lucky

                                        Edit: Wenn du den Zeitplan auch für thinq1 benötigst, musst du tombox mal fragen ober er nachschauen kann.

                                        Gruß//Lucky

                                        1 Reply Last reply Reply Quote 0
                                        • ofri2607
                                          ofri2607 @Lucky_ESA last edited by

                                          @lucky_esa
                                          Einschalten, Ausschalten, Sollwertänderung funktioniert jetzt bei meinem thinq1 Gerät einwandfrei 🙂 Genial
                                          Und die "Sperre" in der App ist auch nicht mehr vorhanden, kann problemlos über den DP einschalten und in der App ausschalten und umgekehrt.

                                          Beim Ändern von WindStrength kommt jedoch folgende Meldung im Log

                                          lg-thinq.0   2023-06-30 19:26:51.148	error	{"lgedmRoot":{"returnCd":"0011","returnMsg":"등록되지 않은 모델입니다.","deviceId":"d27d1380-7149-11d3-80b8-2c2bf9760c6d","stateCode":"S","workId":"n-6dbc68c1-a968-41b2-8bd0-122ef276d8","deviceState":"U","timestamp":0}}
                                          lg-thinq.0   2023-06-30 19:26:51.148	error	Command not succesful
                                          

                                          Was mir nach der Installation aufgefallen ist, ist das ich einen Ordner undefined in den Objekten habe (vielleicht war der aber auch schon vorher da, könnte ich jetzt nicht mit Sicherheit sagen)

                                          7aa3346e-e93a-48dd-ae13-426a8f64afa9-image.png

                                          Eine generelle Frage habe ich noch, die snapshot DP's von den thinq1 Geräte werden nur durch polling (Aktualisierungszeit in den Adaptereinstellungen) aktualisiert, oder?
                                          Wie weit könnte ich denn die Aktualisierungszeit nach unten setzen? Würde 1 Minute, oder gerne noch weniger, zu Probleme führen?
                                          Hintergrund ist, dass Automatisierungen mit einer Verzögerungszeit von 5 Minuten etwas Lange sind.

                                          Zum Edit in deinem Post, herzlichen Dank für die Info, aber die Zeitpläne mache ich mir über einen eigenen json-DP und Javascript ohnehin selber, daher müsst ihr für mich hier keinen Aufwand betreiben.

                                          Herzlichen Dank für euren Einsatz und Support!

                                          L 1 Reply Last reply Reply Quote 0
                                          • L
                                            Lucky_ESA Developer Most Active @ofri2607 last edited by

                                            @ofri2607 sagte in Test Adapter LG ThinQ v0.0.1:

                                            lg-thinq.0 2023-06-30 19:26:51.148 error {"lgedmRoot":{"returnCd":"0011","returnMsg":"등록되지 않은 모델입니다.","deviceId":"d27d1380-7149-11d3-80b8-2c2bf9760c6d","stateCode":"S","workId":"n-6dbc68c1-a968-41b2-8bd0-122ef276d8","deviceState":"U","timestamp":0}}

                                            Was ist das da für ein Ordner "undefined"??? Habe ich noch ein Fehler im Adapter...
                                            Kannst du mal den Adapter stoppen, diesen Objectbaum löschen und neu starten. Dann mal schauen ob da immer noch undefined steht.

                                            Du kannst auf 0.5 wechseln. Das entspricht 30 Sekunden. Ich hatte mal 2 Geräte mit einem 1 Sekunden Takt getestet mit dem Resultat das ich dauerhaft gepserrt wurde. Es muss auch eine Mqtt Verbindung geben oder ein ws, diese kennen wir aber leider nicht. Man sieht ja in der APP das Änderungen nach ca. 3 Sekunden angezeigt werden.

                                            Gruß//Lucky

                                            ofri2607 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            925
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            64
                                            878
                                            211801
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo