Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. 'request' läuft aus - Umstellen auf `axios` - ein Beispiel

    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

    'request' läuft aus - Umstellen auf `axios` - ein Beispiel

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

      MOD-Edit:
      Das ist eine Abspaltung von
      https://forum.iobroker.net/post/730415
      Wunsch: Pollenflug-(Adapter/wasauchimmer):


      @homoran sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

      ich nutze es heute noch...

      Die Tage sind aber gezählt:

      request(options, function (error, response, body):void {
      

      https://www.npmjs.com/package/request

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

        @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

        Die Tage sind aber gezählt:

        und dann?

        SBorg 1 Reply Last reply Reply Quote 0
        • SBorg
          SBorg Forum Testing Most Active @Homoran last edited by

          @homoran Naja, wenn sie den Support ab NPM xxx einstellen (immerhin ist es seit 2 Jahren bekannt), wird "request" nicht mehr funktionieren = er kann die Webseite nicht mehr laden/parsen == no more data

          Deswegen bauen die meisten auf "axios" um. Ich finde bei mir auch immer noch Skripte mit "request".
          Wenn es nur 2 oder 3 Skripte sind, gibt es halt bspw. dann keine Pollenflug- oder Ozondaten usw. Ich habe aber etliche, dann würde schlagartig die Hälfte des SmartHomes nicht mehr funktionieren. Nur keine Daten in der VIS ist eine Sache, aber Daten die dann fürs SH wichtig sind/benötigt werden...

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

            @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

            ch finde bei mir auch immer noch Skripte mit "request".

            ich auch, deswegen die Frage

            @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

            Deswegen bauen die meisten auf "axios" um

            Da ich aber js-Legastheniker bin nutzt mir das gar nichts

            SBorg 1 Reply Last reply Reply Quote 0
            • SBorg
              SBorg Forum Testing Most Active @Homoran last edited by

              @homoran sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

              Da ich aber js-Legastheniker bin nutzt mir das gar nichts

              😢
              Biowetter (ich glaube das nutzt du auch, zumindest stand da IMO was im Komentar) habe ich die Tage für @Nashra umgebaut (das ist aber in JS, nicht wie hier TS).
              Sonst hilft wohl nur beim Ersteller anfragen, sofern sie halt noch aktiv sind...

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

                @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                Biowetter (ich glaube das nutzt du auch, zumindest stand da IMO was im Komentar)

                Habe gerade meine Skripte nach request durchsucht.
                Sind Gottseidank nur 8, davon auch nur 4 aktiv.

                Ein kurzes mal als Beispiel, mit dem ich mir die Regenradarkarte vom DWD abhole

                const request = require('request').defaults({ encoding: null });
                const url = 'http://www.dwd.de/DWD/wetter/radar/rad_nrw_akt.jpg';
                const url_Film = 'https://www.dwd.de/DWD/wetter/radar/radfilm_nrw_akt.gif';
                const idDp = '0_userdata.0.Wetter.Regen.NRW';
                const idDp_Film = '0_userdata.0.Wetter.Regen.NRW_Film';
                 
                schedule('*/7 * * * *', function() {
                    request(url, function(err, response, data) {
                        if(!err && data) {
                            data = "data:" + response.headers["content-type"] + ";base64," + new Buffer(data).toString('base64');
                            setState(idDp, data);
                        }
                    });
                        request(url_Film, function(err, response, data) {
                        if(!err && data) {
                            data = "data:" + response.headers["content-type"] + ";base64," + new Buffer(data).toString('base64');
                            setState(idDp_Film, data);
                        }
                    });
                });
                

                Wenn es dann nicht zu schwer ist request gegen axios zu tauschen und ich weiß wie, denke ich, dass ich die anderen auch hinbekomme.

                Ich frage mich nur ob es noch (alte) Adapter gibt, die im Inneren mit request arbeiten

                SBorg paul53 2 Replies Last reply Reply Quote 0
                • SBorg
                  SBorg Forum Testing Most Active @Homoran last edited by

                  @homoran sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                  Ich frage mich nur ob es noch (alte) Adapter gibt, die im Inneren mit request arbeiten

                  Im Prinzip ist der Kern des Adapters auch nur "normales" JS
                  Man weiß ja auch nicht wann es überhaupt soweit ist. Ob ein Adapter (bzgl. Admin + JSC) dann ohne jegliche Wartung noch nach 2-3 Jahren überhaupt läuft? Hilft nur abwarten und Kaffee trinken...

                  Hier mal das umgebaute Biowetter.

                  Im Prinzip #1 mit

                  const axios = require('axios');
                  

                  ersetzen und die Optionen hinzufügen/oder ändern:

                          const options = {
                              method: 'get',
                              url: url,
                              headers: { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1" }
                          };
                  

                  request (#7 +#14) ersetzen

                  axios(options).then(function (response) {
                  

                  Wäre ja schön wenn es so einfach wäre, aber jetzt kommt leider der "tricky"-Teil.
                  "axios" unterstützt so leider wie in deinem Fall nicht "err". Man muss also mittels try/catch arbeiten, oder begnügt sich mit einem simplen (für Zeile #9)

                  if (response.status == 200) {
                  

                  Kein genauer Fehler, aber irgendwas an Daten konnte gelesen werden...

                  #10 + #16 😧
                  Offen gestanden keine Ahnung von TS was da genau wie gelesen wird, aber axios unterstützt "response.headers", also ev. funktioniert es dann schon ?

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

                    @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                    Offen gestanden keine Ahnung von TS was da genau wie gelesen wird,

                    wenn du das auf mein kleines Skript beziehst so ist das einfaches js.
                    ich versuche mal mein Glück

                    Wegen des pollenflug-Skripts in TS habe ich deswegen hier mit @SpikeNbg den "Verursacher" versucht zu erreichen.
                    Vielleicht kann der uns da helfen

                    SBorg 1 Reply Last reply Reply Quote 0
                    • SBorg
                      SBorg Forum Testing Most Active @Homoran last edited by SBorg

                      @homoran Sodele, noch pünktlich zum alten Jahr. Die Kodierung der Bilder war "etwas" tricky (wenn man halt keine Ahnung davon hat... 🤷‍♂️ ) :

                      /*hat SBorg verbrochen... V0.0.1 vom 01.01.2022
                      
                        Codierung für Bundesländer (lt. Sortierung des DWD; beginnend mit 0):
                          0 =
                          1 = Bayern
                          3 = Hessen
                      */
                      
                      // Usereinstellungen
                      const BuLand = 1;                               // für welches Bundesland?
                      const DP = "0_userdata.0.Wetter.Regen.";        // wo sollen die Daten angelegt werden?
                      
                      
                      // ab hier gibt es nichts mehr zu ändern-------------------------------------------------------
                       // Abkürzung lt. URL
                       let url_arr = ["", "bay", "", "hes"];
                      
                       // Anzeigename des Bundeslandes
                       let BuLa_arr = ["", "Bayern", "", "Hessen"];
                      
                      const axios = require('axios'); 
                      const url_jpg = 'https://www.dwd.de/DWD/wetter/radar/rad_' + url_arr[BuLand] + '_akt.jpg';
                      const url_gif = 'https://www.dwd.de/DWD/wetter/radar/radfilm_' + url_arr[BuLand] + '_akt.gif';
                      const idDp = DP + BuLa_arr[BuLand];
                      const idDp_Film = DP + BuLa_arr[BuLand] + '_Film';
                      
                      
                      makeDataPoints(); // check ob DPs existieren
                      setTimeout(function() { getData(); }, 10000); // initial 10 Sekunden nach Skriptstart einmalig Daten holen  
                      schedule('*/8 * * * *', getData);
                      
                      function getData() {
                          let buffer, buffer_gif;
                          axios
                              .get(url_jpg, {
                                responseType: 'arraybuffer'
                              })
                          .then(response => {
                              buffer = "data:" + response.headers['content-type'] + ";base64, " + Buffer.from(response.data, 'binary').toString('base64');
                              setState(idDp, buffer, true);
                          })
                          .catch(ex => {
                              log("Fehler bei JPG: " + ex,"warn");
                          });
                      
                      
                          axios
                              .get(url_gif, {
                                responseType: 'arraybuffer'
                              })
                          .then(response => {
                              buffer_gif = "data:" + response.headers['content-type'] + ";base64, " + Buffer.from(response.data, 'binary').toString('base64');
                              setState(idDp_Film, buffer_gif, true);
                          })
                          .catch(ex => {
                              log("Fehler bei Film: " + ex,"warn");
                          });
                      }
                      
                      function makeDataPoints() {
                          if (!existsState(idDp)) { createState(idDp, "", {name: "Regenradar für " + BuLa_arr[BuLand] , type: "mixed", role: "state"}); }
                          if (!existsState(idDp_Film)) { createState(idDp_Film, "", {name: "Regenradar für " + BuLa_arr[BuLand], type: "mixed", role: "state"}); } 
                      }
                      

                      * EDIT * ...und natürlich nur mit dem "richtigen" Bundesland funktionsfähig 😉

                      Homoran 2 Replies Last reply Reply Quote 1
                      • Homoran
                        Homoran Global Moderator Administrators @SBorg last edited by Homoran

                        @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                        noch pünktlich zum alten Jahr.

                        Ehrlich??
                        DANKE

                        Aber so war das nicht gemeint.
                        ich seh mir das gleich an, in der Hoffnug es zwar nicht unbedingt zu verstehen, aber wenigstens nachvollziehen zu können

                        @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                        //hat SBorg verbrochen...

                        😂

                        und guten Rutsch 🍾

                        SBorg 2 Replies Last reply Reply Quote 0
                        • SBorg
                          SBorg Forum Testing Most Active @Homoran last edited by

                          @homoran sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                          Aber so war das nicht gemeint.

                          Habe ich auch nicht so verstanden. Aber bei mir ist jeder Tag mehr oder minder gleich, außer dass es aktuell mehr scheppert 😉

                          1 Reply Last reply Reply Quote 0
                          • SBorg
                            SBorg Forum Testing Most Active @Homoran last edited by

                            @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                            //hat SBorg verbrochen...

                            😂

                            und guten Rutsch 🍾

                            Danke, ebenso 🙂
                            Ich schreibe so was weniger wg. Copyright (ja, ne, is klar...) oä. rein, nur habe ich auch paar Scripte von denen ich noch gern wüsste von wem sie sind. So sieht man es wenigstens später.
                            ...und (c) ist eh mehr ein Witz, denn alles andere ^^

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

                              @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                              • EDIT * ...und natürlich nur mit dem "richtigen" Bundesland funktionsfähig

                              und mit den richtigen DPs, sonst heisst es
                              State "0_userdata.0.Wetter.Regen.Hessen" not found

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

                                @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                                nur habe ich auch paar Scripte von denen ich noch gern wüsste von wem sie sind

                                und nur dadurch, dass es im TS für die Pollen drin stand hab ich es wieder gefunden.
                                Ist wirklich hilfreich

                                muss axios noch in der js-Instanz eingetragen werden?

                                SBorg 2 Replies Last reply Reply Quote 0
                                • SBorg
                                  SBorg Forum Testing Most Active @Homoran last edited by

                                  @homoran Ich hatte noch kurz überlegt ob ich beim Start abfrage ob die DPs existieren. Falls nicht --> anlegen
                                  Werde ich (für mich) noch rein hämmern, oder kannst dich ja mal selbst daran versuchen.

                                  Ich nämlich faul, soll alles von alleine passieren, ist ja ein SmartHome, dann soll es auch smart sein 👍

                                  1 Reply Last reply Reply Quote 0
                                  • SBorg
                                    SBorg Forum Testing Most Active @Homoran last edited by

                                    @homoran sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                                    muss axios noch in der js-Instanz eingetragen werden?

                                    Normalerweise nicht, da es Bestandteil von NPM ist und mit installiert wird.
                                    Sieht man aber einfach: DPs befüllt, dann lüppt es auch ohne Eintrag

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

                                      @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                                      Sieht man aber einfach: DPs befüllt, dann lüppt es auch ohne Eintrag

                                      zumindest gibt es jetzt keinen Fehler mehr, aber ich habe kein Bild in der vis
                                      Die URLs passen, hab ich getestet, im jpg ist ein Eintrag, im gif nicht

                                      Ei gude, läuft es bei dir?

                                      SBorg 1 Reply Last reply Reply Quote 0
                                      • SBorg
                                        SBorg Forum Testing Most Active @Homoran last edited by

                                        @homoran Jepp, + dass muss so aussehen ^^
                                        Bild 2.png

                                        Gif ist auch animiert, normales HTML-Widget bei mir mit Inhalt

                                        <img src="{0_userdata.0.Wetter.Regen.Hessen_Film}">
                                        
                                        Homoran 1 Reply Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @SBorg last edited by Homoran

                                          @sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):

                                          normales HTML-Widget bei mir mit Inhalt

                                          <img src={0_userdata.0.Wetter.Regen.NRW_Film} width="260px">

                                          und da kommt jetzt nichts mehr
                                          auch beim Feststehenden Bild nicht

                                          EDIT: mit"" vor und hinter den {} klappt es jetzt

                                          Wetter_axios.png

                                          ich hab dir dann noch ein true spendiert: setState(idDp_Film, buffer_gif, true);
                                          nochmals DANKE

                                          SBorg 1 Reply Last reply Reply Quote 0
                                          • SBorg
                                            SBorg Forum Testing Most Active @Homoran last edited by

                                            @homoran Wollte ich gerade schreiben, er mag dann so die "" von width nicht.
                                            ...und Danke fürs true habe ich doch glatt übersehen 😉

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            384
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            24
                                            1006
                                            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