Eigene Boiler Steuerung

Moin, ich habe ja schon lange eine Steuerung für meinen Warmwasserboiler aufgefallen. Und immer mal wieder den Code verändert. Nun ist mir aufgefallen dass, das Boiler Relais immer mal wieder kurz angesprochen wird. Ist nicht schlimm aber nervt vor allem meinem Mong :slight_smile: Vielleicht mag mal wer über den Code gucken ob und wie ich das wegbekkomme.

Wer den Code nutzen möchte immer gerne doch :slight_smile:

[{"id":"7e8746ce10ce7f7f","type":"comment","z":"3160a070e0376e18","name":"Boiler Solar Automatik","info":"","x":120,"y":1880,"wires":[]},{"id":"56f8ec21f92a3917","type":"debug","z":"3160a070e0376e18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1210,"y":1960,"wires":[]},{"id":"f8efb1a2fb8f722e","type":"comment","z":"3160a070e0376e18","name":"Boilersteuerung","info":"","x":100,"y":1840,"wires":[]},{"id":"fd94f3762bb8ed23","type":"inject","z":"3160a070e0376e18","name":"","props":[{"p":"payload"}],"repeat":"2","crontab":"","once":true,"onceDelay":"0.1","topic":"","payload":"","payloadType":"date","x":570,"y":1980,"wires":[["fa13fd4843f169ec","520096b2b4dffe9f","b2ebb07bfdea23eb","4cfe03da845c09db"]]},{"id":"a0b65e597edb72fb","type":"ui_slider","z":"3160a070e0376e18","name":"Slider Boiler","label":"min Temp","tooltip":"","group":"0843ebdd4fdc28a0","order":5,"width":10,"height":1,"passthru":false,"outs":"end","topic":"slider","topicType":"msg","min":"0","max":"90","step":"1","className":"","x":90,"y":2020,"wires":[["905ce44016544f9b"]]},{"id":"ccda226711b44d7f","type":"link out","z":"3160a070e0376e18","name":"Relay","mode":"link","links":["e9ffa3ef.cde5d"],"x":1095,"y":2020,"wires":[]},{"id":"905ce44016544f9b","type":"function","z":"3160a070e0376e18","name":"set Global","func":"global.set(\"minboiler\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":2020,"wires":[[]]},{"id":"5b04b8dff61f4c45","type":"ui_switch","z":"3160a070e0376e18","name":"LED heat","label":"","tooltip":"","group":"0843ebdd4fdc28a0","order":4,"width":1,"height":1,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"fa-fire fa-2x","oncolor":"Red","offvalue":"false","offvalueType":"bool","officon":"fa-fire fa-2x","offcolor":"Grey","animate":true,"className":"","x":1080,"y":2120,"wires":[[]]},{"id":"b4dd4ffeed615720","type":"ui_text","z":"3160a070e0376e18","group":"0843ebdd4fdc28a0","order":3,"width":7,"height":1,"name":"","label":"","format":"{{msg.payload}}","layout":"row-center","className":"","x":910,"y":2080,"wires":[]},{"id":"aa989e793b9cbe66","type":"ui_switch","z":"3160a070e0376e18","name":"LED heat-frontpage","label":"","tooltip":"","group":"56cfbdb2492be116","order":3,"width":1,"height":1,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"fa-fire fa-2x","oncolor":"Red","offvalue":"false","offvalueType":"bool","officon":"fa-fire fa-2x","offcolor":"Grey","animate":true,"className":"","x":1110,"y":2060,"wires":[[]]},{"id":"149846b319147939","type":"change","z":"3160a070e0376e18","name":"Aktualisiere Batterieautomatik","rules":[{"t":"set","p":"automationEnabled","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":2080,"wires":[[]]},{"id":"bce1cbe6975e2136","type":"change","z":"3160a070e0376e18","name":"Aktualisiere Boiler","rules":[{"t":"set","p":"manualBoiler","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":1960,"wires":[[]]},{"id":"eed9042559527a37","type":"ui_slider","z":"3160a070e0376e18","name":"Schwellenwert","label":"Schwellenwert","tooltip":"","group":"0843ebdd4fdc28a0","order":7,"width":7,"height":1,"passthru":true,"outs":"end","topic":"","topicType":"str","min":"80","max":"100","step":"1","className":"","x":100,"y":2140,"wires":[["cdf67d2bbf236066"]]},{"id":"cdf67d2bbf236066","type":"change","z":"3160a070e0376e18","name":"Setze Schwellenwert","rules":[{"t":"set","p":"threshold","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":2140,"wires":[[]]},{"id":"d15cf512eae5fc30","type":"ui_switch","z":"3160a070e0376e18","name":"Boiler AN/AUS","label":"","tooltip":"","group":"0843ebdd4fdc28a0","order":1,"width":1,"height":1,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"1","onvalueType":"num","onicon":"","oncolor":"","offvalue":"0","offvalueType":"num","officon":"","offcolor":"","animate":false,"className":"","x":100,"y":1960,"wires":[["bce1cbe6975e2136"]]},{"id":"00b466dc8543d982","type":"ui_switch","z":"3160a070e0376e18","name":"Überschuss nutzen","label":"Überschuss nutzen","tooltip":"","group":"0843ebdd4fdc28a0","order":6,"width":3,"height":1,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"2","onvalueType":"num","onicon":"","oncolor":"","offvalue":"0","offvalueType":"num","officon":"","offcolor":"","animate":false,"className":"","x":110,"y":2080,"wires":[["149846b319147939"]]},{"id":"fa13fd4843f169ec","type":"function","z":"3160a070e0376e18","name":"Boiler-Steuerung","func":"var batteryStatus = global.get(\"pkwshuntSOC\");\nvar threshold = flow.get('threshold'); // Schwellenwert für den Batterieladezustand\nvar automationEnabled = flow.get('automationEnabled') || false; // Schalter für die Automatik (0 = aus, 1 = ein)\nvar manualBoiler = flow.get('manualBoiler') || false; // Schalter für die manuelle Steuerung (0 = aus, 1 = ein)\nvar minBoiler = global.get(\"minboiler\"); // Zieltemperatur für den Boiler\nvar currentTemp = global.get(\"temp3\"); // Aktuelle Temperatur\nvar hysteresis = 2; // Hysterese in Grad\n\nif (manualBoiler === 1) {\n    // Manuelle Steuerung hat Priorität\n    if (currentTemp <= minBoiler) {\n        msg.payload = true; // Boiler einschalten\n    } else if (currentTemp >= minBoiler + hysteresis) {\n        msg.payload = false; // Boiler ausschalten\n    }\n    // Keine Änderung, wenn die Temperatur innerhalb der Hysteresegrenzen liegt\n} else if (automationEnabled === 2 && batteryStatus >= threshold) {\n    // Automatische Steuerung aktiviert\n    if (currentTemp <= minBoiler) {\n        msg.payload = true; // Boiler einschalten\n    } else if (currentTemp >= minBoiler + hysteresis) {\n        msg.payload = false; // Boiler ausschalten\n    }\n    // Keine Änderung, wenn die Temperatur innerhalb der Hysteresegrenzen liegt\n} else {\n    // Beide Steuerungen sind ausgeschaltet\n    msg.payload = false; // Boiler ausschalten\n}\n\n// Boiler-Status im Flow-Kontext speichern\nflow.set('boilerStatus', msg.payload);\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":2020,"wires":[["ccda226711b44d7f","aa989e793b9cbe66","5b04b8dff61f4c45","56f8ec21f92a3917","368e7c9b082009e0"]]},{"id":"1c6515f81fec1773","type":"ui_led","z":"3160a070e0376e18","order":1,"group":"56cfbdb2492be116","width":1,"height":1,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#929292","value":"grey","valueType":"str"},{"color":"#00a3d7","value":"blue","valueType":"str"},{"color":"#77bb41","value":"green","valueType":"str"}],"allowColorForValueInMessage":false,"shape":"square","showGlow":true,"name":"","x":990,"y":1980,"wires":[]},{"id":"520096b2b4dffe9f","type":"function","z":"3160a070e0376e18","name":"Status LED","func":"var automationEnabled = flow.get('automationEnabled') || false; // Schalter für die Automatik (0 = aus, 1 = ein)\nvar manualBoiler = flow.get('manualBoiler') || false; // Schalter für die manuelle Steuerung (0 = aus, 1 = ein)\n\nvar ledColor = \"grey\"; // Standardfarbe für LED ist Grau (Aus)\n\nif (manualBoiler === 1) {\n    // Manuelle Steuerung hat Priorität\n    ledColor = \"blue\"; // LED auf Blau setzen für manuellen Modus\n} else if (automationEnabled === 2) {\n    // Automatische Steuerung aktiviert\n    ledColor = \"green\"; // LED auf Grün setzen für Automatikmodus\n} else {\n    // Beide Steuerungen sind ausgeschaltet\n    ledColor = \"grey\"; // LED auf Grau setzen, wenn aus\n}\n\n// LED-Farbe in msg.payload ausgeben\nmsg.payload = ledColor;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":1960,"wires":[["1c6515f81fec1773","53a95bb3254fbbf9"]]},{"id":"53a95bb3254fbbf9","type":"ui_led","z":"3160a070e0376e18","order":2,"group":"0843ebdd4fdc28a0","width":1,"height":1,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#929292","value":"grey","valueType":"str"},{"color":"#00a3d7","value":"blue","valueType":"str"},{"color":"#77bb41","value":"green","valueType":"str"}],"allowColorForValueInMessage":false,"shape":"square","showGlow":true,"name":"","x":990,"y":1940,"wires":[]},{"id":"b2ebb07bfdea23eb","type":"function","z":"3160a070e0376e18","name":"Boiler Temp Anzeige","func":"var temp = global.get(\"temp3\").toFixed(1); // Temperatur holen und runden\nmsg.payload = \"BOILER \" + temp + \"°C\"; // Nachricht mit Temperatur formatieren\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":2080,"wires":[["b4dd4ffeed615720"]]},{"id":"0843ebdd4fdc28a0","type":"ui_group","name":"Boiler","tab":"82da89db4767a5b3","order":1,"disp":false,"width":"10","collapse":false,"className":"tempcontrol"},{"id":"56cfbdb2492be116","type":"ui_group","name":"Temperatur","tab":"e4f6699734582f4e","order":5,"disp":false,"width":10,"collapse":false,"className":""},{"id":"82da89db4767a5b3","type":"ui_tab","name":"Temperatur Steuerung","icon":"mi-device_thermostat","order":2,"disabled":false,"hidden":false},{"id":"e4f6699734582f4e","type":"ui_tab","name":"BOCK.AUF.RAUS","icon":"favorite","order":1,"disabled":false,"hidden":false}]

Kann es sein, dass irgendeine andere Funktion noch das Relay einschaltet? Und dann nach spätestens 2 Sekunden wieder ausgeschaltet wird, weil bei dem Boiler manuell & Automatik auf 0 stehen?

Du könntest in der Funktion Boilersteuerung noch das Relay mit abfragen und dann nur die Nachricht ausgeben, wenn es eine Veränderung gab, also z.B.:

if ( msg.payload != global.get(“one”) { return msg }

Vielleicht macht das die Suche etwas einfacher.

Hast du das Problem gelöst???
Und wenn ja wie??
Ich hab seit kurzem das gleiche Problem aber mit 3 Relais.
Ich weiss auch noch nich wie ich das am besten eingrenzen kann.
Gruß Arno