Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Seltsames Verhalten von getEnums Funktion

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Seltsames Verhalten von getEnums Funktion

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

      Ich schreibe Telegramm Bot und bekam sehr einfaches problem, ich kann keine Zimmernamen von enum bekommen (Javascript 3.6.4).

      Mein Code dafür stammt aus der Dokumentation:

      room = getEnums ("rooms");
      

      Wenn es ausgeführt wird, gibt es "Error in callback: TypeError: Cannot read property 'common' of undefined" zurück und stoppt.

      Ich habe das Forum gelesen und keine Lösung für das Problem gefunden.

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

        Wie ist die Fehlermeldung genau?

        Scheinbar ist da ein Objekt bei dir kaputt.

        1 Reply Last reply Reply Quote 0
        • G
          glaz123 last edited by

          Genaue Nachricht:"error: javascript.0 Error in callback: TypeError: Cannot read property 'common' of undefined"

          Im iobroker.javascript-Quellcode fand ich die Definition der getEnums-Funktion - es ist eine einfache Iteration über das Enums-Array und dann die Konstruktion der Struktur von Mitgliedern. Diese Funktion erwartet, dass einige Eigenschaften in Enums existieren, aber leider gibt es keine solchen Eigenschaften.

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

            Und davor und danach sind keine weiteren Fehler Details und Informationen wie Zeilennummern oder Ähnliches? Normalerweise sollte da mehr stehen.

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

              https://github.com/ioBroker/ioBroker.ja … t.js#L2202

              Anscheinend ist in objects ein Enum-Objekt nicht vorhanden, obwohl es das eigentlich sein sollte. Die Frage ist, ob da ein Objekt aus objects, aber nicht aus enums gelöscht wurde, oder ob da was ganz anderes im Argen liegt.

              1 Reply Last reply Reply Quote 0
              • G
                glaz123 last edited by

                nein

                2018-05-23 17:36:12.510 - info: javascript.0 script.js.common.TelegramMenu: [Andrey]/start
                2018-05-23 17:36:12.518 - error: javascript.0 Error in callback: TypeError: Cannot read property 'common' of undefined
                2018-05-23 17:45:40.231 - info: javascript.0 Stop script script.js.common.TelegramMenu
                2018-05-23 17:45:40.241 - info: javascript.0 Start javascript script.js.common.TelegramMenu
                2018-05-23 17:45:40.246 - info: javascript.0 script.js.common.TelegramMenu: registered 1 subscription and 0 schedules
                

                script:

                `on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) {
                        log(obj.state.val);
                        command = obj.state.val.substring(obj.state.val.indexOf(']')+1);
                        user = obj.state.val.substring(obj.state.val.indexOf('[')+1,obj.state.val.indexOf(']'));
                        prev_command = obj.oldState.val.substring(obj.oldState.val.indexOf(']')+1);
                        switch(true){
                        	case /^\/start/i.test(command):
                        	    rooms = getEnums('rooms');
                        	    roomsNum = rooms.length;
                        	    roomsStr='[[';
                        	    for(var i in rooms) {
                        	        roomsStr += "{text:"+"\'"+rooms[i].name+"\',callback_data:"+"\'"+rooms[i].id+"\'},";
                        	    }
                        	    roomsStr+=']]';
                        	    log(roomStr);
                        	    sendTo('telegram.0', {user:   user,
                        	                          text:   'Основное меню',
                        	                          reply_markup: {
                        	                          inline_keyboard: roomsStr,
                    	                                  resize_keyboard: true,
                    	                                  //one_time_keyboard: true
                	                                  }
                        	                	    });
                        	    break;
                        }
                });`[/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • G
                  glaz123 last edited by

                  Kann es eine Inkompatibilität zwischen Javascript Adapter und Datenbank sein?

                  Hier sind meine npm-Module Versionen:

                  iobroker.inst@1.1.2 /opt/iobroker
                  ├─┬ iobroker.admin@3.4.1
                  ├─┬ iobroker.discovery@1.1.0
                  ├─┬ iobroker.javascript@3.6.4
                  ├─┬ iobroker.js-controller@1.4.2
                  ├─┬ iobroker.mikrotik@1.0.0
                  ├── iobroker.mobile@0.4.11
                  ├─┬ iobroker.mqtt-client@1.1.1
                  ├─┬ iobroker.mysensors@1.2.0
                  ├─┬ iobroker.node-red@1.5.1
                  ├─┬ iobroker.scenes@1.1.0
                  ├── iobroker.simple-api@1.6.3
                  ├─┬ iobroker.socketio@2.0.1
                  ├─┬ iobroker.sonoff@2.1.2
                  ├─┬ iobroker.sql@1.8.0
                  ├─┬ iobroker.telegram@1.2.3
                  ├── iobroker.text2command@1.2.2
                  ├─┬ iobroker.vis@1.1.4
                  ├── iobroker.vis-history@0.2.7
                  ├─┬ iobroker.weatherunderground@1.1.2
                  ├─┬ iobroker.web@2.3.3
                  └─┬ sqlite3@4.0.0
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    Wie oben geschrieben vermute ich den Fehler im Skript-Adapter. Habe mal ein https://github.com/ioBroker/ioBroker.javascript/issues/123 eröffnet, damit das nicht vergessen geht.

                    AlCalzone created this issue in ioBroker/ioBroker.javascript

                    closed getEnums: object for enum ID not always defined #123

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

                      Ich bin mir nicht sicher, ob ich das gleiche Problem habe wir hier Thema ist, aber Fehlermeldung ist ähnlich:

                      javascript.0	2018-10-08 11:15:58.532	error	TypeError: Cannot read property 'common' of undefined
                      javascript.0	2018-10-08 11:15:58.532	error	^
                      javascript.0	2018-10-08 11:15:58.532	error	} else if (objects[id].common) {
                      javascript.0	2018-10-08 11:15:58.531	error	script.js.common.Licht.Lichter-check_neu: /opt/iobroker/node_modules/iobroker.javascript/javascript.js:1252
                      javascript.0	2018-10-08 11:15:58.415	info	Start javascript script.js.common.Licht.Lichter-check_neu
                      

                      Wenn ich das Licht-Zähl-Skript neustarte kommt immer der Fehler. Ich habe mal testweise javascript-Adapter von 3.6.4 auf 3.6.0 downgegraded zum Testen, aber ohne Wirkung.

                      Lichter-check_neu-Skript:

                      ! ````
                      /* Status Zahl Lichter
                      ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                      Daten kommen vom Gewerk "Licht"
                      ! erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                      23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                      Log Ausgabe auskommentiert
                      05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                      24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                      06.05.2016 Datenpunkt für Ansagen zugefügt
                      02.07.2016 abgeschaltet, da Fehler
                      03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                      search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                      27.11.2016 Verschoben in Status
                      Code optimiert
                      23.12.2016 Räume eingebaut
                      21.06.2017 HUE Lampen eingebaut
                      */
                      var logging = false;
                      ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                      idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                      idText = 'javascript.0.Status.Lichter.Text',
                      idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                      idAnsage = 'javascript.0.Status.Lichter.Ansage';
                      ! // Ab hier nix mehr ändern
                      createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                      type: 'number',
                      name: 'Anzahl aller Lichter',
                      min: 0,
                      def: 0,
                      role: 'value'
                      });
                      createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                      type: 'number',
                      name: 'Anzahl der eingeschalteten Lichter',
                      min: 0,
                      def: 0,
                      role: 'value'
                      });
                      createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                      type: 'string',
                      name: 'Eingeschaltete Lichter',
                      desc: 'Namen der eingeschalteten Lichter',
                      def: ' ',
                      role: 'value'
                      });
                      createState(idAnsage, {
                      type: 'string',
                      name: 'Eingeschaltete Lichter (Ansage)',
                      desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                      def: ' ',
                      role: 'value'
                      });
                      createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                      type: 'string',
                      name: 'Räume mit eingeschalteten Lichter',
                      desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                      def: ' ',
                      role: 'value'
                      });
                      ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
                      var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                      var cacheSelectorHue = $('stateid=*.on[role=switch]'); //var cacheSelectorHue = $('channelstate.id=*.ON'); // HUE Lampen (müssen im Gewerk Licht sein)
                      ! function checkDevices(obj) {
                      // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                      var anzahlLichterAn = 0;
                      var anzahlLichter = 0;
                      var textLichterAn = [];
                      var textRaum = [];
                      if (logging) {
                      log('++++++ Lichter Anzahl ++++ ');
                      log('#### SCHALTER ##### ');
                      }
                      cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                      var obj = getObject(id);
                      var name = getObject(id).common.name;
                      var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                      var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                      var raumname = getObject(id, "rooms"); // <---- NEU
                      ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                      // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                      if (logging) {
                      log('-------');
                      log('Kanal: ' + name);
                      log('Status: ' + status);
                      }
                      if (status) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezählt
                      ++anzahlLichterAn;
                      textLichterAn.push(devicename); // Zu Array hinzufügen
                      textRaum.push(raumname.enumNames); // <---- NEU
                      }
                      ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                      // } // ENDE VK-Abfrage
                      });

                      cacheSelectorHue.each(function(id, i) { // Schleife für jedes gefundenen Element *.ON im Gewerk Licht
                          var obj = getObject(id);
                          var name = getObject(id).common.name;
                          var status = getState(id).val; // Zustand *.ON abfragen (jedes Element)
                          var devicename = name.substring(0, name.indexOf(".on")); //.state aus Text entfernen
                          var raumname = getObject(id, "rooms"); // <---- NEU
                      

                      ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                      // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                      if (logging) {
                      log('-------');
                      log('Kanal: ' + name);
                      log('Status: ' + status);
                      }
                      if (status) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezählt
                      ++anzahlLichterAn;
                      textLichterAn.push(devicename); // Zu Array hinzufügen
                      textRaum.push(raumname.enumNames); // <---- NEU
                      }
                      ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                      // } // ENDE VK-Abfrage
                      });
                      ! if (logging) log('#### DIMMER ##### ');
                      cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                      var obj = getObject(id);
                      var name = getObject(id).common.name;
                      var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                      var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                      var raumname = getObject(id, "rooms"); // <---- NEU
                      ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                      // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                      ! if (logging) {
                      log('-------');
                      log('Kanal: ' + name);
                      log('Status: ' + status + '%');
                      }
                      if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                      ++anzahlLichterAn;
                      textLichterAn.push(devicename); // Zu Array hinzufügen
                      textRaum.push(raumname.enumNames); // <---- NEU
                      }
                      ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                      // } // Ende Abfrage VK
                      });
                      ! // Array mit Lichternamen sortieren
                      textLichterAn.sort();
                      textRaum.sort(); // <---- NEU
                      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                      if (logging) log("Text: " + textLichterAn);
                      if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                      // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                      setState(idText, textLichterAn.join(',
                      ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                      setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                      setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                      // setState(idRaum, textRaum.join(',
                      ')); // Räume, in denen Licht brennt // <---- NEU
                      setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                      }
                      ! // Trigger
                      cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
                      if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                      checkDevices();
                      });
                      cacheSelectorHue.on(function(obj) { // bei Zustandänderung *.ON von HUE Lampen im Gewerk Licht
                      if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                      checkDevices();
                      });
                      cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                      if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                      checkDevices();
                      });
                      ! function main() {
                      setTimeout(function() {
                      if (logging) log('Auslöser Skriptstart');
                      checkDevices();
                      }, 2000);
                      }
                      ! main(); // Skriptstart-Auslöser
                      ! // Aufbereitung für Ansage
                      function strip_tags(data) {
                      var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                      return (rueckgabe);
                      }
                      ! on(idText, function(obj) {
                      var text = obj.state.val;
                      text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                      setState(idAnsage, text);
                      });

                      
                      Edit: der Downgrade funktioniert irgendwie nicht. Es bleibt bei javascript Version 3.6.4.
                      
                      Edit2: ****Problem wurde wie folgt gelöst**** :-) :
                      
                      von paul53 » 09.10.2018, 22:59
                      
                      Editiere die Datei /opt/iobroker/node_modules/iobroker.javascript/javascript.js und ändere Zeile 1252 in
                      

                      } else if (objects[id] && objects[id].common) {

                      Anschließend die JS-Instanz neu starten, damit die Änderung wirksam wird.
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      919
                      Online

                      31.6k
                      Users

                      79.4k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      975
                      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