Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Hilfe für Schleife

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

Hilfe für Schleife

Scheduled Pinned Locked Moved Skripten / Logik
javascript
22 Posts 8 Posters 3.4k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    stephan61
    wrote on last edited by
    #8

    Hallo Pix

    habe eine Fehler ? gefunden

    setState(idRegen, parseInt(i,10));

    wenn ich parseInt(i) schreibe bekomme ich einen Eintrag unter Objecte

    Gruß Stephan

    1 Reply Last reply
    0
    • P Offline
      P Offline
      pix
      wrote on last edited by Jey Cee
      #9

      @stephan61:

      wenn ich parseInt(i) schreibe bekomme ich einen Eintrag unter Objecte ` Ist das eine Frage?

      setState(idRegen, parseInt(i,10));
      

      bedeutet, Wert i im Dezimalsystem (,10) zu einem Typ Zahl gewandelt (parseInt) in das Objekt idRegen schreiben (setState).

      Ob parseInt hier wirklich nötig ist, sei dahingestellt.

      Gruß

      Pix

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Reply Last reply
      0
      • T Offline
        T Offline
        tempestas
        wrote on last edited by
        #10

        Hallo Pix,

        das Skript funktioniert wunderbar, allein: es wird nicht ausgeführt.

        Es gibt imho ein Problem mit dem Regex Teil. Da passiert bei mir nichts. Ich habs mal bei Regex101.com eingefügt und da wird mir auch ein Fehler angezeigt. Leider bin ich aber in JS noch viel zu unerfahren um zu verstehen, was genau das Problem ist:

        Markiert wird das führende Slash in rot und als Fehler kommt:

        Pattern error

        / An unescaped delimiter must be escaped with a backslash ()

        Aktuell behelfe ich mir mit einem Schedule, der die Funktion ausführt; aber deine angedachte Lösung ist natürlich viel viel eleganter.

        <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pix
          wrote on last edited by pix
          #11

          Hallo,

          habe das Skript mal korrigiert. So läuft es.

          /* Wunderground Regen
          
          Abfrage des Wunderground Adapters im Bereich Vorhersage,
          wann der nächste Regen erwartet wird.
          
          http://forum.iobroker.net/viewtopic.php?f=21&t=3447#p31858
          
          01.08.2016 erstellt von Pix unter Nutzung des obigen Skriptes
          28.06.2017 Korrekturen
          */
          var vorstd = 36; // vorschau in Stunden (weatherundergroudn bietet neuerdings 36h Vorschau)
          var idRegen = 'javascript.1.Wunderground.Regenvorschau';
          
          createState(idRegen, {
             name: 'Regenvorschau',
             dec: 'Wieviele Stunden bis zum nächsten Regen',
             type: 'number',
             min: 0,
             max: 24,
             unit: 'Stunden'
          });
          
          function berechneZeit() {
              //log('Berechne Dauer bis zum nächsten Regen in Stunden');
              var i = 0;
              var data;
              for (i=0 ; i <vorstd; i++)/{/if/(getstate("weatherunderground.0.forecast."/+/i/"h.qpf").val="">0) {
                      data = getState("weatherunderground.0.forecast." + i + "h.qpf").val;
                      break;
                  }
              }
          
              if (i < vorstd && data) { // jetzt 36 Stunden
                  log("Regen  in  " + i + " Stunden (" + data + " mm)");
                  setState(idRegen, parseInt(i,10));
              } else setState(idRegen, null);
          }
          
          var x = "/weatherunderground\.[0-9]\.forecast\.[0-9]+h\.qpf";
          
          on({
              id: x, 
              change: 'any'
          }, berechneZeit);</vorstd;>
          

          EDIT: 28.6.2017 1715Uhr Code korrigiert

          Gruß

          Pix

          EDIT 04.08.2019 es zählt dieser Post https://forum.iobroker.net/post/48353

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Reply Last reply
          0
          • T Offline
            T Offline
            tempestas
            wrote on last edited by
            #12

            Danke auch hier!

            Also war es das "any" statt "not equal" im on Bereich?

            Wieso wurde es denn vorher nicht ausgeführt? Die Wahrscheinlichkeit, dass über die Stunden immer der exakt gleiche Regen angesagt wird ist doch quasi null?

            Allein schon durch die Verschiebung der Stunden immer "näher ans jetzt" hätte doch ausgelöst werden müssen, oder? Sprich wenn erst für "in 3 Stunden 2ml Regen" angesagt war und alles bleibt gleich, dann ist es eben eine Stunde später "in 2 Stunden 2ml Regen". Sprich ich hätte doch eine "not equal" Änderung sehen müssen, die das Skript dann triggert?

            D.h. in meinem Verständnis müsste doch "not equal" quasi immer auch auf "any" rauslaufen faktisch, oder (in diesem Skript, nicht generell)? Wieso funktionierte das nicht?

            Gruß und Dank

            der Lernbegierige

            Nachtrag:

            imho müsste es, wenn du die Variable "vorStd" aufnimmst, jetzt dann auch im Skript <37 heißen (oder<vorstd) 36/und/der/regenstate/bei/max/haben?</t=""></vorstd)>

            <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

            1 Reply Last reply
            0
            • P Offline
              P Offline
              pix
              wrote on last edited by
              #13

              Hallo,

              ich tippe das hier alles einhändig und einäugig während die andere Hand / das andere Auge eine Neunmonatige beaufsichtigt, die gern die Wohnung umdekoriert (inkl. HM-Geräte :shock: :o ). Daher kann ich nicht tiefer einsteigen.

              'Works for me' reicht mir in diesem Fall.

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Reply Last reply
              0
              • T Offline
                T Offline
                tempestas
                wrote on last edited by
                #14

                Haha, alles klar :)

                war ja auch nur eine reine Interessensfrage bzw Hinweis an andere. Ich versuche ja auch, ab und zu etwas zu geben und nicht nur zu fragen.

                Viel Spaß mit der Lütten.

                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                1 Reply Last reply
                0
                • AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  wrote on last edited by
                  #15
                  on({
                      id: x, 
                      change: 'any'
                  }, berechneZeit());
                  
                  

                  Ich fürchte, in diesem Fall hat ein Tippfehler dafür gesorgt, dass es zu funktionieren scheint. Tut es das denn weiterhin?

                  Die zwei Klammern hinter <u>berechneZeit</u> sorgen in diesem Fall dafür, dass die Funktion sofort aufgerufen wird. Der (nicht vorhandene) Rückgabewert wird von <u>on</u> anschließend als Funktion verstanden, die bei einem Trigger aufgerufen werden soll - hier wirds knallen, bzw. der Trigger wird so nicht funktionieren.

                  Korrekt wäre

                  on({
                      id: x, 
                      change: 'any'
                  }, berechneZeit);
                  
                  

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pix
                    wrote on last edited by
                    #16

                    Ja, stimmt. Danke!

                    Verschlimmbessert…

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      pix
                      wrote on last edited by
                      #17

                      Hab den Code oben korrigiert. Läuft jetzt wirklich.

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        brufi
                        wrote on last edited by
                        #18

                        Hallo zusammen,

                        bei mir wird das Script von PIX nur ausgeführt, wenn ich in der Zeile mit der RegExp die Anführungsstriche weglasse:

                        var x = /weatherunderground\.[0-9]\.forecast\.[0-9]+h\.qpf;
                        

                        Keine Ahnung warum das so ist…

                        wenn ich den Pfad zum Datenpunkt mit Anführungszeichen ohne RegExp ins Script einfüge

                        weatherunderground.0.forecast.30h.qpf
                        

                        und dann den Datenpunkt qpf in der Stunde 30 verändere funktioniert es :?

                        Gruß

                        Brufi

                        1 Reply Last reply
                        0
                        • P Offline
                          P Offline
                          pix
                          wrote on last edited by pix
                          #19

                          Auch wenn es schon älter ist: Habe mal angepasst, das alte Skript lief nicht mehr, weil die Struktur des weatherground-Adapters sich geändert hat.

                          Das Skript geht alle ForecastHourly-Datenpuntke des Adapters durch und sucht nach dem ersten Eintrag mit erwarteter Regenmenge über 0mm. Dann gibt es die Stunde und die zugehörige Wahrscheinlichkeit in einen Datenpunkt aus.

                          Passt ab Weatherunderground-Adapter Version 3.0.11

                          /* Wunderground Regen
                          
                          Abfrage des Weatherunderground Adapters im Bereich Vorhersage,
                          wann der nächste Regen erwartet wird.
                          
                          Findet in den forecastHourly-Datenpunkt den ersten Regen-Eintrag
                          Ausgabe in Text ("kein Regen", "X Stunden (X% [Wahrscheinlichkeit])")
                          
                          
                          
                          http://forum.iobroker.net/viewtopic.php?f=21&t=3447#p31858
                          
                          01.08.2016 erstellt von Pix unter Nutzung des obigen Skriptes
                          28.06.2017 Korrekturen
                          12.07.2017 Fehler abfangen und Typ Variable auf String geändert
                          06.03.2019 Code optimiert
                                    berücksichtigt Niederschlag in der aktuellen Stunde (Stunde 0)
                          11.06.2019 auf neue Datenpunkte angepasst für weatherground-Adapter (getestet V3.0.11)
                          */
                          
                          const vorstd = 36; // Vorschau in Stunden (weatherundergroudn bietet neuerdings bis 36h Vorschau), kann hier auch kleiner sein
                          const idRegen = "Wunderground.Regenvorschau"; // Ziel-Datenpunkt
                          const wunder_inst = "weatherunderground.0."; // Weatherground-Adapter Instanz
                          const logging = true;
                          const fC = false;
                          
                          createState(idRegen, "kein Regen", fC, {
                            name: "Regenvorschau",
                            dec: "Wann gibt es den nächsten Regen",
                            type: "string",
                            role: "text"
                          });
                          
                          function berechneZeit() {
                             if (logging) log("Berechne Dauer in Stunden bis zum nächsten Regen");
                             let i = 0;
                             let data; // leer
                             let pop; // leer
                             for (i=0 ; i<vorstd; i++) {
                                 if (getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val > 0) {
                                     data = getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val;
                                     pop = getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val;
                                     break; // beim ersten Auftreten der Regenwahrscheinlichkeit über 0 abbrechen
                                 }
                             }
                          
                             if (i < vorstd && data) { // jetzt 36 Stunden
                                 if (i == 0) { // wenn jetzt Regen
                                     if (logging) log("In dieser Stunde werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                     setState(idRegen, "jetzt (" + pop + "%)");
                                 } else {
                                     if (logging) log("In " + i + " Stunden werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                     setState(idRegen, i + " Stunden (" + pop + "%)");
                                 }
                             } else {
                                 setState(idRegen, "Kein Regen erwartet (" + pop + "%)");
                                 if (logging) log("Kein Regen erwartet (" + pop + "%)");
                             }
                          }
                          
                          // bei jeglicher Aktualisierung von Weatherunderground Berechnung starten
                          on({
                             id: /^weatherunderground\.[0-9]+\.forecast.*\.[0-9]+h\.qpf$/,  // forecastHourly, forecastDaily, forecast
                             change: "any"
                          }, berechneZeit);
                          
                          // bei Skriptstart
                          berechneZeit();
                          

                          Gruß
                          Pix

                          EDIT: Neueste Version hier: https://forum.iobroker.net/post/48353

                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                          crunchipC 1 Reply Last reply
                          2
                          • P pix

                            Auch wenn es schon älter ist: Habe mal angepasst, das alte Skript lief nicht mehr, weil die Struktur des weatherground-Adapters sich geändert hat.

                            Das Skript geht alle ForecastHourly-Datenpuntke des Adapters durch und sucht nach dem ersten Eintrag mit erwarteter Regenmenge über 0mm. Dann gibt es die Stunde und die zugehörige Wahrscheinlichkeit in einen Datenpunkt aus.

                            Passt ab Weatherunderground-Adapter Version 3.0.11

                            /* Wunderground Regen
                            
                            Abfrage des Weatherunderground Adapters im Bereich Vorhersage,
                            wann der nächste Regen erwartet wird.
                            
                            Findet in den forecastHourly-Datenpunkt den ersten Regen-Eintrag
                            Ausgabe in Text ("kein Regen", "X Stunden (X% [Wahrscheinlichkeit])")
                            
                            
                            
                            http://forum.iobroker.net/viewtopic.php?f=21&t=3447#p31858
                            
                            01.08.2016 erstellt von Pix unter Nutzung des obigen Skriptes
                            28.06.2017 Korrekturen
                            12.07.2017 Fehler abfangen und Typ Variable auf String geändert
                            06.03.2019 Code optimiert
                                      berücksichtigt Niederschlag in der aktuellen Stunde (Stunde 0)
                            11.06.2019 auf neue Datenpunkte angepasst für weatherground-Adapter (getestet V3.0.11)
                            */
                            
                            const vorstd = 36; // Vorschau in Stunden (weatherundergroudn bietet neuerdings bis 36h Vorschau), kann hier auch kleiner sein
                            const idRegen = "Wunderground.Regenvorschau"; // Ziel-Datenpunkt
                            const wunder_inst = "weatherunderground.0."; // Weatherground-Adapter Instanz
                            const logging = true;
                            const fC = false;
                            
                            createState(idRegen, "kein Regen", fC, {
                              name: "Regenvorschau",
                              dec: "Wann gibt es den nächsten Regen",
                              type: "string",
                              role: "text"
                            });
                            
                            function berechneZeit() {
                               if (logging) log("Berechne Dauer in Stunden bis zum nächsten Regen");
                               let i = 0;
                               let data; // leer
                               let pop; // leer
                               for (i=0 ; i<vorstd; i++) {
                                   if (getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val > 0) {
                                       data = getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val;
                                       pop = getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val;
                                       break; // beim ersten Auftreten der Regenwahrscheinlichkeit über 0 abbrechen
                                   }
                               }
                            
                               if (i < vorstd && data) { // jetzt 36 Stunden
                                   if (i == 0) { // wenn jetzt Regen
                                       if (logging) log("In dieser Stunde werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                       setState(idRegen, "jetzt (" + pop + "%)");
                                   } else {
                                       if (logging) log("In " + i + " Stunden werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                       setState(idRegen, i + " Stunden (" + pop + "%)");
                                   }
                               } else {
                                   setState(idRegen, "Kein Regen erwartet (" + pop + "%)");
                                   if (logging) log("Kein Regen erwartet (" + pop + "%)");
                               }
                            }
                            
                            // bei jeglicher Aktualisierung von Weatherunderground Berechnung starten
                            on({
                               id: /^weatherunderground\.[0-9]+\.forecast.*\.[0-9]+h\.qpf$/,  // forecastHourly, forecastDaily, forecast
                               change: "any"
                            }, berechneZeit);
                            
                            // bei Skriptstart
                            berechneZeit();
                            

                            Gruß
                            Pix

                            EDIT: Neueste Version hier: https://forum.iobroker.net/post/48353

                            crunchipC Offline
                            crunchipC Offline
                            crunchip
                            Forum Testing Most Active
                            wrote on last edited by
                            #20

                            @pix Nachdem sich ja wieder einiges am Adapter geändert passt das Script nicht mehr.
                            58d97e92-28f3-48bf-9e47-5f7c39f3588f-image.png
                            im Adapter
                            38aa4330-2f7d-4f4f-b3e0-6eb0a3af40ac-image.png
                            33c9a392-01b0-4a50-b09c-c3fb8a6792fd-image.png

                            umgestiegen von Proxmox auf Unraid

                            1 Reply Last reply
                            1
                            • P Offline
                              P Offline
                              pix
                              wrote on last edited by
                              #21

                              Habs geändert:

                              /* Wunderground Regen
                              
                              Abfrage des Weatherunderground Adapters im Bereich Vorhersage,
                              wann der nächste Regen erwartet wird.
                              
                              Findet in den forecastHourly-Datenpunkt den ersten Regen-Eintrag
                              Ausgabe in Text ("kein Regen", "X Stunden (X% [Wahrscheinlichkeit])")
                              
                              
                              
                              http://forum.iobroker.net/viewtopic.php?f=21&t=3447#p31858
                              
                              01.08.2016 erstellt von Pix unter Nutzung des obigen Skriptes
                              28.06.2017 Korrekturen
                              12.07.2017 Fehler abfangen und Typ Variable auf String geändert
                              06.03.2019 Code optimiert
                                         berücksichtigt Niederschlag in der aktuellen Stunde (Stunde 0)
                              11.06.2019 auf neue Datenpunkte angepasst für weatherground-Adapter (getestet V3.0.11)
                              04.08.2019 geändert für Wunderground Adapter 3.1.1
                              */
                              
                              const vorstd = 36; // Vorschau in Stunden (weatherundergroudn bietet neuerdings bis 36h Vorschau), kann hier auch kleiner sein
                              const idRegen = "javascript."+ instance + ".Wunderground.Regenvorschau"; // Ziel-Datenpunkt
                              const wunder_inst = "weatherunderground.0."; // Weatherground-Adapter Instanz
                              const logging = false;
                              const fC = false; // nicht dauerhaft auf true stehen lassen. Wegen AAsynchronität dann keine Werte.
                              
                              createState(idRegen, "kein Regen", fC, {
                                 name: "Regenvorschau",
                                 dec: "Wann gibt es den nächsten Regen",
                                 type: "string",
                                 role: "text"
                              });
                              
                              function berechneZeit() {
                                  if (logging) log("Berechne Dauer in Stunden bis zum nächsten Regen");
                                  let i = 0;
                                  let data; // leer
                                  let pop; // leer
                                  for (i=0 ; i<vorstd; i++) {
                                      if (getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val > 0) {
                                          data = getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val;
                                          pop = getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val;
                                          if (logging) log("Regeneintrag gefunden bei " + i + "h " + data + "mm");
                              
                                          if (i == 0) { // wenn jetzt Regen
                                              if (logging) log("In dieser Stunde werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                              setState(idRegen, "jetzt (" + pop + "%)");
                                          } else {
                                              if (logging) log("In " + i + " Stunden werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                              setState(idRegen, i + " Stunden (" + pop + "%)");
                                          }
                              
                                          i=vorstd; // beim ersten Auftreten der Regenwahrscheinlichkeit über 0 abbrechen
                                      } 
                                      if ((i == vorstd) && (pop === 0)) {
                                          setState(idRegen, "Kein Regen erwartet (" + pop + "%)");
                                          if (logging) log("Kein Regen erwartet (" + pop + "%)");
                                      }
                                  }
                                  
                              }
                              
                              // bei jeglicher Aktualisierung von Weatherunderground Berechnung starten
                              on({
                                  id: /^weatherunderground\.[0-9]+\.forecast.*\.[0-9]+h\.precipitation$/,  // forecastHourly, forecastDaily, forecast
                                  change: "any"
                              }, berechneZeit);
                              
                              // bei Skriptstart
                              
                              berechneZeit();
                              

                              Gruß
                              Pix

                              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                              NegaleinN 1 Reply Last reply
                              2
                              • P pix

                                Habs geändert:

                                /* Wunderground Regen
                                
                                Abfrage des Weatherunderground Adapters im Bereich Vorhersage,
                                wann der nächste Regen erwartet wird.
                                
                                Findet in den forecastHourly-Datenpunkt den ersten Regen-Eintrag
                                Ausgabe in Text ("kein Regen", "X Stunden (X% [Wahrscheinlichkeit])")
                                
                                
                                
                                http://forum.iobroker.net/viewtopic.php?f=21&t=3447#p31858
                                
                                01.08.2016 erstellt von Pix unter Nutzung des obigen Skriptes
                                28.06.2017 Korrekturen
                                12.07.2017 Fehler abfangen und Typ Variable auf String geändert
                                06.03.2019 Code optimiert
                                           berücksichtigt Niederschlag in der aktuellen Stunde (Stunde 0)
                                11.06.2019 auf neue Datenpunkte angepasst für weatherground-Adapter (getestet V3.0.11)
                                04.08.2019 geändert für Wunderground Adapter 3.1.1
                                */
                                
                                const vorstd = 36; // Vorschau in Stunden (weatherundergroudn bietet neuerdings bis 36h Vorschau), kann hier auch kleiner sein
                                const idRegen = "javascript."+ instance + ".Wunderground.Regenvorschau"; // Ziel-Datenpunkt
                                const wunder_inst = "weatherunderground.0."; // Weatherground-Adapter Instanz
                                const logging = false;
                                const fC = false; // nicht dauerhaft auf true stehen lassen. Wegen AAsynchronität dann keine Werte.
                                
                                createState(idRegen, "kein Regen", fC, {
                                   name: "Regenvorschau",
                                   dec: "Wann gibt es den nächsten Regen",
                                   type: "string",
                                   role: "text"
                                });
                                
                                function berechneZeit() {
                                    if (logging) log("Berechne Dauer in Stunden bis zum nächsten Regen");
                                    let i = 0;
                                    let data; // leer
                                    let pop; // leer
                                    for (i=0 ; i<vorstd; i++) {
                                        if (getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val > 0) {
                                            data = getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val;
                                            pop = getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val;
                                            if (logging) log("Regeneintrag gefunden bei " + i + "h " + data + "mm");
                                
                                            if (i == 0) { // wenn jetzt Regen
                                                if (logging) log("In dieser Stunde werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                                setState(idRegen, "jetzt (" + pop + "%)");
                                            } else {
                                                if (logging) log("In " + i + " Stunden werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                                setState(idRegen, i + " Stunden (" + pop + "%)");
                                            }
                                
                                            i=vorstd; // beim ersten Auftreten der Regenwahrscheinlichkeit über 0 abbrechen
                                        } 
                                        if ((i == vorstd) && (pop === 0)) {
                                            setState(idRegen, "Kein Regen erwartet (" + pop + "%)");
                                            if (logging) log("Kein Regen erwartet (" + pop + "%)");
                                        }
                                    }
                                    
                                }
                                
                                // bei jeglicher Aktualisierung von Weatherunderground Berechnung starten
                                on({
                                    id: /^weatherunderground\.[0-9]+\.forecast.*\.[0-9]+h\.precipitation$/,  // forecastHourly, forecastDaily, forecast
                                    change: "any"
                                }, berechneZeit);
                                
                                // bei Skriptstart
                                
                                berechneZeit();
                                

                                Gruß
                                Pix

                                NegaleinN Offline
                                NegaleinN Offline
                                Negalein
                                Global Moderator
                                wrote on last edited by
                                #22

                                @pix sagte in Hilfe für Schleife:

                                Habs geändert:
                                neuer Code für Wunderground 3.1.1

                                Hallo Pix!

                                Mir ist gerade aufgefallen, dass das Script seit 4.8. 21:50 Uhr nicht mehr aktuakisiert.

                                Beim DP javascript.0.Wunderground.Regenvorschausteht noch immer der Wert vom 4.8.
                                objects - ioBroker (8).png

                                Unter weathunderground.0wird jedoch der aktuelle Wert angezeigt.
                                objects - ioBroker (7).png

                                /* Wunderground Regen
                                {1}
                                Abfrage des Weatherunderground Adapters im Bereich Vorhersage,
                                wann der nächste Regen erwartet wird.
                                {1}
                                Findet in den forecastHourly-Datenpunkt den ersten Regen-Eintrag
                                Ausgabe in Text ("kein Regen", "X Stunden (X% [Wahrscheinlichkeit])")
                                {1}
                                {1}
                                {1}
                                http://forum.iobroker.net/viewtopic.php?f=21&t=3447#p31858
                                {1}
                                01.08.2016 erstellt von Pix unter Nutzung des obigen Skriptes
                                28.06.2017 Korrekturen
                                12.07.2017 Fehler abfangen und Typ Variable auf String geändert
                                06.03.2019 Code optimiert
                                           berücksichtigt Niederschlag in der aktuellen Stunde (Stunde 0)
                                11.06.2019 auf neue Datenpunkte angepasst für weatherground-Adapter (getestet V3.0.11)
                                04.08.2019 geändert für Wunderground Adapter 3.1.1
                                */
                                 
                                const vorstd = 36; // Vorschau in Stunden (weatherundergroudn bietet neuerdings bis 36h Vorschau), kann hier auch kleiner sein
                                const idRegen = "javascript."+ instance + ".Wunderground.Regenvorschau"; // Ziel-Datenpunkt
                                const wunder_inst = "weatherunderground.0."; // Weatherground-Adapter Instanz
                                const logging = false;
                                const fC = false; // nicht dauerhaft auf true stehen lassen. Wegen AAsynchronität dann keine Werte.
                                 
                                createState(idRegen, "kein Regen", fC, {
                                   name: "Regenvorschau",
                                   dec: "Wann gibt es den nächsten Regen",
                                   type: "string",
                                   role: "text"
                                });
                                 
                                function berechneZeit() {
                                    if (logging) log("Berechne Dauer in Stunden bis zum nächsten Regen");
                                    let i = 0;
                                    let data; // leer
                                    let pop; // leer
                                    for (i=0 ; i<vorstd; i++) {
                                        if (getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val > 0) {
                                            data = getState(wunder_inst + "forecastHourly." + i + "h.precipitation").val;
                                            pop = getState(wunder_inst + "forecastHourly." + i + "h.precipitationChance").val;
                                            if (logging) log("Regeneintrag gefunden bei " + i + "h " + data + "mm");
                                 
                                            if (i == 0) { // wenn jetzt Regen
                                                if (logging) log("In dieser Stunde werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                                setState(idRegen, "jetzt (" + pop + "%)");
                                            } else {
                                                if (logging) log("In " + i + " Stunden werden " + data + "mm Regen erwartet (Wahrscheinlichkeit " + pop + "%)");
                                                setState(idRegen, i + " Stunden (" + pop + "%)");
                                            }
                                 
                                            i=vorstd; // beim ersten Auftreten der Regenwahrscheinlichkeit über 0 abbrechen
                                        } 
                                        if ((i == vorstd) && (pop === 0)) {
                                            setState(idRegen, "Kein Regen erwartet (" + pop + "%)");
                                            if (logging) log("Kein Regen erwartet (" + pop + "%)");
                                        }
                                    }
                                    
                                }
                                 
                                // bei jeglicher Aktualisierung von Weatherunderground Berechnung starten
                                on({
                                    id: /^weatherunderground\.[0-9]+\.forecast.*\.[0-9]+h\.precipitation$/,  // forecastHourly, forecastDaily, forecast
                                    change: "any"
                                }, berechneZeit);
                                 
                                // bei Skriptstart
                                 
                                berechneZeit();
                                

                                Weatherunderground läuft in 3.2.1

                                Hast du eine Idee?

                                ° Node.js: 20.17.0 NPM: 10.8.2
                                ° Proxmox, Ubuntu 22.04.3 LTS
                                ° Fixer ---> iob fix

                                1 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                685

                                Online

                                32.4k

                                Users

                                81.5k

                                Topics

                                1.3m

                                Posts
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Home
                                • Recent
                                • Tags
                                • Unread 0
                                • Categories
                                • Unreplied
                                • Popular
                                • GitHub
                                • Docu
                                • Hilfe