Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST] Zwei Geräte in e. Raum zuordnen (Echo - Thermostat)

    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

    [GELÖST] Zwei Geräte in e. Raum zuordnen (Echo - Thermostat)

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Mitch last edited by paul53

      @mitch sagte: Ich glaube es liegt an: id.endsWith('.4')

      Ändere es in id.endsWith('.1').
      Oder sind die Räume nicht dem Kanal zugeordnet? "hm-rpc.0.000A1D89B0BFAD" ist das Gerät.
      Falls die Zuordnung zum Gerät erfolgte, ändere Zeile 7 in

          if(id.startsWith('hm-rpc.')) setState(id + '.1.BOOST_MODE', true);
      
      M 1 Reply Last reply Reply Quote 0
      • M
        Mitch @paul53 last edited by Mitch

        @paul53 PS: Das Forum sagt heute oft Forbitten...

        Ich gebe zu, das ich das mit den Kanälen nicht verstanden habe. Bisher habe ich nur mit Räumen gearbeiten:

        zzzScreenshot 2022-11-02 212717.png

        Das ist die ID des Datenpunkt:
        hm-rpc.0.000A1D89B0BFAD.1.BOOST_MODE

        Dein letzter Vorschlag klang plausibel und nachvollziehbar. Aber ich kriege folgende Fehlermeldung im Log:

        
        javascript.0
        2022-11-02 21:35:17.065	info	Stop script script.js.common.timer.Boost_Heizung_15_Minuten
        
        admin.0
        2022-11-02 21:35:11.489	info	==> Connected system.user.admin from ::ffff:192.168.15.152
        
        javascript.0
        2022-11-02 21:34:55.337	error	at processImmediate (node:internal/timers:466:21)
        
        javascript.0
        2022-11-02 21:34:55.337	error	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
        
        javascript.0
        2022-11-02 21:34:55.337	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29)
        
        javascript.0
        2022-11-02 21:34:55.336	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1214:38)
        
        javascript.0
        2022-11-02 21:34:55.336	error	at Object.<anonymous> (script.js.common.timer.Boost_Heizung_15_Minuten:5:33)
        
        javascript.0
        2022-11-02 21:34:55.335	error	Error in callback: TypeError: Cannot read properties of null (reading 'common')
        
        javascript.0
        2022-11-02 21:34:55.329	warn	script.js.common.timer.Boost_Heizung_15_Minuten: Object "sonoff.0.Sonoff-02,alexa2.0.Echo-Devices.G090U50784453GL9,hm-rpc.0.000A1D89B0BFAD" does not exist
        
        javascript.0
        2022-11-02 21:34:55.328	warn	at processImmediate (node:internal/timers:466:21)
        
        javascript.0
        2022-11-02 21:34:55.328	warn	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
        
        javascript.0
        2022-11-02 21:34:55.327	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29)
        
        javascript.0
        2022-11-02 21:34:55.327	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1214:38)
        
        javascript.0
        2022-11-02 21:34:55.327	warn	at Object.<anonymous> (script.js.common.timer.Boost_Heizung_15_Minuten:4:3)
        
        javascript.0
        2022-11-02 21:34:55.326	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1689:20)
        
        javascript.0
        2022-11-02 21:34:55.323	warn	You are assigning a array to the state "0_userdata.0.internet.teststring" which expects a string. Please fix your code to use a string or change the state type to array. This warning might become an error in future versions.
        

        So sieht das Skript jetzt aus:

        on({id: "0_userdata.0.internet.test", change: "any"}, function (obj) 
        { 
          var rooms = getObject("enum.rooms.buero").common.members;
          setState('0_userdata.0.internet.teststring', rooms);
          let members = getObject(rooms).common.members;
          for(let id of members) {
            if(id.startsWith('hm-rpc.')) setState(id + '.1.BOOST_MODE', true);
          }
        });
        
        paul53 2 Replies Last reply Reply Quote 0
        • paul53
          paul53 @Mitch last edited by paul53

          @mitch sagte: You are assigning a array to the state "0_userdata.0.internet.teststring" which expects a string. Please fix your code to use a string or change the state type to array. This warning might become an error in future versions.

          Die Warnung resultiert aus Zeile 4: rooms enthält ein Array, der Datenpunkt ist aber vom Typ "string".

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

            @mitch sagte: So sieht das Skript jetzt aus:

            Das funktioniert so nicht. Zum Test:

            on({id: "0_userdata.0.internet.test", change: "any"}, function () { 
              let members = getObject("enum.rooms.buero").common.members;
              setState('0_userdata.0.internet.teststring', JSON.stringify(members));
              for(let id of members) {
                if(id.startsWith('hm-rpc.')) setState(id + '.1.BOOST_MODE', true);
              }
            });
            
            M 1 Reply Last reply Reply Quote 0
            • M
              Mitch @paul53 last edited by

              @paul53 sagte in Zwei Geräte in Räumen zuordnen (Echo-Gerät und Thermosthat):

              on({id: "0_userdata.0.internet.test", change: "any"}, function () { let members = getObject("enum.rooms.buero").common.members; setState('0_userdata.0.internet.teststring', JSON.stringify(members)); for(let id of members) { if(id.startsWith('hm-rpc.')) setState(id + '.1.BOOST_MODE', true); } });

              Vielen Dank, es funktioniert!

              M 1 Reply Last reply Reply Quote 0
              • M
                Mitch @Mitch last edited by Mitch

                Hallo,

                anbei das Skript was ich mir letztendlich gebaut habe:

                on({id: "0_userdata.0.heating.actual_boost", val: true}, function () {
                  var getecho = getState("alexa2.0.History.serialNumber").val;
                  setState('0_userdata.0.heating.dp_echo', 'alexa2.0.Echo-Devices.' + getecho);
                  let roomid = getObject('alexa2.0.Echo-Devices.' + getecho, 'rooms').enumIds[0];  
                  setState('0_userdata.0.heating.dp_room', roomid);   
                  let members = getObject(roomid).common.members;
                  for(let id of members) {
                    if(id.startsWith('hm-rpc.')) {
                        setState('0_userdata.0.heating.dp_thermostat', id)
                        setState(id + '.1.BOOST_MODE', true);
                    }
                  setState('0_userdata.0.heating.actual_boost', false);
                  }
                });
                

                Man braucht vielleicht nicht zwingend so viele Datenpunkte. Ich finde es aber Vorteilhaft, wenn etwas quer läuft, kann ich nachträglich den letzten Boost noch analysieren.

                Was mir jetzt noch fehlt und ich noch anpassen werde:

                • Meldung per Sprache an betreffendes Echo, dass der Befehl ausgeführt wurde
                • Positivliste, welche Zimmer überhaupt Heizungsboost erhalten (z.B. Ausschluss Kinderzimmer)
                • Meldung an mich per Telegram

                Gruss und Danke nochmal!

                M 1 Reply Last reply Reply Quote 0
                • M
                  Mitch @Mitch last edited by Mitch

                  Neue Version:

                  on({id: "0_userdata.0.heating.actual_boost", val: true}, function () {
                      var getecho = getState("alexa2.0.History.serialNumber").val;
                      setState('0_userdata.0.heating.dp_echo', 'alexa2.0.Echo-Devices.' + getecho);
                      let roomid = getObject('alexa2.0.Echo-Devices.' + getecho, 'rooms').enumIds[0];
                      let roomname = getObject('alexa2.0.Echo-Devices.' + getecho, 'rooms').enumNames[0];    
                          setState('0_userdata.0.heating.dp_room', roomid);   
                      let members = getObject(roomid).common.members;
                      for(let id of members) {
                          if(id.startsWith('hm-rpc.')) {
                              setState('0_userdata.0.heating.dp_thermostat', id)
                              setState(id + '.1.BOOST_MODE', true);
                          }
                          setState('0_userdata.0.heating.actual_boost', false);
                      }
                      setState('alexa2.0.Echo-Devices.' + getecho + '.Commands.speak', 'Boost Heizung wurde im Raum ' + roomname + ' für 15 Minuten ausgelöst');
                      var today = new Date();
                      var bh_day = ("00" + today.getDate()).slice(-2);
                      var bh_mon = today.getMonth() + 1;
                      var bh_mon2 = ("00" + bh_mon).slice(-2);
                      var bh_year = ("0000" + today.getFullYear()).slice(-4);
                      var bh_hour = ("00" + today.getHours()).slice(-2);
                      var bh_min = ("00" + today.getMinutes()).slice(-2);
                      var bh_sec = ("00" + today.getSeconds()).slice(-2);
                      InfoMessage = "[" + bh_year + "/" + bh_mon2 + "/" + bh_day + "-" + bh_hour + ":" + bh_min + ":" + bh_sec + "]>" + "\n" +"Boost Heizung wurde im Raum " + roomname + " für 15 Minuten ausgelöst";
                      sendTo("telegram", "send", { text: InfoMessage });
                  });
                  

                  Jetzt enthalten:

                  • Meldung per Sprache an betreffendes Echo, dass der Befehl ausgeführt wurde
                  • Meldung an mich per Telegram
                  M 1 Reply Last reply Reply Quote 0
                  • M
                    Mitch @Mitch last edited by

                    @paul53

                    Ich bin etwas irritiert. Heute Nachmittag funktionierten die Meldung per Telegramm und Alexa noch. Jetzt meldet er:

                    [2022/11/04-18:59:42]>
                    Boost Heizung wurde im Raum [object Object] für 15 Minuten ausgelöst

                    Normalerweise sollte er lt. Skript den Namen des Raums sagen.

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

                      @mitch sagte: Boost Heizung wurde im Raum [object Object] für 15 Minuten ausgelöst

                      Hat dieser Raum vielleicht mehrsprachige Namen? Dann ergänze unter Zeile 5:

                      if(typeof roomname == 'object') roomname = roomname.de;
                      
                      M 1 Reply Last reply Reply Quote 0
                      • M
                        Mitch @paul53 last edited by

                        @paul53 sagte in [GELÖST] Zwei Geräte in e. Raum zuordnen (Echo - Thermostat):

                        if(typeof roomname == 'object') roomname = roomname.de;

                        Das wars... es ging vorher, aber ich hatte zwischenzeitlich auch den Javascript Adapter geupdated. Vielen Dank!

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        954
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        javascript
                        2
                        13
                        355
                        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