NEWS
Umstellung auf "axios"
-
Hallo,
in meinem Skript nutze ich noch "request" viele sprechen jetzt von einer Umstellung auf "axios"
sollte ich dies auch in meinem Fall umstellen? und was müste ich dafür alles ändern?function() { var request= require('request'); request.post({ url: 'http://xx.xx.xx.xx/daqdata.cgi?key=xxx...xxx', encoding: 'latin1' }, function(error, response, body){ if (body) { var parts = body.split('\n'); var parts_Guntamatic = parts[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); var parts_Guntamatic = parts[1]; setState('Guntamatic_Aussentemperatur_1', parts_Guntamatic, true); usw..........
-
Es müsste ungefähr so aussehen.
bei dem Encoding war ich mir nicht ganz sicher, aber das müsste es sein.
Ob latin ein gültiger Wert ist weiß ich nicht.axios.post('http://xx.xx.xx.xx/daqdata.cgi?key=xxx...xxx', { responseEncoding: 'latin' }) .then(function (response) { console.log(response); if (respnse.data) { var parts = respnse.data.split('\n'); var parts_Guntamatic = parts[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); var parts_Guntamatic = parts[1]; setState('Guntamatic_Aussentemperatur_1', parts_Guntamatic, true); }) .catch(function (error) { console.log(error); });
-
@oliverio Psst, ...und für die C&P - Fraktion kaufe ich für 10 Cent noch zwei "o" dazu
(für die Fraktion die noch die Sesamstrasse kennt...)Zeile #6 bis #8
if (response.data) { var parts = response.data.split('\n');
-
@sborg
stimmt.
die o's waren aber bei meinem nick schon verbrauchtaxios.post('http://xx.xx.xx.xx/daqdata.cgi?key=xxx...xxx', { responseEncoding: 'latin' }) .then(function (response) { console.log(response); if (response.data) { var parts = response.data.split('\n'); var parts_Guntamatic = parts[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); var parts_Guntamatic = parts[1]; setState('Guntamatic_Aussentemperatur_1', parts_Guntamatic, true); }) .catch(function (error) { console.log(error); });
Aber für die C&P-Fraktion habe ich noch 2 Debug-Zeilen übrig gelassen
-
@oliverio sagte in Umstellung auf "axios":
Ob latin ein gültiger Wert ist weiß ich nicht.
Laut https://nodejs.org/api/buffer.html#buffers-and-character-encodings müsste das
latin1
sein (mit 1 am Ende). -
Super DANKE!!!
nach einer knappen Stunde finde ich den Fehler nicht...
19:27:04.325 error javascript.0 (32211) script.js.Guntamatic.Guntamatic_Daten_aus_Http_Seite_Parsen_axios compile failed: at script.js.Guntamatic.Guntamatic_Daten_aus_Http_Seite_Parsen_axios:
createState('Guntamatic_Betrieb_0'); createState('Guntamatic_Aussentemperatur_1'); createState('Guntamatic_Kesseltemperatur_3'); createState('Guntamatic_Leistung_5'); createState('Guntamatic_Rücklauf_6'); createState('Guntamatic_CO2_Gehalt_8'); createState('Guntamatic_Puffer_oben_17'); createState('Guntamatic_Puffer_unten_19'); createState('Guntamatic_Pumpe_HP0_20'); createState('Guntamatic_Warmwasser_21'); createState('Guntamatic_Vorlauf_31'); createState('Guntamatic_Füllstand_65'); createState('Guntamatic_Kesselfreigabe_68'); createState('Guntamatic_Programm_69'); createState('Guntamatic_Programm_HK1_71'); createState('Guntamatic_Stoer0_79'); createState('Guntamatic_Stoer1_80'); createState('Guntamatic_Asche_entleeren_85'); createState('Guntamatic_Brennstoffzähler_89'); createState('Guntamatic_Pufferladung_90'); createState('Guntamatic_CO2_Gehalt_korrigiert'); schedule("*/5 * * * * *", axios.post('http://10.10.10.7/daqdata.cgi?key=226125AC4E4C9CD8144ABF4CA958AF294A4F', { responseEncoding: 'latin1' }) .then(function (response) { console.log(response); if (response.data) { var parts = response.data.split('\n'); var parts_Guntamatic = parts[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); var parts_Guntamatic = parts[1]; setState('Guntamatic_Aussentemperatur_1', parts_Guntamatic, true); var parts_Guntamatic = parts[3]; setState('Guntamatic_Kesseltemperatur_3', parts_Guntamatic, true); var parts_Guntamatic = parts[5]; setState('Guntamatic_Leistung_5', parts_Guntamatic, true); var parts_Guntamatic = parts[6]; setState('Guntamatic_Rücklauf_6', parts_Guntamatic, true); var parts_Guntamatic = parts[8]; setState('Guntamatic_CO2_Gehalt_8', parts_Guntamatic, true); var parts_Guntamatic = parts[17]; setState('Guntamatic_Puffer_oben_17', parts_Guntamatic, true); var parts_Guntamatic = parts[19]; setState('Guntamatic_Puffer_unten_19', parts_Guntamatic, true); var parts_Guntamatic = parts[20]; setState('Guntamatic_Pumpe_HP0_20', parts_Guntamatic, true); var parts_Guntamatic = parts[21]; setState('Guntamatic_Warmwasser_21', parts_Guntamatic, true); var parts_Guntamatic = parts[31]; setState('Guntamatic_Vorlauf_31', parts_Guntamatic, true); var parts_Guntamatic = parts[65]; setState('Guntamatic_Füllstand_65', parts_Guntamatic, true); var parts_Guntamatic = parts[68]; setState('Guntamatic_Kesselfreigabe_68', parts_Guntamatic, true); var parts_Guntamatic = parts[69]; setState('Guntamatic_Programm_69', parts_Guntamatic, true); var parts_Guntamatic = parts[71]; setState('Guntamatic_Programm_HK1_71', parts_Guntamatic, true); var parts_Guntamatic = parts[79]; setState('Guntamatic_Stoer0_79', parts_Guntamatic, true); var parts_Guntamatic = parts[80]; setState('Guntamatic_Stoer1_80', parts_Guntamatic, true); var parts_Guntamatic = parts[85]; setState('Guntamatic_Asche_entleeren_85', parts_Guntamatic, true); var parts_Guntamatic = parts[89]; setState('Guntamatic_Brennstoffzähler_89', parts_Guntamatic, true); var parts_Guntamatic = parts[90]; setState('Guntamatic_Pufferladung_90', parts_Guntamatic, true); /* CO2 Korrigieren da der Wert im Leerlauf teils 18.00 annimmt. parts[5] = Leistung parts[8] = CO2 Gehalt */ if (parts[5] == 0) { setState("Guntamatic_CO2_Gehalt_korrigiert" , 0, true); } else { setState("Guntamatic_CO2_Gehalt_korrigiert", parts[8], true) } } } .catch(function (error) { console.log(error) }); }); } )
-
@glitzi sagte in Umstellung auf "axios":
Viele Fehler
https://beautifytools.com/javascript-validator.php
beachtet du die Hinweise im Skripteditor nicht?Das korrekte einrücken nicht vergessen. Das erspart schon mal viele Logikfehler. Dem Parser ist es zwar egal, aber du suchst dich dann zu tode wenn die blöcke nicht auf der gleichen Ebene enden wie sie begonnen haben. Manche Editoren können da einem helfen. Einfach den kompletten Text mal dort reinkopieren und die Formatierung/beautyfier drüber laufen lassen.
Auch wenn das ; nicht unbedingt notwendig ist, sollte man es immer setzen, da ansonsten der parser manchmal meckert und dann ist es besser immer einheitlich zu bleiben und den Code lesbar zu gestalten
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement
Eine Variable sollte nur einmal innerhalb eines Blocks deklariert werden (var)
und Klammern sollten in der richtigen Reihenfolge und in der korrekten Anzahl geöffnet und wieder geschlossen werdenLine Col Errors 39 11 'parts_Guntamatic' is already defined. 42 11 'parts_Guntamatic' is already defined. 45 11 'parts_Guntamatic' is already defined. 48 11 'parts_Guntamatic' is already defined. 51 11 'parts_Guntamatic' is already defined. 54 11 'parts_Guntamatic' is already defined. 57 11 'parts_Guntamatic' is already defined. 60 11 'parts_Guntamatic' is already defined. 63 11 'parts_Guntamatic' is already defined. 66 11 'parts_Guntamatic' is already defined. 69 11 'parts_Guntamatic' is already defined. 72 11 'parts_Guntamatic' is already defined. 75 11 'parts_Guntamatic' is already defined. 78 11 'parts_Guntamatic' is already defined. 81 11 'parts_Guntamatic' is already defined. 84 11 'parts_Guntamatic' is already defined. 87 11 'parts_Guntamatic' is already defined. 90 11 'parts_Guntamatic' is already defined. 93 11 'parts_Guntamatic' is already defined. 104 89 Missing semicolon. 111 23 Missing semicolon. 112 12 Expected ')' and instead saw ';'. 114 1 Expected ')' and instead saw '}'. 114 2 Missing semicolon. 114 2 Expected an identifier and instead saw ')'. 114 2 Expected an assignment or function call and instead saw an expression. 114 3 Unrecoverable syntax error. (96% scanned).
-
Hallo, ich hänge mich hier einfach mal ran, denke es ist nicht nötig nochmal einen eigenen Thread dafür aufzumachen.
Ich habe auch noch ein paar Scripte mit "request", vielleicht kann mir da auch jemand bei der Umstellung auf "axios" helfen?!
Hier der Teil des Scripts:var request = require("request"); var fs = require('fs'); // Speichert das Bild der Haustür bei Posteinwurf function saveImage() { request.get({ url: source_url, encoding: 'binary' }, function(err, response, body) { fs.writeFile('/tmp/' + 'Postbild.jpg', body, 'binary', function(err) { if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { log('Webcam Bild gespeichert'); } }) }) // Bilder werden nach vis gespeichert setTimeout(function() { const bild1 = fs.readFileSync('/tmp/Postbild.jpg'); writeFile('vis.0', '/Postbild.jpg', bild1); }, 4000); }
-
@oliverio
Danke für die Gute Unterstützung…
Leider bin ich hier blutiger Anfänger, kannst du mir das eventuell im Script Kennzeichen? -
ich bin etwas weiter, siehe Antwort...
-
Hallo,
ich muss jetzt auch mal fragen.- warum wird von request auf axios umgestellt?
- was ist mit den alten Scripten ?
- gibts hier ein todo ?
Gibts da irgendwo mehr infos ?
Habe ca. 200 Scripte wo ca. bei der Hälfte (geschätzt) request drin ist.
-
Weil es nicht mehr gepflegt wird:
-
@thomas-braun sagte in Umstellung auf "axios":
Weil es nicht mehr gepflegt wird:
Und ab wann funktionieren dann meine Scripte nicht mehr ?
oder viel wichtiger: Was mun man tun um dies zu ändern ? -
@bahnuhr sagte in Umstellung auf "axios":
Und ab wann funktionieren dann meine Scripte nicht mehr ?
Vermutlich spätestens dann, wenn request aus nodejs aussortiert wird.
Ich vermute, das wird aber ob der breiten Verwendung von request noch lange mitgeschleift werden müssen. Ist ja schon geraume Zeit als 'deprecated' markiert. -
@bahnuhr sagte in Umstellung auf "axios":
Gibts da irgendwo mehr infos ?
Ja bei google.
Du musst auch nicht axios nehmen, es funktioniert auch http. -
@OliverIO
Puhh ich glaube ich bin etwas weiter... trotzdem drehe ich mich irgendwie im Kreis .16:53:20.267 error javascript.0 (6088) script.js.Guntamatic.Guntamatic_Daten_aus_Http_Seite_Parsen_axios: schedule callback missing
createState('Guntamatic_Betrieb_0'); createState('Guntamatic_Aussentemperatur_1'); createState('Guntamatic_Kesseltemperatur_3'); createState('Guntamatic_Leistung_5'); createState('Guntamatic_Rücklauf_6'); createState('Guntamatic_CO2_Gehalt_8'); createState('Guntamatic_Puffer_oben_17'); createState('Guntamatic_Puffer_unten_19'); createState('Guntamatic_Pumpe_HP0_20'); createState('Guntamatic_Warmwasser_21'); createState('Guntamatic_Vorlauf_31'); createState('Guntamatic_Füllstand_65'); createState('Guntamatic_Kesselfreigabe_68'); createState('Guntamatic_Programm_69'); createState('Guntamatic_Programm_HK1_71'); createState('Guntamatic_Stoer0_79'); createState('Guntamatic_Stoer1_80'); createState('Guntamatic_Asche_entleeren_85'); createState('Guntamatic_Brennstoffzähler_89'); createState('Guntamatic_Pufferladung_90'); createState('Guntamatic_CO2_Gehalt_korrigiert'); const axios=require('axios'); schedule("*/5 * * * * *", axios.post('http://xx.xx.xx.xx/daqdata.cgi?key=xxxx', { responseEncoding: 'latin1' }) .then(function(response) { //console.log(response); if (response.data) { var parts = response.data.split('\n'); var parts_Guntamatic = parts[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); var parts_Guntamatic = parts[1]; setState('Guntamatic_Aussentemperatur_1', parts_Guntamatic, true); var parts_Guntamatic = parts[3]; setState('Guntamatic_Kesseltemperatur_3', parts_Guntamatic, true); var parts_Guntamatic = parts[5]; setState('Guntamatic_Leistung_5', parts_Guntamatic, true); var parts_Guntamatic = parts[6]; setState('Guntamatic_Rücklauf_6', parts_Guntamatic, true); var parts_Guntamatic = parts[8]; setState('Guntamatic_CO2_Gehalt_8', parts_Guntamatic, true); var parts_Guntamatic = parts[17]; setState('Guntamatic_Puffer_oben_17', parts_Guntamatic, true); var parts_Guntamatic = parts[19]; setState('Guntamatic_Puffer_unten_19', parts_Guntamatic, true); var parts_Guntamatic = parts[20]; setState('Guntamatic_Pumpe_HP0_20', parts_Guntamatic, true); var parts_Guntamatic = parts[21]; setState('Guntamatic_Warmwasser_21', parts_Guntamatic, true); var parts_Guntamatic = parts[31]; setState('Guntamatic_Vorlauf_31', parts_Guntamatic, true); var parts_Guntamatic = parts[65]; setState('Guntamatic_Füllstand_65', parts_Guntamatic, true); var parts_Guntamatic = parts[68]; setState('Guntamatic_Kesselfreigabe_68', parts_Guntamatic, true); var parts_Guntamatic = parts[69]; setState('Guntamatic_Programm_69', parts_Guntamatic, true); var parts_Guntamatic = parts[71]; setState('Guntamatic_Programm_HK1_71', parts_Guntamatic, true); var parts_Guntamatic = parts[79]; setState('Guntamatic_Stoer0_79', parts_Guntamatic, true); var parts_Guntamatic = parts[80]; setState('Guntamatic_Stoer1_80', parts_Guntamatic, true); var parts_Guntamatic = parts[85]; setState('Guntamatic_Asche_entleeren_85', parts_Guntamatic, true); var parts_Guntamatic = parts[89]; setState('Guntamatic_Brennstoffzähler_89', parts_Guntamatic, true); var parts_Guntamatic = parts[90]; setState('Guntamatic_Pufferladung_90', parts_Guntamatic, true); /* CO2 Korrigieren da der Wert im Leerlauf teils 18.00 annimmt. parts[5] = Leistung parts[8] = CO2 Gehalt */ if (parts[5] == 0) { setState("Guntamatic_CO2_Gehalt_korrigiert", 0, true); } else { setState("Guntamatic_CO2_Gehalt_korrigiert", parts[8], true); } } }) );
-
@wal sagte in Umstellung auf "axios":
Du musst auch nicht axios nehmen, es funktioniert auch http.
hast du mal ein Beispiel ?
-
@bahnuhr
das ist aber alles sehr ähnlich.
Noch einfacher geht nicht wirklich -
@thomas-braun Ich denke auch mit 50.000 Dependents wird es wohl nie entfernt werden können. Also kann der kleine ioBroker Skripter sich mit der Umstellung noch zeit lassen.
@glitzi
der schedule wird nicht richtig aufgemachtschedule("*/5 * * * * *", function(){ axios.post('http://xx.xx.xx.xx/daqdata.cgi?key=xxxx', { responseEncoding: 'latin1' }) .then(function(response) { //console.log(response); }) })
-
@tombox
und wenn es aus iobroker entfernt wird, dann lädt man es selbst nach.
es ist ja nicht so das es da sicherheitsbedenken gibt, sonder das die bibliothekt zu ende entwickelt ist.