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. [gelöst] Mehrere Daten an "eine" Funktion übergeben

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.7k

[gelöst] Mehrere Daten an "eine" Funktion übergeben

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
28 Beiträge 5 Kommentatoren 3.1k Aufrufe
  • Ä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.
  • ldittmarL Offline
    ldittmarL Offline
    ldittmar
    Developer
    schrieb am zuletzt editiert von
    #8

    @PrinzEisenherz1:

    Problem ist nur das Aufheben von Wetterwarnungen.

    Mir ist aufgefallen das wenn z.B. bei idDescription2 die Wetterwarnung aufgehoben worden ist. Also der Inhalt leer ist dann heißt es aber nicht das die Warnung nicht mehr besteht sondern dann von idDescription2 nach idDescription1 gerückt ist. Ich hoffe Ihr vertseht was ich meine.

    Beispiel:

    warnung.description -> Warnung Schnee

    warnung1.description -> Warnung Regen

    warnung2.description -> Warnung Frost

    Warnung Regen ist aufgehoben

    warnung.description -> Warnung Schnee

    warnung1.description -> Warnung Frost

    warnung2.description -> leer `
    Soo… Du willst also erst schauen ob die Meldung "Regen" irgendwo noch drin ist und wenn nicht dann eine Meldung senden, dass die Warnung vorbei ist. Dabei ist es egal, ob die Meldung unter 0, 1 oder 2 ist... Richtig?

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      PrinzEisenherz1
      schrieb am zuletzt editiert von
      #9

      Genau…ich will erstmal schauen ob der Beschreibungsinhalt "warnung[nummer].description" der Warnmeldung und das enddatum/uhrzeit noch irgendwo drin steht (also sie darf in keiner der 3en mehr vorkommen) und dann erst ne Meldung absetzen das die Wetterwarnung aufgehoben ist.

      Daran scheitere ich irgendwie

      Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

      1 Antwort Letzte Antwort
      0
      • ldittmarL Offline
        ldittmarL Offline
        ldittmar
        Developer
        schrieb am zuletzt editiert von
        #10

        Warum nicht gleich? :P Ist prinzipiell ganz einfach:

        Ich gehe mal davon aus, dass alle 3 Warnungen sich immer gleichzeitig aktualisieren, also musst du nur auf on(idDescription0, … prüfen. Der Rest ist nur Logik:

        Behandlung: Description0

        • Wenn oldValue von description0 leer ist und das neue auch, dann nichts mehr machen - FERTIG

        • Wenn im oldValue von description0 leer ist und jetzt was drin ist, dann ist die Meldung neu und muss was gesendet werden - weiter mit description1

        • Wenn in oldValue was drin ist und im neuen nicht mehr, dann ist es aufgehoben und eine Meldung muss gesendet werden - FERTIG

        • Wenn in oldValue was drin ist, im neuen auch und beide gleich sind, dann weiter mit description1

        • Wenn in oldValue was drin ist, im neuen auch aber beide nicht gleich sind, dann ist das was im oldValue drin war aufgehoben und eine Meldung muss gesendet werden - man muss sich jetzt werden, dass die Werte 1 Schritt weiter gewandert sind (Schritt = 1) - weiter mit description1

        Bis hierhin alles ok?

        EDIT: Der Trick bei dem ganzen ist sich zu merken, ob es eine Änderung gab und wie oft dies passiert. Beil letzten Punkt hast du dir schritt = 1 gemerkt, Also musst du jetzt den alten Wert der desciption1 mit dem neuen Wert von description[1 - schritt] vergleichen…

        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          PrinzEisenherz1
          schrieb am zuletzt editiert von
          #11

          Hmmm….es muss aber auch geprüft werden wenn in description2 newValue nichts mehr drin ist aber oldValue jetzt als newValue in description1 steht dann ist die Warnung nicht aufgehoben und es ist auch keine neue Wetterwarnung.

          Bloß wie setzte ich das ganze um? muss ich das auslagern in eine function? wie übertrage ich da am einfachsten old und newValue.

          Ich bin leider nicht ganz so fit in Java

          function auswerten(test1, test2, test3) {
             var Beispiel1, Beispiel2, Beispiel3;
             if(test1) Beispiel1 = test1;
             if(test2) Beispiel2 = test2;
             if(test3) Beispiel3 = test3;
          }
          on('TestA', function (obj) {
             auswerten(obj.newState.val, null, null);
          });
          on('TestB', function (obj) {
             auswerten(null, obj.newState.val, null);
          });
          on('TestC', function (obj) {
             auswerten(null, null, obj.newState.val);
          }); 
          
          

          in dem Beispiel übertrage ich ja nur den neuen Zustand. Kann ich da in der function auch auf alten Zustand prüfen?

          Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

          1 Antwort Letzte Antwort
          0
          • ldittmarL Offline
            ldittmarL Offline
            ldittmar
            Developer
            schrieb am zuletzt editiert von
            #12

            So… ich kann leider z.Z. nicht direkt testen, aber es sollte ungefähr so gehen:

            var schritte;
            on(idDescription0, function (obj){
            	schritte = false;
            	if(obj.oldState.val == '' && obj.newState.val == ''){
            		//ist nichts passiert
            	}else if(obj.oldState.val == '' && obj.newState.val != ''){
            		//Neue Meldung senden
            		check1(obj.newState.val);
            	}else if(obj.oldState.val == obj.newState.val){
            		//ist nichts passiert
            		check1(obj.newState.val);
            	}else if(obj.oldState.val != obj.newState.val){
            		//Letzte Meldung obj.oldState.val ist nicht mehr aktuell
            		check1(obj.newState.val);
            		schritte = true;
            	}    
            });
            
            function check1(checkValueBySchritte){
            	var obj = die nächste description (description1)
            
            	if(!schritte && obj.oldState.val == '' && obj.newState.val == ''){
            		//ist nichts passiert
            	}else if(!schritte && obj.oldState.val == '' && obj.newState.val != ''){
            		//Neue Meldung senden
            		check2(obj.newState.val);
            	}else if(!schritte && obj.oldState.val == obj.newState.val){
            		//ist nichts passiert
            		check2(obj.newState.val);
            	}else if(!schritte && obj.oldState.val != obj.newState.val){
            		//Letzte Meldung obj.oldState.val ist nicht mehr aktuell
            		if(obj.newState.val != ''){
            			check2(obj.newState.val);
            			schritte = true;
            		}
            	}else if(schritte && obj.oldState.val == checkValueBySchritte){
            		//ist nichts passiert
            		if(obj.newState.val != ''){
            			check2(obj.newState.val);
            			schritte = true;
            		}
            	}else if(schritte && obj.oldState.val != checkValueBySchritte){
            		//Letzte Meldung obj.oldState.val ist nicht mehr aktuell
            		if(obj.newState.val != ''){
            			check2(checkValueBySchritte);
            			schritte = true;
            		}
            	} 
            }
            
            function check2(checkValueBySchritte){
            	var obj = die nächste description (description1)
            
            	if(!schritte && obj.oldState.val == '' && obj.newState.val == ''){
            		//ist nichts passiert
            	}else if(!schritte && obj.oldState.val == '' && obj.newState.val != ''){
            		//Neue Meldung senden
            	}else if(!schritte && obj.oldState.val == obj.newState.val){
            		//ist nichts passiert
            	}else if(!schritte && obj.oldState.val != obj.newState.val){
            		//Letzte Meldung obj.oldState.val ist nicht mehr aktuell
            		//Es gibt eine neue Meldung
            	}else if(schritte && obj.oldState.val == checkValueBySchritte){
            		//ist nichts passiert		
            	}else if(schritte && obj.oldState.val != checkValueBySchritte){
            		//Letzte Meldung obj.oldState.val ist nicht mehr aktuell		
            	} 
            }
            
            

            Also nicht bei alle 3 prüfen ob es Änderungen gab, sondern nur bei TestA, denn wenn sich TestA ändert, ändern sich automatisch alle 2 anderen auch.

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              PrinzEisenherz1
              schrieb am zuletzt editiert von
              #13

              Man, bin ich n honk.

              Na klar ändert bzw aktualisiert sich Warnung1 bzw Warnung2 mit der Aktualisierung von der Warnung0.

              Vor lauter Bäumen den Wald nicht sehen.

              Tausend Dank ldittmer

              Gruß Johnny

              Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #14

                @ldittmar:

                Also nicht bei alle 3 prüfen ob es Änderungen gab, sondern nur bei TestA, denn wenn sich TestA ändert, ändern sich automatisch alle 2 anderen auch. `
                Aber wenn sich nur TestC ändert, ändert sich nicht automatisch auch TestA. Es werden so nicht alle Änderungen erfasst.

                Man kann in einer Funktion auswerten() auch oldState.val prüfen, wenn man den gesamtem Datenpunkt an die Funktion übergibt.

                function auswerten(index, dp) {
                  var new = dp.state.val;
                  var old = dp.oldState.val;
                  // Auswertung
                }
                on('TestA', function (obj) {
                   auswerten(0, obj);
                });
                on('TestB', function (obj) {
                   auswerten(1, obj;
                });
                on('TestC', function (obj) {
                   auswerten(2, obj);
                });
                
                

                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
                • ldittmarL Offline
                  ldittmarL Offline
                  ldittmar
                  Developer
                  schrieb am zuletzt editiert von
                  #15

                  @paul53:

                  @ldittmar:

                  Also nicht bei alle 3 prüfen ob es Änderungen gab, sondern nur bei TestA, denn wenn sich TestA ändert, ändern sich automatisch alle 2 anderen auch. Aber wenn sich nur TestC ändert, ändert sich nicht automatisch auch TestA. Es werden so nicht alle Änderungen erfasst.
                  Ich weiss nicht, aber denke dass die Werte immer wieder rein geschrieben werden, oder? Dann ändern sich immer alle Werte.

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #16

                    @ldittmar:

                    Ich weiss nicht, aber denke dass die Werte immer wieder rein geschrieben werden, oder? Dann ändern sich immer alle Werte. `
                    Das glaube ich nicht: Angenommen, es gibt erst nur die Warnung "Starkregen" und später kommt die Warnung "Sturm" hinzu. Ändert sich dann die erste Warnung (Starkregen) ?

                    Übrigens benötigt man zum Merken von Texten keine Datenpunkte. Ich würde es in Arrays speichern, die im Skript global sind:

                    var gueltig = [3];
                    var headlines = [3];
                    

                    Mit dem Index (siehe voriges Beispiel) kann man bequem darauf zugreifen.

                    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
                    • ldittmarL Offline
                      ldittmarL Offline
                      ldittmar
                      Developer
                      schrieb am zuletzt editiert von
                      #17

                      Gut, dann könnte man einmalig prüfen ob sich A,B oder C geändert haben, die Werte in einem Objekt speichern und damit weiter arbeiten. Man müsste aber immer von 0 -> 2 prüfen, denn wenn ein Wert verschwindet, wandern die andere nach… (z.B. Wenn 0 weg fällt, dann wird 1 zu 0 und 2 zu eins - theoretisch kann dann auch in 2 was neues drin stehen) - Es kann aber bestimmt auch sein, dass 0 = Sturm, 1 = Regen, 2 = Sturm ist. Als 2 Mal Sturm zu verschiedene Zeiten drin stehen...

                      Es gibt also viele Wege. Wichtig ist alles von 0 bis 2 zu prüfen. ;)

                      1 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        PrinzEisenherz1
                        schrieb am zuletzt editiert von
                        #18

                        so, jetzt versteh ich nur noch Bahnhof.

                        Wie soll das gehen mit Abspeichern arrays?

                        Kannst Du mir mal das an Deinem Beispiel

                        function auswerten(index, dp) {
                          var new = dp.state.val;
                          var old = dp.oldState.val;
                          // Auswertung
                        }
                        on('TestA', function (obj) {
                           auswerten(0, obj);
                        });
                        on('TestB', function (obj) {
                           auswerten(1, obj;
                        });
                        on('TestC', function (obj) {
                           auswerten(2, obj);
                        
                        

                        erklären?

                        Wenn ich Deines als Testscript laufen lasse

                            createState("javascript.1.TEST-DWD.warning.description");
                            createState("javascript.1.TEST-DWD.warning1.description");
                            createState("javascript.1.TEST-DWD.warning2.description");
                        
                            var idDescription0 = "javascript.1.TEST-DWD.warning.description";
                            var idDescription1 = "javascript.1.TEST-DWD.warning1.description";
                            var idDescription2 = "javascript.1.TEST-DWD.warning2.description";
                        
                        function auswerten(index, dp) {
                          var neu = dp.state.val;
                          var alt = dp.oldState.val;
                          	log('new :' + neu);
                        	log('old :' + alt);
                         // Auswertung
                        }
                        on(idDescription0, function (obj) {
                        	log('idDescription0 :' + obj);
                           auswerten(0, obj);
                        });
                        on(idDescription1, function (obj) {
                        	log('idDescription1 :' + obj);
                           auswerten(1, obj);
                        });
                        on(idDescription2, function (obj) {
                        	log('idDescription2 :' + obj);
                           auswerten(2, obj);
                        });
                        
                        

                        Wenn ich dann die Datenpunkte befülle

                        erhalte ich im log folgendes

                        javascript.1	2017-01-25 14:51:17.556	info	script.js.Skript1: old :
                        javascript.1	2017-01-25 14:51:17.554	info	script.js.Skript1: new :Es tritt mäßiger Schneefall auf .
                        javascript.1	2017-01-25 14:51:17.553	info	script.js.Skript1: idDescription2 :[object Object]
                        javascript.1	2017-01-25 14:51:17.549	info	script.js.Skript1: old :Es tritt mäßiger Schneefall auf .
                        javascript.1	2017-01-25 14:51:17.547	info	script.js.Skript1: new :Es tritt starke Glaette auf .
                        javascript.1	2017-01-25 14:51:17.546	info	script.js.Skript1: idDescription1 :[object Object]
                        javascript.1	2017-01-25 14:51:17.541	info	script.js.Skript1: old :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf.
                        javascript.1	2017-01-25 14:51:17.539	info	script.js.Skript1: new :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf .
                        javascript.1	2017-01-25 14:51:17.536	info	script.js.Skript1: idDescription0 :[object Object]
                        
                        

                        Wie kann ich jetzt da Werte abspeichern ohne sie in einem Datenpunkt abzuspeichern?

                        Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                        1 Antwort Letzte Antwort
                        0
                        • ldittmarL Offline
                          ldittmarL Offline
                          ldittmar
                          Developer
                          schrieb am zuletzt editiert von
                          #19

                          Es müsste so funktionieren:

                          var schritte;
                          on(idDescription0 oder idDescription1 oder idDescription2, function (){
                             var obj = das este Objekt description0
                             schritte = false;
                             if(obj.oldState.val == '' && obj.newState.val == ''){
                                //ist nichts passiert
                             }else if(obj.oldState.val == '' && obj.newState.val != ''){
                                //Neue Meldung senden
                                check1(obj.newState.val);
                             }else if(obj.oldState.val == obj.newState.val){
                                //ist nichts passiert
                                check1(obj.newState.val);
                             }else if(obj.oldState.val != obj.newState.val){
                                //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
                                check1(obj.newState.val);
                                schritte = true;
                             }    
                          });
                          
                          function check1(checkValueBySchritte){
                             var obj = die nächste description (description1)
                          
                             if(!schritte && obj.oldState.val == '' && obj.newState.val == ''){
                                //ist nichts passiert
                             }else if(!schritte && obj.oldState.val == '' && obj.newState.val != ''){
                                //Neue Meldung senden
                                check2(obj.newState.val);
                             }else if(!schritte && obj.oldState.val == obj.newState.val){
                                //ist nichts passiert
                                check2(obj.newState.val);
                             }else if(!schritte && obj.oldState.val != obj.newState.val){
                                //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
                                if(obj.newState.val != ''){
                                   check2(obj.newState.val);
                                   schritte = true;
                                }
                             }else if(schritte && obj.oldState.val == checkValueBySchritte){
                                //ist nichts passiert
                                if(obj.newState.val != ''){
                                   check2(obj.newState.val);
                                   schritte = true;
                                }
                             }else if(schritte && obj.oldState.val != checkValueBySchritte){
                                //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
                                if(obj.newState.val != ''){
                                   check2(checkValueBySchritte);
                                   schritte = true;
                                }
                             } 
                          }
                          
                          function check2(checkValueBySchritte){
                             var obj = die nächste description (description2)
                          
                             if(!schritte && obj.oldState.val == '' && obj.newState.val == ''){
                                //ist nichts passiert
                             }else if(!schritte && obj.oldState.val == '' && obj.newState.val != ''){
                                //Neue Meldung senden
                             }else if(!schritte && obj.oldState.val == obj.newState.val){
                                //ist nichts passiert
                             }else if(!schritte && obj.oldState.val != obj.newState.val){
                                //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
                                //Es gibt eine neue Meldung
                             }else if(schritte && obj.oldState.val == checkValueBySchritte){
                                //ist nichts passiert      
                             }else if(schritte && obj.oldState.val != checkValueBySchritte){
                                //Letzte Meldung obj.oldState.val ist nicht mehr aktuell      
                             } 
                          }
                          
                          

                          Also… du schaust ob sich irgendwas irgendwo verändert hat, dann gehst du alles durch um zu sehen was sich verändert hat... natürlich kann man mein Skript schöner mit Arrays oder Objekte machen, aber ich denke so ist es verständlicher... also Schritt für Schritt. ;)

                          EDIT: Da ich ein ioBroker-Skript Anfänger bin, ist mein Code nicht Sprachlich richtig... es geht hier eher um das wie.

                          1 Antwort Letzte Antwort
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #20

                            @PrinzEisenherz1:

                            javascript.1   2017-01-25 14:51:17.541   info   script.js.Skript1: old :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf.
                            javascript.1   2017-01-25 14:51:17.539   info   script.js.Skript1: new :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf .
                            
                            ```` `  
                            

                            Kann so etwas passieren ? Die Beschreibung ändert sich zwar inhaltlich nicht, aber vor den abschließenden Punkt ist ein Leerzeichen gelangt, weshalb überhaupt auf Änderung getriggert wurde. Dann wird es kompliziert, weil einfache Textvergleiche nicht mehr funktionieren.

                            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
                            • P Offline
                              P Offline
                              PrinzEisenherz1
                              schrieb am zuletzt editiert von
                              #21

                              Das ist mir schon klar.

                              Hab ich ja bewusst gemacht um zu sehen was mit deinem Script passiert.

                              Hab dann an der Testmeldung nur ne Leerstelle angefügt.

                              Meine Frage war ja auf das zwischenspeichern bzw selektieren der Meldungen bzgl array gemeint.

                              Woher weiß ich welches obj von welcher index-Nr kommt

                              Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                              1 Antwort Letzte Antwort
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #22

                                @PrinzEisenherz1:

                                Woher weiß ich welches obj von welcher index-Nr kommt `
                                Der Index des Auslösers (0…2) wird an die aufgerufende Funktion übergeben. Das Speichern im Array kann dann so erfolgen:

                                function auswerten(index, dp) {
                                  var new = dp.state.val;
                                  var old = dp.oldState.val;
                                  var warn = 'dwd.0.warning';
                                  if(index) warn = warn + index
                                  headlines[index] = getState(warn + '.headline').val;
                                  gueltig[index] = '\ngültig vom ' + getState(warn + '.begin').val + ' Uhr bis ' + getState(warn + '.end').val + ' Uhr\n';
                                  // Auswertung
                                }
                                

                                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
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #23

                                  Gibt es einen Grund, dass Du die Description als Auslöser verwendest ? Ich würde die Headline bevorzugen oder kann die gleiche Headline zur gleichen Zeit mehrfach vorkommen ?

                                  Außerdem würde ich 2 Arrays (oldHeadlines, newHeadlines) anlegen, und die einzelnen Positionen testen, ob sie im jeweils anderen Array vorkommen. Zum Schluss aller Test dann oldHeadlines = newHeadlines. Da die Auslöser zwar hintereinander aber nicht gleichzeitig kommen und die Reihenfolge vermutlich nicht definiert ist, würde ich eine Verzögerung für die Auswertung der beiden Arrays einbauen.

                                  Nur prinzipiell:

                                  `var oldHeadlines = [3];
                                  var newHeadlines = [3];
                                  var timer = null;
                                  
                                  function check() {
                                      if(newHeadlines[0] == "") {
                                          // Alle Warnungen beendet
                                          oldHeadlines = newHeadlines;
                                          return;
                                      }
                                      for(var i = 0; i < 3; i++) {
                                          var headline = oldHeadlines[i];
                                          if(newHeadline.indexOf(headline) == -1 && headline != "") {
                                              // Warnung headline ist beendet
                                          }
                                      }
                                      for(var i = 0; i < 3; i++) {
                                          headline = newHeadlines[i];
                                          if(oldHeadline.indexOf(headline) == -1 && headline != "") {
                                              // Warnung headline ist neue Warnung
                                              // Hier kann der Index i zur Bildung der ID für Description und Begin und End benutzt werden
                                          }
                                      }
                                      oldHeadlines = newHeadlines;
                                  }
                                  
                                  on('dwd.0.warning.headline', function(dp) {
                                      newHeadlines[0] = dp.state.val;
                                      if(timer) clearTimout(timer);
                                      timer = setTimeout(check, 5000);
                                  });
                                  on('dwd.0.warning1.headline', function(dp) {
                                      newHeadlines[1] = dp.state.val;
                                      if(timer) clearTimout(timer);
                                      timer = setTimeout(check, 5000);
                                  });
                                  on('dwd.0.warning2.headline', function(dp) {
                                      newHeadlines[2] = dp.state.val;
                                      if(timer) clearTimout(timer);
                                      timer = setTimeout(check, 5000);
                                  });` [/i][/i]
                                  

                                  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
                                  • P Offline
                                    P Offline
                                    PrinzEisenherz1
                                    schrieb am zuletzt editiert von
                                    #24

                                    Erstmal vielen Dank für deine Beiträge und Erklärungen.

                                    Bei headline ist das Problem das die auch mehrmals vorkommen können, zumindest hatte ich das schonmal bloß mit unterschiedlicher Beschreibung bzw Uhrzeit.

                                    Deswegen hab ich dann auf die Beschreibung getriggert.

                                    Dein Beispiel müsste aber mit der Beschreibung auch gehen, oder?

                                    Kann es heute leider nicht mehr testen. Ich teste das morgen mal.

                                    Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                                    1 Antwort Letzte Antwort
                                    0
                                    • paul53P Offline
                                      paul53P Offline
                                      paul53
                                      schrieb am zuletzt editiert von
                                      #25

                                      @PrinzEisenherz1:

                                      Dein Beispiel müsste aber mit der Beschreibung auch gehen, oder? `
                                      Ja.

                                      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
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von
                                        #26

                                        Anbei ein Skript, das die gewünschte Funktion ohne das Versenden von Telegrammen erfüllen sollte:

                                        `var idDescription0 = "dwd.0.warning.description";
                                        var idDescription1 = "dwd.0.warning1.description";
                                        var idDescription2 = "dwd.0.warning2.description";
                                        var newDescriptions = new Array(3);
                                        var oldDescriptions = new Array(3);
                                        var newHeadlines = new Array(3);
                                        var oldHeadlines = new Array(3);
                                        var newBegins = new Array(3);
                                        var oldBegins = new Array(3);
                                        var newEnds = new Array(3);
                                        var oldEnds = new Array(3);
                                        var timer = null;
                                        
                                        function check() {
                                            if(newDescriptions[0] === "") {
                                                log('ALLE Warnungen beendet');
                                        
                                                oldHeadlines = newHeadlines.slice();
                                                oldDescriptions = newDescriptions.slice();
                                                oldBegins = newBegins.slice();
                                                oldEnds = newEnds.slice();
                                                return;
                                            }
                                        
                                            var headline;
                                            var description;
                                            var begin;
                                            var end;
                                            var i;
                                            var warn;
                                            var Meldung;
                                        
                                            for(i = 0; i < 3; i++) {
                                                warn = 'dwd.0.warning';
                                                if(i) warn = warn + i;
                                                headline = oldHeadlines[i];
                                                description = oldDescriptions[i];
                                                begin = oldBegins[i];
                                                end = oldEnds[i];
                                        
                                                if(newDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) {
                                                    Meldung = headline + ' gültig bis ' + end + ' Uhr wurde aufgehoben';
                                                    log('Meldung '+ i + ': ' + Meldung);
                                                }
                                            }
                                        
                                            for(i = 0; i < 3; i++) {
                                                warn = 'dwd.0.warning';
                                                if(i) warn = warn + i;
                                                headline = newHeadlines[i];
                                                description = newDescriptions[i];
                                                begin = newBegins[i];
                                                end = newEnds[i];
                                                if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) {
                                                    Meldung = 'Neue ' + headline + ' gültig vom ' + begin + ' Uhr bis ' + end + ' Uhr: ' + description;
                                                    log('Meldung '+ i + ': ' + Meldung);
                                                }
                                            }
                                            oldHeadlines = newHeadlines.slice();
                                            oldDescriptions = newDescriptions.slice();
                                            oldBegins = newBegins.slice();
                                            oldEnds = newEnds.slice();
                                        }
                                        
                                        function newWarning(i) {
                                            var warn = 'dwd.0.warning';
                                            if(i) warn = warn + i;
                                            newHeadlines[i] = getState(warn + '.headline').val;
                                            newBegins[i] = getState(warn + '.begin').val;
                                            newEnds[i] = getState(warn + '.end').val;
                                            if(timer) clearTimeout(timer);
                                            timer = setTimeout(check, 5000);
                                        
                                        }
                                        
                                        on(idDescription0, function(dp) {
                                            newDescriptions[0] = dp.state.val;
                                            newWarning(0);
                                        });
                                        
                                        on(idDescription1, function(dp) {
                                            newDescriptions[1] = dp.state.val;
                                            newWarning(1);
                                        });
                                        
                                        on(idDescription2, function(dp) {
                                            newDescriptions[2] = dp.state.val;
                                            newWarning(2);
                                        });` [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
                                        

                                        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
                                        • P Offline
                                          P Offline
                                          podruzjasne
                                          schrieb am zuletzt editiert von
                                          #27

                                          K

                                          Gesendet von meinem SM-J700H mit Tapatalk

                                          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

                                          308

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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