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. Biowetter aus WetterOnline (wie Pollenflug)

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    927

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Biowetter aus WetterOnline (wie Pollenflug)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
62 Beiträge 14 Kommentatoren 9.3k Aufrufe 12 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.
  • SBorgS Offline
    SBorgS Offline
    SBorg
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #51

    Ich sag mal jein, gepflegt zwar nicht aktuell, aber es läuft noch problemlos.
    Hast du "einfach" das Wetter von deinem Heimatort gesucht? Dies funktioniert so nicht, denn von der Quelle werden nur bestimmte Orte unterstützt: https://www.gesundheit.de/biowetter-id213002/

    LG SBorg ( SBorg auf GitHub)
    Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

    1 Antwort Letzte Antwort
    0
    • jvfleJ Online
      jvfleJ Online
      jvfle
      schrieb am zuletzt editiert von
      #52

      Ich habe noch die original eingetragenen Orte verwendet. Hat leider nicht funktioniert, auch andere Orte die auf der Website steht nicht.
      Im Script steht dieser Link: https://www.gesundheit.de/rat-hilfe/biowetter/ , den habe ich gegen deinen ausgetauscht. Ging auch nicht.
      Es kommt dieser Fehler:
      javascript.0 17:07:25.269 error
      Fehler (try) leseWebseite (gesundheit.de): TypeError: axios is not a function

      SBorgS 1 Antwort Letzte Antwort
      0
      • jvfleJ jvfle

        Ich habe noch die original eingetragenen Orte verwendet. Hat leider nicht funktioniert, auch andere Orte die auf der Website steht nicht.
        Im Script steht dieser Link: https://www.gesundheit.de/rat-hilfe/biowetter/ , den habe ich gegen deinen ausgetauscht. Ging auch nicht.
        Es kommt dieser Fehler:
        javascript.0 17:07:25.269 error
        Fehler (try) leseWebseite (gesundheit.de): TypeError: axios is not a function

        SBorgS Offline
        SBorgS Offline
        SBorg
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #53

        @jvfle sagte in Biowetter aus WetterOnline (wie Pollenflug):

        Der Link im Skript ist noch korrekt. Hänge einfach mal eine Stadt mit dran: https://www.gesundheit.de/rat-hilfe/biowetter/duisburg

        TypeError: axios is not a function

        Anscheinend ist aber "axios" bei dir nicht registriert. Sollte eigentlich mittlerweile nicht mehr nötig sein, aber gehe mal in die Instanz des Javaskript-Adapters und schau mal nach ob "axios" dort steht (die Anderen aus meinem Screeny müssen nicht sein, die nutze ich):
        Screenshot 2026-01-22 at 21-04-46 instances - ubuntu.png

        Falls nicht, einfach in die Zeile klicken, axios eingeben und ENTER drücken, Speichern und sicherheitshalber die Instanz neu starten. Dann sollte es auch laufen.

        LG SBorg ( SBorg auf GitHub)
        Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

        1 Antwort Letzte Antwort
        0
        • jvfleJ Online
          jvfleJ Online
          jvfle
          schrieb am zuletzt editiert von
          #54

          Vielen Dank für deinen Tipp. Nach dem ich Axios installiert hatte, hat es für Koblenz funktioniert, eigenartigerweise für Mannheim nicht. Der Datenpunkt für Mannheim wird nicht ausgefüllt.```

          const pfad = "0_userdata.0.Wetter.Biowetter.";
          const logging = false;

          // Städte können natürlich auch gelöscht werden
          const stadt = [
          // Rheinland - Pfalz
          { "URL_" : "mannheim",
          "name" : "Mannheim" },

          { "URL_" : "koblenz",
            "name" : "Koblenz" }
          

          ];

          // ab hier nix mehr ändern
          const biowetter_url = "https://www.gesundheit.de/rat-hilfe/biowetter/";
          const biodatenpunkte = ["heute", "morgen", "Kombi"];

          const axios = require('axios');

          1 Antwort Letzte Antwort
          0
          • jvfleJ Online
            jvfleJ Online
            jvfle
            schrieb am zuletzt editiert von
            #55

            Objektbaum.png

            1 Antwort Letzte Antwort
            0
            • SBorgS Offline
              SBorgS Offline
              SBorg
              Forum Testing Most Active
              schrieb am zuletzt editiert von
              #56

              Das Skript funktioniert zwar, ist aber nicht gerade "best practice". Einiges ging zu diesem Zeitpunkt auch einfach noch nicht.
              Wenn du den schedule nicht geändert hast, holt er heute Nacht um 2:02 Uhr neue Daten. Es kann schlicht sein, dass er beim 1. run noch mit dem anlegen der Datenpunkte beschäftigt war und einfach nichts in die Datenpunkte hinein schreiben konnte. Gelegentlich sieht zwar alles gut aus, die DPs sind aber vom JS-Adapter nicht beschreibbar (nur direkt nach dem anlegen). Hier hilft ein Restart des ioBs (ist nur einmalig beim anlegen neuer DPs via Javaskript nötig. In aller Regel funktioniert es zwar, kann aber doch einmal hängen).
              Wenn du also kannst, einmal den ioB neu starten und dann morgen früh noch mal nachschauen.

              LG SBorg ( SBorg auf GitHub)
              Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

              1 Antwort Letzte Antwort
              0
              • jvfleJ Online
                jvfleJ Online
                jvfle
                schrieb am zuletzt editiert von
                #57

                Super, dann warte ich mal ab. Vielen Dank für die Rückmeldung und ein schönes Wochenende.
                BG

                1 Antwort Letzte Antwort
                0
                • jvfleJ Online
                  jvfleJ Online
                  jvfle
                  schrieb am zuletzt editiert von
                  #58

                  Hallo SBorg, leider funktioniert es nicht. Die im Script enthaltene Stadt Koblenz zum Beispiel wird angezeigt und aktualisiert. Fügt man eine andere Stadt hinzu, z.B. Mannheim, ist der Datenpunkt vorhanden, aber es wird kein Wert ausgelesen und es findet auch keine Aktualisierung statt. Dabei habe ich nur, wie im Script beschrieben, den Stadtnamen ausgetauscht. Hast du eventuell noch eine Idee, was falsch laufen könnte? BG

                  1 Antwort Letzte Antwort
                  0
                  • SBorgS Offline
                    SBorgS Offline
                    SBorg
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von
                    #59

                    Wenn es mit zwei Städten nicht funktioniert, würde ich fast vermuten da liegt ein Fehler im Skript vor (Skript ist ja nicht von mir und ich habe beim testen auch nur eine Stadt benutzt). So auf die schnelle habe ich einen festen Timeout gesehen, dass ist nicht gut. Der beträgt auch nur eine Sekunde. Das kann uU. knapp werden und er bricht den Versuch einfach ab.
                    Brauchst du denn überhaupt zwei Städte?

                    { "URL_" : "mannheim",
                    "name" : "Mannheim" }
                    
                    ];
                    

                    Alternativ kannst du bei Zeile #6 auch 1000 in 10000 ändern (1 Sek Timeout --> 10 Sekunden)

                    function readBiowetter() {
                        stadt.forEach(function(s) {
                            setTimeout(function() {
                                if (logging) log("Es wird abgefragt: " + s.URL_ + " für " + s.name);
                                readURL(s.URL_, s.name);
                            }, 1000);
                        });
                    }
                    

                    ... oder mal das "logging" auf true stellen, ev. zeigt er dann wo es klemmt.

                    LG SBorg ( SBorg auf GitHub)
                    Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                    1 Antwort Letzte Antwort
                    0
                    • jvfleJ Online
                      jvfleJ Online
                      jvfle
                      schrieb am zuletzt editiert von
                      #60

                      Nein, brauche ich nicht, aber es funktioniert mit keiner anderen Stadt außer der vorgegebenen. Ich teste es mal.

                      1 Antwort Letzte Antwort
                      0
                      • SBorgS Offline
                        SBorgS Offline
                        SBorg
                        Forum Testing Most Active
                        schrieb am zuletzt editiert von
                        #61

                        Brauchst gar nicht zu testen, viele Seiten bringen einen "404-Fehler", sind also nicht erreichbar. Offenbar funktioniert die interne Umleitung bei denen nicht immer.

                        Neue Version, getestet mit zwei Städten:

                        /* Biowetter Parser von gesundheit.de
                        
                        https://forum.iobroker.net/topic/4441/biowetter-aus-wetteronline-wie-pollenflug/61
                        
                        05.05.2016 erstellt von steinwedel für homoran
                        06.05.2016 Anpassung durch pix (Vorhersage mehrere Tage)
                        
                        Änderung in Biowetterparser
                        12.01.2017 Biowetter
                        14.01.2017 vom Pollenflug Skript separiert
                        10.06.2019 neue Quellseite www.gesundheit.de (Anpassung von pix)
                        21.12.2021 (SBorg) Anpassungen an neuen HTML-Auftritt, Fehlerbeseitigung, request => axios, ack=true
                        11.07.2022 (SBorg) Anpassungen an neuen HTML-Auftritt
                        11.06.2024 (SBorg) Anpassung an JS 6.x und Umstellung von "axios" => "httpGet"
                        28.01.2026 (SBorg) Umstellung auf URL-IDs, Änderung der URL, Timeout erhöht
                        
                        */
                        
                        const pfad = "0_userdata.0.Wetter.Biowetter.";
                        const logging = false;
                        
                        // Städte können natürlich auch gelöscht werden. Die benötigte URL gibt es hier: https://www.gesundheit.de/biowetter-id213002/
                        const stadt = [
                            // Hessen     
                            { "URL_" : "frankfurt-am-main-id213038/",
                              "name" : "Frankfurt am Main" },
                            // Baden-Württemberg    
                            { "URL_" : "mannheim-id215733/",
                              "name" : "Mannheim" }  
                        ];
                        
                         
                        // ab hier nix mehr ändern
                        const biowetter_url = "https://www.gesundheit.de/biowetter/";
                        const biodatenpunkte = ["heute", "morgen", "Kombi"];
                        
                        //const axios = require('axios');
                         
                        function bioDpAnlegen() {
                            // alle Städte durchgehen
                            stadt.forEach(function(city) {
                                let bio_pfad = pfad + city.name.toLowerCase();
                                setTimeout(function() {
                                    for (var bdp = 0; bdp < biodatenpunkte.length; bdp++) {
                                        createState(bio_pfad + "." + biodatenpunkte[bdp], {
                                            def: "",
                                            name: "Biowetter " + city.name + " " + biodatenpunkte[bdp],
                                            desc: "Biowetter Vorhersage (gesundheit.de) für " + biodatenpunkte[bdp] + " in " + city.name,
                                            type: "string"
                                        });
                                    }
                                }, 1000);
                            });
                        }
                         
                        function readBiowetter() {
                            stadt.forEach(function(s) {
                                setTimeout(function() {
                                    if (logging) log("Es wird abgefragt: " + s.URL_ + " für " + s.name);
                                    readURL(s.URL_, s.name);
                                }, 10000);
                            });
                        }
                         
                        function readURL(stadt_URL_, stadt_name) {
                            try {
                                const options = {
                                    method: 'get',
                                    url: biowetter_url + stadt_URL_, // korrekten Link erstellen
                                    headers: { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1" }
                                };
                                //axios(options).then(function (response) {
                                httpGet(options.url, (err, response) => { 
                                    if (response.statusCode == 200) { // kein Fehler, Inhalt in body
                                        /* betroffener HTML Code
                                                    <h2>Heute</h2>
                                                    <p>Die aktuelle Wetterlage belastet Herz und Kreislauf stärker als sonst üblich. Aufgrund der warmen Luftmasse ist die Durchblutung vermindert. Viele Menschen fühlen sich weiterhin müde und abgespannt. Trotzdem fällt der erholsame Tiefschlaf schwer. Menschen, die verstärkt mit Kopfschmerzen und Migräneattacken auf Wetterreize reagieren, sollten ihre Schmerzmittel nicht vergessen. Anstrengungen am Mittag und Nachmittag sollten vermieden werden.</p>
                                                    <h2>Morgen</h2>
                                                    <p>Mit der Witterung sind häufig Leistungs- und Konzentrationsdefizite verbunden. Auch das Reaktionsvermögen lässt nach, sodass die Unfallgefahr zunimmt. Wetterfühlige Menschen klagen vor allem über Kopfweh und eine erhöhte Müdigkeit.</p>
                        
                                                    <div class="
                                             */
                        
                                        // Code für HEUTE extrahieren
                         
                                        let wetter_heute;
                                        let heute_start = "<h3>Heute</h3>";
                                        let heute_ende = "<h3>Morgen</h3>"; // dazwischen ist Text für heute
                         
                                        let pos_heute_start = response.data.indexOf(heute_start);
                                        let pos_heute_ende = response.data.indexOf(heute_ende);
                                        log("Start: " + pos_heute_start + " Ende: " + pos_heute_ende, "debug");
                         
                                        if (pos_heute_start != -1 && pos_heute_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                            let heute_bereich = response.data.substring(pos_heute_start + heute_start.length, response.data.length); // Ab aber ohne ersten Treffer bis Ende
                                            heute_bereich = heute_bereich.substring(0, heute_bereich.indexOf(heute_ende)); // Suchwort am Ende abschneiden
                                            wetter_heute = strip_tags(heute_bereich).trim(); // fertige Ausgabe
                                            if (logging) log("Biowetter in " + stadt_name + " (heute): " + wetter_heute);
                                            setState(pfad + stadt_name.toLowerCase() + ".heute", wetter_heute, true);
                                        } else log("gesuchter Quellcode (www.gesundheit.de) nicht gefunden | Stichwort 'heute'", "error");
                         
                                        // Code für MORGEN extrahieren
                                        let wetter_morgen;
                                        let morgen_start = "<h3>Morgen</h3>";
                                        let morgen_ende = "<div class="; // dazwischen ist Text für morgen 
                                        let pos_morgen_start = response.data.indexOf(morgen_start);
                                        let pos_morgen_ende = response.data.indexOf(morgen_ende);
                                        log("Start: " + pos_morgen_start + " Ende: " + pos_morgen_ende, "debug");
                         
                                        if (pos_morgen_start != -1 && pos_morgen_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                            let morgen_bereich = response.data.substring(pos_morgen_start + morgen_start.length, response.data.length); // Ab aber ohne ersten Treffer bis Ende
                                            morgen_bereich = morgen_bereich.substring(0, morgen_bereich.indexOf(morgen_ende)); // Suchwort am Ende abschneiden
                                            wetter_morgen = strip_tags(morgen_bereich).trim(); // fertige Ausgabe
                                            if (logging) log("Biowetter in " + stadt_name + " (morgen): " + wetter_morgen);
                                            setState(pfad + stadt_name.toLowerCase() + ".morgen", wetter_morgen, true);
                                        } else log("gesuchter Quellcode (www.gesundheit.de) nicht gefunden | Stichwort 'morgen'", "error");
                         
                                        // Code für Kombidatenpunkt mit HTML
                                        if (!wetter_morgen || !wetter_heute) log("Fehler: keine Biowetterdaten extrahiert", "error");
                                        else {
                                            let kombi = "<div class =\"Biowetter\">" +
                                                "<h4>Biowetter (gesundheit.de) für " + stadt_name + "</h4>" +
                                                "<h2>Heute</h2>" +
                                                "<p>" + wetter_heute + "</p>" +
                                                "<h2>Morgen</h2>" +
                                                "<p>" + wetter_morgen + "</p></div>";
                                            setState(pfad + stadt_name.toLowerCase() + "." + biodatenpunkte[2], kombi, true);
                                        }
                                    } else {
                                        log("StatusCode = " + response.statusCode);
                                    }
                                });
                            } catch (e) {
                                log("Fehler (try) leseWebseite (gesundheit.de): " + e, "error");
                            }
                            log("Biowetter eingelesen", "info");
                        }
                         
                        function strip_tags(data) {
                            var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                            return (rueckgabe);
                        }
                         
                        String.prototype.replaceAll = function(find, replace) {
                            var str = this;
                            return str.replace(new RegExp(find.replace(/([.*+?^=!:${}()|[]\/])/g, "\\$1"), "g"), replace);
                        };
                         
                        function main() {
                            bioDpAnlegen();
                            setTimeout(readBiowetter, 3000);
                        }
                         
                        main();
                        schedule("6 6 * * *", main);
                         
                        

                        LG SBorg ( SBorg auf GitHub)
                        Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                        1 Antwort Letzte Antwort
                        1
                        • jvfleJ Online
                          jvfleJ Online
                          jvfle
                          schrieb am zuletzt editiert von
                          #62

                          Vielen Dank für die zusätzliche Arbeit, die du dir extra gemacht hast. Die Anzeige funktioniert jetzt. BG

                          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

                          620

                          Online

                          32.6k

                          Benutzer

                          82.2k

                          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