Ich bin seit Ende letzten Jahres auf Violet umgestiegen und habe es seither noch nicht geschafft, die Daten analog zur Procon.IP auszulesen.
Leider habe ich von Node Red Programmierung recht wenig Ahnung, und habe wohl irgendwo mal für die Procon.IP ei Script Template gefunden, das mir das Auslesen des Datenstroms in einzelne Teile ermöglicht:
Code: Alles auswählen
// @ts-nocheck
function csvJSON(csv) {
var lines = csv.split("\n");
var headers = lines[1].split(",");
var result = {};
var obj = {};
var line_item = '';
for (var i = 2; i < lines.length; i++) {
var currentline = lines[i].split(",");
switch (i) {
case 2: line_item = "unit"; break;
case 3: line_item = "offset"; break;
case 4: line_item = "gain"; break;
case 5: line_item = "rawvalue"; break;
}
for (var j = 0; j < headers.length; j++) {
if (i == 2) {
obj[j] = {};
obj[j]["name"] = headers[j];
}
obj[j][line_item] = currentline[j];
}
}
for (var x = 0; x < headers.length; x++) {
var current_obj = obj[x];
var name = current_obj["name"];
if (typeof result[name] != "undefined") {
var l = 1;
new_name = name;
while (typeof result[new_name] != "undefined") {
new_name = name + "_[" + (l++) + "]";
}
name = new_name;
}
if (name) {
result[name] = {};
result[name]['unit'] = current_obj['unit'];
if (current_obj['unit'] == "h") {
var timeValue = current_obj['rawvalue'];
var minutes = timeValue % 256;
var hour = (timeValue - minutes) / 256;
result[name]['value'] = hour + ":" + minutes;
} else {
var rawvalue = parseFloat(current_obj['rawvalue']);
var gain = parseFloat(current_obj['gain']);
var offset = parseFloat(current_obj['offset']);
result[name]['value'] = (rawvalue * gain) + offset;
}
}
}
return JSON.stringify(result); //JSON
}
msg.payload = csvJSON(msg.payload)
return msg;Code: Alles auswählen
var data = JSON.parse(msg.payload);
msg.payload = data['Filterdruck']['value'];
return msg;Hat hier jemand schon etwas gebastelt und würde es zur Verfügung stellen?
Danke und LG