Vorlage für Node Red?

Fragen zur Anbindung / Integration von VIOLET an Hausautomationssysteme.
Antworten
Hypo
Beiträge: 30
Registriert: 16. Mai 2021, 09:29
Becken Standort: Outdoor
Wasserinhalt in m³: 20
Förderleistung Pumpe: Regelbar
Abdeckung: Luftpolsterfolie
Desinfektionsmittel: Chlor, flüssig
UV-C Anlage: Nein

Vorlage für Node Red?

Beitrag von Hypo »

Hallo zusammen!

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;
Wenn ich das als Funktions-Node nach der HTTP Request Node anhänge kann ich dann mit folgendem code die Daten einzeln auslesen:

Code: Alles auswählen

var data = JSON.parse(msg.payload);
msg.payload = data['Filterdruck']['value'];
return msg;
Für die Violet habe ich einen solchen Code noch nicht gefunden und der Code der Procon funktioniert leider nicht

Hat hier jemand schon etwas gebastelt und würde es zur Verfügung stellen?

Danke und LG

Benutzeravatar
Alex
Administrator
Beiträge: 9780
Registriert: 28. Mai 2014, 23:00
Becken Standort: Outdoor
Wasserinhalt in m³: 103
Förderleistung Pumpe: Regelbar
Abdeckung: Keine
Desinfektionsmittel: Chlor, flüssig
UV-C Anlage: Nein
Wohnort: Augsburg
Kontaktdaten:

Re: Vorlage für Node Red?

Beitrag von Alex »

Nicht das ich wüsste. Für Home Assistant hat jemand schon was gemacht. viewtopic.php?t=2227&hilit=home+assistant ... weiß aber nicht, ob das hilft. Alles von der ProCon ist auf jedenfall unbrauchbar. VIOLET hat eine JSON API. Sollte deutlich einfacher sein https://www.myviolet.de/_violet/paperwo ... f#page=143

Hypo
Beiträge: 30
Registriert: 16. Mai 2021, 09:29
Becken Standort: Outdoor
Wasserinhalt in m³: 20
Förderleistung Pumpe: Regelbar
Abdeckung: Luftpolsterfolie
Desinfektionsmittel: Chlor, flüssig
UV-C Anlage: Nein

Re: Vorlage für Node Red?

Beitrag von Hypo »

Das hat tatsächlich geholfen, also der Hinweis auf das JSON-"Format".

Ich musste nur in der HTTP GET Node von UTF String auf JSON Parse umstellen, dann hat er einen sauberen Array ausgegeben, den man gut extrahieren kann.

Eine Frage (etwas OT, aber kein eigenes Topic wert): Ich habe bei den ausgelesenen Werten einen Punkt "onewireX_freezecount" (X ist jeweils die Nummer) - was heißt das Feld und ist es schlecht, wenn da bei einem Sensor 18 steht? Ist der Sensor kaputt?

Benutzeravatar
Alex
Administrator
Beiträge: 9780
Registriert: 28. Mai 2014, 23:00
Becken Standort: Outdoor
Wasserinhalt in m³: 103
Förderleistung Pumpe: Regelbar
Abdeckung: Keine
Desinfektionsmittel: Chlor, flüssig
UV-C Anlage: Nein
Wohnort: Augsburg
Kontaktdaten:

Re: Vorlage für Node Red?

Beitrag von Alex »

Na ja, wenn er kaputt wäre, würde er keine Werte liefern... und wenn er ein Problem hat, gibt Dir VIOLET schon bescheid :)

Hypo
Beiträge: 30
Registriert: 16. Mai 2021, 09:29
Becken Standort: Outdoor
Wasserinhalt in m³: 20
Förderleistung Pumpe: Regelbar
Abdeckung: Luftpolsterfolie
Desinfektionsmittel: Chlor, flüssig
UV-C Anlage: Nein

Re: Vorlage für Node Red?

Beitrag von Hypo »

Na ich frage deshalb, weil die beiden Sensoren nur etwa 2 Meter entfernt voneinander in der verrohrung sind (vor und nach dem Abzweig zur wärmepumpe). Und irgendwie zeigen die beiden Sensoren immer bis zu 1,5 Grad Unterschied an, auch wenn die wärmepumpe nicht läuft. Eigentlich müssten die aber die selbe Temperatur haben.
Daher die Frage, ob der freeze count auf einen möglicherweise defekten sensor hinweisen könnte.

Benutzeravatar
Alex
Administrator
Beiträge: 9780
Registriert: 28. Mai 2014, 23:00
Becken Standort: Outdoor
Wasserinhalt in m³: 103
Förderleistung Pumpe: Regelbar
Abdeckung: Keine
Desinfektionsmittel: Chlor, flüssig
UV-C Anlage: Nein
Wohnort: Augsburg
Kontaktdaten:

Re: Vorlage für Node Red?

Beitrag von Alex »

Hast ein Foto wie die eingebaut sind?

>>Daher die Frage, ob der freeze count auf einen möglicherweise defekten sensor hinweisen könnte.
Nein, ist nur ein Zähler, wie oft hintereinander er die gleiche Temperatur geliefert hat

Antworten