Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. On(pattern, callbackOrId, value) -> Rückgabe: obj

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    On(pattern, callbackOrId, value) -> Rückgabe: obj

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

      Hallo zusammen,

      ich habe folgendes Miniscript erstellt:

      function allLightsToggle(obj) {
          log(JSON.stringify(obj),'info');
      }
      on({id:'hm-rpc.0.BidCoS-RF.8.PRESS_SHORT',valNe:2}, function (obj) {
          allLightsToggle(obj);
      });
      

      Eigentlich wollte ich auf den channelName triggern. Das klappt aber nicht, da ich immer folgendes Objekt zurück bekomme:

      {"id":"hm-rpc.0.BidCoS-RF.8.PRESS_SHORT","common":{},"native":{},"channelId":null,"channelName":null,"deviceId":null,"deviceName":null,"enumIds":[],"enumNames":[],"newState":{"val":true,"ts":1436380502,"ack":true,"lc":1436376111,"from":"system.adapter.hm-rpc.0"},"oldState":{"val":true,"ts":1436380350,"ack":true,"lc":1436376111,"from":"system.adapter.hm-rpc.0"}}
      

      Ich dachte eigentlich, dass wie bei ccu.io unter channelName (bei ccu.io hiess es channel) der Name des Kanals zurückgegeben wird. Jemand eine Idee wo der Fehler liegen könnte?

      Beste Grüße

      Carsten

      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        Was möchtest Du denn machen?

        Hilft das eventuell:

        http://forum.iobroker.org/viewtopic.php … hlen#p5497

        Beschreibung für den Javascript-Adapter:

        https://github.com/iobroker/ioBroker.ja … --selector

        1 Reply Last reply Reply Quote 0
        • carsten04
          carsten04 Developer last edited by

          Ich hatte unter ccu.io ein Script geschrieben, dass auf folgende Events getriggert hat:

          subscribe({channel:/^Alle Lichter( | Wohnzimmer | Kueche )(aus|an):[0-9]{1,2}$/}, function (obj) {
              allLightsToggle(obj);
          });
          

          Diese Syntax wollte ich eigentlich beibehalten, da auch bei iobroker Scripten laut Doku mit Regex bei der obj-Eigenschaft channelName gearbeitet werden kann. Nur wenn dauernd null zurückgegeben wird, greift natürlich der Trigger nie. Mit dem Selektor $(…).on(function(){}); kann ich den Aufruf meiner callback-Funktion auch erreichen. Bei der Logik in meinem alten Script bin ich aber auf die Rückggabe des channelName in obj angewiesen, weil dieser in der callback-Fkt. weiter ausgewertet wird. Ich würde nur ungerne die gesamte Logik komplett neu schreiben müssen und hab daher noch die Hoffnung, dass ich nur irgend eine Kleinigkeit übersehen habe.

          Beste Grüße

          Carsten

          1 Reply Last reply Reply Quote 0
          • carsten04
            carsten04 Developer last edited by

            Hat denn niemand eine Idee?

            1 Reply Last reply Reply Quote 0
            • Bluefox
              Bluefox last edited by

              @carsten04:

              Hat denn niemand eine Idee? `
              Es gibt keinen "channel" mehr, sondern "channelName" oder "channelId".

              Heißen deine Kanäle wirklich so? "Alle Lichter Wohnzimmer aus:10"

              1 Reply Last reply Reply Quote 0
              • carsten04
                carsten04 Developer last edited by

                Hallo Bluefox,

                danke für Deine Antwort. Ja die Kanäle heissen wirklich so (HM-RCV-50). Hatte ich unter ccu.io als virtuelle Taster genutzt und hat auch super funktioniert. Ich hab schon kapiert, dass aus channel channelName geworden ist (hatte ich ja auch geschrieben). Mein Problem ist, dass das obj für die callback-Funktion bei der Eigenschaft channelName mir immer null zurückgibt und deswegen die Trigger nicht zünden. Schau mal in den obigen code-block, da ist die Ausgabe von JSON.stringify(obj) zu sehen. Ich kapier einfach nicht warum das obj.channelName = null ist, ich habe z.B. eigentlich obj.channelName = "Alle Lichter Wohnzimmer aus:10" erwartet. Ich hoffe ich habe mich einigermassen verständlich ausgedrückt.

                Beste Grüße

                Carsten

                1 Reply Last reply Reply Quote 0
                • carsten04
                  carsten04 Developer last edited by

                  Wäre mal jemand so nett und könnte das folgende Miniscript:

                  function allLightsToggle(obj) {
                      log(JSON.stringify(obj),'info');
                  }
                  on({id:'hm-rpc.0.BidCoS-RF.8.PRESS_SHORT',valNe:2}, function (obj) {
                      allLightsToggle(obj);
                  });
                  

                  mal bei sich mit einer gültigen id ausprobieren und dann hier sagen, ob er ebenfalls bei der Ausgabe immer nur channelId":null,"channelName":null,"deviceId":null,"deviceName":null zurückbekommt, anstatt der erwarteten Werte.

                  Danke

                  Carsten

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    javascript-0	2015-07-10 19:45:55	info	"newState": {
                    javascript-0	2015-07-10 19:45:55	info	"enumNames": [],
                    javascript-0	2015-07-10 19:45:55	info	"enumIds": [],
                    javascript-0	2015-07-10 19:45:55	info	"deviceName": null,
                    javascript-0	2015-07-10 19:45:55	info	"deviceId": null,
                    javascript-0	2015-07-10 19:45:55	info	"channelName": null,
                    javascript-0	2015-07-10 19:45:55	info	},
                    
                    1 Reply Last reply Reply Quote 0
                    • carsten04
                      carsten04 Developer last edited by

                      Danke für die Mühe. Ich glaube hier liegt noch ein Fehler vor. Habe gerade erst folgenden Beitrag http://forum.iobroker.org/viewtopic.php?f=22&t=854 von Headroom68 unter "ioBroker Fehler gefunden". Er hat das selbe Problem.

                      1 Reply Last reply Reply Quote 0
                      • Bluefox
                        Bluefox last edited by

                        Muss jetzt funktionieren.

                        Danke fürs Fehlermelden. 😉

                        1 Reply Last reply Reply Quote 0
                        • ruhr70
                          ruhr70 last edited by

                          javascript-0	2015-07-11 07:29:39	info	}
                          javascript-0	2015-07-11 07:29:39	info	"enumNames": []
                          javascript-0	2015-07-11 07:29:39	info	"enumIds": [],
                          javascript-0	2015-07-11 07:29:39	info	"deviceName": "Küche Taster Säule",
                          javascript-0	2015-07-11 07:29:39	info	"deviceId": "hm-rpc.0.FEQ0060867",
                          javascript-0	2015-07-11 07:29:39	info	"channelName": "Küche Wandlampe rot",
                          javascript-0	2015-07-11 07:29:39	info	"channelId": "hm-rpc.0.FEQ0060867.1",
                          javascript-0	2015-07-11 07:29:39	info	"name": "Küche Wandlampe rot Taster links.STATE",
                          javascript-0	2015-07-11 07:29:39	info	},
                          
                          1 Reply Last reply Reply Quote 0
                          • ruhr70
                            ruhr70 last edited by

                            Der Taster ist bei mir dem Raum "Küche" zugeordnet.

                            Müsste das nicht in enumNames auftauchen?

                            1 Reply Last reply Reply Quote 0
                            • carsten04
                              carsten04 Developer last edited by

                              Hallo ruhr70,

                              das müsste eigentlich auch nach meinem Verständnis so sein. Da enumNames ja ein Array ist glaube ich, dass hier nicht nur der Raum (von enum.rooms), sondern auch Favoriten (enum.favotires) und Funktionsnamen (enum.functions) in der jeweilgen JSON-Struktur erscheinen müssten, falls diese bei dem zugehörigen STATE gesetzt wurden (gleiches müsste nach meinem Verständnis auch für die enumIds gelten).

                              @Bluefox: danke für die superschnelle Reaktion. Jetzt kann ich schon mal weiter scripten und meine ccu.io Portierung zu Ende bringen.

                              Beste Grüße

                              Carsten

                              1 Reply Last reply Reply Quote 0
                              • Bluefox
                                Bluefox last edited by

                                @ruhr70:

                                Der Taster ist bei mir dem Raum "Küche" zugeordnet.

                                Müsste das nicht in enumNames auftauchen? `
                                Wenn du folgendes eingibst:

                                iobroker l e | grep FEQ0060867
                                

                                Sieht du was?

                                P.S. l - list, e - enum. Es geht auch "iobroker list enum"

                                1 Reply Last reply Reply Quote 0
                                • Bluefox
                                  Bluefox last edited by

                                  @carsten04:

                                  Hallo ruhr70,

                                  das müsste eigentlich auch nach meinem Verständnis so sein. Da enumNames ja ein Array ist glaube ich, dass hier nicht nur der Raum (von enum.rooms), sondern auch Favoriten (enum.favotires) und Funktionsnamen (enum.functions) in der jeweilgen JSON-Struktur erscheinen müssten, falls diese bei dem zugehörigen STATE gesetzt wurden (gleiches müsste nach meinem Verständnis auch für die enumIds gelten).

                                  @Bluefox: danke für die superschnelle Reaktion. Jetzt kann ich schon mal weiter scripten und meine ccu.io Portierung zu Ende bringen.

                                  Beste Grüße

                                  Carsten `
                                  Bei mir ist z.B. enumIds = ["enum.favorites.Admin.Heizung","enum.functions.Heizung","enum.rooms.Kinderzimmer"]

                                  1 Reply Last reply Reply Quote 0
                                  • ruhr70
                                    ruhr70 last edited by

                                    ich probier das nachher.

                                    d.h. was Du davor angegeben hattest b

                                    bin gerade auf einen "russischen" Geburtstag;-)

                                    Gesendet von iPhone mit Tapatalk

                                    1 Reply Last reply Reply Quote 0
                                    • carsten04
                                      carsten04 Developer last edited by

                                      @Bluefox:

                                      @carsten04:

                                      Hallo ruhr70,

                                      das müsste eigentlich auch nach meinem Verständnis so sein. Da enumNames ja ein Array ist glaube ich, dass hier nicht nur der Raum (von enum.rooms), sondern auch Favoriten (enum.favotires) und Funktionsnamen (enum.functions) in der jeweilgen JSON-Struktur erscheinen müssten, falls diese bei dem zugehörigen STATE gesetzt wurden (gleiches müsste nach meinem Verständnis auch für die enumIds gelten).

                                      @Bluefox: danke für die superschnelle Reaktion. Jetzt kann ich schon mal weiter scripten und meine ccu.io Portierung zu Ende bringen.

                                      Beste Grüße

                                      Carsten Bei mir ist z.B. enumIds = ["enum.favorites.Admin.Heizung","enum.functions.Heizung","enum.rooms.Kinderzimmer"]

                                      Hallo Bluefox,

                                      bei mir bleiben enumNames und enumIds weiterhin leer. Ich habe folgendes einfache Szenario getestet:

                                      function allLightsToggle(obj) {
                                          log(JSON.stringify(obj),'info');
                                      }
                                      
                                      on('hm-rpc.0.LEQ1226350.1.STATE',function(obj){
                                          allLightsToggle(obj);
                                          });
                                      

                                      Dabei ist LEQ1226350 ein 1fach Schaltaktor (HM-LC-Sw1-FM) der das Terrassenlicht schaltet und dem Raum Garten (enum.rooms) und dem Gewerk Licht (enum.functions) zugeordnet wurde.

                                      JSON.stringify(obj) liefert:

                                      2015-07-12 08:55:37.651  - info: javascript.0 script.js.Test: {"id":"hm-rpc.0.LEQ1226350.1.STATE","newState":{"val":true,"ts":1436684138,"ack":true,"lc":1436684138,"from":"system.adapter.hm-rpc.0"},"oldState":{"val":false,"ts":1436683871,"ack":true,"lc":1436683158,"from":"system.adapter.hm-rpc.0"},"common":{},"native":{},"channelId":"hm-rpc.0.LEQ1226350.1","channelName":"Schalter Terrassenlicht:1","deviceId":"hm-rpc.0.LEQ1226350","deviceName":"Schalter Terrassenlicht","enumIds":[],"enumNames":[]}
                                      

                                      und die Ausgabe von iobroker l e liefert an den relevanten Stellen:

                                      =====================================================================================
                                      rooms.Garten       (Garten)
                                      -------------------------------------------------------------------------------------
                                      hm-rpc.0.LEQ1226350.1
                                      
                                      =====================================================================================
                                      functions.Licht    (Licht)
                                      -------------------------------------------------------------------------------------
                                      hm-rpc.0.LEQ1226350.1
                                      
                                      

                                      Das sieht also alles soweit ganz gut aus, ausser das eben enumNames und enumIds leer bleiben.

                                      Beste Grüße

                                      Carsten
                                      721_sma-em.jpg

                                      1 Reply Last reply Reply Quote 0
                                      • carsten04
                                        carsten04 Developer last edited by

                                        Hallo,

                                        ich wollte das Thema noch einmal nach oben holen, da bei mir immer noch enumIds und enumNames leer bleiben, ich die Informationen in meinem Skript aber gut gebrauchen könnte. Ist das jetzt noch ein bekannter Fehler, oder mache ich noch irgendetwas falsch. Für Hinweise jedweder Art wäre ich very happy.

                                        Beste Grüße

                                        Carsten

                                        1 Reply Last reply Reply Quote 0
                                        • Bluefox
                                          Bluefox last edited by

                                          Was passiert wenn du folgendes machst?

                                          var obj1 = getObject('hm-rpc.0.LEQ1226350.1.STATE', true);
                                          var obj2 = getObject('hm-rpc.0.LEQ1226350.1', true);
                                          
                                          log(JSON.stringify(obj1.enumIds));
                                          log(JSON.stringify(obj2.enumIds));
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • carsten04
                                            carsten04 Developer last edited by

                                            Dann wird folgendes geloggt:

                                            javascript-0	2015-07-30 14:56:02	info	script.js.test1: ["enum.functions.Licht","enum.rooms.Garten"]
                                            javascript-0	2015-07-30 14:56:02	info	script.js.test1: ["enum.functions.Licht","enum.rooms.Garten"]
                                            

                                            Sieht also eigentlich ganz gut aus.

                                            und jetzt kommts: nachdem ich Dein Skript habe laufen lassen, habe ich noch einmal folgendes probiert:

                                            function allLightsToggle(obj) {
                                                log(JSON.stringify(obj),'info');
                                            }
                                            on({id:'hm-rpc.0.LEQ1226350.1.STATE',valNe:2}, function (obj) {
                                                allLightsToggle(obj);
                                            });
                                            

                                            mit folgender Ausgabe:

                                            {"id":"hm-rpc.0.LEQ1226350.1.STATE","newState":{"val":true,"ts":1438261226,"ack":true,"lc":1438261226,"from":"system.adapter.hm-rpc.0"},"oldState":{"val":false,"ts":1438259876,"ack":true,"lc":1438257205,"from":"system.adapter.hm-rega.0"},"common":{"def":false,"type":"boolean","read":true,"write":true,"role":"state","name":"Schalter Terrassenlicht:1.STATE"},"native":{"CONTROL":"SWITCH.STATE","DEFAULT":false,"FLAGS":1,"ID":"STATE","MAX":true,"MIN":false,"OPERATIONS":7,"TAB_ORDER":0,"TYPE":"BOOL","UNIT":""},"name":"Schalter Terrassenlicht:1.STATE","channelId":"hm-rpc.0.LEQ1226350.1","channelName":"Schalter Terrassenlicht:1","deviceId":"hm-rpc.0.LEQ1226350","deviceName":"Schalter Terrassenlicht","enumIds":["enum.functions.Licht","enum.rooms.Garten"],"enumNames":["Licht","Garten"]}
                                            

                                            Jetzt klappt es also, warum auch immer 😛 Falls Du eine Idee hast warum, würde mich das sehr interessieren. Ansonsten noch einmal Danke für dieses geniale System.

                                            Beste Grüße

                                            Carsten

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            690
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            22
                                            3940
                                            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