Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] - Kann man eine On-Abfrage in einer Schleife generieren?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] - Kann man eine On-Abfrage in einer Schleife generieren?

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

      Hi Leute,

      ich bastel mir gerade einen Wecker dessen Weckzeiten in Datenpunkten hinterlegt sind, was auch eigentlich alles klappt nur muss ich ja meinen Schedule Befehl jedesmal neu "einlesen" wenn sich die Weckzeit oder eben der Wecktag ändert. Nun meine Frage, ist es möglich die "on"Abfrage auch in einer Schleife zu generieren, dass praktisch alle generierten Datenpunkte "beobachtet" werden? Oder muss ich wirklich jeden einzelnen auflisten?

      ! Hier das Script:````
      // *****************************************************************************
      //
      // Wecker
      //
      //
      // V 1.0 -
      // *****************************************************************************
      ! // -----------------------------------------------------------------------------
      // allgemeine Variablen
      // -----------------------------------------------------------------------------
      var logging = true; // Logging on/off
      var instanz = 'javascript.0.'; // Javascript Instanz

      var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
      //var datum_morgen = formatDate(new Date().setDate(new Date().getDate()+1), 'DD.MM.YYYY');

      !
      var RaumListe = []; // Zimmmer für die ein Wecker vorhanden ist
      RaumListe[0] = 'Kinderzimmer1';
      RaumListe[1] = 'Kinderzimmer2';
      ! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; //Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
      var WKZeit_Schedule = [];
      ! function WeckerStellen() {
      RaumListe.forEach(function(Raum) {

          Wochentage.forEach(function(Wochentag){
              // -----------------------------------------------------------------------------
              // Objekte
              // -----------------------------------------------------------------------------
              // Objekte für Wecker Ein/Aus
              createState(instanz + pfad0 + Raum +'.WeckerAktiv_'+Wochentag,  {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag});
      
              // Objekte für WeckZeiten
              createState(instanz + pfad0 + Raum +'.WeckZeit_'+Wochentag,  {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag});
              if(getState(instanz + pfad0 + Raum + '.WeckZeit_'+Wochentag).val){
                  var WKZeit = getState(instanz + pfad0 + Raum + '.WeckZeit_'+Wochentag).val.split(':');
                  //log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1');
                  log(getState(instanz + pfad0 + Raum+ '.WeckerAktiv_'+Wochentag).val);
      
                  if(getState(instanz + pfad0 + Raum+ '.WeckerAktiv_'+Wochentag).val === true){
                      clearSchedule(WKZeit_Schedule[Raum+'.'+Wochentag]);
                      WKZeit_Schedule[Raum+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Raum);});
                      if(logging) log('Wecker für '+Raum+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt');
                  }
                  else{                                                               
                       clearSchedule(WKZeit_Schedule[Raum+'.'+Wochentag]);
                      if(logging) log('Wecker für'+Raum+' am '+Wochentag+' wurde gelöscht');
                  }
      
                  //log(Raum+':'+WKZeit[1] + ' ' + WKZeit[0] + ' * * '+Wochentage.indexOf(Wochentag));
      
              }
      
          });
      });
      

      }//Wecker stellen Ende

      ! function WeckerEin(Raum) {
      log('Wecker im Zimmer:'+Raum+' hat ausgelößt');
      }
      ! ````
      und hier mal zwei Beispieldatenpunkte:

      on({id: instanz + pfad0 + "Kinderzimmer1.WeckerAktiv_Montag", change: 'any'}, function (dp) {
          WeckerStellen();
      });
      on({id: instanz + pfad0 + "Kinderzimmer2.WeckerAktiv_Dienstag", change: 'any'}, function (dp) {
          WeckerStellen();
      });
      ````Welche ich eben gerne nicht jedesmal einzeln auflisten würde.
      
      Vielleicht hat ja jemand eine Idee wie ich "Gruppen" beobachten kann oder so.
      
      Gruß
      
      Steffen
      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        @peoples:

        Vielleicht hat ja jemand eine Idee wie ich "Gruppen" beobachten kann oder so. `

        das geht sogar sehr einfach indem man trigger auf "enum" macht, hier mal ein beispiel was ich fuer die enum "rolladen" gemacht hatte.

        Aendert sich ein wert in dieser gruppe wird das script aufgerufen:

        on({enumName: 'rolladen', change: "ne"}, function (obj) {
        
        });
        
        

        due musst rolladen halt nur ergaenzen mit deiner eigenen gruppe

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

          Hi,

          die Gruppen definiere ich dann in Homematic oder in Iobroker?

          Gruß

          Steffen

          1 Reply Last reply Reply Quote 0
          • Dutchman
            Dutchman Developer Most Active Administrators last edited by

            @peoples:

            Hi,

            die Gruppen definiere ich dann in Homematic oder in Iobroker?

            Gruß

            Steffen `

            Egal, du kannst sie in homematic erstellen und dann mit ioBroker mittels des hm-rega synchronisieren oder Manuel in ioBroker erstellen

            –-----------------------

            Send from mobile device

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

              @Dutchman:

              … oder Manuel in ioBroker erstellen `

              Also entweder ich bin zu doof oder ich verstehe da was falsch. Ich bin in die Aufzählungen und dort kann ich auch eine neue erstellen. Aber wie weise ich dann einen Javascript Datenpunkt dieser Aufzählung zu?

              1 Reply Last reply Reply Quote 0
              • Dutchman
                Dutchman Developer Most Active Administrators last edited by

                @peoples:

                Aber wie weise ich dann einen Javascript Datenpunkt dieser Aufzählung zu? `

                Diese Datenpunkte sind doch einfach als objecte im JavaScript Baum hinterlegt?

                Mach Mal bitte eine Screenshot wo du genau bist und was du versucht das macht es leichter [emoji6]

                Hier Mal einen Post von mir in den knx thread : http://forum.iobroker.net/viewtopic.php … =20#p94365


                Send from mobile device

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

                  Ok dann bin ich definiv falsch.

                  Hier der Screenshot des Javascript Datenpunktes:

                  2417_wecker.jpg

                  1 Reply Last reply Reply Quote 0
                  • Dutchman
                    Dutchman Developer Most Active Administrators last edited by

                    @peoples:

                    Ok dann bin ich definiv falsch.

                    Hier der Screenshot des Javascript Datenpunktes:

                    filename="wecker.JPG" index="0">~~ `

                    Und diese Datenpunkte möchtest du gruppieren?

                    Das geht doch wie hier beschrieben ?

                    http://forum.iobroker.net/viewtopic.php … =20#p94365


                    Send from mobile device

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

                      Hatte den Link nicht gesehen nur dass ich einen Screenshot machen soll :oops:

                      Hat geklappt! Was mich gleich zur nächsten Frage bringt, kann ich die via Script erstellten Datenpunkte auch via script der Gruppe zuweisen? Oder noch schöner eine Gruppe via script erstellen.

                      So könnte man einfach im Script einen neuen "Raum" anlegen und der Rest ginge automatisch.

                      Tausend Dank schonmal

                      1 Reply Last reply Reply Quote 0
                      • Dutchman
                        Dutchman Developer Most Active Administrators last edited by

                        @peoples:

                        Hatte den Link nicht gesehen nur dass ich einen Screenshot machen soll [emoji15] `

                        Das ist meine schuld ich hatte meinen älteren Post erst später gefunden und nachträglich rein editiert [emoji6]

                        @peoples:

                        Hat geklappt! Was mich gleich zur nächsten Frage bringt, kann ich die via Script erstellten Datenpunkte auch via script der Gruppe zuweisen? Oder noch schöner eine Gruppe via script erstellen.

                        So könnte man einfach im Script einen neuen "Raum" anlegen und der Rest ginge automatisch. `

                        Super freut mich!

                        Enum zuweisen ja, dazu könnte man den Wert "enumNames" beim erstellen mitgeben z.b. mit setObject (siehe JavaScript docu)

                        Ob das erstellen einer enum auch geht bin ich über fragt.

                        Finde dazu nichts in der docu

                        –-----------------------

                        Send from mobile device

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

                          So,

                          nun habe ich alles so angelegt und auch zugewiesen. Den JavascriptAdapter neu gestartet wie beschrieben, wenn ich jedoch jetzt:

                          on({enumName:'weckerdatenpunkte', change: "ne"}, function (obj) {
                              log('Änderung festgestellt');
                          });
                          

                          mache und dann einen Datenpunkt ändere kommt im log folgendes:````
                          javascript.0 2017-12-09 22:53:48.911 warn unsubscribe: empty name

                          
                          der Name stimmt aber
                          1 Reply Last reply Reply Quote 0
                          • Dutchman
                            Dutchman Developer Most Active Administrators last edited by

                            Mach Mal bitte eine Screenshot deiner enum mit den Datenpunkten drinne.

                            Nur zur Sicherheit, Adapter hast du neu gestartet nachdem du die enum erstellt und gefüllt hast?

                            –-----------------------

                            Send from mobile device

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

                              Hab den Fehler gefunden!

                              Rechts unter den functions stehen die "Namen" in "kleinschrift" wenn man jedoch richtig schaut, sieht man dass unter "NAME" der Anfangsbuchstabe groß geschrieben war und schon gehts.

                              Tausend Dank!

                              Gruß

                              Steffen

                              1 Reply Last reply Reply Quote 0
                              • Dutchman
                                Dutchman Developer Most Active Administrators last edited by

                                Super! Have Fun damit

                                –-----------------------

                                Send from mobile device

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                638
                                Online

                                31.7k
                                Users

                                79.8k
                                Topics

                                1.3m
                                Posts

                                2
                                14
                                754
                                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