NEWS
Parser Adapter Werte Zeilenweise auslesen (Guntamatic)
-
Da müsste ja jetzt auch AUS stehen und mit NUM 2 NIX
-
@glitzi sehe ich gerade auch.
Habe mir den Text in einer Testumgebung in das Fenster kopiert.Der ioBroker parser tickt manchmal etwas anders.
Suche noch nach der Ursache -
@glitzi
Mit([\d\-\.\w]+|\s)
kommt wenigstens wieder etwas, aber die NUMs sind jetzt fast doppelt so hoch, weil anscheinend da immer noch ein Leerzeichen vor dem Zeilenumruch ist -
Mal ganz dämlich, habt ihr es mal einfach nur mit
(.+)
als Regex probiert? Das sollte jeweils die ganze Zeile matchen (in der obigen Textdatei enthalten alle "leeren" Zeilen ein Leerzeichen).
Oder tickt da der ioBroker-Parser auch anders? -
Puhhhh irgendwie alles sehr schwierig,
wie wäre es denn mit so einem Script, das habe ich mir eben mal zusammengegoogelt.
würde das so funktionieren?
function() { createState('Guntamatic_Test1'); createState('Guntamatic_Test2'); var request= require('request'); request.post({ url: 'http://10.10.10.7/daqdata.cgi' }, function(error, response, body){ if (body) { var parts_Guntamatic = body.split('\n')[0]; setState('Guntamatic_Test2', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[1]; setState('Guntamatic_Test2', parts_Guntamatic, true); } }); } )
-
@AlCalzone sagte in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
Oder tickt da der ioBroker-Parser auch anders?
das Problem scheinen beim ioBroker Parser die Zeilenumbrüche zu sein.
RegExes mit \n funktionieren z.B. nichtSo ist das Problem auch mit diesem Text. das ^ als Anfang der Zeile führt dann immer nur zum ersten Eintrag, und das (.+) führt zu einem Ergebnis, das den gesamten Quelltext enthält
-
@glitzi
Ich glaube ich habe es jetzt:([\w\.\d\-]+|\s)\s
EDIT:
Zeile 115 wird nicht ausgelesen, weil danach kein LF mehr kommt
Das funktioniert dann mit([\w\.\d\-]+|\s)\s?
Ob das jetzt wieder andere Nebenwirkungen hat weiß ich nicht
-
Hallo,
meine Finale Lösung ist jetzt doch ein Skript geworden...
createState('Guntamatic_Betrieb_0'); createState('Guntamatic_Aussentemperatur_1'); createState('Guntamatic_Kesseltemperatur_3'); createState('Guntamatic_Leistung_5'); 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_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_Brenstoffzähler_89'); createState('Guntamatic_Pufferladung_90'); createState('Guntamatic_CO2_Gehalt_korrigiert'); var request= require('request'); schedule("*/10 * * * * *", function() { /* für einige Werte wie Brennstoffverbrauch benötigt mein einen Key von Guntamatic url: 'http://10.10.10.7/daqdata.cgi?key=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' */ var request= require('request'); request.post({ url: 'http://10.10.10.7/daqdata.cgi' }, function(error, response, body){ if (body) { var parts_Guntamatic = body.split('\n')[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[1]; setState('Guntamatic_Aussentemperatur_1', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[3]; setState('Guntamatic_Kesseltemperatur_3', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[5]; setState('Guntamatic_Leistung_5', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[8]; setState('Guntamatic_CO2_Gehalt_8', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[17]; setState('Guntamatic_Puffer_oben_17', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[19]; setState('Guntamatic_Puffer_unten_19', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[20]; setState('Guntamatic_Pumpe_HP0_20', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[21]; setState('Guntamatic_Warmwasser_21', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[31]; setState('Guntamatic_Vorlauf_31', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[68]; setState('Guntamatic_Kesselfreigabe_68', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[69]; setState('Guntamatic_Programm_69', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[71]; setState('Guntamatic_Programm_HK1_71', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[79]; setState('Guntamatic_Stoer0_79', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[80]; setState('Guntamatic_Stoer1_80', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[85]; setState('Guntamatic_Asche_entleeren_85', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[89]; setState('Guntamatic_Brenstoffzähler_89', parts_Guntamatic, true); var parts_Guntamatic = body.split('\n')[90]; setState('Guntamatic_Pufferladung_90', parts_Guntamatic, true); } if (getState("Guntamatic_Leistung_5").val == 0) { setState("Guntamatic_CO2_Gehalt_korrigiert" , 0, true); } else { setState("Guntamatic_CO2_Gehalt_korrigiert",getState("Guntamatic_CO2_Gehalt_8").val); } }); } )
-
@glitzi sagte in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
body.split('\n')
Kleiner Tip: Speicher das in einer Variablen und nutze diese (anstatt die Split-Aktion 90x auszuführen)
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); ...
-
@glitzi sagte in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
meine Finale Lösung ist jetzt doch ein Skript geworden...
Das ist gut!
Aber da ich neugierig bin würde mich interessieren ob mein letztes RegEx wirklich funktioniert (hätte)?
-
@Homoran said in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
@glitzi sagte in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
meine Finale Lösung ist jetzt doch ein Skript geworden...
Das ist gut!
Aber da ich neugierig bin würde mich interessieren ob mein letztes RegEx wirklich funktioniert (hätte)?
Leider hat er nicht funktioniert... Trotzdem Danke für die viele Arbeit!
-
@AlCalzone said in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
@glitzi sagte in Parser Adapter Werte Zeilenweise auslesen (Guntamatic):
body.split('\n')
Kleiner Tip: Speicher das in einer Variablen und nutze diese (anstatt die Split-Aktion 90x auszuführen)
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); ...
Super werde ich gleich mal umsetzen.
-
Einer eine Idee warum in der Objektübersicht der Korrigierte Wert meisten dem Original etwas hinterherhinkt?
... if (getState("Guntamatic_Leistung_5").val == 0) { setState("Guntamatic_CO2_Gehalt_korrigiert" , 0, true); } else { setState("Guntamatic_CO2_Gehalt_korrigiert",getState("Guntamatic_CO2_Gehalt_8").val, true); }
-
@glitzi setState ist asynchron - der Code läuft weiter, bevor der Wert in der Datenbank angekommen und per getState verfügbar ist.
Diese Korrekturen solltest du beim Auslesen auf Basis des geparsten Wertes schon machen, ohne den Umweg über die Datenbank.also z.B. so:
if (parts[5] == 0) { // setState... } else { setState("Guntamatic_CO2_Gehalt_korrigiert", parts[8], true) }
-
Perfekt !!!
-
kann mir eventuell einer von euch bei meinem nächsten Problem helfen
String seriell einlesen, Anfang finden und dann splitten und von HEX konvertieren
-
Hallo,
ich lese die Daten ja wie folgt erfolgreich ein...
function() { var request= require('request'); request.post({ url: 'http://10.10.10.7/daqdata.cgi?key=xxxxxxxxxxxxxxxxxxxxxxx' }, function(error, response, body){ if (body) { var parts = body.split('\n'); var parts_Guntamatic = parts[0]; setState('Guntamatic_Betrieb_0', parts_Guntamatic, true); .................
jetzt werde leider keine Sonderzeichen, insbesondere Umlaute dargestellt, kann man da noch den Zeichensatz beim importieren vorgeben/wandeln?
Gruß Glitzi
-
request.post({ url: 'http://10.10.10.7/daqdata.cgi?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', encoding: 'HIER DAS KORREKTE ENCODING' }, ...
Mögliche Werte findest du in https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
-
@AlCalzone
noch zwei sachen,da kommt leider
error javascript.0 (11434) script.js.Guntamatic_Daten_aus_Http_Seite_Parsen compile failed: at script.js.Guntamatic_Daten_aus_Http_Seite_Parsen:29
und könntest du noch den Key im vorigen Post löschen?
-
@glitzi getan. Da fehlt ein Komma am Ende der
url: ...
Zeile