Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Mehrere Daten an "eine" Funktion übergeben

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

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

      Hi zusammen,

      Ich hab mal wieder ne Frage.

      Kann man in JavaScript mehrere Daten an eine Funktion übergeben und wenn ja wie?

      Beispiel [EDIT] geändert wegen fehlender Angaben

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

      Ich hoffe man versteht am Beispiel was ich meine?

      Gruß Johnny

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

        @PrinzEisenherz1:

        Hi zusammen,

        Ich hab mal wieder ne Frage.

        Kann man in JavaScript mehrere Daten an eine Funktion übergeben und wenn ja wie?

        Beispiel

        function rechnen() {
        var Beispiel1 = test1;
        var Beispiel2 = test2;
        var Beispiel3 = test3;
        } 
        on(TestA, function () {
        var test1 = variableA
        rechnen(test1);
        }); 
        on(TestB, function () {
        var test2 = variableB
        rechnen(test2);
        }); 
        on(TestC, function () {
        var test3 = variableC
        rechnen(test3);
        }); 
        
        

        Ich hoffe man versteht am Beispiel was ich meine?

        Gruß Johnny `

        function rechnen() {
           var Beispiel1 = getState('TestA').val;
           var Beispiel2 = getState('TestB').val;
           var Beispiel3 = getState('TestC').val;
        } 
        on('TestA', rechnen); 
        on('TestB', rechnen); 
        on('TestC', rechnen); 
        
        
        1 Reply Last reply Reply Quote 0
        • P
          PrinzEisenherz1 last edited by

          Danke Bluefox für Deine Antwort.

          Ich mach das mal jetzt lieber vom Rechner aus weil am Handy tippeln ist doof

          Ich hab mich am Beispiel nämlich noch etwas vergessen.

          Neues Beispiel:

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

          Gruß Johnny

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

            @PrinzEisenherz1:

            Neues Beispiel: `
            Das funktioniert nicht, da innerhalb von Funktionen deklarierte Variablen lokal sind, d.h. sie sind nur innerhalb dieser Funktion gültig. Richtig:

            var test1, test2, test3;
            function auswerten() {
            var Beispiel1 = test1;
            var Beispiel2 = test2;
            var Beispiel3 = test3;
            }
            on('TestA', function (obj) {
               test1 = obj.newState.val;
               auswerten();
            });
            on('TestB', function (obj) {
               test2 = obj.newState.val;
               auswerten();
            });
            on('TestC', function (obj) {
               test3 = obj.newState.val;
               auswerten();
            }); 
            
            
            1 Reply Last reply Reply Quote 0
            • ldittmar
              ldittmar Developer last edited by

              Hi Paul,

              was genau möchtest du machen? Mehrere Variablen an eine Funktion könnte so gehen:

              function auswerten(test1, test2, test3) {
              	var Beispiel1 = test1;
              	var Beispiel2 = test2;
              	var 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);
              }); 
              
              

              Ist das hilfreich?

              Grüße,

              ldittmar

              1 Reply Last reply Reply Quote 0
              • P
                PrinzEisenherz1 last edited by

                Hi Paul und ldittmer,

                Vielen Dank für eure Beispiele.

                Was möchte ich genau machen?

                Ich hab ein Script gebaut das die Werte des DWD-Adapters ausliest und mich dann per Telegram benachrichtigt.

                Mein derzeitiges Script:

                ! /* Script zum Übertragen der DWD-Wetterwarnungen an Telegram */ /* Stand: 11012017 PrinzEisenherz1 */ ! var idDescription0 = "dwd.0.warning.description"; var idDescription1 = "dwd.0.warning1.description"; var idDescription2 = "dwd.0.warning2.description"; ! /* Sicherung der DWD-headlines */ createState("javascript.0.Wetterstation.DWD.headline1"); createState("javascript.0.Wetterstation.DWD.headline2"); createState("javascript.0.Wetterstation.DWD.headline3"); createState("javascript.0.Wetterstation.DWD.gueltig1"); createState("javascript.0.Wetterstation.DWD.gueltig2"); createState("javascript.0.Wetterstation.DWD.gueltig3"); ! var idBackHeadline1 = "javascript.0.Wetterstation.DWD.headline1"; var idBackHeadline2 = "javascript.0.Wetterstation.DWD.headline2"; var idBackHeadline3 = "javascript.0.Wetterstation.DWD.headline3"; var idBackGueltig1 = "javascript.0.Wetterstation.DWD.gueltig1"; var idBackGueltig2 = "javascript.0.Wetterstation.DWD.gueltig2"; var idBackGueltig3 = "javascript.0.Wetterstation.DWD.gueltig3"; ! function check0(){ var Description0 = getState(idDescription0).val; if (Description0 !== "") { var Begin0 = getState("dwd.0.warning.begin").val; var End0 = getState("dwd.0.warning.end").val; var Headline0 = getState("dwd.0.warning.headline").val; var DWD_telegramm0 = Headline0 + "\ngültig vom " + Begin0 + " Uhr bis " + End0+ " Uhr\n" + Description0 ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm0); }, 1 * 1000); setTimeout(function() { sendTo ("telegram.1", DWD_telegramm0); }, 1 * 2000); ! /* headline für Warning sichern */ setState(idBackHeadline1,Headline); /* "Gültig bis" für Warning sichern */ setState(idBackGueltig1,End); } } ! function check1(){ var Description1 = getState(idDescription1).val; if (Description1 !== "") { var Begin1 = getState("dwd.0.warning1.begin").val; var End1 = getState("dwd.0.warning1.end").val; var Headline1 = getState("dwd.0.warning1.headline").val; var DWD_telegramm1 = Headline1 + "\ngültig vom " + Begin1 + " Uhr bis " + End1 + " Uhr\n" + Description1 ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm1); }, 1 * 1000); setTimeout(function() { sendTo ("telegram.1", DWD_telegramm1); }, 1 * 2000); /* headline für Warning1 sichern */ setState(idBackHeadline2,Headline); /* "Gültig bis" für Warning sichern */ setState(idBackGueltig2,End); } } ! function check2(){ var Description2 = getState(idDescription2).val; if (Description2 !== "") { var Begin2 = getState("dwd.0.warning2.begin").val; var End2 = getState("dwd.0.warning2.end").val; var Headline2 = getState("dwd.0.warning2.headline").val; var Description2 = getState("dwd.0.warning2.description").val; var DWD_telegramm2 = Headline2 + "\ngültig vom " + Begin2 + " Uhr bis " + End2 + " Uhr\n" + Description2 ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm2); }, 1 * 1000); setTimeout(function() { sendTo ("telegram.1", DWD_telegramm2); }, 1 * 2000); /* headline für Warning2 sichern */ setState(idBackHeadline3,Headline); /* "Gültig bis" für Warning sichern */ setState(idBackGueltig3,End); } } ! on(idDescription0, function (obj){ if (obj.newState.val !== obj.oldState.val) { if (obj.newState.val !== "") { check0(); }else { sendTo ("telegram.0", "Alle Wetterwarnungen des DWD wurden aufgehoben") ; setTimeout(function() { sendTo ("telegram.1", "Alle Wetterwarnungen des DWD wurden aufgehoben"); }, 1 * 1000); } } }); ! on(idDescription1, function (obj){ if (obj.newState.val !== obj.oldState.val) { if (obj.newState.val !== "") { check1(); } else { var Headlineclear1 = getState(idBackHeadline2).val; var Gueltigclear1 = getState(idBackGueltig2).val; sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ Headlineclear1 + " gültig bis " + Gueltigclear1 + " Uhr'" + " des DWD wurde aufgehoben") ; setTimeout(function() { sendTo ("telegram.1", "Die Wetterwarnung " +"'"+ Headlineclear1 + " gültig bis " + Gueltigclear1 + " Uhr'" + " des DWD wurde aufgehoben"); }, 1 * 1000); } } }); ! on(idDescription2, function (obj){ if (obj.newState.val !== obj.oldState.val) { if (obj.newState.val !== "") { check2(); } else { var Headlineclear2 = getState(idBackHeadline3).val; var Gueltigclear2 = getState(idBackGueltig3).val; sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ Headlineclear2 + " gültig bis " + Gueltigclear2 + " Uhr'" + " des DWD wurde aufgehoben") ; setTimeout(function() { sendTo ("telegram.1", "Die Wetterwarnung " +"'"+ Headlineclear2 + " gültig bis " + Gueltigclear2 + " Uhr'" + " des DWD wurde aufgehoben"); }, 1 * 1000); } } }); ! /* Auslösen bei Scriptstart */ ! //check(); //check1(); //check2(); !
                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

                Jetzt möchte ich vorher vergleichen ob die Warnung generell noch besteht und wenn nicht dann erst ne Meldung der Aufhebung.

                Ich hoffe Ihr versteht was ich meine

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

                  @ldittmar:

                  Mehrere Variablen an eine Funktion könnte so gehen: `
                  Um nicht null in das Ergebnis zu schreiben, muss in der Auswertefunktion getestet werden:

                  function auswerten(test1, test2, test3) {
                     var Beisiel1, Beispiel2, Beispiel3;
                     if(test1) Beispiel1 = test1;
                     if(test2) Beispiel2 = test2;
                     if(test3) Beispiel3 = test3;
                  }
                  ...
                  
                  1 Reply Last reply Reply Quote 0
                  • ldittmar
                    ldittmar Developer last edited by

                    @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 Reply Last reply Reply Quote 0
                    • P
                      PrinzEisenherz1 last edited by

                      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

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

                        Warum nicht gleich? 😛 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 Reply Last reply Reply Quote 0
                        • P
                          PrinzEisenherz1 last edited by

                          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?

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

                            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 Reply Last reply Reply Quote 0
                            • P
                              PrinzEisenherz1 last edited by

                              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

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

                                @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);
                                });
                                
                                
                                1 Reply Last reply Reply Quote 0
                                • ldittmar
                                  ldittmar Developer last edited by

                                  @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 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 last edited by

                                    @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.

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

                                      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 Reply Last reply Reply Quote 0
                                      • P
                                        PrinzEisenherz1 last edited by

                                        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?

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

                                          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 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 last edited by

                                            @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.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            28
                                            2981
                                            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