NEWS
JSON Abfrage per Request liefert nur Matsch
-
ok nochmal nachtrag.
irgendwas scheint bei dieser abfrage mit der request bibliothek nicht zu stimmen.
was auch immer die durcheinanderbringt oder man noch eine option setzen muss.auch das folgende funktioniert nicht
try { const request = require("request"); request.get("https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json", async(error, response, result) => { console.log(response); }).on("error", (e) => { console.error(e); }); } catch (e) { console.error(e); }
-
@oliverio Leute, ich habs mittlerweile gefunden...
Bin einfach mal auf ein Ubundu in's Terminal und hab mal geschaut was mit "wget" so passiert...
Da gibts noch die Option "-d" um da mehr Infos raus zu bekommen...
-> Das was da kommt ist GZIP...
"Content-Encoding: gzip" steht da in der Ausgabe.
Der Browser ist so schlau und verwurstet es gleich oder bekommt es evtl bereits anders ausgeliefert, aber einwget https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json -O Arber.json.gzip && gunzip Arber.json.gzip
Liefert dann das korrekte File
Jetzt muss ich das nur noch meinem Blockly beibringen -
dazu müsste man in blockly, an der stelle an der die url übergeben wird
ein options objekt übergeben,das würde dann ungefähr so aussehen
const options = { url: 'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json', method: "get", gzip: true, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' } };
https://www.npmjs.com/package/request#:~:text=encoding%3A null.)-,gzip,-- if true%2C add
ob das in blockly geht weiß ich nicht
hab in javascript gerade getestet, funktioniert
try { const options = { url: 'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json', method: "get", gzip: true, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' } }; const request = require("request"); request.get(options, async(error, response, result) => { console.log(response); }).on("error", (e) => { console.error(e); }); } catch (e) { console.error(e); }
-
@oliverio Danke für deine Mühen... aber bei JS setzt es aus bei mir
Was ich geschafft hätte, ich kann es mit einem "exec" block runterladen und dann auch entpacken, hätte lokal ein JSON liegen, aber da bin ich erneut gescheitert, denn der "request" Block kann scheinbar nix lokales verarbeiten, oder ich bin erneut mal wieder zu doof... -
@schrecki
Was ich damit sagen wollte ist, blockly Request verwendet im Hintergrund die Bibliothek Request. Und die hat die Möglichkeit ein Optionen Objekt mitzugeben. Wie gesagt keine Ahnung ob der blocklybaustein das kann.
Wenn nicht dann kratzt der echt nur an der Oberfläche der Möglichkeiten.
Du kannst ja mal bei GitHub zum Adapter ein issue anlegen. -
@oliverio sagte in JSON Abfrage per Request liefert nur Matsch:
Du kannst ja mal bei GitHub zum Adapter ein issue anlegen.
wo request schon ewig als deprecated getaggt ist?
-
@homoran
Das hab ich mir auch gedacht, wird nichts nützen vermutlich.
Aber i hab einen Plan B in der Hinterhand... Ich werde des nochmal probieren mit "exec", hole mir das File, unzip (so weit war ich ja schon), dann auf's NAS schieben und von da kann ich's hoffentlich wieder mit "requests" abholen vom dortigen Webserver.
Is von hinten durch die Brust ins Auge, aber würde funktionieren - vermutlich.
Plan Feature Request beim DWD Adapter.
Aktuell is es noch so, ich habe die Daten im iobroker, greife sie von einer Pimatic Installation ab. Das hatte ich vor iobroker. Dort gibt es ein DWD Plugin das genau das kann. Der Adapter von iobroker kann "nur" Warnungen. Evtl könnte man ihn einfach um die Funktion der Stationsabfrage erweitern. -
@schrecki sagte in JSON Abfrage per Request liefert nur Matsch:
Evtl könnte man ihn einfach um die Funktion der Stationsabfrage erweitern.
mach ich mit dem Parser Adapter
-
-
@homoran den wenn ich kapieren würde
Ich befürchte den werd ich nie verstehen... -
@mickym
Wenn du mir sagst wie das geht?
Sorry, da steh ich grad komplett am Schlauch. Ich dachte immer, entweder oder. Javascript oder Blockly, aber beides mischen? -
@schrecki Nehmen wir mal an Du willst diesen Code von @OliverIO verwenden:
try { const options = { url: 'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json', method: "get", gzip: true, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' } }; const request = require("request"); request.get(options, async(error, response, result) => { console.log(response); }).on("error", (e) => { console.error(e); }); } catch (e) { console.error(e); }
oder Du nimmst den Code mit der axios Bibliothek - ich nehm mal nur den mit der request Bibliothek.
Ich glaube zwar - dass das nicht ganz richtig ist, weil ich den konsolen output abfrage, aber es scheint zu funktionieren:
Du musst halt @OliverIO oder @paul53 fragen, wie man das asynchron einbindet damit Du was im Blockly zurückbekommst. Im Moment ist das nur die Konsolenausgabe der Funktion - aber keine Rückgabe in die response Variable. - Aber ich kenn mich mit Puzzeln nicht so gut aus.
Hier das Blockly mit dem Code von @OliverIO
-
Weiter oben ist die Version mit axios die funktioniert
-
@oliverio Na die request, wie Du sie getestet hast ja auch - dann muss er die axios Bibliothek nicht einbinden. Ich stehe nur wieder mit der asynchronen JS verarbeitung auf Kriegsfuss. Der Konsolenoutput stammt ja von Deinem Code - in dem Du in die Konsole schreibst.
-
@mickym Okay, ich habs bis hierhin jetzt auch geschafft, aber nun steh ich wieder...
Schaffe es nicht mit meinen Kenntnissen die Werte da raus zu ziehen und in die Objekte zu schreiben...
Zugegeben, der Hellste bin ich ja nun nicht wenns bei Blockly da in die Tiefe geht, hab mir schon öfters mal Beiträge in Foren angesehen um mir das TV-Programm als Telegram schicken zu lassen, Quelle der TV Spielfilm Adapter...
Ist ja ähnlich hier, ich hab ned Text und will da Info's draus haben.
Der Groschen will da einfach nicht fallen wie ich das angehen muss
Ich will mir jetzt nicht von euch ne fertige Lösung basteln lassen, ein Forum sollte dazu da sein um Hilfe zur Selbsthilfe zu erhalten und um es zum Schluss auch zu verstehen was ich gemacht habe. Aber bei manchen Dingen fehlt mir halt leider einfach auch der nötige Background
An der Stelle aber mal ein fettes DANKE an alle die sich hier schon eingebracht haben! -
@schrecki Na ich probier noch bissi - ich kämpfe immer noch mit der asynchronen JS Verarbeitung - ich melde mich wenn ich weiter gekommen bin. Wie man allgemein ja weiß bin ich kein Puzzle-Freund - deswegen ist das für mich hier immer wieder eine Herausforderung.
-
@mickym wenn ich Zeit (Tochter mit 15Mon. will bespaßt werden ) hab werd ich sicher auch wieder testen, Trial and Error Prinzip
Macht's halt schwierig wenn man von manchen Bausteinen schon nicht detailliert weiß was sie tun und wie sie funktionieren.
Aber man kann dadurch nur lernen! Bin mir sicher, wenn der Groschen mal gefallen is, öffnet das Tür und Tor für weitere Projekte und Integrationen in iobroker. Die Möglichkeiten sind theoretisch ja endlos -
@Na dann musst halt die axios Bibliothek nehmen . Mit dem request Teil komm ich auch nicht zurecht.
Mit der gehts - und dann kannst auch auf alles Zugreifen.
Du musst die Bibliothek hat im JS Adapter einbinden.
Mit der Request und diesem async habe ich es auch nicht hinbekommen - aber so kannst Du nun im Blockly alle URLs aufrufen und auch auf die Eigenschaften im Objekt zugreifen.
-
@mickym sagte in JSON Abfrage per Request liefert nur Matsch:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="Drc3,5E3dtsooSRbdv}K">url</variable> <variable id="!eY@+?{]SiMQl]U-]_S$">response</variable> </variables> <block type="procedures_defcustomreturn" id="=Ib|l%wE0-!(2!$i:6GY" x="113" y="38"> <mutation statements="false"> <arg name="url" varid="Drc3,5E3dtsooSRbdv}K"></arg> </mutation> <field name="NAME">URL mit gzip</field> <field name="SCRIPT">CmNvbnN0IGF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKTsKY29uc3QgdXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTYuMC4wLjAgU2FmYXJpLzUzNy4zNiI7IC8vdXNlciBhZ2VudCwgc28gZGFzIGRlciBhYnJ1ZiB3aWUgdm9uIGVpbmVtIGJyb3dzZXIgYXVzc2llaHQsIGFuc29uc3RlbiB2ZXJ3ZW5kZXQgYXhpb3Mgc2VpbmVuIGVpZ2VuZW4gdWEtc3RyaW5nCiAKdHJ5IHsKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHVybCx7CiAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICB1c2VyQWdlbnQ6IHVzZXJBZ2VudAogICAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7Cn0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKCdGZWhsZXIgQWJydWYnLCBlcnJvcik7Cn0=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="variables_set" id="ugEH}nuaFt2cgP:-pOl#" x="113" y="88"> <field name="VAR" id="!eY@+?{]SiMQl]U-]S$">response</field> <value name="VALUE"> <block type="procedures_callcustomreturn" id="
5Lbo9XrR+}/[H_K8x^"> <mutation name="URL mit gzip"> <arg name="url"></arg> </mutation> <value name="ARG0"> <block type="text" id="Q/3.^E$8=iXD4
7Q!/Y~"> <field name="TEXT">https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json</field> </block> </value> </block> </value> <next> <block type="debug" id="(Ckl_s:[HiNpm,cZU%"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="=c/u4J;{z?`e3o6dIvCL"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="jf^V/=:|Da(~L4ki#T%L"> <field name="VAR" id="!eY@+?{]SiMQl]U-]S$">response</field> </block> </value> <next> <block type="debug" id="Z;4(${0FK-z3YuU6p:nj"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="JkWAaTGjvOM{VX_dg%D{"> <field name="TEXT">test</field> </shadow> <block type="get_attr" id="-DITH1uqE@?858G@c(xQ"> <value name="PATH"> <shadow type="text" id="1~Of@S^wJPK](bYLFVT"> <field name="TEXT">pressure</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id=",[q*nBjNR!+^[+I(,abd"> <field name="VAR" id="!eY@+?{]SiMQl]U-]_S$">response</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </xml>Du bist mein Held!
Es funktioniert!!!Vielen vielen Dank für die Hilfe!!!
Made my day!