NEWS
Daten aus einer URL in eine Variable schreiben
-
Das sind keine Daten, sondern es ist Javascript Code.
-
Dann hätte ich gerne den Code in eine Variable
-
Sind es immer drei Zeilen?
ich würde das in etwa so machen:
var url = "http://192.168.xxx.xxx/pc.js?min";
my $html = qx{curl –silent $url};
var zeile html[html.length - 1];
var FeldArray = zeile.split('|');
var mitteArray = FeldArray[2].split(';');
var rechtsArray = FeldArray[3].split(';');
var a = parseInt(mitteArray[1]);
var b = parseInt(rechtsArray[1]);
In der Variable a sollte "623" als Integer stehen
In der Variable b sollte "0" als Integer stehen
Alles ungeprüft. aber so in etwa sollte es gehen.
-
Es sind deutlich mehr als drei Zeilen. In den ersten Zeilen steht allgemeines zu Anlagen Größe und so.
-
Es sind deutlich mehr als drei Zeilen. In den ersten Zeilen steht allgemeines zu Anlagen Größe und so. `
Was willst du denn genau ausgelesen bekommen?
-
hey,
Es gibt den neuen "Parser"-Adapter … der kann regelmäßig URLs abholen und dort per Regex parsen
-
Hinter der IP steckt mein PV Datenlogger und ich will mir den aktuellen Ertrag und den aktuellen Verbrauch vom Haus in einer Variablen speichern um es mit vis darzustellen
-
Hallo,
mit diesem Ausdruck (nicht greedy) kannst du die Zahlen aus der erste Zeile rausfischen:
(?<=[|])[0-9]*(?=[;])
Der Ausdruck sucht Zahlenkombinationen, denen ein "|" vorausgeht und ein ";" folgt.
Das ganze in den parser-Adapter kopiert sollte funktionieren.
Jetzt wird alle 300.000 ms oder 5min der Ausdruck gesucht und in den Datenpunkt parser.0.solar geschrieben.
Kann sein, dass der Typ number noch Probleme macht und natürlich solltest du den URL noch komplettieren.
Kann es selbst natürlich nicht ausprobieren
Gruß
Pix
-
Werd ich heute Abend mal ausprobieren. Muss ich die richtige Zeile irgendwo angeben?
Speichert der dann beide Werte in einer Variablen ab?
-
Nein, er speichert pro Zeile in den Einstellungen des parser-Adapters nur einen Wert. Da musst du noch eine Zeile anfügen.
Du kannst auch diesen Ausdruck nehmen:
[0-9]*(?=[;]) ````für jede Zahl vor einem Semikolon nicht gierig, also nur beim ersten Vorkommen (nur der rote Wert). m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0" m[mi++]="28.01.17 18:15:00|623;0;8317|0;0;0;6275;0;0" m[mi++]="28.01.17 18:10:00|652;0;8265|0;0;0;6275;0;0" Welche Werte brauchst du? Ist mir immer noch nicht klar. Kannst du das auch mal den Farben markieren? Gruß Pix
-
Hallo,
der erste Rote wert müsste der aktuelle Verbrauch sein und der zweite der aktuelle Ertrag.
m[mi++]="30.01.17 19:15:00|568;0;6100|0;0;0;309;0;0"
-
keine Idee wie man an den zweiten Wert kommt?
-
mit node-red zB:````
[{"id":"d622dd6c.13e18","type":"tab","label":"Flow 6"},{"id":"abca901f.329ba","type":"inject","z":"d622dd6c.13e18","name":"","topic":"","payload":"m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"","payloadType":"str","repeat":"","crontab":"","once":false,"x":123,"y":61,"wires":[["a8676829.f6bd48"]]},{"id":"a8676829.f6bd48","type":"split","z":"d622dd6c.13e18","name":"","splt":"|","x":263,"y":112,"wires":[["dd824334.af6fc"]]},{"id":"d54f3a3c.30d558","type":"split","z":"d622dd6c.13e18","name":"","splt":";","x":561,"y":199,"wires":[["fcd7879b.764f28"]]},{"id":"1bca33e3.e423fc","type":"debug","z":"d622dd6c.13e18","name":"","active":true,"console":"false","complete":"true","x":859,"y":264,"wires":[]},{"id":"dd824334.af6fc","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":419,"y":152,"wires":[["d54f3a3c.30d558"]]},{"id":"fcd7879b.764f28","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":713,"y":237,"wires":[["1bca33e3.e423fc"]]}]Du müsstest noch inject durch den http request ersetzen. [1803_clipboard02.jpg](/assets/uploads/files/1803_clipboard02.jpg)
-
var text = 'm[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"\n'; text += 'm[mi++]="28.01.17 18:15:00|623;0;8317|0;0;0;6275;0;0"\n'; text += 'm[mi++]="28.01.17 18:10:00|652;0;8265|0;0;0;6275;0;0"\n'; var m = text.match(/\|(\d+);/g); console.log(JSON.stringify(m)); console.log(m[0].substring(1, m[0].length - 1) + ' - ' + m[1].substring(1, m[1].length - 1));
URL kann man so bekommen:
var request = require('request'); createState('myState1', {unit: 'W', type: 'number'}); createState('myState2', {unit: 'W', type: 'number'}); request('http://google.com', function (err, resp, body) { if (body) { var m = text.match(/\|(\d+);/g); if (m && m.length > 1) { setState('myState1', parseInt(m[0].substring(1, m[0].length - 1) , 10), true); setState('myState2', parseInt(m[1].substring(1, m[1].length - 1) , 10), true); } } else { console.warn('NO response: ' + err); } });
-
mit node-red zB:````
[{"id":"d622dd6c.13e18","type":"tab","label":"Flow 6"},{"id":"abca901f.329ba","type":"inject","z":"d622dd6c.13e18","name":"","topic":"","payload":"m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"","payloadType":"str","repeat":"","crontab":"","once":false,"x":123,"y":61,"wires":[["a8676829.f6bd48"]]},{"id":"a8676829.f6bd48","type":"split","z":"d622dd6c.13e18","name":"","splt":"|","x":263,"y":112,"wires":[["dd824334.af6fc"]]},{"id":"d54f3a3c.30d558","type":"split","z":"d622dd6c.13e18","name":"","splt":";","x":561,"y":199,"wires":[["fcd7879b.764f28"]]},{"id":"1bca33e3.e423fc","type":"debug","z":"d622dd6c.13e18","name":"","active":true,"console":"false","complete":"true","x":859,"y":264,"wires":[]},{"id":"dd824334.af6fc","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":419,"y":152,"wires":[["d54f3a3c.30d558"]]},{"id":"fcd7879b.764f28","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":713,"y":237,"wires":[["1bca33e3.e423fc"]]}]Du müsstest noch inject durch den http request ersetzen. `
hab das versucht, bekomm das irgendwie nicht hin. wie genau funktioniert das denn mit dem node-red? angezeigt wird es mir aber wo wird es denn gespeichert
-
Was genau hast du versucht? Was genau hat nicht funktioniert?
Wenn du was mit node-red machen willst, schau dir bitte doch mal die schöne Hilfe die Homoran geschrieben hat an:
http://www.iobroker.net/?page_id=4284&lang=de
Da steht auch drin, wie du Werte von node-red wieder in iobroker speichern kannst.
-
Für den zweiten Wert nimmst du diesen Ausdruck (vorausgesetzt, der Wert 6275 bleibt immer gleich; könnte aber auch ohne 6275 gehen)
[0-9]*(?=;0;0;6275)
https://regex101.com/r/QFGi6C/1
Sorry, hatte den Thread schon wieder vergessen.
Pix
EDIT: Also in http://forum.iobroker.net/viewtopic.php?f=21&t=5039&p=51250#p50343 ist der grüne Wert (0) gemeint
-
das scheint nicht zu klappen,
die werte sind nur 0 wenn die anlage nicht läuft. Jetzt sieht die Zeile so aus:
m[mi++]="04.02.17 12:50:00|462;0;3636|665;463;258;3218;405;406"
mit dem Code so funktionierts
[0-9]*(?=;*[0-9]*;*[0-9]*;*[0-9]*;*[0-9]*;*[0-9]*;*[0-9]")
-
Super gelöst! Danke fürs Feedback.
-
Würde auch gerne den Parser nutzen um den Wasserstand eines Flusses auszulesen.
Z. B. von dieser URL http://www.hochwasser-rlp.de/hoechststa … l/BETZDORF
den Wasserstand der unter der Grafik hinter : letzter Messwert angezeigt wird.
Mit der Parser Testseite komme ich gar nicht klar sonst hätte ich da schon probiert.