Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Hilfe für Schleife

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    203

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

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

Hilfe für Schleife

Hilfe für Schleife

Scheduled Pinned Locked Moved Skripten / Logik
javascript
22 Posts 8 Posters 3.3k 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 Jey Cee
    #1

    Hallo

    ich brauche einen Tip wie ich folgendes inm script löse.

    ich möchte vom adapter wunderground die daten von forecast auswerten wann Regen kommt

    Habe jetzt folgenden Idee

    var i=0;
    for (var i=0 ; i<25;i++)
    var data = getState("weatherunderground.0.forecast.0h.qpf"/*Quantitative precipitation forecast*/).val;
    
    var data1 = getState("weatherunderground.0.forecast.1h.qpf"/*Quantitative precipitation forecast*/).val;
    var data2 = getState("weatherunderground.0.forecast.2h.qpf"/*Quantitative precipitation forecast*/).val;
    var data3 = getState("weatherunderground.0.forecast.3h.qpf"/*Quantitative precipitation forecast*/).val;
    var data4 = getState("weatherunderground.0.forecast.4h.qpf"/*Quantitative precipitation forecast*/).val;
    
    if (data[i] >1) log ("Regen  in  " + i + "Stunden");
    

    wie kann ich in der Schleife den wert von oh ,1h durch var i ersetzten und wenn data > 1 die schleife abbrechen.

    Gruß Stephan

    1 Reply Last reply
    0
    • N Offline
      N Offline
      nobody
      wrote on last edited by
      #2

      Hallo Stephan61,

      Der Name des State ist ein String. Den kann man einfach durch zusammensetzen bilden. Also z.B.

      var data = getState("weatherunderground.0.forecast." + i + "h.qpf").val;
      
      

      Eine for-Schleife kann an durch das Kommando break abbrechen. Also z.B.

      `if (data[i] >0)
                break;`
      
      Wenn es dir nur um die Stundenanzahl geht, brauchst du auch nicht alle Werte in Variablen Speichern. Auch würde ich abbrechen, wenn i<25 ist. Weil dann wurde ein Eintrag gefunden und nur dann ist data auch definiert.
      
      `~~[code]~~var i=0;
      for (var i=0 ; i<25;i++) {
          if (getState("weatherunderground.0.forecast." + i + "h.qpf").val>0) {
            var data = getState("weatherunderground.0.forecast." + i + "h.qpf").val;
            break;
            }
      }
      
      if (i<25) log ("Regen  in  " + i + "Stunden (" + data + " mm)");
      
      [/code]`[/i]
      
      1 Reply Last reply
      0
      • P Offline
        P Offline
        pix
        wrote on last edited by pix
        #3

        Danke für die Inspiration.

        Hab mir das mal eingebaut:

        /*
        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
        */
        createState('Wunderground.Regenvorschau', {
           name: 'Regenvorschau',
           dec: 'Wieviele Stunden bis zum nächsten Regen',
           type: 'number',
           min: 0,
           max: 24,
           unit: 'Stunden'
        });
         var idRegen = 'javascript.1.Wunderground.Regenvorschau';
         function berechneZeit() {
            var i=0;
            var data;
            for (i=0 ; i<25;i++) {
                if (getState("weatherunderground.0.forecast." + i + "h.qpf").val>0) {
                    data = getState("weatherunderground.0.forecast." + i + "h.qpf").val;
                    break;
                }
            }
             if (i<25 && data) { 
                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: 'ne'}, berechneZeit);
        

        Wann immer sich einer der Regenvorschauwerte im Adpater ändert (hängt auch ab, vom schedule des Adapters), wird die Funktion aufgerufen. Wenn kein Regen erwartet wird, dann "null". Könnte man noch ein Boolean Objekt mit einbauen (Regen in nächsten 24h ja/nein).

        Gruß

        Pix

        EDIT 02.08.2016 RegEx korrigiert

        EDIT 11.06.2019 Neue Version des Skriptes für weatherunderground-Adapter 3.0.11 https://forum.iobroker.net/post/270546

        EDIT 04.08.2019 Neue Version für Wunderground Adapter 3.1.1 hier https://forum.iobroker.net/post/288011

        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
        • S Offline
          S Offline
          stephan61
          wrote on last edited by
          #4

          Hallo Nobody und Pix

          Danke für eure Hilfe wieder was dazugelernt.

          Hallo Pix indeinem Script am Ende steht

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

          Verstehe ich nicht ganz

          Muss es hinter weatherunderground nicht nur .0 heissen und hinter forecast 0-24

          Gruß Stephan

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

            Hallo Stephan,

            schön, dass du es ansprichst. Die Variable x wird mit einem https://wiki.selfhtml.org/wiki/JavaScript/Objekte/RegExp gefüllt. Dieser erlaubt innerhalb seiner Regeln mehrere ID als Auslöser.

            In diesem Fall werden alle Datenpunkte mit on() überwacht, die eine Instanz von weatherunderground haben (Instanz 0 -unendlich, da jede Zahl möglich), danach im channel "forecast" und danach bei jeder Stunde (da wieder jede Zahl möglich) stehen. Sie enden auf ".qpf".

            Im Klartext heisst das: Wenn irgendeiner der Datenpunkte "Regenmenge" innerhalb des Kanals "Vorschau" und egal zu welcher Stunde sich ändert, wird die bleibende Zeit berechnet.

            Ist hier ein wenig mit Kanonen auf Spatzen geschossen, aber ist ein gutes Beispiel. Die Vorhersage kann sich ja über Stunden ändern: Eben wurde noch ab in 12 bis 24 Stunden Regen angezeit, jetzt sagt mir die Vorschau, dass es nur noch in 3 Stunden für eine Stunde regnen soll.

            Zudem hat diese Art der Subscription ( on() ) den Vorteil, dass man keine Zeitsteuerung mehr braucht. Es passt sich dem Abfrageintervall des weatherunderground-Adapters an. Nur wenn der neue Daten hat (also nach Aktualisierung), wird auch das Skript aktiv.

            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
            • N Offline
              N Offline
              nobody
              wrote on last edited by
              #6

              @pix:

              In diesem Fall werden alle Datenpunkte mit on() überwacht, die eine Instanz von weatherunderground haben (Instanz 0 -unendlich, da jede Zahl möglich), danach im channel "forecast" und danach bei jeder Stunde (da wieder jede Zahl möglich) stehen. Sie enden auf ".qpf".

              Im Klartext heisst das: Wenn irgendeiner der Datenpunkte "Regenmenge" innerhalb des Kanals "Vorschau" und egal zu welcher Stunde sich ändert, wird die bleibende Zeit berechnet. `

              Hallo pix,

              wenn du auch Zahlen mit mehreren Ziffern haben möchtest solltest du [0..9]+ verwenden. Ansonsten ist nur eine Ziffer erlaubt.

              Gruß

              Markus

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

                Völlig korrekt, habe es https://regex101.com. Danke für den Hinweis. Wird oben geändert.

                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
                • 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: 😮 ). 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 Away
                                          crunchipC Away
                                          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
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          132

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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