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.8k

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

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

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

                  Hi Paul,

                  Sorry das ich mich jetzt erst melde.

                  Tausend Dank nochmal, jetzt klappt es und langsam steig ich auch dahinter.

                  Hier mal mein fertiges Produkt

                  `/* ************************************************************************* */
                  /*             Script zum Übertragen der DWD-Wetterwarnungen über            */
                  /*             Telegram, Pushover, Home24-Mediaplayer oder SayIt             */
                  /*  	mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals)    */
                  /*                    Stand: 070022017    PrinzEisenherz1					 */
                  /* ************************************************************************* */
                  
                      var request = require('request');
                  
                  	/* Nachrichten-Dienst festlegen */
                  /* aus=0 ; alle=1 ; Pushover=2 ; Telegram=3 */
                      var pushdienst = 3;			// Auswahl Nachrichtendienst
                  
                  /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
                      var idSprachausgabe = false;	// Wenn zusätzlich eine Sprachausgabe erfolgen soll dann auf true
                      var idMediaplayer = "192.168.178.70:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer
                  
                  /* Konfiguration Sprachausgabe über SayIt */
                      var idSprachausgabeSayIt = false;	// Wenn zusätzlich eine Sprachausgabe über SayIt erfolgen soll dann auf true
                  	var idSayIt = "sayit.0.tts.text";
                  	var lautstaerke = 100;
                  
                  /* Trigger für Wetterwarnungen */
                      var idDescription0 = "dwd.0.warning.description";
                      var idDescription1 = "dwd.0.warning1.description";
                      var idDescription2 = "dwd.0.warning2.description";
                  /* Arrays festlegen */
                      var newDescriptions = [3];
                      var oldDescriptions = [3];
                      var newHeadlines = [3];
                      var oldHeadlines = [3];
                      var newBegins = [3];
                      var oldBegins = [3];
                      var newEnds = [3];
                      var oldEnds = [3];
                      var timer = null;
                  
                  function check() {
                  /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
                      if(newDescriptions[0] === "") {
                  		if ((pushdienst === 3) || (pushdienst === 1) ) {
                  			setTimeout((sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben')), 3 * 1000);
                  		}
                  		if ((pushdienst === 2) || (pushdienst === 1) ) {
                  			sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben');
                  		}
                  
                  /* alle Sicherungen Wetterwarnung löschen */
                          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;
                  /* Variablen für Meldungen Text */
                      var MeldungOld;
                      var MeldungNew;
                  /* Variablen für Meldungen Sprache */
                      var MeldungSpracheDWD = '';
                      var MeldungNewSprache = '';
                      var MeldungOldSprache = '';
                  
                  /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */
                      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) {
                  				MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben';
                  				MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben' + '  .  ';
                  					if ((pushdienst === 3) || (pushdienst === 1) ) {
                  						setTimeout((sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben")), 3 * 1000);
                  					}
                  					if ((pushdienst === 2) || (pushdienst === 1) ) {
                  						sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben");
                  					}
                  			}
                  /* Verknüpfen aller aufgehobenen Wetterwarnungen */
                  		MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache;
                      }
                  /* Bereich für 'Neue Amtliche Wetterwarnung' */
                      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) {
                  				MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                  /* Entfernen °C für Sprachausgabe */
                  				var replaceDescription0 = entferneDatenpunkt(description);
                  				MeldungNewSprache = headline + " gültig vom " + begin + " Uhr, bis " + end + " Uhr. " + replaceDescription0 + '  .  ';
                  					if ((pushdienst === 3) || (pushdienst === 1) ) {
                  						setTimeout((sendTo ("telegram.0", MeldungNew)), 3 * 1000);
                  					}
                  					if ((pushdienst === 2) || (pushdienst === 1) ) {
                  						sendTo("pushover.0", MeldungNew);
                  					}
                  			}
                  /* Verknüpfen aller neuen Warnmeldungen */
                  		MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache;
                      }
                  /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */
                  		MeldungSpracheDWD = 'Achtung   .  ' + MeldungSpracheDWD;
                  
                  /* Bereich für Sprachausgabe über Home24-Mediaplayer */
                      if((idSprachausgabe === true) && (MeldungSpracheDWD !== "")){
                      	var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD;
                          log('Url :' + Url);
                          request(Url);
                  }
                  /* Bereich für Sprachausgabe über SayIt */
                      if((idSprachausgabeSayIt === true) && (MeldungSpracheDWD !== "")){
                          setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD);
                  }
                  
                  /* Neue Werte sichern */
                      oldHeadlines = newHeadlines.slice();
                      oldDescriptions = newDescriptions.slice();
                      oldBegins = newBegins.slice();
                      oldEnds = newEnds.slice();
                  }
                  
                  /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */
                  function entferneDatenpunkt(beschreibung) {
                      var rueckgabe;
                      rueckgabe = beschreibung;
                      try {rueckgabe = rueckgabe.replace(/\°C/g, "Grad");}
                      catch(e) {}
                      return rueckgabe;
                  }
                  
                  on(idDescription0, function(dp) {
                      newDescriptions[0] = dp.state.val;
                      var warn = 'dwd.0.warning';
                  		setTimeout(function() {
                  			newHeadlines[0] = getState(warn + '.headline').val;
                  			newBegins[0] = getState(warn + '.begin').val;
                  			newEnds[0] = getState(warn + '.end').val;
                          }, 3000);
                      if(timer) clearTimeout(timer);
                      timer = setTimeout(check, 7000);
                  });
                  
                  on(idDescription1, function(dp) {
                      newDescriptions[1] = dp.state.val;
                      var warn = 'dwd.0.warning1';
                  		setTimeout(function() {
                  			newHeadlines[1] = getState(warn + '.headline').val;
                  			newBegins[1] = getState(warn + '.begin').val;
                  			newEnds[1] = getState(warn + '.end').val;
                  		}, 3000);
                      if(timer) clearTimeout(timer);
                      timer = setTimeout(check, 7000);
                  });
                  
                  on(idDescription2, function(dp) {
                      newDescriptions[2] = dp.state.val;
                      var warn = 'dwd.0.warning2';
                  		setTimeout(function() {
                  			newHeadlines[2] = getState(warn + '.headline').val;
                  			newBegins[2] = getState(warn + '.begin').val;
                  			newEnds[2] = getState(warn + '.end').val;
                  		}, 3000);
                      if(timer) clearTimeout(timer);
                      timer = setTimeout(check, 7000);
                  });` 
                  
                  Also nochmal Tausend Dank
                  
                  Johnny[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
                  

                  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
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  842

                  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