NEWS
'request' läuft aus - Umstellen auf `axios` - ein Beispiel
-
@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 ? -
@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ückWegen des pollenflug-Skripts in TS habe ich deswegen hier mit @SpikeNbg den "Verursacher" versucht zu erreichen.
Vielleicht kann der uns da helfen -
@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
-
@sborg sagte in Wunsch: Pollenflug-(Adapter/wasauchimmer):
noch pünktlich zum alten Jahr.
Ehrlich??
DANKEAber 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
-
@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
-
@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 ^^ -
@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
-
@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 hilfreichmuss axios noch in der js-Instanz eingetragen werden?
-
@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
-
@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 -
@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 nichtEi gude, läuft es bei dir?
-
@homoran Jepp, + dass muss so aussehen ^^
Gif ist auch animiert, normales HTML-Widget bei mir mit Inhalt
<img src="{0_userdata.0.Wetter.Regen.Hessen_Film}">
-
@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 nichtEDIT: mit"" vor und hinter den {} klappt es jetzt
ich hab dir dann noch ein true spendiert:
setState(idDp_Film, buffer_gif, true);
nochmals DANKE -
@homoran Wollte ich gerade schreiben, er mag dann so die "" von width nicht.
...und Danke fürs true habe ich doch glatt übersehen -
@sborg
ich habe das Thema mal abgespalten und unter Skripte geschoben -
@homoran sagte: ob es noch (alte) Adapter gibt, die im Inneren mit request arbeiten
Solange der Javascript-Adapter noch request() verwendet und es sogar als Variable zu Verfügung stellt, muss man sich keine Gedanken machen.
Notice - module request is available via variable request. There is no need to write var request = require('request');.
-
@paul53 Danke und Guten Rutsch!
-
@homoran Noch mal bisserl gepimpt: https://forum.iobroker.net/post/730745
- Auswahl des Bundeslandes (hab aktuell nur zwei eingepflegt ^^ )
- initial nach Start einmalig Daten holen (unabhängig vom schedule)
- Anlegen der Datenpunkte
Wenn schon, dann auch richtig...