NEWS
[gelöst] Poolsteuerung, Anfänger braucht[e] Hilfe
-
Hallo zusammen,
ich habe für meine Poolsteuerung Node red erkoren.
Erstens der Übersichtlichkeit halber und zweitens möchte ich mich unbedingt in Node Red einarbeiten.
Ich benütze sowohl eine Wärmepumpe und Solarplatten per Wärmetauscher.Die Hardware und die Visu steht, die Logik noch nicht.
Die Umwälzung läuft hardwaremäßig wenn die Wärmepumpe läuft.
Folgende Datenpunkte möchte ich verwenden:-
Außentemperatur
-
Wassertemperatur
-
Solar Vorlauftemperatur
-
Delta der Wasser und Solar Temperatur
-
Energiebilanz
-
Badetemperatur als Sollwert
-
Mindest Umwälzung der Pumpe
Damit ich daraus was lernen kann, möchte ich gerne das schrittweise realisieren.
Zuerst mal:
„Wassertemperatur“ 2Grad unter „Badetemperatur Soll“ und „Energiebilanz“ >1kW steuere Ausgang 2 und schreibe die Laufzeit in eine Variable „Laufzeit Wärmepumpe/Tag“
Reset „Laufzeit Wärmepumpe/Tag“ um 0:00UhrIch freue mich auf Euren Input, am besten mit Erklärungen.
Vielen Dank und liebe Grüße
Torsten
Update: ich habe hier die fertige Lösung als Flow und auch zum Import:
[ { "id": "83e57a37.f03b48", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "hole Wassertemperatur", "topic": "hm-rpc.3.OEQ0674784.2.TEMPERATURE", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 140, "y": 220, "wires": [ [ "f1ed6ee6.23b24" ] ] }, { "id": "caad3ebf.a4ed9", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Temperatur_Soll", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Badetemperatur", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 120, "y": 140, "wires": [ [ "312b7f9f.134a6" ] ] }, { "id": "82194cc3.1ce8a", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Heizen aktiv", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Heizen_aktiv", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 870, "y": 220, "wires": [] }, { "id": "312b7f9f.134a6", "type": "change", "z": "89394b0c.86b5a8", "name": "", "rules": [ { "t": "set", "p": "Badetemperatur", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 470, "y": 140, "wires": [ [] ] }, { "id": "a7bdd82b.f85928", "type": "change", "z": "89394b0c.86b5a8", "name": "setze true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 590, "y": 220, "wires": [ [ "82194cc3.1ce8a" ] ] }, { "id": "bb043664.16a778", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Solarüberschuss", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Solarüberschuss", "ack": "true", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 2290, "y": 360, "wires": [] }, { "id": "b875b414.953568", "type": "change", "z": "89394b0c.86b5a8", "name": "setze true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1970, "y": 320, "wires": [ [ "bb043664.16a778" ] ] }, { "id": "d1ff32a2.67231", "type": "change", "z": "89394b0c.86b5a8", "name": "setze false", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1970, "y": 380, "wires": [ [ "bb043664.16a778" ] ] }, { "id": "af5f1bbf.240de8", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Bilanz", "topic": "hm-rega.0.18637", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 170, "y": 540, "wires": [ [ "eac7cff5.d486e" ] ] }, { "id": "eac7cff5.d486e", "type": "switch", "z": "89394b0c.86b5a8", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gt", "v": "1500", "vt": "str" }, { "t": "lte", "v": "1000", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 360, "y": 540, "wires": [ [ "f7b7a329.6e4c7" ], [ "5c3bc74e.4e5518" ] ] }, { "id": "f7b7a329.6e4c7", "type": "change", "z": "89394b0c.86b5a8", "name": "setze true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 560, "y": 540, "wires": [ [ "fd8e9002.7f95" ] ] }, { "id": "fd8e9002.7f95", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Energiebilanz_PV", "topic": "0_userdata.0.Poolsteuerung.Energiebilanz_PV", "ack": "true", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 870, "y": 540, "wires": [] }, { "id": "f7e5cf2d.5f8ed", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "And", "filtertrue": "both", "persist": true, "sInitializeWith": "false", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": "4", "topic": "result", "x": 480, "y": 760, "wires": [ [ "27231f4f.e8c2b" ], [], [] ] }, { "id": "b45122fd.32393", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Heizen aktiv", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Heizen_aktiv", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 190, "y": 720, "wires": [ [ "f7e5cf2d.5f8ed" ] ] }, { "id": "3e9d17d2.e24e68", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Solarüberschuss", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Solarüberschuss", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 200, "y": 780, "wires": [ [ "f7e5cf2d.5f8ed" ] ] }, { "id": "b22cf1e2.189de", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Bypass Ventil öffnen", "topic": "hm-rpc.3.REQ1241895.3.STATE", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1360, "y": 900, "wires": [] }, { "id": "5c3bc74e.4e5518", "type": "change", "z": "89394b0c.86b5a8", "name": "setze false", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 560, "y": 600, "wires": [ [ "fd8e9002.7f95" ] ] }, { "id": "8e24a9bf.1a8f18", "type": "comment", "z": "89394b0c.86b5a8", "name": "Heizen mit Solarunterstützung", "info": "", "x": 820, "y": 760, "wires": [] }, { "id": "7a7db09f.ea9fc", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Anf_Pumpe_von_Solar", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Anf_Pumpe_von_Solar", "ack": "true", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1370, "y": 960, "wires": [] }, { "id": "2300818d.73d40e", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "And", "filtertrue": "both", "persist": true, "sInitializeWith": "false", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": "4", "topic": "result", "x": 480, "y": 1480, "wires": [ [ "4e582112.bd9e5" ], [], [] ] }, { "id": "26777bfc.b1b7c4", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Heizen aktiv", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Heizen_aktiv", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 190, "y": 1440, "wires": [ [ "2300818d.73d40e" ] ] }, { "id": "8b595b1c.d1ee58", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Energiebilanz_PV", "topic": "0_userdata.0.Poolsteuerung.Energiebilanz_PV", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 210, "y": 1500, "wires": [ [ "2300818d.73d40e" ] ] }, { "id": "4666bdd7.4b3044", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Wärmepumpe Ein/Aus", "topic": "hm-rpc.3.REQ1241895.4.STATE", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1280, "y": 1480, "wires": [] }, { "id": "8e726e87.0d6b1", "type": "comment", "z": "89394b0c.86b5a8", "name": "Heizen mit Wärmepumpe", "info": "", "x": 600, "y": 1420, "wires": [] }, { "id": "64d819d.ac203e8", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Anf_Pumpe_von_WP", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Anf_Pumpe_von_WP", "ack": "true", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1276, "y": 1560, "wires": [] }, { "id": "e9863387.89ef9", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Wetterstation Sonnenschein", "topic": "hm-rpc.4.0017D709AE31BB.1.SUNSHINE_THRESHOLD_OVERRUN", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 240, "y": 1200, "wires": [ [ "d77dbeea.617e" ] ] }, { "id": "34121d84.0ee042", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Wetterstation Außentemperatur", "topic": "hm-rpc.4.0017D709AE31BB.1.ACTUAL_TEMPERATURE", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 1310, "y": 680, "wires": [ [ "72bfd438.8a8d3c" ] ] }, { "id": "72bfd438.8a8d3c", "type": "switch", "z": "89394b0c.86b5a8", "name": "prüfe mind. 15°C", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gte", "v": "15", "vt": "str" }, { "t": "lt", "v": "12", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 1570, "y": 680, "wires": [ [ "423e48af.6e3878" ], [ "ea104121.7f8e2" ] ] }, { "id": "d77dbeea.617e", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "", "filtertrue": "both", "persist": true, "sInitializeWith": "false", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": "3", "topic": "result", "x": 480, "y": 1200, "wires": [ [ "9da27ed0.eae5e" ], [], [] ] }, { "id": "389afbfa.d856b4", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Freigabe_Außentemp_", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Freigabe_Außentemp_", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 2120, "y": 680, "wires": [] }, { "id": "423e48af.6e3878", "type": "change", "z": "89394b0c.86b5a8", "name": "setze true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1820, "y": 680, "wires": [ [ "389afbfa.d856b4" ] ] }, { "id": "ea104121.7f8e2", "type": "change", "z": "89394b0c.86b5a8", "name": "setze false", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1830, "y": 720, "wires": [ [ "389afbfa.d856b4" ] ] }, { "id": "842cd1d0.98b48", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Freigabe_Außentemp_", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Freigabe_Außentemp_", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 220, "y": 1260, "wires": [ [ "d77dbeea.617e" ] ] }, { "id": "d10301b7.ef0ef", "type": "InvertUltimate", "z": "89394b0c.86b5a8", "name": "Invert", "x": 510, "y": 1100, "wires": [ [ "d77dbeea.617e" ] ] }, { "id": "ff39afa.039565", "type": "comment", "z": "89394b0c.86b5a8", "name": "Anforderung Umwälzpumpe Solar", "info": "", "x": 1750, "y": 1140, "wires": [] }, { "id": "66f988a6.4ca578", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Anf_Pumpe_von_Solar", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Anf_Pumpe_von_Solar", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "fireOnStart": "true", "x": 220, "y": 1780, "wires": [ [ "26fc5e80.485f12" ] ] }, { "id": "426bfb66.27e944", "type": "switch", "z": "89394b0c.86b5a8", "name": "läuft oder läuft nicht", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" }, { "t": "false" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 470, "y": 2120, "wires": [ [ "23347cd3.d823d4" ], [ "770eb1d8.1b62" ] ] }, { "id": "2ccbe9ae.5de3b6", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Laufzeit_Tag", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Laufzeit_Tag", "ack": "true", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1650, "y": 2060, "wires": [] }, { "id": "23347cd3.d823d4", "type": "trigger", "z": "89394b0c.86b5a8", "name": "", "op1": "1", "op2": "0", "op1type": "num", "op2type": "str", "duration": "-1", "extend": false, "overrideDelay": false, "units": "min", "reset": "", "bytopic": "all", "topic": "topic", "outputs": 1, "x": 770, "y": 2060, "wires": [ [ "f0106a67.68ccf8" ] ] }, { "id": "f0106a67.68ccf8", "type": "ioBroker get", "z": "89394b0c.86b5a8", "name": "Laufzeit_Tag", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Laufzeit_Tag", "attrname": "status", "payloadType": "value", "x": 1010, "y": 2060, "wires": [ [ "2fa05a36.5ded86" ] ] }, { "id": "2fa05a36.5ded86", "type": "change", "z": "89394b0c.86b5a8", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "status + payload", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1250, "y": 2060, "wires": [ [ "2ccbe9ae.5de3b6" ] ] }, { "id": "770eb1d8.1b62", "type": "change", "z": "89394b0c.86b5a8", "name": "", "rules": [ { "t": "set", "p": "reset", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 730, "y": 2180, "wires": [ [ "23347cd3.d823d4", "a3796662.1b2288" ] ] }, { "id": "f50cbcdd.4df18", "type": "inject", "z": "89394b0c.86b5a8", "name": "Tageswechsel", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "01 00 * * *", "once": false, "onceDelay": 0.1, "topic": "", "payload": "0", "payloadType": "num", "x": 1260, "y": 2000, "wires": [ [ "2ccbe9ae.5de3b6" ] ] }, { "id": "a3796662.1b2288", "type": "ioBroker get", "z": "89394b0c.86b5a8", "name": "Laufzeit_Tag", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Laufzeit_Tag", "attrname": "status", "payloadType": "value", "x": 1010, "y": 2180, "wires": [ [ "c278734d.e25ed" ] ] }, { "id": "c278734d.e25ed", "type": "change", "z": "89394b0c.86b5a8", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "status ", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1230, "y": 2180, "wires": [ [ "2ccbe9ae.5de3b6" ] ] }, { "id": "1ce956bc.969819", "type": "comment", "z": "89394b0c.86b5a8", "name": "Laufzeit Filter", "info": "", "x": 940, "y": 1960, "wires": [] }, { "id": "e7444e07.459cf", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Pumpe läuft", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Pumpe_läuft", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1010, "y": 1780, "wires": [] }, { "id": "bda9097.228eff8", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Umwälzpumpe Solar", "topic": "hm-rpc.3.REQ1241895.2.STATE", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1920, "y": 1220, "wires": [] }, { "id": "f1ed6ee6.23b24", "type": "switch", "z": "89394b0c.86b5a8", "name": "vergleiche", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "payload < $flowContext('Badetemperatur') - 1", "vt": "jsonata" }, { "t": "jsonata_exp", "v": "payload >= $flowContext('Badetemperatur') + 2", "vt": "jsonata" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 390, "y": 220, "wires": [ [ "a7bdd82b.f85928" ], [ "83dabc7e.f0fc3" ] ] }, { "id": "83dabc7e.f0fc3", "type": "change", "z": "89394b0c.86b5a8", "name": "setze false", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 590, "y": 260, "wires": [ [ "82194cc3.1ce8a" ] ] }, { "id": "37e04735.ada178", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Solartemperatur", "topic": "hm-rpc.3.OEQ0674784.1.TEMPERATURE", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 1040, "y": 400, "wires": [ [ "340cade6.0d94d2" ] ] }, { "id": "f14c597d.b7db28", "type": "change", "z": "89394b0c.86b5a8", "name": "setze msg.Wasser", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "Wasser", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1290, "y": 320, "wires": [ [ "348acde4.602cd2" ] ] }, { "id": "340cade6.0d94d2", "type": "change", "z": "89394b0c.86b5a8", "name": "setze msg.Solar", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "Solar", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1260, "y": 400, "wires": [ [ "6a06a0d5.977a9" ] ] }, { "id": "348acde4.602cd2", "type": "ioBroker get", "z": "89394b0c.86b5a8", "name": "Solar", "topic": "hm-rpc.3.OEQ0674784.1.TEMPERATURE", "attrname": "Solar", "payloadType": "value", "x": 1490, "y": 320, "wires": [ [ "fbef2e28.ca6e2" ] ] }, { "id": "6a06a0d5.977a9", "type": "ioBroker get", "z": "89394b0c.86b5a8", "name": "Wasser", "topic": "hm-rpc.3.OEQ0674784.2.TEMPERATURE", "attrname": "Wasser", "payloadType": "value", "x": 1500, "y": 400, "wires": [ [ "fbef2e28.ca6e2" ] ] }, { "id": "858ad7b6.87a0d8", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Wassertemperatur", "topic": "hm-rpc.3.OEQ0674784.2.TEMPERATURE", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 1070, "y": 320, "wires": [ [ "f14c597d.b7db28" ] ] }, { "id": "fbef2e28.ca6e2", "type": "switch", "z": "89394b0c.86b5a8", "name": "vergleiche", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "Wasser + 10 < Solar", "vt": "jsonata" }, { "t": "jsonata_exp", "v": "Wasser + 8 >= Solar ", "vt": "jsonata" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 1710, "y": 360, "wires": [ [ "b875b414.953568" ], [ "d1ff32a2.67231" ] ] }, { "id": "f546f28e.70e08", "type": "comment", "z": "89394b0c.86b5a8", "name": "Energiebilanz für Wärmepumpe", "info": "", "x": 450, "y": 460, "wires": [] }, { "id": "17932509.7135ab", "type": "comment", "z": "89394b0c.86b5a8", "name": "Vergleich Wasser mit gewünschter Badetemperatur", "info": "", "x": 440, "y": 60, "wires": [] }, { "id": "5aa26bab.a24754", "type": "comment", "z": "89394b0c.86b5a8", "name": "Vorlauftemperatur Solar ausreichend?", "info": "", "x": 1600, "y": 180, "wires": [] }, { "id": "f38215c5.6e0af8", "type": "comment", "z": "89394b0c.86b5a8", "name": "Freigabe zum Prüfen Solar Vorlauf", "info": "", "x": 1770, "y": 600, "wires": [] }, { "id": "1a65125f.38c11e", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Steuerung aktiv?", "topic": "0_userdata.0.Poolsteuerung.Steuerung_aktiv", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 200, "y": 840, "wires": [ [ "f7e5cf2d.5f8ed" ] ] }, { "id": "683f53b1.de0e7c", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Solarunterstützung aktiv?", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Solarunterstützung_aktiv", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 230, "y": 900, "wires": [ [ "f7e5cf2d.5f8ed" ] ] }, { "id": "bc5c5753.f8c1c8", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Steuerung aktiv?", "topic": "0_userdata.0.Poolsteuerung.Steuerung_aktiv", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 200, "y": 1560, "wires": [ [ "2300818d.73d40e" ] ] }, { "id": "eabe6b1.5bb8f98", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Heizen mit Wärmepumpe aktiv?", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Wärmepumpe_aktiv", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 250, "y": 1620, "wires": [ [ "2300818d.73d40e" ] ] }, { "id": "27231f4f.e8c2b", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "Oder", "filtertrue": "both", "persist": true, "sInitializeWith": "WaitForPayload", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": 2, "topic": "result", "x": 710, "y": 980, "wires": [ [], [ "6b46e83d.9f89b8" ], [] ] }, { "id": "16a5792e.1472f7", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Solarunterstützung Dauer Ein/Aus", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Solarunterstützung_manuell", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 260, "y": 980, "wires": [ [ "27231f4f.e8c2b" ] ] }, { "id": "4e582112.bd9e5", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "", "filtertrue": "both", "persist": true, "sInitializeWith": "WaitForPayload", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": 2, "topic": "result", "x": 820, "y": 1480, "wires": [ [], [ "8a5de38e.7929e" ], [] ] }, { "id": "591c2bb5.6016a4", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Wärmepumpe Dauer E/n/Aus", "topic": "0_userdata.0.Poolsteuerung.Temperatursteuerung.Wärmepumpe_manuell", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 540, "y": 1560, "wires": [ [ "4e582112.bd9e5" ] ] }, { "id": "151fbbd6.82ff64", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Filterpumpe", "topic": "hm-rpc.3.REQ1241895.1.STATE", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1010, "y": 1840, "wires": [] }, { "id": "26fc5e80.485f12", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "", "filtertrue": "both", "persist": true, "sInitializeWith": "WaitForPayload", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": "4", "topic": "result", "x": 490, "y": 1840, "wires": [ [], [ "ff9e5924.99fd08" ], [] ] }, { "id": "a8db85c1.6843d8", "type": "comment", "z": "89394b0c.86b5a8", "name": "Ansteuerung Filterpumpe", "info": "", "x": 530, "y": 1740, "wires": [] }, { "id": "a4b0d5bc.a9fe48", "type": "trigger", "z": "89394b0c.86b5a8", "name": "Laufzeit 5min", "op1": "1", "op2": "0", "op1type": "str", "op2type": "str", "duration": "5", "extend": false, "overrideDelay": false, "units": "min", "reset": "", "bytopic": "all", "topic": "topic", "outputs": 1, "x": 1190, "y": 1300, "wires": [ [ "bc8faceb.0a56e" ] ] }, { "id": "9da27ed0.eae5e", "type": "rbe", "z": "89394b0c.86b5a8", "name": "entprellen", "func": "rbe", "gap": "", "start": "", "inout": "out", "septopics": true, "property": "payload", "x": 660, "y": 1200, "wires": [ [ "639840c5.cf2c" ] ] }, { "id": "893287f3.bbeac8", "type": "trigger", "z": "89394b0c.86b5a8", "name": "alle 30 min erneut einschalten", "op1": "1", "op2": "0", "op1type": "str", "op2type": "str", "duration": "-30", "extend": false, "overrideDelay": false, "units": "min", "reset": "", "bytopic": "all", "topic": "topic", "outputs": 1, "x": 930, "y": 1300, "wires": [ [ "a4b0d5bc.a9fe48" ] ] }, { "id": "6cae00d1.7bcd6", "type": "inject", "z": "89394b0c.86b5a8", "name": "Prüfen 20:00Uhr", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "*/1 20-23 * * *", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 210, "y": 2340, "wires": [ [ "673accb8.5242a4" ] ] }, { "id": "673accb8.5242a4", "type": "ioBroker get", "z": "89394b0c.86b5a8", "name": "Hole Laufzeit_Tag", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Laufzeit_Tag", "attrname": "payload", "payloadType": "value", "x": 430, "y": 2340, "wires": [ [ "dd3ddd1f.fa71b" ] ] }, { "id": "a1c375e7.71c418", "type": "switch", "z": "89394b0c.86b5a8", "name": "Laufzeit prüfen", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "gelaufen <= 300", "vt": "jsonata" }, { "t": "jsonata_exp", "v": "gelaufen > 300", "vt": "jsonata" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 860, "y": 2340, "wires": [ [ "a6569b85.5478d8" ], [ "c5b2c068.01f4a" ] ] }, { "id": "dd3ddd1f.fa71b", "type": "change", "z": "89394b0c.86b5a8", "name": "setze msg", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "gelaufen", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 670, "y": 2340, "wires": [ [ "a1c375e7.71c418" ] ] }, { "id": "a6569b85.5478d8", "type": "change", "z": "89394b0c.86b5a8", "name": "setze true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1100, "y": 2320, "wires": [ [ "32290619.37b98a" ] ] }, { "id": "83ea4baa.e261f8", "type": "rbe", "z": "89394b0c.86b5a8", "name": "Trigger", "func": "rbe", "gap": "", "start": "", "inout": "out", "septopics": true, "property": "payload", "x": 280, "y": 2120, "wires": [ [ "426bfb66.27e944" ] ] }, { "id": "32290619.37b98a", "type": "ioBroker out", "z": "89394b0c.86b5a8", "name": "Pumpe Nachlaufzeit", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Pumpe_Nachlaufzeit", "ack": "true", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1340, "y": 2320, "wires": [] }, { "id": "c5b2c068.01f4a", "type": "change", "z": "89394b0c.86b5a8", "name": "setze false", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1110, "y": 2380, "wires": [ [ "32290619.37b98a" ] ] }, { "id": "4aa9482f.e7c288", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Pumpe Nachlaufzeit", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Pumpe_Nachlaufzeit", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 210, "y": 1960, "wires": [ [ "26fc5e80.485f12" ] ] }, { "id": "e52739a4.f06978", "type": "comment", "z": "89394b0c.86b5a8", "name": "Nachlaufzeit", "info": "", "x": 850, "y": 2280, "wires": [] }, { "id": "ff9e5924.99fd08", "type": "rbe", "z": "89394b0c.86b5a8", "name": "entprellen", "func": "rbe", "gap": "", "start": "", "inout": "out", "septopics": true, "property": "payload", "x": 660, "y": 1840, "wires": [ [ "151fbbd6.82ff64", "e7444e07.459cf", "83ea4baa.e261f8" ] ] }, { "id": "8a5de38e.7929e", "type": "rbe", "z": "89394b0c.86b5a8", "name": "entprellen", "func": "rbe", "gap": "", "start": "", "inout": "out", "septopics": true, "property": "payload", "x": 1000, "y": 1480, "wires": [ [ "4666bdd7.4b3044", "64d819d.ac203e8" ] ] }, { "id": "6b46e83d.9f89b8", "type": "rbe", "z": "89394b0c.86b5a8", "name": "entprellen", "func": "rbe", "gap": "", "start": "", "inout": "out", "septopics": true, "property": "payload", "x": 940, "y": 980, "wires": [ [ "b22cf1e2.189de", "7a7db09f.ea9fc", "d10301b7.ef0ef", "bc8faceb.0a56e" ] ] }, { "id": "598cc201.e0e62c", "type": "rbe", "z": "89394b0c.86b5a8", "name": "entprellen", "func": "rbe", "gap": "", "start": "", "inout": "out", "septopics": true, "property": "payload", "x": 1700, "y": 1220, "wires": [ [ "bda9097.228eff8", "72a0e2ab.04ea5c" ] ] }, { "id": "639840c5.cf2c", "type": "switch", "z": "89394b0c.86b5a8", "name": "nur ausführen bei true", "property": "payload", "propertyType": "msg", "rules": [ { "t": "false" }, { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 900, "y": 1200, "wires": [ [ "537f0467.80407c" ], [ "893287f3.bbeac8" ] ] }, { "id": "18da7235.f874ee", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Anf_Pumpe_von_WP", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Anf_Pumpe_von_WP", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 220, "y": 1840, "wires": [ [ "26fc5e80.485f12" ] ] }, { "id": "8c28dba9.cc42c8", "type": "ioBroker in", "z": "89394b0c.86b5a8", "name": "Pumpe manuell", "topic": "0_userdata.0.Poolsteuerung.Filteranlage.Pumpe_manuell", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "true", "x": 200, "y": 1900, "wires": [ [ "26fc5e80.485f12" ] ] }, { "id": "bc8faceb.0a56e", "type": "BooleanLogicUltimate", "z": "89394b0c.86b5a8", "name": "", "filtertrue": "both", "persist": true, "sInitializeWith": "false", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": 2, "topic": "result", "x": 1500, "y": 1220, "wires": [ [], [ "598cc201.e0e62c" ], [] ] }, { "id": "36244687.bf616a", "type": "inject", "z": "89394b0c.86b5a8", "name": "", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 1880, "y": 800, "wires": [ [ "389afbfa.d856b4" ] ] }, { "id": "72a0e2ab.04ea5c", "type": "debug", "z": "89394b0c.86b5a8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 1950, "y": 1300, "wires": [] }, { "id": "537f0467.80407c", "type": "change", "z": "89394b0c.86b5a8", "name": "", "rules": [ { "t": "set", "p": "reset", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1160, "y": 1200, "wires": [ [ "893287f3.bbeac8" ] ] } ]
dazu habe ich eine einfach vis -läuft auf einen Raspi Zero mit 10.1" Toch Display im Edelstahl Gehäuße:
Zustand "Steuerung aus"
Zustand "Steuerung an"
Seite 2
Vielleicht kann der eine, oder ander hier was mitnehmen. Ich habe bei dem Projekt unheimlich viel gelernt.
Achtung: Ich habe noch einen Fehler endeckt: Das Schalten der Homematic Aktoren aus dem Node geht nur wenn wenn der Sendungstyp "command" ist, nicht "value"!
Danke an @mickym !!!
Update 26.04.2021: habe nun nach einigen Tagen live testen, noch ein paar bugs gefunden und den Export aktualisiert.
LG Torsten
-
-
@schneidy76 Wie immer empfehle ich damit anzufangen, mir zu überlegen wer oder was soll Deinen Flow triggern und was willst Du damit steuern bzw. wie sieht Dein Output aus - und so arbeitest Du Dich von links nach rechts, wie Du auch schreiben würdest.
Im Prinzip ist es wie Logikzeichnen.Für die Trigger kannst Du pollen (also in regelmäßigen Zeitabständen abfragen) oder nur bei Änderungen den Flow anstoßen, wobei Du natürlich auch bei Systemstart den Flow einmal durch laufen lassen kannst.
Zur schnellen Visualisierung empfehle ich das NR-Dashboard, dass ist ein tolles Toll und basiert auf dem Google Material Design. Später kannst Du dann VIS oder was anderes dazunehmen, wenn Du grafisch anspruchsvoller arbeiten willst, aber mit dem NR-Dashboard kannst Du am schnellsten steuern, was Du mit Deiner Logik fabriziert hast.
-
@mickym Vielen Dank, als Trigger würde ich das Delta der „Wasser und Solar Temperatur“ & „Energiebilanz“ heranziehen. Welche Knoten kann man da nehmen und wie kann ich Vergleiche am besten auswerten?
-
@schneidy76 Nun die Anbindung Deiner Sensoren in den iobroker hast Du wohl schon gemacht.
Also wird alles über Deine iobroker in Nodes getriggert.
Ein DELTA kann nicht triggern, sondern nur ein Datenpunkt der sich ändert oder man nutzt Zeitintervalle.
Ein DELTA ist etwas was Du ermitteln kannst aufgrund von Ereignissen. Ereignisse triggern und sonst nichts. Also Zustandsänderungen oder Zeitinitervalle etc.
In Deinem Fall würde sich wohl eine Temperaturänderung als Trigger anbieten und nun ist die Frage - die Wassertemperatur? - was ist eine SOlartemperatur? Durch wen oder was ändert sich eine Energiebilanz?Vergleiche musst Du selbst anstellen - indem DU Werte ausliest und mit anderen vergleichst.
Also fang erst mal damit an, was Deinen Flow triggern soll oder wenn es alles 3 ist, dann fang mit einem an und mach Dich später an die anderen.
-
@mickym Ja, alles was ich verwenden möchte,ist bereits als Datenpunkt in iobroker vorhanden. das Delta ist ein Datenpunkt vom Differenz Temperatur Sensor. Fangen wir mal noch kleiner an.
Trigger Datenpunkt Delta vom Diff. Temperatur.Sensor
Vergleiche Wassertemperatur mit Badetemperatur(Soll)
Ist Wassertemperatur 2 Grad unter Badetemperatur dann setze heizen auf 1 (oder „wahr“)Vg Torsten
-
@schneidy76 Nun als erstes check Mal ob in Deinem NR Adapter der Haken, dass alles in Strings umgewandelt wird - nicht gesetzt ist, sonst musst Du für die Rechnerei jedesmal einen Datenpunkt in eine Zahl umwandeln.
Dann würde ich mal als Trigger die Wassertemperatur holen. Die Badetemperatur nehme ich mal an ist konstant und wird nicht in einem Datenpunkt gespeichert.
Du holst Dir also die Wassertemperatur mit einer iobroker In Node. im Topic wählst Du den Datenpunkt im iobroker aus, der die Wassertemperatur enthält. Diese befindet sich dann in Deiner msg.payload. In einer SwitchNode gleichst Du die nun mit Deiner Badetemperatur ab und kannst nun filtern, dass der weitere Flow nur dann weitergehen soll, wenn das DELTA mehr als 2 °C beträgt. Dann setzt Du die payload mit einer Change Node auf 1 oder true und schickst das über die iobroker out Node zu Deiner Wasserheizung. Ist doch logisch oder?
Kannst ja einen Screenshot posten, wenn Du das gemacht hast.
Ich könnte Dir den Flow - auch schnell zum Importieren basteln - aber das machen wir dann, wenn Du nicht weiterkommst.
So einfach sollte es dann aussehen:
-
@mickym ohwe schon gescheitert
das setzen auf true war weg:
Ach ja, der Datenpunkt Badetemperatur ist natürlich nicht fix, sondern auch ein "echter" Wert der aus der VIS gesetzt wird
VG Torsten
-
@schneidy76 Nun wenn der Datenpunkt Badetemperatur nicht fix ist, dann ist das etwas schwieriger. Du musst Dir immer vorstellen, dass alle Nachrichten in Bewegung, im Fluss, im Flow sind. Nichts ist statisch. Wenn Du Dir also Deine Nachricht aus dem Datenpunkt Badetemperatur holst, dann wartet die nicht auf Dich bzw. bis der Wert der Wassertemperatur da ist. - Ich hoffe Du verstehst was ich meine.
Um dieses Problem zu lösen gibt es 2 Möglichkeiten:
- Du speicherst den Punkt mit dem Du vergleichen möchtest im Flow und kannst dann vergleichen. Empfohlen!
- Du nimmst den Wert quasi im Vorbeigehen mit und schleppst ihn bis zum Vergleich so lange in Deiner Nachricht mit. ( ist aber vielleicht für den Anfang bissi schwer zu verstehen).
Also bleiben wir bei 1.
Hier hast Du den kompletten Flow zum Importieren - musst nur noch Deine Datenpunkte unter den Topic in die in und out Nodes machen:
[ { "id": "b6e037d2.04c208", "type": "ioBroker in", "z": "6e170384.60c96c", "name": "", "topic": "Hole Badetemperatur", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 2700, "y": 3680, "wires": [ [ "2007aae4.061916" ] ] }, { "id": "2007aae4.061916", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "Badtemperatur", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2980, "y": 3680, "wires": [ [] ] }, { "id": "ea29fa4f.6aef78", "type": "ioBroker in", "z": "6e170384.60c96c", "name": "", "topic": "Hole Wassertemperatur", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 2700, "y": 3740, "wires": [ [ "db44f45.f117208" ] ] }, { "id": "db44f45.f117208", "type": "switch", "z": "6e170384.60c96c", "name": "ist < 2 unter Badetemperatur?", "property": "Badetemperatur", "propertyType": "flow", "rules": [ { "t": "eq", "v": "2", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 3000, "y": 3740, "wires": [ [ "f3667f03.13cd6" ] ] }, { "id": "f3667f03.13cd6", "type": "change", "z": "6e170384.60c96c", "name": "setze true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 3250, "y": 3740, "wires": [ [ "e12f768f.804578" ] ] }, { "id": "e12f768f.804578", "type": "ioBroker out", "z": "6e170384.60c96c", "name": "", "topic": "... und heize", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 3430, "y": 3740, "wires": [] } ]
Importieren geht indem Du die den Inhalt des schwarzen Kastens in die Zwischenablage kopierst, dann gehst Du rechts oben auf das Menü Import
Kopierst den Inhalt der Zwischenablage in das rosa Fenster und importierst die Nodes:
Im Kontextmenü rechts kannst Du Dir dann auch immer den Inhalt der Variablen anschauen - in diesem Fall einer Flowvariable:
-
@mickym Vielen vielen Dank, ich denke ich komme jetzt mal ein Stück weit.
Vergleichen und dann setzen, das ist mal zu 70% die Logic.
Ich probiere mich mal aus und melde mich wieder!
Danke für die (Start)Hilfe.Viele liebe Grüße Torsten
-
@mickym Hallo, ich habe mich länger nicht gemeldet.
Ein Zwischenstand:
die Vergleiche stehen soweit alle und funktionieren
And und Or Verknüpfung passt auch.
Danke nochmals für die Starthilfe.Was mir noch fehlt:
Immer wenn die Filteranlage läuft, was sie beim Heizen immer tut, sollen die Laufzeiten addiert werden und nach 0Uhr resetet werden.
Ist diese Laufzeit unter Zeit X soll die Filteranlage am Abend laufen bis die Zeit X erreicht ist. Damit wird eine Mindest Filterzeit sichergestellt.
Habe schon ein wenig mit dem Counter Node experimentiert, bin mir aber nicht sicher, ob der das Richtige ist. Zudem würde ich diese Zeit gerne peristent machen.Danke und Vg Torsten
-
@schneidy76 Nun eine Counter Node - ist nicht im Standard enthalten. Falls Du diese Node meinst, dann halte ich die für eher ungeeignet. Die zählt ja nur je nach Nachrichteneingang entweder rauf oder runter - aber Du willst ja zeitliche Steuerungen.
Dann solltest Du halt streng nach der Ein- und Ausgabelogik vorgehen.
Und dann ist Deine Logik noch nicht ganz klar bzw. es fehlt noch was, aber dazu später.Also was haben wir als Eingangstrigger auf der linken Seite:
- Den Schaltzustand der Filteranlage bzw. der Heizung (true oder false) sowie ich mich erinnere.
- Den Zeittrigger um 0 Uhr, um die Laufzeit zurückzusetzen.
- Einen weiteren Zeittrigger, der am Abend (ist das ein fixer Zeitpunkt ??) überprüft, ob die Laufzeit erreicht wurde oder nicht.
- Oder eine periodische Überprüfung am Abend - dann empfehle ich Dir den Light-Scheduler zu installieren - den liebe ich. (das wurde mir aus der Aufgabenstellung nicht klar. )
Dann brauchst Du ja ein paar Variablen/Datenpunkte zum Speichern:
- Den Startzeitpunkt an dem die Zeitperiode beginnt zum Speichern - man kann auch den Timestamp der letzten Änderungen des Heizungsdatenpunktes verwenden.
- Die aufsummierte Zeit zu speichern.
Nachdem Du es ja persistent machen willst (was sinnvoll ist, gerade wenn man den Adapter oder den iobroker mal neustarten muss), würde ich halte Datenpunkte anlegen, in den Du alles zwischenspeicherst.
Wenn die normale Logik funktioniert, dann solltest Du eben die Szenarien durchgehen, dass der iobroker neugestartet wird, während die Heizung läuft oder zwischenzeitlich ausgeschaltet wurde, während der iobroker gestoppt war.
Dazu muss man nur bissi Vorstellungskraft walten lassen.
Ich hoffe Dir damit Anregungen zum Start gegeben zu haben.
-
@mickym Huhu, ja Du hast Recht.
Zum ersten, genau diesen Node meinte ich.
Finde den auch nicht so ganz passend...
Thema Trigger (in Deiner Reihenfolge)- Ich setze die Filteranlage immer wenn nötig auf true, auch wenn ich die Wärmepumpe und Filteranlage über einen Parallelkontakt zwangsläufig parallel schalte. Sonst könnte die WP Schaden nehmen. Also nehmen wir die Filteranlage als Trigger.
- 0:00 Uhr rücksetzen - Check
- nein nicht fix, nennen wir ihn „Heizen nicht mehr sinnvoll“ - lassen wir mal so stehen. Ich habe eine Wetterstation da in der Nähe, eventuell nehme ich die Sonneneinstrahlung als Referenz, oder das Wasser ist warm genug. Punkt für die Ferne.
Glaube, wenn das fertig ist, wird das super. Stelle dann alles hier rein.
-
@schneidy76 Gut dann kannst ja loslegen.
2 Datenpunkte anlegen - einen für aktuelle Laufzeit, einen für Laufzeit am Tag.
- iobroker In Node des Datenpunktes der Filteranlage triggert - bei True - Beginn der aktuellen Laufzeit, bei false auf 0 setzen und Zeitdifferenz zur aktuellen Zeit in Datenpunkt für die Tageslaufzeit aufsummieren.
- Inject Node mit Tageswechsel setzt Tageslaufzeit auf 0.
- Periodisches Prüfen ob sinnvoll - dann lightscheduler Node installieren.
Bastel mal schnell was mit 3 Datenpunkten (Filteranlage - true/false, Start aktuelle Laufzeit, Tageslaufzeit).
-
So ich habe mal einen kleinen Flow für Dich entworfen mit 3 von mir erstellten Datenpunkten:
Über Filteranlage true/false triggerst Du den Flow.
- Ist auf true gesetzt - wird start auf aktuellen timestamp gesetzt.
- Ist false gesetzt wird start auf 0 gesetzt und zeitraum ermittelt und aufaddiert in laufzeit_tag
- Inject Node setzt laufzeit_tag auf 0 und falls Anlage über Mitternacht läuft setzt auf start aktuellen timestamp
- Noch eine Inject Node, die theoretisch ab 20 Uhr abends alle 15 Minuten prüft ob Laufzeit ausreichend ist - müsste halt noch implementiert werden.
DAs mal so auf die Schnelle
hier zum Importieren:
EDIT Korrigiert:
-
So hier habe ich noch eine ganz andere Variante des Flows die vielleicht wesentlich intuitiver ist und auch nur mit einem Daten punkt für die Laufzeit in min geht.
Hier wird nur noch der Datenpunkt Laufzeit in min also laufzeit_tag2 hochgezählt.
Läuft der Filter sendet die Triggernode einfach jede Minute eine 1 und die wird im Datenpunkt aufsummiert, sodass hier immer die Laufzeit in Minuten jederzeit aktuell sichtbar ist. Das ist sicher von Vorteil auch bei einer Visualisierung.
Läuft der Filter nicht, wird die Triggernode mit msg.reset einfach gestoppt. Bei Tageswechsel wird der Punkt einfach auf 0 gesetzt.
Eigentlich gefällt mir diese Umsetzung besser.
Du siehst es führen viele Wege nach Rom - äh zum Ziel.
EDIT: Nochmal korrigiert.
-
@mickym
ich habe mal ne generelle Frage:
Was gebe ich im Feld "Setze" "flow" "Name" ein? Den Namen des Flows links? Oder benenne ich damit eine x beliebige Variable als flow???und wie sieht man den Switch Node richtig?
Eingang ist zu Eigenschaft???
Also hier Wassertemperatur ist 10°C <= Solartemp, oder gerade anders herum? Probiere bis es richtig schaltet, aber so richtig dahinter bin ich noch nicht gekommen.Danke un LG Torsten
-
- Ja Du gibst den Namen einer FLOW-Variablen ein. Es ist so wie es semantisch da steht:
Setze flow Variable(flow) Temperatur_Soll auf den Wert der Nachrichteneigenschaft (msg) payload.
- Wenn die Switch Node durch eine Nachricht angetriggert wird vergleicht sie die Eigenschaft mit den darunter liegenden Werten. Im obigen Screenshot wird Deine Nachricht an den Ausgang weiter geleitet - je nachdem welchen Wert Deine flow Variable Solartemp hat. Also hat mit dem Wert Deiner Nachricht gar nichts zu tun.
Die oben abgebildete Switch macht gar keinen Sinn, weil die Nachricht sofern sie <= 10 ist immer an Ausgang 1 geleitet wird. Ist sie hingegen > 10 wird sie gar nicht mehr weitergeleitet bzw. reagiert in Deinem Fall unerwartet.
Um die Bedingung auf einen Bereich einzuschränken musst Du die switch Node umkonfigurieren:
Wenn Du es so konfigurierst wie in Deinem Fall - und ich wende es mal auf eine Payload an und Du hast "alle Regeln überprüfen an" -
dann kommt die Nachricht bei einer 9 an beiden Ausgängen heraus:Nur wenn Du "Nach erster Übereinstimmung stoppen" setzt kommt bei 9 nur am 1. Ausgang was raus.
Aber nochmal - in der Eigenschaft steht mit welche Eigenschaft Du mit welchen Bedingungen vergleichst.
Also Du vergleichst nicht die Wassertemperatur (gehe mal davon aus, dass das Deine msg.payload ist), sondern leitest die Nachricht in Abhängigkeit des Zustandes Deiner Flow Variablen flow.Solartemp. Wolltest Du Deine payload mit Deiner flow Variablen Solartemperatur vergleichen, so kannst Du das ja nur relativ tun, in dem Du sagst msg.payload kleiner als flow.Solartemperatur. Damit vergleichst Du aber nicht mehr mit konstanten Werten:
-
@mickym Blöd, was ich eigentlich erreichen wollte ist eine Schalthysterese...
-
@schneidy76 Na das passt schon - nur musst Du Deine Bedingungen dann halt ausschließlich setzen.
Die Bereiche sollen sich nicht überschneiden.
Also Ausgang 1 bei >= 10 und Ausgang 2 bei <8. Dazwischen mache nichts.
-
@mickym also so?