NEWS
per script Rest anfrage senden
-
@mcu
Ja, da war ich schon. Da findet sich auch der link
https://data.geo.admin.ch/api/stac/v1/collections/ch.meteoschweiz.ogd-smn/items
wo die Stationen aufgeführt sind. Aber ich weiss nicht, wie der Befehl aussehen muss, um die aktuellen Daten einer Station abrufen zu können. Die Doku ist für mich nicht verständlich. Aber das kommt sicher davon, dass ich mich mit diesem REST noch nicht auskenne. Bin noch am rechechieren. -
-
httpGet('http://jsonplaceholder.typicode.com/posts', (err, response) => { if (!err) { console.log(response.statusCode); console.log(response.data); } else { console.error(err); } });
Pass die url an und fertig
Dann muss man evtl die Daten noch parsen
let mydata = JSON.parse(response.data) console.log(mydata)
Wenn du dein Programm angepasst hast dann kannst du zur Verfeinerung @paul53 fragen. Hab momentan kein System. Am Handy ist schlecht zu arbeiten.
-
@mcu
Prima, das funktioniert schon mal. Muss ich nur noch schauen, wie das mit dem header (If-None-Match)
funktioniert, und wie ich /collections und /items zusammenbasteln kann.
Edit: Da muss ich mich noch ein bisschen reindenken... -
@delphinis Ich würde dir axois empfehlen. Das git es auch für async und ist damit leichte handelbar. https://axios-http.com/docs/example
Dependency ist bereits in iob, kann also einfach mit require im Script verwendet werden. -
@fernetmenta
ok, ich hab mal das erste einfache Beispiel genommen:const axios = require('axios'); // Make a request for a user with a given ID axios.get('https://data.geo.admin.ch/ch.meteoschweiz.ogd-smn/abo/ogd-smn_abo_t_now.csv') .then(function (response) { // handle success console.log(response); }) .catch(function (error) { // handle error console.log(error); }) .finally(function () { // always executed });
er meldet zwar einen Fehler bei
const axios = require('axios');
Cannot find module 'axios' or its corresponding type declarations.
Aber das programm läuft und es liefert mir ein json, mit den Daten als csv. parsen kann ich dann selbst.
Aber ich weiss jetzt nicht, wo ich z.B. in den Header das "If-None-Match" eingeben kann, und wo ich collections und items definieren kann. Wird das in "paramters" gemacht (wie im zweiten Beispiel)? -
Headers kann man zu z.B. so setzen:
axios.get(URL, { headers: { Authorization: AuthStr } })
Das findet man aber rellativ leicht raus, weil axios quasi der Standard ist für REST API in Node. httpGet hat, glaube ich, auch axois unter der Haube. Also ein zusätzlicher Wrapper. Kann in manchen Fällen gut sein. In diesem Fall aber m.E. nich tausreichen Dokumentiert.
-
@fernetmenta said in per script Rest anfrage senden:
headers:
Danke erst mal. Ich muss mich da noch ein bisschen schlau machen. Jedenfalls kann ich jetzt schon ausprobieren.
Weisst du wieso es einen Fehler bei 'axios' anzeigt? -
@delphinis wie sieht der Fehler genau aus? Bei mit sieht das so aus und ich habe keinen Fehler:
const axios = require('axios'); const apiurl_current = "https://api.openweathermap.org/data/2.5/weather?lat=xxx&lon=xxx&appid=xxx"; const apiurl_forecast = "https://api.openweathermap.org/data/2.5/forecast?lat=xxx&lon=xxx&appid=xxx"; async function getWeatherData() { let jsonData; try { let response = await axios.get(apiurl_current); jsonData = await response.data; setState("0_userdata.0.weather.current", JSON.stringify(jsonData), true); response = await axios.get(apiurl_forecast); jsonData = await response.data; setState("0_userdata.0.weather.forecast", JSON.stringify(jsonData), true); } catch(error) { console.error(error); } }
Wie alt ist deine Installation. Scheint ein älteres "Problem" gewesen zu sein: https://forum.iobroker.net/topic/70578/gelöst-axios-hinzufügen-zu-script
-
@fernetmenta
Ich hab das im Script-Adapter eingetragen:
-
@delphinis Das sollte eigentich nicht notwendig sein. Steht bei mir auch nicht drin. Im Forum-Thread (siehe obe) wurde es anscheinend über ein Update von iob gelöst. Ist deine Version so alt? Der Thread ist ja schon von 2023.
-
@fernetmenta sagte in per script Rest anfrage senden:
Ist deine Version so alt?
ich erinnere mich auch dass die Welle damals bei modulen, die bereits im iob js-adapter integriert sind und zusätzlich installiert wurden "grundlos" erschien.
Der Eintrag von axios in der Instanz muss nicht sein.
-
@homoran said in per script Rest anfrage senden:
Der Eintrag von axios in der Instanz muss nicht sein.
ok, dann nehm ich den wieder raus.
Was heisst eigentlich "den iob updaten"? Ist das der Admin-Adapter? Der ist schon ein bisschen älter, aber ob der so alt ist weiss ich nicht:
7.6.17
aktuell 7.7.2 -
@delphinis zeig mal die Langfassung von
iob diag
-
@homoran said in per script Rest anfrage senden:
iob diag
Sorry, soviel ich weiss geht iob diag auf windows nicht. Gibt es da was ähnliches?
-
aktuell 7.7.2
Oh ja, dann scheint deine Nodejs-Version auch noch aus der Steinzeit zu sein. Ich habe 8.9.2 (Node v22).
Die Leute sagen, dass sich das UI in den Versionen täuschen kann. Aber für einen ersten Anhaltpunkt tut es das. Hier unter Hosts:
-
-
ich hab sonst noch:
c:\ioBroker>iob info
Platform : Windows
os : win32
Architecture : x64
CPUs : 4
Speed : 1997 MHz
Model : Intel(R) Celeron(R) J4125 CPU @ 2.00GHz
RAM : 7.8 GB
System uptime : 11d. 11:16:17
Node.js : v20.18.1
time : 1760261026856
timeOffset : -120
NPM : 10.8.2
adapters count : 580
Disk size : 114.2 GiB
Disk free : 49.2 GiBc:\ioBroker>iob version
7.0.3 -
@delphinis Ja, dachte mir, dass Node älter ist als 22. Wie hier beschrieben, keine Hektik, aber einplanen: https://forum.iobroker.net/topic/81893/wir-empfehlen-node-js-22-x
-
@delphinis sagte in per script Rest anfrage senden:
Gibt es da was ähnliches?
nicht dass ich wüsste, aber
iob list instances
undiob list adapters --i
sollten was ausspucken