NEWS
Pumpe steuern über Tempdifferenz
-
-
Blutiger Nodered Anfänger sucht Hilfe!
-
Home Assistant - Nodered - Dashboard
Hallo ihr lieben,
ich bin kurz vor dem Verzweifeln, weil ich es nicht hinbekomme!
Beschreibung:
Ich möchte eine Pumpe über die Temperaturdifferenz Vor-, und Rücklauf steuern.
Ich habe dazu zwei RS485 Temperaturfühler im Einsatz.
Was bereits funktioniert ist die Steuerung der Pumpe mit einem Temperaturfühler.
So weit funktioniert die Schaltung.
Mit den Schaltern Timestamp, kann ich das Modbus Relais, das die Pumpe steuert, ein und ausschalten. Ebenso schaltet das Relais über die Temperaturfühler, wenn die Temperatur höher als 29 Grad ist, ein und wenn die Temperatur niedriger ist als 28 Grad, wieder aus.
Die Aufgabe der Schaltung soll aber mit zwei Temperaturfühler, einer im Vorlauf und ein weiterer im Rücklauf sein. Wenn die Temperaturdifferenz größer 5° ist, soll die Pumpe einschalten und bei einer Temperaturdifferenz kleiner 4° wieder ausschalten.
So könnte ich mir vorstellen, wie die Schaltung aussehen könnte. Keine Ahnung, ob das realistisch ist.
Ich habe x verschiedene Nodes ohne Erfolg ausprobiert. Es ist mir nicht gelungen, die Temperaturwerte aus den DeviceNotes, auszulesen. Eine DifferenzNote, die die Auslesung erleichtern könnte, habe ich bei meinem Bordwerkzeug nicht gefunden.
Ebenso bin ich daran gescheitert, einen funktionierenden Java Skript zu erstellen.
Ich frage mich nun, ist die Lösung ganz einfach, oder tatsächlich so kompliziert.
Wahrscheinlich lacht ihr schon darüber, weil es tatsächlich ganz einfach ist!
Für eine Hilfe zu dem Thema wäre ich sehr dankbar.
Herzliche Grüße Rudi
-
-
@rudolf1957 sagte: Wenn die Temperaturdifferenz größer 5° ist, soll die Pumpe einschalten und bei einer Temperaturdifferenz kleiner 4° wieder ausschalten.
Mal davon abgesehen, dass bei stehender Pumpe keine brauchbaren Messwerte geliefert werden, kann es in Javascript so aussehen:
// IDs eintragen ! const idVLT = ''; const idRLT = ''; const idPumpe = ''; var pumpe = getState(idPumpe).val; on([idVLT, idRLT], function() { let diff = getState(idVLT).val - getState(idRLT).val; if(diff > 5) pumpe = true; else if(diff < 4) pumpe = false; if(pumpe != getState(idPumpe).val) setState(idPumpe, pumpe); });
-
@rudolf1957 Also ich verstehe wieder mal wenig - aber Du kannst ja mal testen, ob das näherungsweise dem entspricht was Du brauchst:
-
@paul53
Guten Abend Paul, danke für deine Antwort!
Die Syntax von deinem Skript verstehe ich, habe aber keine Ahnung wo ich den Skript eintragen soll.
Ich nehme an, dass der Script nicht in NoteRed, sondern irgendwo anders im „Home Assistant“ eingetragen wird. Kennst du die Software „Home Assistant“? -
-
@rudolf1957 sagte in Pumpe steuern über Tempdifferenz:
Eines meiner Probleme war, die Temperaturwerte aus den DeviceNotes in NodeRed auszulesen.
Nun da ich die Geräte ja nicht habe - kann ich dazu nichts sagen. Du kannst höchstens mal die Ausgaben der Debug Nodes posten und dann muss da ja entweder die Temperatur enthalten sein. Vielleicht in einem Objekt. Stell einfach mal auf das gesamte Nachrichtenobjekt um und poste mal was aus den Device Nodes rauskommt.
-
@rudolf1957 sagte: irgendwo anders im „Home Assistant“ eingetragen wird.
Nein, im Javascript-Adapter von ioBroker wird das Skript editiert und ausgeführt. Wir sind hier im ioBroker-Forum.
-
@mickym
Das ist nicht so einfach, da die DeviceNotes bisher nur etwas ausgeben, wenn ich Temp. Werte im DeviceModul eintrage.
Bei Über oder Unterschreitung des Wertes, kommte es erst zu einem AusgabeWert.
So, gerade kam der Wert.15.3.2023, 23:27:04node: debug 31
a0031401d392beeeeb6cec8e8fae598f : msg.payload : Object
{ id: "0", idx: "0", alias: null, platform: "device", entity_id: "sensor.28_ff641f5989ef_tempera…" … } -
@rudolf1957 Ja da kannst doch die temperatur leicht herauslösen. Du musst halt mal das ganze Objekt hier rein kopieren:
Ansonsten den Wert und den Pfad ermittelst Du einfach:
Wenn du den Pfad rauskopiert hast dann setzt du die payload in einer Change Node. und dann filterst Du halt - dass nur die Temperatur in Deinen Flow kommt.
Wie gesagt kopiere den Wert so wie in der Animation gezeigt und füge ihn hier mit CodeTags ein.
-
@mickym Danke, probiere ich morgen aus! Gute Nacht!
-
@rudolf1957
Ich arbeite weder mit NodeRed noch mit Home Assistant und vielleicht gehen meine Gedanken daher am Problem vorbei und die Antwort stört nur.Aber die Logik, die hinter der Aufgabe steht, ist m.E. recht simpel.
Wenn TempAusgang minus TempEingang > x°K ist schalte Pumpe ein
Wenn TempAusgang minus TempEingang < x°K ist schalte Pumpe ausHysterese beachten, damit das System nicht ins Schwingen kommt.
Also beide Werte auslesen, Differenz berechnen und Pumpensteuerung anlegen.
VG Peter
-
@mickym
Moin, dann schicke ich dir mal das Object! -
@rudolf1957 Du solltest das noch in Code Tags einbinden und über die Schaltfläche "Wert kopieren hier rein kopieren und nicht in dem Du den Text markierst und hierher kopierst.
Deswegen habe ich Dir doch das Bild geschickt. Warum machst Du das nicht?Also bitte direkt auf die Schaltfläche rechts
Wert kopieren und den Inhalt dann hier zwischen Code-Tags reinkopieren:
-
@mickym
Sorry, ich hoffe das ist jetzt besser!
Allerdings Topic + Payload sind nicht in dem Object enthalten. Ich habe keine Ahnung wo Topic + Payload zu finden sind.Da die Sensoren bereits eingebaut sind, bekomme ich nur eine Ausgabe über eine DeviceNode wenn der darin angegebene Wert über, oder unterschritten wird. Jedes Mal muss ich warten, bis dies geschieht. Bisher bin ich daran gescheitert, die DeviceNode anders zur Ausgabe zu zwingen.
Warum machst Du das nicht? - Sorry, war keine Absicht, ich muss mich einfach noch zurecht finden!
code_text 1.Object: {"id":"0","idx":"0","alias":null,"platform":"device","entity_id":"sensor.28_ff641f5989ef_temperature","below":33,"above":32,"from_state":{"entity_id":"sensor.28_ff641f5989ef_temperature","state":"33.0","attributes":{"state_class":"measurement","device_file":"/28.FF641F5989EF/temperature","raw_value":33,"unit_of_measurement":"°C","device_class":"temperature","friendly_name":"Fußbodenheizung Vorlauf"},"last_changed":"2023-03-16T12:38:38.001968+00:00","last_updated":"2023-03-16T12:38:38.001968+00:00","context":{"id":"01GVN6VV5H0P7ZS7T0QC4BHGS1","parent_id":null,"user_id":null}},"to_state":{"entity_id":"sensor.28_ff641f5989ef_temperature","state":"32.8","attributes":{"state_class":"measurement","device_file":"/28.FF641F5989EF/temperature","raw_value":32.8125,"unit_of_measurement":"°C","device_class":"temperature","friendly_name":"Fußbodenheizung Vorlauf"},"last_changed":"2023-03-16T12:39:37.933096+00:00","last_updated":"2023-03-16T12:39:37.933096+00:00","context":{"id":"01GVN6XNPDPBVZ0F663B75G2Y4","parent_id":null,"user_id":null}},"for":null,"description":"numeric state of sensor.28_ff641f5989ef_temperature"}
-
@rudolf1957 Na gut ist das immer noch nicht - ausser dass es in den CodeTags eingebunden ist. Das ist gut.
Schau mal ob Deinen Nachricht in etwa so aussieht:
So was kopiert man - in dem man mit der Maus direkt in die erste Zeile unter der roten Schrift msg.payload fährt und dann auf die Schaltfläche Wert kopieren drückt:
Jedenfalls sieht es so aus, als ob Du da ja bereits irgendwelche Alerts oder Temperaturbereiche eingeben kannst.
Ansonsten das topic und die Eigenschaften zu sehen, musst Du halt das ganze Nachrichtenobjekt ausgeben lassen. (kannst Du in der Debug Node einstellen).
Was mich wundert sind diese Grenzen - keine Ahnung - ob die was mit der Benachrichtigung zu tun haben:
Jedenfalls um einzelne Werte zu extrahieren oder zu überprüfen gehst Du auf den Pfad:
Um zum Beispiel zu selektieren, dass nur Temperatur rauskommt, könnte man vielleicht dieses Element nehmen:
Diesen Pfad gibst Du dann in der Eigenschaft einer Switch Node ein und filterst dann nur noch auf den Wert temperature - dann kommen nur Temperaturwerte durch:
Die aktuelle Temperatur selektierst Du in dem Du die payload eben auf den Pfad setzt der die aktuelle Temperatur ausgibt:
Ich habe jetzt mal folgenden Wert genommen:
darauf setzt Du nun die payload in einer ChangeNode:
Schon bekommst du die Temperaturwerte in Reinform:
Hier Flow zum Testen:
-
@rudolf1957 sagte in Pumpe steuern über Tempdifferenz:
Da die Sensoren bereits eingebaut sind, bekomme ich nur eine Ausgabe über eine DeviceNode wenn der darin angegebene Wert über, oder unterschritten wird. Jedes Mal muss ich warten, bis dies geschieht. Bisher bin ich daran gescheitert, die DeviceNode anders zur Ausgabe zu zwingen.
Wie heissen den diese Nodes die Du da installiert hast?
Schau mal im Paletten- Manager nach.
-
@mickym Danke, für die vielen Infos! Damit sollte ich meiner DifferenzSteuerung näher kommen!
Was mich wundert sind diese Grenzen<< Die gesetzten TempWerte kannst du vernachlässigen, sie dienen nur zum Schnellen Auslösen der Wertübergabe.
Das NoteModul, das die Temperatur aus dem RS485 TempFühler ausliest, heißt Device, aus der Pallette "Home Assistant"
Die Einstellmöglichkeiten von der DeviceNote habe ich unten in das Fenster eingestellt, mit der Einschränkung, dass bei "Values: trigger | action" , nur Trigger funktioniert. Wenn ich "action" aktiviere, bekommt das Modul einen Eingang, schließe ich dann eine InjectNote am Eingang an und löse eine Aktion aus, bekomme ich aber nur Fehlermeldungen - {"code":"unknown_error","message":"Integration 'sensor' does not support device automation actions"}" Alpha version: At this point anything could change or not work.
Found an issue? Post it in issues . Have questions or comments? Post them here".
Hier die Einstellmöglichkeiten vom der DeviceNote
device Configuration Typestring Values: trigger | action Devicestring Id of the device Triggerobject Home Assistant object of the trigger Actionobject Home Assistant object of the action Capabilitiesobject Outputs Value types: config: config properties of the node device id: device id that triggered the node event data: event data received from Home Assistant sent data: data sent to Home Assistant code_text
Deine Vorschläge probiere ich später aus, jetzt muss ich erst einem raus in die Sonne und einkaufen.
-
@rudolf1957 sagte in Pumpe steuern über Tempdifferenz:
Home Assistant
Ja OK - aber dann denke ich bin ich erst mal raus - das sind Dinge die aus der Device Node kommen, die stammen von Home Assistant.
und da kenn ich mich nicht aus. Da solltest Du deine Fragen doch lieber in einem HomeAssistant Forum stellen, das hat mit NodeRed erst mal nichts zu tun.
-
@mickym
Guten Abend, ganz herzlichen Dank für deine Hilfe!
Ebenso auch danke allen anderen die geantwortet haben.
Ich bin zwar noch nicht am Ziel aber zu mindest etwas näher gekommen.
VG
Rudi -
@rudolf1957
Versuche es mal mit diesem flow[ { "id": "899599b8f9de1378", "type": "tab", "label": "Flow 2", "disabled": false, "info": "", "env": [] }, { "id": "458e3bc802ffa358", "type": "api-current-state", "z": "899599b8f9de1378", "name": "", "server": "2a08017d41c42a0a", "version": 3, "outputs": 1, "halt_if": "", "halt_if_type": "str", "halt_if_compare": "is", "entity_id": "sensor.28_ff641f598ee0_temperature", "state_type": "num", "blockInputOverrides": false, "outputProperties": [ { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" }, { "property": "topic", "propertyType": "msg", "value": "Temp1", "valueType": "str" } ], "for": "0", "forType": "num", "forUnits": "minutes", "override_topic": false, "state_location": "payload", "override_payload": "msg", "entity_location": "data", "override_data": "msg", "x": 550, "y": 540, "wires": [ [ "c9415f769ea20817" ] ] }, { "id": "fce1376ac4483678", "type": "inject", "z": "899599b8f9de1378", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "1", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 210, "y": 560, "wires": [ [ "458e3bc802ffa358", "e562b1ee38ae590c" ] ] }, { "id": "e562b1ee38ae590c", "type": "api-current-state", "z": "899599b8f9de1378", "name": "", "server": "2a08017d41c42a0a", "version": 3, "outputs": 1, "halt_if": "", "halt_if_type": "str", "halt_if_compare": "is", "entity_id": "sensor.solis_temperature", "state_type": "num", "blockInputOverrides": false, "outputProperties": [ { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" }, { "property": "topic", "propertyType": "msg", "value": "Temp2", "valueType": "str" } ], "for": "0", "forType": "num", "forUnits": "minutes", "override_topic": false, "state_location": "payload", "override_payload": "msg", "entity_location": "data", "override_data": "msg", "x": 520, "y": 600, "wires": [ [ "c9415f769ea20817" ] ] }, { "id": "80b539375074cdfd", "type": "function", "z": "899599b8f9de1378", "name": "function 5", "func": "msg.topic = \"diff\"\nmsg.payload = msg.payload.Temp2 - msg.payload.Temp1;\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1080, "y": 560, "wires": [ [ "19dc43570ca9090f", "61e394b2b1d96a82" ] ] }, { "id": "c9415f769ea20817", "type": "join", "z": "899599b8f9de1378", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 890, "y": 560, "wires": [ [ "80b539375074cdfd", "847e8baca31e6b10" ] ] }, { "id": "19dc43570ca9090f", "type": "debug", "z": "899599b8f9de1378", "name": "debug 6", "active": true, "tosidebar": true, "console": true, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1310, "y": 620, "wires": [] }, { "id": "847e8baca31e6b10", "type": "debug", "z": "899599b8f9de1378", "name": "debug 7", "active": false, "tosidebar": true, "console": true, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1070, "y": 640, "wires": [] }, { "id": "61e394b2b1d96a82", "type": "switch", "z": "899599b8f9de1378", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gt", "v": "1", "vt": "num" }, { "t": "lt", "v": "1", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 1390, "y": 460, "wires": [ [ "316918699f3ea2ea" ], [ "0c942921a06f0cb7" ] ] }, { "id": "316918699f3ea2ea", "type": "api-call-service", "z": "899599b8f9de1378", "name": "Pumpe Ein", "server": "2a08017d41c42a0a", "version": 5, "debugenabled": false, "domain": "switch", "service": "turn_on", "areaId": [], "deviceId": [], "entityId": [ "switch.hm_flur_statusanzeige_state_ch3" ], "data": "", "dataType": "jsonata", "mergeContext": "", "mustacheAltTags": false, "outputProperties": [], "queue": "none", "x": 1610, "y": 400, "wires": [ [] ] }, { "id": "0c942921a06f0cb7", "type": "api-call-service", "z": "899599b8f9de1378", "name": "Pumpe Aus", "server": "2a08017d41c42a0a", "version": 5, "debugenabled": false, "domain": "switch", "service": "turn_off", "areaId": [], "deviceId": [], "entityId": [ "switch.hm_flur_statusanzeige_state_ch3" ], "data": "", "dataType": "jsonata", "mergeContext": "", "mustacheAltTags": false, "outputProperties": [], "queue": "none", "x": 1610, "y": 480, "wires": [ [] ] }, { "id": "2a08017d41c42a0a", "type": "server", "name": "Home Assistant", "version": 5, "addon": false, "rejectUnauthorizedCerts": true, "ha_boolean": "y|yes|true|on|home|open", "connectionDelay": true, "cacheJson": true, "heartbeat": false, "heartbeatInterval": "30", "areaSelector": "friendlyName", "deviceSelector": "friendlyName", "entitySelector": "friendlyName", "statusSeparator": ": ", "statusYear": "hidden", "statusMonth": "short", "statusDay": "numeric", "statusHourCycle": "default", "statusTimeFormat": "h:m", "enableGlobalContextStore": false } ]