Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Liebherr Smart Device einbinden - so geht's

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Liebherr Smart Device einbinden - so geht's

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stenmic last edited by stenmic

      Moin,
      wer Liebherr Smart Device Geräte hat, möchte diese eventuell in ioBroker einbinden.
      So kann man die Werte bekommen.

      Optionen in der Liebherr App aktivieren

      1. Es wird die Device-ID benötigt (unter Geräte)
      2. Betatest muss aktiviert werden (Den API-Key sofort kopieren und sichern, wird nur einmal angezeigt)


      optionen.PNG
      device-ID.PNG
      api-key.PNG

      Blockly Beispiel

      2025-03-30 08 43 50.jpg

      <xml xmlns="https://developers.google.com/blockly/xml">
       <block type="schedule" id="lM*WR|MH+q,F(eaI{G{h" x="113" y="88">
         <field name="SCHEDULE">*/10 * * * *</field>
         <statement name="STATEMENT">
           <block type="procedures_callcustomnoreturn" id="sXQ^Gl1J7RLMY0OF%D%s">
             <mutation name="Json"></mutation>
           </block>
         </statement>
         <next>
           <block type="on" id="%vmC.dk%d:MQ!R-u~^@P">
             <field name="OID">0_userdata.0.Gefrierschrank.Json</field>
             <field name="CONDITION">ne</field>
             <field name="ACK_CONDITION"></field>
             <statement name="STATEMENT">
               <block type="update" id="lQ8Q53[%rzM}gqO=z?HE">
                 <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                 <field name="OID">0_userdata.0.Gefrierschrank.Temperaturen.Ist</field>
                 <field name="WITH_DELAY">FALSE</field>
                 <value name="VALUE">
                   <block type="get_attr" id="3XBnpq%|J},tZdSuC0KS">
                     <value name="PATH">
                       <shadow type="text" id="6yC%E@~Q%P[|-;CHDY@M">
                         <field name="TEXT">1.value</field>
                       </shadow>
                     </value>
                     <value name="OBJECT">
                       <shadow type="get_object" id="bxM,S0*#%P:Gkh:D~^T0">
                         <field name="OID">Object ID</field>
                       </shadow>
                       <block type="on_source" id="P^}^h8O!CKDxcJo,zzTb">
                         <field name="ATTR">state.val</field>
                       </block>
                     </value>
                   </block>
                 </value>
                 <next>
                   <block type="update" id="`edwP~(SKu]p{t#,A,H3">
                     <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                     <field name="OID">0_userdata.0.Gefrierschrank.Temperaturen.Soll</field>
                     <field name="WITH_DELAY">FALSE</field>
                     <value name="VALUE">
                       <block type="get_attr" id="lZdy6QagoBkQkdSU^DH*">
                         <value name="PATH">
                           <shadow type="text" id="s]Jv{S,oT.WI=K_cu*sM">
                             <field name="TEXT">1.target</field>
                           </shadow>
                         </value>
                         <value name="OBJECT">
                           <shadow type="get_object" id="ClUZTfZRG25^-VA_*OqE">
                             <field name="OID">Object ID</field>
                           </shadow>
                           <block type="on_source" id="DO4`LaS)wQoguA+;,UX5">
                             <field name="ATTR">state.val</field>
                           </block>
                         </value>
                       </block>
                     </value>
                     <next>
                       <block type="controls_if" id="4q}VfNKT`-e~kuO5%,!]">
                         <mutation else="1"></mutation>
                         <value name="IF0">
                           <block type="logic_compare" id="Iu;b51.eB5,U`~_a0LYq">
                             <field name="OP">EQ</field>
                             <value name="A">
                               <block type="get_attr" id="FGjuoRUaRId0eAqkB@SX">
                                 <value name="PATH">
                                   <shadow type="text" id="inO/We_{nMEkzQme,-io">
                                     <field name="TEXT">0.value</field>
                                   </shadow>
                                 </value>
                                 <value name="OBJECT">
                                   <shadow type="get_object" id="~wYWNWIVZ(UZ$#X@E**b">
                                     <field name="OID">Object ID</field>
                                   </shadow>
                                   <block type="on_source" id="Y9+QAAVe|zdG*BArB?PY">
                                     <field name="ATTR">state.val</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <value name="B">
                               <block type="logic_boolean" id="5$.8K#9FF2.!5NJPj^!P">
                                 <field name="BOOL">TRUE</field>
                               </block>
                             </value>
                           </block>
                         </value>
                         <statement name="DO0">
                           <block type="update" id="WSt]_]@@[gn*xXw@ZBIW">
                             <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                             <field name="OID">0_userdata.0.Gefrierschrank.Temperaturen.Superfrost</field>
                             <field name="WITH_DELAY">FALSE</field>
                             <value name="VALUE">
                               <block type="text" id="oB$BOlCGAVWvV_C^[N|(">
                                 <field name="TEXT">on</field>
                               </block>
                             </value>
                           </block>
                         </statement>
                         <statement name="ELSE">
                           <block type="update" id="#6Ze6}irp/U@3OtGejte">
                             <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                             <field name="OID">0_userdata.0.Gefrierschrank.Temperaturen.Superfrost</field>
                             <field name="WITH_DELAY">FALSE</field>
                             <value name="VALUE">
                               <block type="text" id="je?/iEZINQJS+)p5uHb=">
                                 <field name="TEXT">off</field>
                               </block>
                             </value>
                           </block>
                         </statement>
                       </block>
                     </next>
                   </block>
                 </next>
               </block>
             </statement>
           </block>
         </next>
       </block>
       <block type="procedures_defcustomnoreturn" id="58E*=$3Hjml7hK,wSSKR" x="288" y="113">
         <mutation statements="false"></mutation>
         <field name="NAME">Json</field>
         <field name="SCRIPT">Y29uc3QgaHR0cCA9IHJlcXVpcmUoImh0dHBzIik7DQoNCmNvbnN0IG9wdGlvbnMgPSB7DQogICJtZXRob2QiOiAiR0VUIiwNCiAgImhvc3RuYW1lIjogImhvbWUtYXBpLnNtYXJ0ZGV2aWNlLmxpZWJoZXJyLmNvbSIsDQogICJwb3J0IjogbnVsbCwNCiAgInBhdGgiOiAiL3YxL2RldmljZXMvWFguWFhYLlhYWC5YL2NvbnRyb2xzIiwNCiAgImhlYWRlcnMiOiB7DQogICAgImFjY2VwdCI6ICIqLyoiLA0KICAgICJhcGkta2V5IjogIlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCINCiAgICAgICAgICAgICAgICANCiAgfQ0KfTsNCg0KY29uc3QgcmVxID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpIHsNCiAgY29uc3QgY2h1bmtzID0gW107DQoNCiAgcmVzLm9uKCJkYXRhIiwgZnVuY3Rpb24gKGNodW5rKSB7DQogICAgY2h1bmtzLnB1c2goY2h1bmspOw0KICB9KTsNCg0KICByZXMub24oImVuZCIsIGZ1bmN0aW9uICgpIHsNCiAgICBjb25zdCBib2R5ID0gQnVmZmVyLmNvbmNhdChjaHVua3MpOw0KICAgIHNldFN0YXRlKCcwX3VzZXJkYXRhLjAuR2VmcmllcnNjaHJhbmsuSnNvbicsIChib2R5LnRvU3RyaW5nKCkpLCB0cnVlKTsNCiAgfSk7DQp9KTsNCg0KcmVxLmVuZCgpOw==</field>
         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
       </block>
      </xml>
      

      Die Funktion muss angepasst werden

      1. Device-ID
      2. API-Key
      3. Speicherpfad für's json

      script.jpg

      const http = require("https");
      
      const options = {
       "method": "GET",
       "hostname": "home-api.smartdevice.liebherr.com",
       "port": null,
       "path": "/v1/devices/XX.XXX.XXX.X/controls",
       "headers": {
         "accept": "*/*",
         "api-key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                     
       }
      };
      
      const req = http.request(options, function (res) {
       const chunks = [];
      
       res.on("data", function (chunk) {
         chunks.push(chunk);
       });
      
       res.on("end", function () {
         const body = Buffer.concat(chunks);
         setState('0_userdata.0.Gefrierschrank.Json', (body.toString()), true);
       });
      });
      
      req.end();
      

      Die/Das Json sieht dann bei mir so aus

      json.jpg

      Das Blockly schreibt die Werte dann entsprechend

      objekte.jpg

      Mehr Optionen sind hier zu finden
      https://developer.liebherr.com/apis/smartdevice-homeapi/swagger-ui/
      Wobei Swagger bei mir nicht funktioniert hat.

      S 1 Reply Last reply Reply Quote 3
      • S
        SmartHomer 0 @stenmic last edited by SmartHomer 0

        @stenmic
        Cool, dass Du eine Möglichkeit gefunden hast, die Liebherr-API abzufragen.

        Ich wollte mir das schnell nachbauen, es kommt nun aber zu diesen Fehlermeldungen:

        68da8563-5201-4539-84ec-c1e96702cfe0-grafik.png

        Device-IP und API-Key sind gemäß Deiner guten Anleitung aus der Liebherr-App generiert und korrekt in der JSON-Funktion eingetragen.

        Ich vermute, ich habe noch einen Fehler beim Anlegen des json-Datenpunktes (?)
        Wie muss der denn richtig angelegt werden?

        0191ecd9-6a8c-4713-839f-994716efb02f-grafik.png

        Vielleicht kannst Du mir "auf die Sprünge helfen" ? - Danke.

        EDIT:
        Auszug Debug-Log:

        
        javascript.0
        2025-03-31 17:53:00.260	warn	at processTicksAndRejections (node:internal/process/task_queues:82:21)
        
        javascript.0
        2025-03-31 17:53:00.259	warn	at endReadableNT (node:internal/streams/readable:1698:12)
        
        javascript.0
        2025-03-31 17:53:00.259	warn	at IncomingMessage.emit (node:domain:489:12)
        
        javascript.0
        2025-03-31 17:53:00.259	warn	at IncomingMessage.emit (node:events:530:35)
        
        javascript.0
        2025-03-31 17:53:00.259	warn	at IncomingMessage.<anonymous> (script.js.common.Gefrierschrank.Abfrage_API:28:8)
        
        javascript.0
        2025-03-31 17:53:00.258	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2090:20)
        
        javascript.0
        2025-03-31 17:53:00.257	warn	State "0_userdata.0.Gefrierschrank.Json" not found
        
        javascript.0
        2025-03-31 17:53:00.252	warn	at processTicksAndRejections (node:internal/process/task_queues:82:21)
        
        javascript.0
        2025-03-31 17:53:00.252	warn	at endReadableNT (node:internal/streams/readable:1698:12)
        
        javascript.0
        2025-03-31 17:53:00.252	warn	at IncomingMessage.emit (node:domain:489:12)
        
        javascript.0
        2025-03-31 17:53:00.251	warn	at IncomingMessage.emit (node:events:530:35)
        
        javascript.0
        2025-03-31 17:53:00.251	warn	at IncomingMessage.<anonymous> (script.js.common.Gefrierschrank.Abfrage_API:27:9)
        
        javascript.0
        2025-03-31 17:53:00.251	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2090:20)
        
        javascript.0
        2025-03-31 17:53:00.249	warn	State "0_userdata.0.Gefrierschrank.Json" not found
        
        S 1 Reply Last reply Reply Quote 0
        • S
          stenmic @SmartHomer 0 last edited by

          @smarthomer-0
          erstmal musst du den Datenpunkt “Json“ als string unter 0_userdata.0.Gefrierschrank anlegen.

          S A 2 Replies Last reply Reply Quote 1
          • S
            SmartHomer 0 @stenmic last edited by

            @stenmic sagte in Liebherr Smart Device einbinden - so geht's:

            @smarthomer-0
            erstmal musst du den Datenpunkt “Json“ als string unter 0_userdata.0.Gefrierschrank anlegen.

            Dankeschön, das war's.
            Funktioniert prima!

            1 Reply Last reply Reply Quote 0
            • A
              ak68 @stenmic last edited by ak68

              @stenmic sagte in Liebherr Smart Device einbinden - so geht's:

              @smarthomer-0
              erstmal musst du den Datenpunkt “Json“ als string unter 0_userdata.0.Gefrierschrank anlegen.

              Auch die 3 Datenpunkte IST/ SOLL/ Superfrost unter /Temperaturen müssen auch händisch angelegt werden 🙂

              S 1 Reply Last reply Reply Quote 0
              • S
                stenmic @ak68 last edited by stenmic

                @ak68 yupp, war ja nur ein Beispiel welches zu meinem Gerät passt. Übrigens kann man das Kühlgerät auch über die API steuern. Eventuell kann ja einer nen Adapter basteln,

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                957
                Online

                31.6k
                Users

                79.5k
                Topics

                1.3m
                Posts

                3
                6
                263
                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