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. Hilfe für Schleife

NEWS

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

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

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

Hilfe für Schleife

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
22 Beiträge 8 Kommentatoren 3.4k Aufrufe 5 Watching
  • Ä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
    pix
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • N Offline
      N Offline
      nobody
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        pix
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          stephan61
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            pix
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tempestas
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                pix
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                0
                • T Offline
                  T Offline
                  tempestas
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    pix
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • T Offline
                      T Offline
                      tempestas
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          pix
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            pix
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              brufi
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • P Offline
                                P Offline
                                pix
                                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                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 Abwesend
                                  crunchipC Abwesend
                                  crunchip
                                  Forum Testing Most Active
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  1
                                  • P Offline
                                    P Offline
                                    pix
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    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
                                      schrieb am zuletzt editiert von
                                      #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 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

                                      808

                                      Online

                                      32.4k

                                      Benutzer

                                      81.6k

                                      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