NEWS
Parser Wert auslesen aber wie?
-
Du könntest noch versuchen folgenden Header zu nutzen:
in der HTTP- Request Node.
-
@mickym
geht leider auch nichtDas war der Anfang:
https://forum.iobroker.net/topic/57079/ewe-elmo-smartmeter-wifi-einbinden -
@g-hawk Kannst Du wenn Du im Browser das Aufrufs - mal das Entwicklerfenster anschauen, ob da bestimmte Header gesetzt werden. Vielleicht verbietet die App auch ein direktes aufrufen. Mach mal ein Browserfenster auf - ruf die Daten ab und drücke F12.
Das Problem liegt am Aufruf - da kann kein Tool was mit anfangen und auch kein Adapter wenn man nicht weiß, warum das so nicht abrufbar ist.
-
-
@g-hawk Klapp mal oben das alles auf, was unter head steht. Und wieder Screenshot. Allerdings =$0 schon da steht sehe ich eher schwarz. Dann werden die Daten dynamisch bereitgestellt und nicht als HTML Seite.
-
-
@g-hawk Also ich befürchte, dass man das so nicht direkt auslesen kann, deswegen klappt es weder mit Blockly, NodeRed noch dem Parser. Ich kann Dir da leider auch nicht mehr weiter helfen. Kannst also NodeRed wieder löschen.
-
@mickym
Mit dem Parser klappt es ja mir fehlen nur die richtigen regex Befehle
Ich kann das so auslesen, das Problem das er den Wert nicht findet, tritt nur auf wenn der Wert negativ wird ich muss den RegEX Ausdruck "255":([\d.]+)" anpassen, ich weiß nur nicht wie
Gibt es nicht einen Online Generator dafür, der mir einfach den RegEX Ausdruck anzeigt, den ich da eintragen muss?Und ich muss im Parser ankreuzen " Verwenden sie einen unsicheren HTTP Parser
-
@g-hawk Na ok - das bekommen wir hin. Also diesen negativ Wert brauchst Du - ein Minus davor hat nicht geklappt?
-
@mickym Hake in Node Red doch noch mal das hier an:
-
@g-hawk sagte in Parser Wert auslesen aber wie?:
Gibt es nicht einen Online Generator dafür, der mir einfach den RegEX Ausdruck anzeigt, den ich da eintragen muss?
Ja können wir machen du brauchst mE nur ein - davor mit ?
Aber probier mal parallel die Option disable strict parsing in Node Red
-
Also:
Das ruft der Parser ab:{"meterId":"1KFM0000028196","deviceId":"EBSD1425009486","msgType":"EMETER_OBIS_V2","measurements":[{"timestamp":"2023-04-02T11:32:33Z","values":{"1-0:96.90.2*1":"7E2005D2","1-0:0.2.0*0":"312E3033","1-0:14.7.0*255":49.900001525878906,"1-0:81.7.26*255":52,"1-0:81.7.15*255":331,"1-0:81.7.4*255":188,"1-0:81.7.2*255":239,"1-0:81.7.1*255":117,"1-0:71.7.0*255":1.1100000143051147,"1-0:51.7.0*255":0.73000001907348633,"1-0:31.7.0*255":1.8999999761581421,"1-0:72.7.0*255":235.5,"1-0:52.7.0*255":233.80000305175781,"1-0:32.7.0*255":235.89999389648438,"1-0:16.7.0*255":-152,"1-0:2.8.0*255":0.52590000629425049,"1-0:1.8.0*255":10474.70703125,"1-0:96.1.0*255":"0A014B464D0000006E24","1-0:96.50.1*1":"4B464D"}}]}
ich brauche die Werte hinter:
1-0:16.7.0255
1-0:2.8.0255
1-0:1.8.0*255 -
@mickym sagte in Parser Wert auslesen aber wie?:
@g-hawk sagte in Parser Wert auslesen aber wie?:
Gibt es nicht einen Online Generator dafür, der mir einfach den RegEX Ausdruck anzeigt, den ich da eintragen muss?
Ja können wir machen du brauchst mE nur ein - davor mit ?
Aber probier mal parallel die Option disable strict parsing in Node Red
Geht leider nicht
-
@g-hawk sagte in Parser Wert auslesen aber wie?:
1-0:16.7.0255
So was immer in CodeTags - sonst verschluckt es den Stern:
Also ich weiss nicht wie das in dem Parser-Adapter eingetragen werden muss.
Hier siehst du den ganzen Match und in der Group den Wert:(-?\d+\.?\d+)
Damit kannst Du alle Zahlen auslesen - der Rest ist damit das vorne dran matched.
Mit dem Link kannst Du selber testen.
-
@mickym
Danke ich probiere es -
@g-hawk So wenn das nicht klappt, dann schaun wir mal ob wir es mit Javascript hinbekommen. Ich habe in axios was gefunden mit dem man diese unsicheren Seiten abfragen kann:
const axios = require('axios'); const url = 'http://192.168.10.212/data' axios.get(url, { insecureHTTPParser: true }).then((response) => { console.log(response.data) })
Probier doch mal dieses JS zu erstellen und schau ob damit der Aufruf funktioniert.
Wenn das hinhaut - dann haben wir gewonnen.
-
@mickym sagte in Parser Wert auslesen aber wie?:
const axios = require('axios'); const url = 'http://192.168.10.212/data' axios.get(url, { insecureHTTPParser: true }).then((response) => { console.log(response.data) })
Unten stehen die Daten wie auf der Website, aber was machen wir nun damit?
Bekommt man die irgendwie in eine Datenpunkt?
Ist das denn recourcenschonender als mit dem Parser?Mit dem Parser funktioniert es im Moment
-
@g-hawk Ja ist viel besser, als mit dem Adapter. Die Axios Bibliothek ist schon drin.
Kannst kurz mal das was im log steht hier in CodeTags kopieren?
-
-
So dann sollte das funktionieren.
const axios = require('axios'); const url = 'http://192.168.10.212/data' axios.get(url, { insecureHTTPParser: true }).then((response) => { let obj = JSON.parse(response.data); console.log (obj.measurements[0].values["1-0:16.7.0*255"]); console.log (obj.measurements[0].values["1-0:2.8.0*255"]); console.log (obj.measurements[0].values["1-0:1.8.0*255"]); })
dann kannst Du die Daten nämlich so direkt in einen Datenpunkt schreiben.