Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Skript Pollenflug

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Skript Pollenflug

    This topic has been deleted. Only users with topic management privileges can see it.
    • sigi234
      sigi234 Forum Testing Most Active @Ro75 last edited by

      @ro75

      Super, eine Ausgabe als json-table wäre noch toll.

      Ro75 2 Replies Last reply Reply Quote 0
      • Ro75
        Ro75 @sigi234 last edited by

        @sigi234 das sollte kein Problem sein.

        Ro75.

        1 Reply Last reply Reply Quote 1
        • Ro75
          Ro75 @sigi234 last edited by

          @sigi234 Ich habe das Skript im ersten Post aktualisiert. Jetzt mit JSON.

          Ro75.

          1 Reply Last reply Reply Quote 1
          • Homoran
            Homoran Global Moderator Administrators last edited by

            @Ro75

            zur Info:
            Es gab vor 10 Jahren mal ein Skript von @pix .
            Da wurden die Pollenflugdaten auch von wetterdotcom geholt.

            Irgendwann wurde das geblockt.

            Ro75 1 Reply Last reply Reply Quote 0
            • Ro75
              Ro75 @Homoran last edited by Ro75

              @homoran das kenn ich nicht. Das läuft bei mir nun über 1 Jahr. Vielleicht wurde in dem anderen Skript zu oft nach Daten "gegraben". Ich hole nur 3x am Tag Daten ab - das reicht völlig. Ich lasse mich überraschen.

              EDIT: Alternativ könnte man ja einen wechselnden USER-Agenten implementieren.

              Ro75.

              Neuschwansteini 1 Reply Last reply Reply Quote 0
              • Neuschwansteini
                Neuschwansteini @Ro75 last edited by

                @ro75

                es gibt auch einen Adapter... der holt nicht alle Pollen..

                Ro75 Homoran 2 Replies Last reply Reply Quote 0
                • Ro75
                  Ro75 @Neuschwansteini last edited by Ro75

                  @ilovegym sagte in Skript Pollenflug:

                  der holt nicht alle Pollen

                  genau. Das Skript kann alle abholen. Oder man ändert einfach "const aPollen" an, in dem man nur die Pollen in dem Array hat, die man braucht.

                  z.B.

                  const aPollen   = 'Ambrosia,Birke,Brennnessel,Buche,Gräser,Hasel,Holunder,Kiefer,Kieferngewächse,Platane,Roggen,Schimmel,Tanne,Ulme,Walnuss,Wegerich,Weide'
                  

                  Ro75.

                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @Neuschwansteini last edited by Homoran

                    @ilovegym sagte in Skript Pollenflug:

                    der holt nicht alle Pollen..

                    weil der die offenen Daten des DWD nutzt und es dort nicht mehr Pollenarten gibt

                    @Ro75 zur Info

                    /* Pollenflug Parser von wetteronline.de
                    
                    http://forum.iobroker.net/viewtopic.php?f=23&t=2799&sid=936235bdac98a70a1d8672897d334a07#p25266
                    
                    05.05.2016 erstellt von steinwedel für homoran
                    06.05.2016 Anpassung durch pix
                    */
                    
                    var url = "https://www.wetteronline.de/pollen/koeln";
                    var pfad = "WetterOnline.pollenvorhersage.";
                    var logging = false;
                    
                    // ab hier nix ändern
                    var Pollenarten = ['Hasel','Pappel','Weide','Ulme','Birke','Buche','Ampfer','Roggen','Graeser','Eiche','Wegerich','Beifuss','Ambrosia', 'Erle'];
                    var tage_vorhersage = ['heute','morgen','uebermorgen'];
                    var request = require('request');
                    
                    function dpAnlegen(y) {
                       for(var i=0;i<Pollenarten.length;i++) {
                           createState(pfad + tage_vorhersage[y] + '.' + Pollenarten[i].toLowerCase(),0, {
                               name: 'WetterOnline Pollenvorhersage ' + tage_vorhersage[y] + ' ' + Pollenarten[i],
                               desc: 'Vorhersage für Pollenbelastung für ' + tage_vorhersage[y] + ' durch ' + Pollenarten[i],
                               type: 'number'
                           });
                       }
                    }
                    
                    function readPollenwetter(x) {
                       var options = {
                           url: ((x>0) ? url + '?fcdatstr=' + tag(x) : url), // korrekten Link erstellen
                           headers: {
                               'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
                           }
                       };    
                       try {
                           request(options, function (error, response, body) {
                               if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                                   body=body.replaceAll(String.fromCharCode(13),"");
                                   body=body.replaceAll(String.fromCharCode(10),"");
                                   body=body.replaceAll(String.fromCharCode(9)," ");
                                   body=strip_tags(body);
                                   for(var i=0;i<Pollenarten.length;i++) {
                                       setState(pfad + tage_vorhersage[x] + '.' + Pollenarten[i].toLowerCase(),{val: GetPollenIndex(Pollenarten[i],body), ack: true});
                                       if (logging) log(Pollenarten[i].toLowerCase() + ' ' + GetPollenIndex(Pollenarten[i],body));
                                   }
                               } else {
                                   log("StatusCode="+response.statusCode);
                                   log(error,'error');                               // Error beim Einlesen
                               }
                           });
                       } catch (e) {
                           log('Fehler (try) leseWebseite: ' + e, 'error');
                       }
                    }
                    
                    function strip_tags(data) {
                       var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                       return(rueckgabe);
                    }
                    
                    function GetPollenIndex(pflanze, html) {
                       var code={'kein':0, 'schwach':1, 'mäßig':2, 'stark':3}; 
                       var result="";
                       var start=html.indexOf(pflanze)+pflanze.length;
                       result=html.slice(start);
                       result=result.trim();
                       var stop=result.indexOf(' ');
                       result=result.slice(0,stop);
                       return code[result];
                    }
                    
                    String.prototype.replaceAll = function(find, replace) {
                       var str = this;
                       return str.replace(new RegExp(find.replace(/([.*+?^=!:${}()|[]\/\])/g, "\\$1"), 'g'), replace);
                    };
                    
                    function tag (abstand) { // Eingabe 0, 1, 2, ...
                       var jetzt = new Date();
                       jetzt.setHours(0);
                       jetzt.setMinutes(0);
                       jetzt.setSeconds(0);
                       jetzt.setMilliseconds(0);
                       var newdate = new Date();
                       newdate.setTime(jetzt.getTime() + (24 * 60 * 60 * 1000 * abstand) ); // heute + anzahl tage ins Millisekunden
                       var date = newdate.getDate();
                       var month = newdate.getMonth()+1;
                       var year = newdate.getFullYear();
                       date = (date < 10) ? '0' + date : date;
                       month = (month < 10) ? '0' + month : month;
                       var rueckgabe = year.toString()+month.toString()+date.toString();
                       if (logging) log('Datum in Link: ' + rueckgabe);
                       return (rueckgabe); // Ausgabe z.B. 20160506
                    }
                    
                    // alle Tage aus dem Array durchgehen (x)
                    function main() {
                       for (var x = 0; x < tage_vorhersage.length; x++) {
                           dpAnlegen(x);
                           readPollenwetter(x);
                       }
                    }
                    
                    main();
                    schedule("*/5 * * * *", main);
                    

                    sehe gerade, das war wetteronline!
                    Sorry!

                    1 Reply Last reply Reply Quote 0
                    • Nashra
                      Nashra Most Active Forum Testing last edited by

                      Hallo @Ro75
                      welche Widgets hast Du für die Darstellung genutzt?

                      Ro75 1 Reply Last reply Reply Quote 0
                      • Ro75
                        Ro75 @Nashra last edited by

                        @nashra in dem Fall habe ich Grafana benutzt. Man kann ja einzelne DP historisieren und dann mit Flot, ECharts oder Material Design anzeigen lassen. Alternativ gibt es noch ein JSON für ein JSON-Widget.

                        Ro75

                        Nashra 1 Reply Last reply Reply Quote 0
                        • Nashra
                          Nashra Most Active Forum Testing @Ro75 last edited by

                          @ro75 sagte in Skript Pollenflug:

                          @nashra in dem Fall habe ich Grafana benutzt. Man kann ja einzelne DP historisieren und dann mit Flot, ECharts oder Material Design anzeigen lassen. Alternativ gibt es noch ein JSON für ein JSON-Widget.

                          Ro75

                          Ah, alles klar. Sah so aus als wenn das Widgets sind aber Grafana habe ich ja auch und versuchs mal damit, danke.

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          820
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          5
                          12
                          698
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo