Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Trigger (on id...) auf ganzen Datenpunktordner

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    864

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Trigger (on id...) auf ganzen Datenpunktordner

Geplant Angeheftet Gesperrt Verschoben JavaScript
16 Beiträge 3 Kommentatoren 1.6k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B Offline
    B Offline
    BigStephan
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ist es möglich mehrere Datenpunktänderungen zu triggern?
    Ja ich habe gelesen das geht über ein Array alá

    on(["Datenpunkt1.STATE","Datenpunkt2.STATE", change: "ne"] , function (obj) {
              ....
        });
    

    ginge.

    Aber wäre es auch möglich mit einer solchen Funktion alle Datenpunkte in einem Ordner (PARENT) auf CHANGE zu überwachen?
    Das würde es leichter machen bspw. bei später hinzu kommenden Datenpunkten nicht immer wieder das Script ergänzen zu müssen.
    Vielleicht geht das ja auch, habe aber nach längerer Suche nix hierzu gefunden :-(

    Grüße

    BigStephan

    paul53P 1 Antwort Letzte Antwort
    0
    • B BigStephan

      Hallo,

      ist es möglich mehrere Datenpunktänderungen zu triggern?
      Ja ich habe gelesen das geht über ein Array alá

      on(["Datenpunkt1.STATE","Datenpunkt2.STATE", change: "ne"] , function (obj) {
                ....
          });
      

      ginge.

      Aber wäre es auch möglich mit einer solchen Funktion alle Datenpunkte in einem Ordner (PARENT) auf CHANGE zu überwachen?
      Das würde es leichter machen bspw. bei später hinzu kommenden Datenpunkten nicht immer wieder das Script ergänzen zu müssen.
      Vielleicht geht das ja auch, habe aber nach längerer Suche nix hierzu gefunden :-(

      Grüße

      BigStephan

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @BigStephan sagte:

      alle Datenpunkte in einem Ordner (PARENT) auf CHANGE zu überwachen?

      RegExp

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • B Offline
        B Offline
        BigStephan
        schrieb am zuletzt editiert von BigStephan
        #3

        Danke...
        Mit ist die Zusammensetzung des gesamten Befehls mit den ganzen / und . und ^ nicht klar.
        Kannst Du mal ein Beispiel zeigen für mehrere eigene Datenpunkte vom Typ Zahl im Ordner/Parent "Beispielordner" und der Änderung eines dieser Zahlenwerte...

        Edit:

        Zur Erläuterung,
        Ich möchte mir einen Ordner anlegen, wo alle Zeiten für Schaltuhren hinterlegt sind (und bspw. durch die VIS geändert werden).
        Mit diesen Zeiten sollen entsprechende Schedules Arbeiten. Leider muss ja aber die Änderung dieser Zeitwerte beobachtet werden um die entsprechenden Schedules aktualisieren zu können. Und da mit der Zeit sicherlich mehr dieser Zeitpunkte hinzu kommen, wäre eine pauschale Reaktion auf alle diese Datenpunkte sinnvoll.

        Grüße

        BigStephan

        paul53P 2 Antworten Letzte Antwort
        0
        • B BigStephan

          Danke...
          Mit ist die Zusammensetzung des gesamten Befehls mit den ganzen / und . und ^ nicht klar.
          Kannst Du mal ein Beispiel zeigen für mehrere eigene Datenpunkte vom Typ Zahl im Ordner/Parent "Beispielordner" und der Änderung eines dieser Zahlenwerte...

          Edit:

          Zur Erläuterung,
          Ich möchte mir einen Ordner anlegen, wo alle Zeiten für Schaltuhren hinterlegt sind (und bspw. durch die VIS geändert werden).
          Mit diesen Zeiten sollen entsprechende Schedules Arbeiten. Leider muss ja aber die Änderung dieser Zeitwerte beobachtet werden um die entsprechenden Schedules aktualisieren zu können. Und da mit der Zeit sicherlich mehr dieser Zeitpunkte hinzu kommen, wäre eine pauschale Reaktion auf alle diese Datenpunkte sinnvoll.

          Grüße

          BigStephan

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @BigStephan sagte:

          Und da mit der Zeit sicherlich mehr dieser Zeitpunkte hinzu kommen, wäre eine pauschale Reaktion auf alle diese Datenpunkte sinnvoll.

          Mehrere Schedules mit einem Trigger zu verwalten, wobei die Zahl der Schedules auch noch variabel ist, gelingt nur mit einem Array für die Schedule-Variablen.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • B BigStephan

            Danke...
            Mit ist die Zusammensetzung des gesamten Befehls mit den ganzen / und . und ^ nicht klar.
            Kannst Du mal ein Beispiel zeigen für mehrere eigene Datenpunkte vom Typ Zahl im Ordner/Parent "Beispielordner" und der Änderung eines dieser Zahlenwerte...

            Edit:

            Zur Erläuterung,
            Ich möchte mir einen Ordner anlegen, wo alle Zeiten für Schaltuhren hinterlegt sind (und bspw. durch die VIS geändert werden).
            Mit diesen Zeiten sollen entsprechende Schedules Arbeiten. Leider muss ja aber die Änderung dieser Zeitwerte beobachtet werden um die entsprechenden Schedules aktualisieren zu können. Und da mit der Zeit sicherlich mehr dieser Zeitpunkte hinzu kommen, wäre eine pauschale Reaktion auf alle diese Datenpunkte sinnvoll.

            Grüße

            BigStephan

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @BigStephan sagte:

            Kannst Du mal ein Beispiel zeigen für mehrere eigene Datenpunkte

            Hier ein Beispiel und der Test auf regex101.com.

            regex101.JPG

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • B Offline
              B Offline
              BigStephan
              schrieb am zuletzt editiert von
              #6

              Ok, ich hab das mit dem Array probiert...sollte so gehen.
              Aber jetzt hab ich ein anderes Problem. Wenn ich im Array den einzelnen Einträgen Namen gebe, bekomme ich beim ON Befehl den Fehler, dass dieser nur Strings möchte (Zeile 10). Außerdem ist mir nicht klar, wie ich in Zeile 17 richtig auf die Arrayelemente zugreife (eckige Klammern, runde Klammern?)

              var SchalterAn1 = null;
              var Zeiten = [];
                  //(opt.Sekunde,Stunde,Minute,Tag,Monat,Wochentag)
                  Zeiten.push({Stunde:"javascript.0.scriptEnabled.AnStunde1",
                              Minute:"javascript.0.scriptEnabled.Terrarium.AnMinute1"});
                  Zeiten.push({Stunde:"javascript.0.scriptEnabled.Terrarium.AusStunde1",
                              Minute:"javascript.0.scriptEnabled.Terrarium.AusMinute1"});
                  
              
              on({id:Zeiten, change:"ne"}, function (obj) {
                  
                  // alten Timer löschen
                  if (SchalterAn1) {clearSchedule(SchalterAn1);}
                  // neuen Timer anlegen
              
                  //Wie greife ich hier richtig auf die Elemente des Arrays zu??????
                  SchalterAn1 = schedule(Zeiten[1,Stunde] + ' ' + Zeiten[1,Minute]) + ' * * * *', AuszuführendeFunktion);
                  
              
                  
              
              });
              
              

              Grüße Stephan

              thewhoboxT paul53P 3 Antworten Letzte Antwort
              0
              • B BigStephan

                Ok, ich hab das mit dem Array probiert...sollte so gehen.
                Aber jetzt hab ich ein anderes Problem. Wenn ich im Array den einzelnen Einträgen Namen gebe, bekomme ich beim ON Befehl den Fehler, dass dieser nur Strings möchte (Zeile 10). Außerdem ist mir nicht klar, wie ich in Zeile 17 richtig auf die Arrayelemente zugreife (eckige Klammern, runde Klammern?)

                var SchalterAn1 = null;
                var Zeiten = [];
                    //(opt.Sekunde,Stunde,Minute,Tag,Monat,Wochentag)
                    Zeiten.push({Stunde:"javascript.0.scriptEnabled.AnStunde1",
                                Minute:"javascript.0.scriptEnabled.Terrarium.AnMinute1"});
                    Zeiten.push({Stunde:"javascript.0.scriptEnabled.Terrarium.AusStunde1",
                                Minute:"javascript.0.scriptEnabled.Terrarium.AusMinute1"});
                    
                
                on({id:Zeiten, change:"ne"}, function (obj) {
                    
                    // alten Timer löschen
                    if (SchalterAn1) {clearSchedule(SchalterAn1);}
                    // neuen Timer anlegen
                
                    //Wie greife ich hier richtig auf die Elemente des Arrays zu??????
                    SchalterAn1 = schedule(Zeiten[1,Stunde] + ' ' + Zeiten[1,Minute]) + ' * * * *', AuszuführendeFunktion);
                    
                
                    
                
                });
                
                

                Grüße Stephan

                thewhoboxT Offline
                thewhoboxT Offline
                thewhobox
                schrieb am zuletzt editiert von thewhobox
                #7

                @BigStephan Du gibst ihm zwar ein Array, das ist aber voller Objekte.

                var Zeiten = [];
                Zeiten.push("javascript.0.scriptEnabled.AnStunde1");
                Zeiten.push("javascript.0.scriptEnabled.Terrarium.AnMinute1");
                Zeiten.push("javascript.0.scriptEnabled.Terrarium.AusStunde1");
                Zeiten.push("javascript.0.scriptEnabled.Terrarium.AusMinute1");
                

                oder ganz einfach:

                var Zeiten = ["javascript.0.AnStunde1", "javascript.0.Terrarium.AnMinute1", ... etc];
                

                Auf das Array kannst du nicht zugreifen. Du bekommst den getriggerten Datenpunkt in der Variable obj.
                Mal ganz davon abgesehen, dass du niemals eigene Datenpunkte unter javscript.0.scriptEnabled anlegen solltest!

                Anhang:
                Der Weg den paul wäre:

                on({id: new RegExp("javascript\.0\.MeinOberOrdner\.[a-zA-Z0-9]+, change:"ne"}, function (obj) {
                

                Meine Adapter: emby | discovery
                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                1 Antwort Letzte Antwort
                0
                • B BigStephan

                  Ok, ich hab das mit dem Array probiert...sollte so gehen.
                  Aber jetzt hab ich ein anderes Problem. Wenn ich im Array den einzelnen Einträgen Namen gebe, bekomme ich beim ON Befehl den Fehler, dass dieser nur Strings möchte (Zeile 10). Außerdem ist mir nicht klar, wie ich in Zeile 17 richtig auf die Arrayelemente zugreife (eckige Klammern, runde Klammern?)

                  var SchalterAn1 = null;
                  var Zeiten = [];
                      //(opt.Sekunde,Stunde,Minute,Tag,Monat,Wochentag)
                      Zeiten.push({Stunde:"javascript.0.scriptEnabled.AnStunde1",
                                  Minute:"javascript.0.scriptEnabled.Terrarium.AnMinute1"});
                      Zeiten.push({Stunde:"javascript.0.scriptEnabled.Terrarium.AusStunde1",
                                  Minute:"javascript.0.scriptEnabled.Terrarium.AusMinute1"});
                      
                  
                  on({id:Zeiten, change:"ne"}, function (obj) {
                      
                      // alten Timer löschen
                      if (SchalterAn1) {clearSchedule(SchalterAn1);}
                      // neuen Timer anlegen
                  
                      //Wie greife ich hier richtig auf die Elemente des Arrays zu??????
                      SchalterAn1 = schedule(Zeiten[1,Stunde] + ' ' + Zeiten[1,Minute]) + ' * * * *', AuszuführendeFunktion);
                      
                  
                      
                  
                  });
                  
                  

                  Grüße Stephan

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #8

                  @BigStephan:

                  sollte so gehen.

                  Nein, so geht es nicht.

                  • Das Trigger-Array darf nur Datenpunkt-IDs enthalten
                  • Keine eigenen Datenpunkte unter "javascript.0.scriptEnabled" anlegen !
                  • Die Funktion enthält nur 1 Schedule (SchalterAn1)
                  • Auf Elemente eines Objektes in einem Array greift man so zu
                  Zeiten[0].Stunde
                  

                  Das sind aber keine Zeiten, sondern Datenpunkt-IDs.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • B BigStephan

                    Ok, ich hab das mit dem Array probiert...sollte so gehen.
                    Aber jetzt hab ich ein anderes Problem. Wenn ich im Array den einzelnen Einträgen Namen gebe, bekomme ich beim ON Befehl den Fehler, dass dieser nur Strings möchte (Zeile 10). Außerdem ist mir nicht klar, wie ich in Zeile 17 richtig auf die Arrayelemente zugreife (eckige Klammern, runde Klammern?)

                    var SchalterAn1 = null;
                    var Zeiten = [];
                        //(opt.Sekunde,Stunde,Minute,Tag,Monat,Wochentag)
                        Zeiten.push({Stunde:"javascript.0.scriptEnabled.AnStunde1",
                                    Minute:"javascript.0.scriptEnabled.Terrarium.AnMinute1"});
                        Zeiten.push({Stunde:"javascript.0.scriptEnabled.Terrarium.AusStunde1",
                                    Minute:"javascript.0.scriptEnabled.Terrarium.AusMinute1"});
                        
                    
                    on({id:Zeiten, change:"ne"}, function (obj) {
                        
                        // alten Timer löschen
                        if (SchalterAn1) {clearSchedule(SchalterAn1);}
                        // neuen Timer anlegen
                    
                        //Wie greife ich hier richtig auf die Elemente des Arrays zu??????
                        SchalterAn1 = schedule(Zeiten[1,Stunde] + ' ' + Zeiten[1,Minute]) + ' * * * *', AuszuführendeFunktion);
                        
                    
                        
                    
                    });
                    
                    

                    Grüße Stephan

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #9

                    @BigStephan
                    Das was Du vor hast, könnte man etwa so lösen:

                    var ids = [];
                    var scheds = [];
                    
                    // Inhalt der Trigger-Datenpunkte im Ordner "javascript.0.Schaltuhren": {Stunde: hh, Minute: mm, Funktion: n}
                    on(/^javascript\.0\.Schaltuhren\..+/, function(dp) {
                        var idx = ids.indexOf(dp.id);
                        if(idx == -1) { // Noch nicht im Array
                            idx = ids.length;
                            ids.push(dp.id);
                        } else {
                            clearSchedule(scheds[idx]);
                        }    
                        var val = dp.state.val;
                        var callback;
                        if(val.Funktion == 1) {
                            callback = function() {
                                // 1. Funktion
                            }
                        } else if(val.Funktion == 2) {
                            callback = function() {
                                // 2. Funktion
                            }
                        } // usw.
                        scheds[idx] = schedule(val.Minute + ' ' + val.Stunde + ' * * *', callback);
                    });
                    

                    Die Frage ist, wie Du die Objekte als Wert in die Datenpunkte bekommst, denn manuell eintragen dürfte schwierig werden.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      BigStephan
                      schrieb am zuletzt editiert von
                      #10

                      Danke ersteinmal.
                      Deine Funktion Paul ist ja quasi schon universell.
                      Wie lege ich im ioBroker einen Datenpunkt als "Array" bzw. Objekt an?
                      Geht das nur über script oder auch übers webinterface?

                      P.S. meine Datenpunkte habe ich nun in einem eigenen Ordner (außerhalb des Scriptadapters zwecks Backupmöglichkeit). War am Anfang nur zum probieren.

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • B BigStephan

                        Danke ersteinmal.
                        Deine Funktion Paul ist ja quasi schon universell.
                        Wie lege ich im ioBroker einen Datenpunkt als "Array" bzw. Objekt an?
                        Geht das nur über script oder auch übers webinterface?

                        P.S. meine Datenpunkte habe ich nun in einem eigenen Ordner (außerhalb des Scriptadapters zwecks Backupmöglichkeit). War am Anfang nur zum probieren.

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @BigStephan sagte:

                        Wie lege ich im ioBroker einen Datenpunkt als "Array" bzw. Objekt an?

                        Das geht im Webinterface.

                        DP_Objekt.JPG

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • B Offline
                          B Offline
                          BigStephan
                          schrieb am zuletzt editiert von BigStephan
                          #12

                          Das habe ich so gemacht, und eingetragen:

                          {"Stunde":"21","Minute":"36","Funktion":"1"}

                          gibt im script aber bei console.log(dp.state.val.Stunde) nur "undefiened" zurück

                          im val bekommt er nur den kompletten String zurück ohne Substruktur

                          EDIT: Außerdem gibts immer eine Fehlermeldung im log: schedule callback missing

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • B BigStephan

                            Das habe ich so gemacht, und eingetragen:

                            {"Stunde":"21","Minute":"36","Funktion":"1"}

                            gibt im script aber bei console.log(dp.state.val.Stunde) nur "undefiened" zurück

                            im val bekommt er nur den kompletten String zurück ohne Substruktur

                            EDIT: Außerdem gibts immer eine Fehlermeldung im log: schedule callback missing

                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von paul53
                            #13

                            @BigStephan sagte :

                            Das habe ich so gemacht, und eingetragen:

                            Das ist das Problem, das ich bereits erwähnte: Bei manuellem Eintragen erhält man einen String, kein Objekt. Übrigens müsste das Objekt so aussehen:

                            var obj = {"Stunde":21,"Minute":36,"Funktion":1};
                            

                            @BigStephan sagte in Trigger (on id...) auf ganzen Datenpunktordner:

                            EDIT: Außerdem gibts immer eine Fehlermeldung im log: schedule callback missing

                            Ja, weil callback "undefined" ist, da kein Vergleich passt, mit dem callback eine Funktion zugeordnet wird.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              BigStephan
                              schrieb am zuletzt editiert von
                              #14

                              So...hab mir jetzt insofern geholfen, als dass ich mir eine kleine Funktion zum wandeln des Strings in ein Objekt gebastelt habe:

                              function String2Matrix (Inhalt){ 
                              
                                  var Splitty1 = Inhalt.split(',');
                                  var i;
                                  var matrix = {};
                                  for (i=0; i<Splitty1.length;i++){
                                      var Splitty2 = Splitty1[i].split(':');
                                      var matrixname = Splitty2[0];
                                      console.log(matrixname);
                                      var matrixval = Splitty2[1];
                                      console.log(matrixval);
                                      matrix[matrixname] = matrixval;
                                  }
                                  return matrix;
                              }
                              

                              Diese setzt zwar eine definierte Struktur im Datenpunkt voraus (Key1:value1, Key2:value2....), aber damit kann ich leben.
                              Allerdings scheint er den Schedule nicht sauber anzulegen, denn bei erreichen des Zeitpunktes springt er nicht in die Funktion (bzw. gibt hier kein Output auf der Console):

                              on({id: new RegExp("variablen\.0\.terrarium\.[a-zA-Z0-9]+"), change:"ne"}, function (dp) {
                              
                                  var idx = ids.indexOf(dp.id);
                                  if(idx == -1) { // Noch nicht im Array
                                      idx = ids.length;
                                      ids.push(dp.id);
                                  } else {
                                      clearSchedule(scheds[idx]);
                                  } 
                              
                                  var val = String2Matrix(dp.state.val);
                              
                                  var callback = null;
                                  
                                  if(val.Funktion == 1) {
                                      callback = function() {
                                          console.log("erste Funktion")
                                      }
                                  } else if(val.Funktion == 2) {
                                      callback = function() {
                                          console.log("zweite Funktion")
                                      }
                                  } // usw.
                                  scheds[idx] = schedule(val.Minute + ' ' + val.Stunde + ' * * *', callback);
                                  
                                
                              
                              });
                              
                              

                              Der Datenpunkt ist unter dem genannten Pfad angelegt mit dem entsprechenden Inhalt wie oben beschrieben.
                              Ich vermute es hängt irgendwie mit dem Schedule-Array zusammen.

                              P.S. um die Fehlermeldung wegen missing callback auszuschalten habe ich beim definieren der callback-variable einfach ein =null angehängt....ich denke das sollte ok sein?!

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • B BigStephan

                                So...hab mir jetzt insofern geholfen, als dass ich mir eine kleine Funktion zum wandeln des Strings in ein Objekt gebastelt habe:

                                function String2Matrix (Inhalt){ 
                                
                                    var Splitty1 = Inhalt.split(',');
                                    var i;
                                    var matrix = {};
                                    for (i=0; i<Splitty1.length;i++){
                                        var Splitty2 = Splitty1[i].split(':');
                                        var matrixname = Splitty2[0];
                                        console.log(matrixname);
                                        var matrixval = Splitty2[1];
                                        console.log(matrixval);
                                        matrix[matrixname] = matrixval;
                                    }
                                    return matrix;
                                }
                                

                                Diese setzt zwar eine definierte Struktur im Datenpunkt voraus (Key1:value1, Key2:value2....), aber damit kann ich leben.
                                Allerdings scheint er den Schedule nicht sauber anzulegen, denn bei erreichen des Zeitpunktes springt er nicht in die Funktion (bzw. gibt hier kein Output auf der Console):

                                on({id: new RegExp("variablen\.0\.terrarium\.[a-zA-Z0-9]+"), change:"ne"}, function (dp) {
                                
                                    var idx = ids.indexOf(dp.id);
                                    if(idx == -1) { // Noch nicht im Array
                                        idx = ids.length;
                                        ids.push(dp.id);
                                    } else {
                                        clearSchedule(scheds[idx]);
                                    } 
                                
                                    var val = String2Matrix(dp.state.val);
                                
                                    var callback = null;
                                    
                                    if(val.Funktion == 1) {
                                        callback = function() {
                                            console.log("erste Funktion")
                                        }
                                    } else if(val.Funktion == 2) {
                                        callback = function() {
                                            console.log("zweite Funktion")
                                        }
                                    } // usw.
                                    scheds[idx] = schedule(val.Minute + ' ' + val.Stunde + ' * * *', callback);
                                    
                                  
                                
                                });
                                
                                

                                Der Datenpunkt ist unter dem genannten Pfad angelegt mit dem entsprechenden Inhalt wie oben beschrieben.
                                Ich vermute es hängt irgendwie mit dem Schedule-Array zusammen.

                                P.S. um die Fehlermeldung wegen missing callback auszuschalten habe ich beim definieren der callback-variable einfach ein =null angehängt....ich denke das sollte ok sein?!

                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von paul53
                                #15

                                @BigStephan sagte:

                                eine kleine Funktion zum wandeln des Strings in ein Objekt gebastelt habe:

                                Man kann auch JSON-Strings verwenden, denn zum Wandeln in eine Objekt gibt es bereits eine Funktion.

                                    var val = JSON.parse(dp.state.val);
                                

                                Wo sind die beiden Arrays ids, scheds deklariert ?
                                Was zeigt ein eingefügtes ?

                                    log(dp.state.val);
                                

                                @BigStephan sagte in Trigger (on id...) auf ganzen Datenpunktordner:

                                mit dem entsprechenden Inhalt wie oben beschrieben.

                                Mit welchem Inhalt ?

                                {"Stunde":"21","Minute":"36","Funktion":"1"}
                                

                                oder

                                {"Stunde":21,"Minute":36,"Funktion":1}
                                

                                ?

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Antwort Letzte Antwort
                                0
                                • B Offline
                                  B Offline
                                  BigStephan
                                  schrieb am zuletzt editiert von BigStephan
                                  #16

                                  Also die Daten liegen so vor dass sie durch die Funktion umgewandelt werden.
                                  Das Objekt was die Funktion zurückliefert enthält die Daten (val.Stunde enthält den im iobroker Objekte eingetragenen Wert, Minute und Funktion sind auch enthalten).
                                  Muster dort ist: Stunde:10,Minute:30,Funktion:1

                                  Es könnte natürlich sein dass die später nach der Wandlung enthaltenen Strings Probleme machen, aber eine Fehlermeldung gibt beim Anlegen des Schedule zumindest nicht (Int erwartet oder ähnliches).

                                  Die Arrays werden zu Anfang des Scripts genau so definiert wie Du weiter oben als Beispiel gezeigt hattest....das hier eben war nur der Auszug mit der ON Funktion.

                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  599

                                  Online

                                  32.6k

                                  Benutzer

                                  82.1k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Home
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe