Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Shelly 1 via JavaScript Ansteuern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Shelly 1 via JavaScript Ansteuern

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

      Hallo Zusammen, ich möchte gerne meinen Shelly 1 (der als Fussbodenheizungsregler dient) per ioBroker ansteuern, leider sind die benoetigten Variablen nicht einfach im Shelly CoAP erreichbar..

      habe nun ueber den Shelly Technical Support herausbekommen das man dies ueber einen HTTP Post machen soll:

      Email vom Technical Service:

      Temperature automation values can be set only via POST requests.
      They don't support GET requests.

      You have to send a POST request to http://DEVICEIP/settings/ext_temperature/0 with FormData as a payload that contained the following values:

      • relay0_overtemp_threshold_tC: OVERTEMP_VALUE
      • relay0_undertemp_threshold_tC: UNDERTEMP_VALUE
      • relay0_overtemp_act: relay_on
      • relay0_undertemp_act: disabled

      Nun habe ich vor das ueber dieses Skript laufen zu lassen, leider Klappt das mit dem POST Request
      noch nicht so wie ich gerne moechte...

      Welchen Fehler habe ich hier noch drin?

      var idOvertemp = '0_userdata.0.ShellyFBH.RelayOvertemp';
      var idUndertemp = '0_userdata.0.ShellyFBH.RelayUndertemp';
      var idActOvertemp = '0_userdata.0.ShellyFBH.RelaySettedOvertemp';
      var idActUndertemp = '0_userdata.0.ShellyFBH.RelaySettedUndertemp';
      
      on({id: idOvertemp, change: "ne"}, async function (obj) {
      
      var nOvertemp = parseFloat(idOvertemp);
      var nUndertemp = parseFloat(idUndertemp);
      
      var request = require('request');
      request.post({
          url:     'http://192.168.178.29/settings/ext_temperature/0',
          form:    { relay0_overtemp_threshold_tC: nOvertemp }
      }, function(error, response, body) {
          if (error) log(error, 'error');
      });
      
      });
      

      Danke und Gruss

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @NeueKlasse last edited by

        @neueklasse
        Zeilen 8,9:

           var nOvertemp = parseFloat(obj.state.val);
           var nUndertemp = parseFloat(getState(idUndertemp).val);
        

        Zeile 11 kann entfallen.

        N 1 Reply Last reply Reply Quote 0
        • N
          NeueKlasse @paul53 last edited by

          @paul53
          Danke fuer die Optimierung,

          im Protokoll:

          18:02:24.129	info	javascript.0 (235) script.js.User_Scripts.ShellyFBHControl: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
          18:02:29.405	info	javascript.0 (235) script.js.User_Scripts.ShellyFBHControl: getState(id=0_userdata.0.ShellyFBH.RelayUndertemp, timerId=undefined) => {"val":0,"ack":true,"ts":1680101118307,"q":32,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1680101118307}
          

          an den Werten der Shelly Page ändert sich leider noch nichts...
          Over Under Temp Relay ON OFF.jpg

          N 1 Reply Last reply Reply Quote 0
          • N
            NeueKlasse @NeueKlasse last edited by NeueKlasse

            @neueklasse

            anbei sieht man die Ausgabe des Shellys wenn ich auf SAVE gehe, Addresse, Payload Daten...
            bisher hatte ich noch keinen erfolg..

            Address.jpg Payload.jpg

            auch nicht wenn beim Payload das vom Shelly Support geschriebene 'relay0' wegfaellt...

            N 1 Reply Last reply Reply Quote 0
            • N
              NeueKlasse @NeueKlasse last edited by NeueKlasse

              @neueklasse habe jetzt herausgefunden das das Skript soweit funktioniert! (via Insomnia funktioniert der Post request und die Temperaturen aendern sich..)

              Nun zum eigentlichen Problem:
              ich konnte noch nicht herausfinden wie ich die authentifizierung im Javascript durchfuehre, mir fehlt schlichtweg die Zeile in der ich passwort und username eintragen kann, wie hat das auszusehen?

              erledigt, Loesung: http://user:pw@LINK......

              N 1 Reply Last reply Reply Quote 0
              • N
                NeueKlasse @NeueKlasse last edited by NeueKlasse

                @neueklasse

                zu diesem Post, nun ist request.post veraltet und wurde durch httpPost ersetzt...

                das sieht dann im Script so aus:

                httpPost('http://admin:passwort@ip/settings/ext_temperature/0', 
                { 
                    "overtemp_threshold_tC": nOvertemp , 
                    "undertemp_threshold_tC": nUndertemp 
                }, 
                (error, response) => {
                    if (!error) {
                        console.log(response.statusCode);
                        console.log(response.data);
                        console.log(response.headers);
                    } else {
                        console.error(error);
                    }
                });
                

                leider klappt es mit der Übertragung nicht mehr, ich habe ein paar verschiedene Varianten getestet, ohne Erfolg..

                folgendes zeigt die Konsole:

                script.js.User_Scripts.ShellyFBHControl: httpPost(config={"method":"post","url":"http://ip/settings/ext_temperature/0","responseType":"text","responseEncoding":"utf8","timeout":2000,"auth":{"username":"admin","password":"passwort"},"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"},"data":{"overtemp_threshold_tC":22,"undertemp_threshold_tC":21}}, data=[object Object])
                

                vorher waren die Variablen unter form: , laut der Konsole ist es nun unter data:

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

                Support us

                ioBroker
                Community Adapters
                Donate

                701
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                2
                6
                457
                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