Shelly Plus 2 PM - im Skript Werte von Shelly H&T aus der Cloud auslesen

  • Hallo 🙂 Leider bin ich noch Neuling und habe mit dem Thema schon länger zu kämpfen:

    Ich habe ein Shelly Plus 2 PM und einen Shelly H&T.

    Nun möchte ich im Shelly Script die aktuellen Daten von der Shelly H&T auslesen, da ich in Abhängigkeit von Temp. und Luftfeuchte die Ausgänge schalten will.

    Ich habe gefühlt schon alles möglichen Programmvarianten probiert, aber es hat nichts geklappt.
    Hätte jemand einen Code für mich bzw. kann mir helfen?

    Vielen Dank!!! 🙂

    If english is needed:

    Hi 🙂 Unfortunately I'm still a newbie and have been struggling with this issue for a while:

    I have a Shelly Plus 2 PM and a Shelly H&T.

    Now I want to read out the current data from the Shelly H&T in the Shelly script, as I want to switch the outputs depending on the temperature and humidity.

    I have tried every possible program variant, but nothing has worked.
    Does anyone have a code for me or can help me?

    Thank you very much!!! 🙂

  • Hallo, ich stand vor der gleichen Herausvorderung!

    Direkt aus dem H&T auslesen geht schon mal nicht, weil der nämlich meistens pennt.

    Wenn er nicht pennt, dann kann er allerdings Webhooks / Actions auslösen.

    Allerdings sind diese offensichtlich eingeschränkt, denn der Versuch Werte direkt an anderes shellies zu übergeben, scheitert an "Ungültige Aktion".

    http://[shellyIP]/rpc/Script.Eval?id=1&code='setTemperature(${ev.tC})'
    http://[shellyIP]/rpc/KVS.Set?key="eventTemperatureSalon"&value=${ev.tC}'

    werden also gnadenlos abgelehnt. WARUM EIGENTLICH? :cursing:

    Next Stop: Cloud!

    Also gut, dann also den Wert aus der Cloud auslesen. Grundsätzlich ist das hier dokumentiert:

    https://shelly-api-docs.shelly.cloud/cloud-control-api/communication

    Nur dummerweise falsch! :cursing:

    Denn anders als in der Seite beschrieben (Object temperature / humidity) funktioniert nur

     let url = 'https://[myServer]/device/status?&id=[myDeviceID]&auth_key=[myAuthKey]';
     Shelly.call('HTTP.GET', 
       {url: url},
       function (result, error_code, error_msg, userdata) {
         if (error_code != 0) {
           log('Error while getting value from the cloud: ' + error_msg); 
         } else {
           log(result.code);
           let oResponseBody = JSON.parse(result.body);
           log(oResponseBody.isok);
                  let oTemperature = oResponseBody.data.device_status['temperature:0'],
           let oHumidity = oResponseBody.data.device_status['humidity:0'];
           log('Temperature: ' + oTemperature.tC + ' Humidity: ' + oHumidity.rh);
         };      
       }
     );

    Ist übrigens auch mit POST möglich.

     let url = 'https://[myServer]/device/status';
     let body = JSON.stringify({id: [myDeviceID], auth_key: [myAuthKey]});
     Shelly.call('HTTP.POST', 
       {url: url, body: body},
       function (response) {
         let oResponseBody = JSON.parse(response.body);
         log(oResponseBody.isok);
              let oTemperature = oResponseBody.data.device_status['temperature:0'];
         let oHumidity = oResponseBody.data.device_status['humidity:0'];
         log('Temperature: ' + oTemperature.tC + ' Humidity: ' + oHumidity.rh);
        }
     );


    Vielleicht hilfts ja! Auf das euer Smarthome allzeit gut temperiert ist!

    3 Mal editiert, zuletzt von akreienbring (17. Juli 2024 um 10:49)