NEWS
mit Blockly CSV Daten aus HTTP auf MQTT schicken
-
Hallo zusammen
da ja jetzt lagsam wieder die Poolsaison beginnt, habe ich mir als Ziel gesetzt meinen Poolcontroller von Pooldigital in den ioBroker einzubinden.
Wenn ich IP/GetState.csv sende bekomme ich daten zurück, aber ich weis leider nicht, wie ich diesen Haufen jetzt weiter verarbeiten kann um die daten per MQTT zu senden.
Würde mich über Hilfe sehr freuen.
Grüsse
MichaSYSINFO,1.7.3,3817120,0,1,0,256,4,2,2 Time,n.a.,n.a.,Kesseldruck,n.a.,CPU Temp,Redox,pH,Pool,SolarRL,Luft,SolarDach,Schacht,Whirlpool,n.a.,n.a.,Filterpumpe,Brunnen,pH Minus,Durchlaufheizer,Wasserzul.,Beleuchtung,SolarBypass,CEE Pumpe Alt,Wasser Tief,Wasser Hoch,TASTER3,TASTER4,n.a.,n.a.,n.a.,n.a.,n.a.,n.a.,n.a.,n.a.,Cl Rest,pH- Rest,pH+ Rest,Cl consumption,pH- consumption,pH+ consumption h,mV,mV,Bar,mV,C,mV,pH,C,C,C,C,C,C,C,C,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,%,%,%,ml,ml,ml 0,0,0,-0.400,0,147.5,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1,0.0625,0.0625,0.000041666666,0.0625,-0.00468750,0.0625,0.0078125,0.0625,0.0625,0.0625,0.0625,0.0625,0.0625,0.0625,0.0625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.1,0.1,0.1,1,1,1 4917,19826,15489,26993,29,20860,2258,-72,229,227,0,0,230,297,0,0,3,2,2,2,2,2,0,2,1,1,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,0,0,0
-
@mibr85
Die CSV-Daten sind nicht leicht zu handhaben. Ansatz:Im Log erscheinen 42 Zahlen.
Der gepostete CSV-Inhalt enthält nach dem Kopieren Leerzeichen anstelle von Zeilenschaltungen. Mit Zeilenschaltungen im CSV wäre es einfacher: -
@paul53
Vielen Dank für deine schnelle Antwort, wie immer
die Zeilenumbrüche sind mit /n
also im Node Red habe ich es so gelöst, weiss aber nicht so richtig ob ich das so in den ioBroker bekomme:var rows = msg.payload.split("\n"); var names = rows[1].split(','); var units = rows[2].split(','); var offsets = rows[3].split(','); var gains = rows[4].split(','); var rawValues = rows[5].split(','); var result = {}; for (var i = 0; i < 41; i++) { var obj = {}; obj.unit = units[i]; obj.value = 1 * offsets[i] + (gains[i] * rawValues[i]); if (names[i] != "n.a.") { result[names[i]] = obj; } } msg.payload = result; return msg;
-
@mibr85 sagte: weiss aber nicht so richtig ob ich das so in den ioBroker bekomme:
Das ist doch Javascript-Code, außer msg.payload. Das Ergebnis ist ein Objekt.
Du möchtest die Werte sicherlich in Datenpunkte schreiben:
const path = '0_userdata.0.pool.control.' function pool(csv) { var rows = csv.split("\n"); var names = rows[1].split(','); var units = rows[2].split(','); var offsets = rows[3].split(','); var gains = rows[4].split(','); var rawValues = rows[5].split(','); for (var i = 0; i < 42; i++) { let value = 1 * offsets[i] + (gains[i] * rawValues[i]); if (names[i] != "n.a.") { setState(path + names[i], value, true); } } } schedule('*/15 * * * * *', function() { request('192.168.100.90/GetState.csv', function(err, response, data) { if(err) log(err, 'warn'); else pool(data); }); });
-
@paul53 sagte in mit Blockly CSV Daten aus HTTP auf MQTT schicken:
const path = '0_userdata.0.pool.control.'
sorry für die doofe Frage aber wie bekomme ich denn den Get request da noch mit rein?
oder gar nicht über blockly sondern direkt über ne Javascript funktion? -
@mibr85 sagte in mit Blockly CSV Daten aus HTTP auf MQTT schicken:
Wenn ich IP/GetState.csv sende
gibt es da boch andere Optionen? json vielleicht?
-
@homoran
leider nicht es wird nur eine CSV ausgegeben -
@mibr85 sagte: wie bekomme ich denn den Get request da noch mit rein?
Habe ich oben ergänzt (ab Zeile 20).
-
@paul53
Vielen Dank