BMS Temperatur Zwischenspeichern?

Moin,

ich baue gerade meine Liontron Batterien zur Arctic Version um, sprich eine Heizfolie welche übers Relaisboard gesteuert wird. Die Temperatur dafür nehme ich aus dem BMS. Nun schaltet meine Steuerung immer sporadisch mal das Reais an obwohl die eingestellte min. Temp unter der tatsächlichen Temp ist.
Ich denke das kommt daher weil das Bluetooth ab uns an mal kurz abbricht.

Meine Idee ist nun die Temperatur erstmal zwischenzuspeichern und diese dann von der Zwischenspeicherung auslesen. Das Reinschreiben in diesen Speicher könnte man dann ja im 2min Tackt machen. Aber wie mache ich sowas?

Anbei noch zwei Fotos wie das ganze aussieht, für den Boiler und den Wassertank funktioniert das ganze perfekt, da kommt die Temperatur von den “normalen” Temperatursensoren.

Beste Grüße
Sven

Hi Sven, genau das möchte ich auch integrieren + einen Abwasser Frostschutz.
Sieht super bei dir aus!!!
Kannst du mir dein Flow exportieren oder zumindest eine JSON Datei geben?
Vielleicht können wir hieran zusammen arbeiten ?
Gruß, Stefan

1 Like

Moin,

ich füge dir mal den Flow hier ein, ist ja vielleicht auch für den ein oder anderen interessant.
Wenn jemand was sieht was man besser machen kann immer raus damit, ich hab das Ding nur zusammen gestammelt :slight_smile:

[{"id":"b5fbeb3d50863239","type":"tab","label":"Temp-Control","disabled":false,"info":"","env":[]},{"id":"cf91bacc931a13d6","type":"ui_switch","z":"b5fbeb3d50863239","name":"ON/OFF Boiler","label":"","tooltip":"","group":"6c1c73b328af210e","order":1,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"className":"","x":360,"y":360,"wires":[["6116b0309123f97e","74ddbfd333c261f9"]]},{"id":"b9f13f5b8a88b808","type":"ui_text","z":"b5fbeb3d50863239","group":"6c1c73b328af210e","order":2,"width":3,"height":1,"name":"IstTemp Boiler","label":"","format":"{{msg.payload}}°C","layout":"row-center","className":"","x":620,"y":240,"wires":[]},{"id":"0dad7d89eca3796b","type":"function","z":"b5fbeb3d50863239","name":"get inside tempsensor","func":"msg.payload = global.get(\"heattempsensor\");\n\nif(msg.payload != 1 && msg.payload != 2 && msg.payload != 3 && msg.payload != 4)\nmsg.payload=\"no sensor\"\n\nif(msg.payload == 1)\nmsg.payload = global.get(\"temp1\");\n\nif(msg.payload == 2)\nmsg.payload = global.get(\"temp2\");\n\nif(msg.payload == 3)\nmsg.payload = global.get(\"temp3\");\n\nif(msg.payload == 4)\nmsg.payload = global.get(\"temp4\");\n\n\n\nif(global.get(\"temp1\") == \"\" && global.get(\"temp2\") == \"\" &&global.get(\"temp3\") == \"\" && global.get(\"temp4\") == \"\")\n{\n    msg.payload =\"no TempSensor\"\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":240,"wires":[["b9f13f5b8a88b808"]]},{"id":"5747a0da4c5fa5b5","type":"inject","z":"b5fbeb3d50863239","name":"","props":[{"p":"payload"}],"repeat":"1","crontab":"","once":true,"onceDelay":"2","topic":"","payload":"","payloadType":"date","x":130,"y":320,"wires":[["f994be740cab3dc3","0dad7d89eca3796b","cf91bacc931a13d6"]]},{"id":"585db0a0ebc5ff12","type":"ui_slider","z":"b5fbeb3d50863239","name":"Slider Boiler","label":"min Temp","tooltip":"","group":"6c1c73b328af210e","order":5,"width":0,"height":0,"passthru":true,"outs":"end","topic":"slider","topicType":"msg","min":"0","max":"90","step":"5","className":"","x":530,"y":460,"wires":[["ef7c0b783aed0ec9"]]},{"id":"5010a4fc2d2b4c4a","type":"link out","z":"b5fbeb3d50863239","name":"Relay","mode":"link","links":["e9ffa3ef.cde5d"],"x":955,"y":300,"wires":[]},{"id":"b20d217361c4d74c","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minboiler\");\nvar temp = global.get(\"temp1\");\nvar hysteresis = 1;\nvar onoff = global.get(\"boileronoff\");\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = true;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":320,"wires":[["5010a4fc2d2b4c4a","f78c5d109bdacafd"]]},{"id":"ef7c0b783aed0ec9","type":"function","z":"b5fbeb3d50863239","name":"set Global","func":"global.set(\"minboiler\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":460,"wires":[[]]},{"id":"f994be740cab3dc3","type":"function","z":"b5fbeb3d50863239","name":"Get minWasser","func":"msg.payload = global.get(\"minboiler\");\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":460,"wires":[["585db0a0ebc5ff12"]]},{"id":"6116b0309123f97e","type":"switch","z":"b5fbeb3d50863239","name":"","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":360,"wires":[["b20d217361c4d74c"],["87b463e84032498d"]]},{"id":"87b463e84032498d","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minboiler\");\nvar temp = global.get(\"temp1\");\nvar hysteresis = 1;\nvar onoff = global.get(\"boileronoff\");\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = false;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":360,"wires":[["5010a4fc2d2b4c4a","f78c5d109bdacafd"]]},{"id":"f78c5d109bdacafd","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED heat","label":"","tooltip":"","group":"6c1c73b328af210e","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":980,"y":360,"wires":[[]]},{"id":"8b37dd8a44b0d2d0","type":"comment","z":"b5fbeb3d50863239","name":"Boiler","info":"","x":90,"y":200,"wires":[]},{"id":"25338e488b9332df","type":"ui_switch","z":"b5fbeb3d50863239","name":"ON/OFF Frischwasser","label":"","tooltip":"","group":"4b4782eb628353e5","order":1,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"className":"","x":360,"y":820,"wires":[["90f4ba83a0ba442d","4d9e39cc784d767a"]]},{"id":"7400b8e71b0bc7e4","type":"ui_text","z":"b5fbeb3d50863239","group":"4b4782eb628353e5","order":2,"width":3,"height":1,"name":"IstTemp Frischwasser","label":"","format":"{{msg.payload}}°C","layout":"row-center","className":"","x":640,"y":700,"wires":[]},{"id":"45848b36abeeb0cb","type":"inject","z":"b5fbeb3d50863239","name":"","props":[{"p":"payload"}],"repeat":"1","crontab":"","once":true,"onceDelay":"2","topic":"","payload":"","payloadType":"date","x":130,"y":780,"wires":[["65f6ff9c2b463e20","25338e488b9332df","57039f1eb029e369"]]},{"id":"3420f4809cddc5a9","type":"ui_slider","z":"b5fbeb3d50863239","name":"Slider Frischwasser","label":"min Temp","tooltip":"","group":"4b4782eb628353e5","order":5,"width":0,"height":0,"passthru":true,"outs":"end","topic":"slider","topicType":"msg","min":"0","max":"25","step":"1","className":"","x":560,"y":920,"wires":[["d170a71df91f77da"]]},{"id":"f474dead201b1c23","type":"link out","z":"b5fbeb3d50863239","name":"Relay","mode":"link","links":["7255f9f4.6304d8"],"x":955,"y":760,"wires":[]},{"id":"f9dd3f30eb538618","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minwasser\");\nvar temp = global.get(\"temp2\");\nvar hysteresis = 1;\nvar onoff = global.get(\"wasseronoff\");\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = true;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":780,"wires":[["f474dead201b1c23","e8366b83fbc71f63"]]},{"id":"d170a71df91f77da","type":"function","z":"b5fbeb3d50863239","name":"set Global","func":"global.set(\"minwasser\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":920,"wires":[[]]},{"id":"65f6ff9c2b463e20","type":"function","z":"b5fbeb3d50863239","name":"Get minWasser","func":"msg.payload = global.get(\"minwasser\");\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":920,"wires":[["3420f4809cddc5a9"]]},{"id":"90f4ba83a0ba442d","type":"switch","z":"b5fbeb3d50863239","name":"","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":820,"wires":[["f9dd3f30eb538618"],["568bab9ea9c4d895"]]},{"id":"568bab9ea9c4d895","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minwasser\");\nvar temp = global.get(\"temp2\");\nvar hysteresis = 1;\nvar onoff = global.get(\"wasseronoff\");\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = false;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":820,"wires":[["f474dead201b1c23","e8366b83fbc71f63"]]},{"id":"e8366b83fbc71f63","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED","label":"","tooltip":"","group":"4b4782eb628353e5","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":970,"y":820,"wires":[[]]},{"id":"07975a8f19c94df1","type":"comment","z":"b5fbeb3d50863239","name":"Frischwasser Frostschutz","info":"","x":150,"y":660,"wires":[]},{"id":"57039f1eb029e369","type":"function","z":"b5fbeb3d50863239","name":"get global","func":"var check = global.get(\"temp2\");\nvar label = global.get(\"Ntemp2\");\n\nmsg.sensorname = label;\nmsg.payload = check;  \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":700,"wires":[["7400b8e71b0bc7e4"]]},{"id":"70fd406c08eab7b2","type":"ui_switch","z":"b5fbeb3d50863239","name":"ON/OFF Batterie1","label":"","tooltip":"","group":"3a8c8c9c4f3913c6","order":1,"width":2,"height":2,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"className":"","x":350,"y":1360,"wires":[["cb5df7c3ec2ce835","b6cdc4c2e5a651b1","075d8c83acd2afc7"]]},{"id":"926d9f2d27880f01","type":"ui_text","z":"b5fbeb3d50863239","group":"3a8c8c9c4f3913c6","order":2,"width":3,"height":1,"name":"IstTemp Batterie","label":"Fahrer","format":"{{msg.payload}}°C","layout":"row-spread","className":"","x":680,"y":1160,"wires":[]},{"id":"d38eb917922c3f20","type":"inject","z":"b5fbeb3d50863239","name":"","props":[{"p":"payload"}],"repeat":"1","crontab":"","once":true,"onceDelay":"2","topic":"","payload":"","payloadType":"date","x":130,"y":1280,"wires":[["244bde69e7d1802b","70fd406c08eab7b2","2bc85c44f71ab81d","33e526f75d0c7ddd"]]},{"id":"838ef7c46949bc9d","type":"ui_slider","z":"b5fbeb3d50863239","name":"Slider Batterie","label":"min Temp","tooltip":"","group":"3a8c8c9c4f3913c6","order":7,"width":0,"height":0,"passthru":true,"outs":"end","topic":"slider","topicType":"msg","min":"0","max":"25","step":"1","className":"","x":540,"y":1520,"wires":[["72cc25f02ceb662f"]]},{"id":"1d51d073f4621960","type":"link out","z":"b5fbeb3d50863239","name":"Relay","mode":"link","links":["c698c6e8.416b58"],"x":955,"y":1260,"wires":[]},{"id":"bb320cec125a9175","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minbat\");\nvar temp = global.get(\"BMStemp\");\nvar hysteresis = 1;\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = true;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1280,"wires":[["1d51d073f4621960","3eedd78ec7b92f12"]]},{"id":"72cc25f02ceb662f","type":"function","z":"b5fbeb3d50863239","name":"set Global","func":"global.set(\"minbat\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":1520,"wires":[[]]},{"id":"244bde69e7d1802b","type":"function","z":"b5fbeb3d50863239","name":"Get minBatt","func":"msg.payload = global.get(\"minbat\");\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":350,"y":1520,"wires":[["838ef7c46949bc9d"]]},{"id":"cb5df7c3ec2ce835","type":"switch","z":"b5fbeb3d50863239","name":"","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":1320,"wires":[["bb320cec125a9175"],["17fd5175552bfef3"]]},{"id":"17fd5175552bfef3","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minbat\");\nvar temp = global.get(\"BMStemp\");\nvar hysteresis = 1;\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = false;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1320,"wires":[["1d51d073f4621960","3eedd78ec7b92f12"]]},{"id":"3eedd78ec7b92f12","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED","label":"","tooltip":"","group":"3a8c8c9c4f3913c6","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":970,"y":1320,"wires":[[]]},{"id":"b234d0c56fc8139e","type":"comment","z":"b5fbeb3d50863239","name":"Batterie Frostschutz","info":"","x":130,"y":1160,"wires":[]},{"id":"2bc85c44f71ab81d","type":"function","z":"b5fbeb3d50863239","name":"get global bms1 temp","func":"if (global.get(\"BMStemp\") == undefined || global.get(\"BMStemp\") == \"wait\") {\n    return null\n}\nelse {\n    var check = global.get(\"BMStemp\");\n    msg.payload = check;\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":1160,"wires":[["926d9f2d27880f01"]]},{"id":"74ddbfd333c261f9","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED on/off","label":"","tooltip":"","group":"6c1c73b328af210e","order":4,"width":1,"height":1,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"radio_button_checked","oncolor":"lightGreen","offvalue":"false","offvalueType":"bool","officon":"radio_button_unchecked","offcolor":"Grey","animate":false,"className":"","x":550,"y":300,"wires":[[]]},{"id":"4d9e39cc784d767a","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED on/off","label":"","tooltip":"","group":"4b4782eb628353e5","order":4,"width":1,"height":1,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"radio_button_checked","oncolor":"lightGreen","offvalue":"false","offvalueType":"bool","officon":"radio_button_unchecked","offcolor":"Grey","animate":false,"className":"","x":570,"y":760,"wires":[[]]},{"id":"b6cdc4c2e5a651b1","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED on/off","label":"1","tooltip":"","group":"3a8c8c9c4f3913c6","order":4,"width":1,"height":2,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"radio_button_checked","oncolor":"lightGreen","offvalue":"false","offvalueType":"bool","officon":"radio_button_unchecked","offcolor":"Grey","animate":false,"className":"","x":550,"y":1260,"wires":[[]]},{"id":"33e526f75d0c7ddd","type":"function","z":"b5fbeb3d50863239","name":"get global bms2 temp","func":"if (global.get(\"BMStemp_2\") == undefined || global.get(\"BMStemp_2\") == \"wait\") {\n    return null\n}\nelse {\n    var check = global.get(\"BMStemp_2\");\n    msg.payload = check;\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":1200,"wires":[["802d7ef3e8495186"]]},{"id":"802d7ef3e8495186","type":"ui_text","z":"b5fbeb3d50863239","group":"3a8c8c9c4f3913c6","order":5,"width":3,"height":1,"name":"IstTemp Batterie","label":"Beifahrer","format":"{{msg.payload}}°C","layout":"row-spread","className":"","x":680,"y":1200,"wires":[]},{"id":"afa09eab7a17c434","type":"link out","z":"b5fbeb3d50863239","name":"Relay","mode":"link","links":["f14867fc.930ab8"],"x":955,"y":1380,"wires":[]},{"id":"547d16c744230959","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minbat\");\nvar temp = global.get(\"BMStemp_2\");\nvar hysteresis = 1;\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = true;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1400,"wires":[["afa09eab7a17c434","e4f740bc4206ceb7"]]},{"id":"075d8c83acd2afc7","type":"switch","z":"b5fbeb3d50863239","name":"","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":1440,"wires":[["547d16c744230959"],["e86d0858f96ad318"]]},{"id":"e86d0858f96ad318","type":"function","z":"b5fbeb3d50863239","name":"check hysteresis","func":"var min = global.get(\"minbat\");\nvar temp = global.get(\"BMStemp_2\");\nvar hysteresis = 1;\n\n\nif (temp >= (min+hysteresis)) \n    msg.payload = false;\nelse if(temp <= (min)) \n    msg.payload = false;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1440,"wires":[["afa09eab7a17c434","e4f740bc4206ceb7"]]},{"id":"e4f740bc4206ceb7","type":"ui_switch","z":"b5fbeb3d50863239","name":"LED","label":"","tooltip":"","group":"3a8c8c9c4f3913c6","order":6,"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":970,"y":1440,"wires":[[]]},{"id":"4dd2fedd6a8079b9","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"d7b10e4dc1f23ce3","order":4,"width":3,"height":1},{"id":"192b5f941190fe3c","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"d7b10e4dc1f23ce3","order":5,"width":3,"height":1},{"id":"9e2955792bb2907b","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"d7b10e4dc1f23ce3","order":6,"width":3,"height":1},{"id":"5896ab1274e770e6","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"eb1c4820.31d898","order":6,"width":3,"height":1},{"id":"ba6e29bc59af1b06","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"eb1c4820.31d898","order":7,"width":3,"height":1},{"id":"0742195e6da55f9b","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"eb1c4820.31d898","order":8,"width":3,"height":1},{"id":"012fdb928714a8fc","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"4373a7f49bda8706","order":7,"width":3,"height":1},{"id":"77489861b288cb5d","type":"ui_spacer","z":"b5fbeb3d50863239","name":"spacer","group":"4373a7f49bda8706","order":9,"width":3,"height":1},{"id":"6c1c73b328af210e","type":"ui_group","name":"Boiler","tab":"ae9dd05113ee2414","order":1,"disp":true,"width":7,"collapse":false,"className":""},{"id":"4b4782eb628353e5","type":"ui_group","name":"Frischwasser Frostschutz","tab":"ae9dd05113ee2414","order":2,"disp":true,"width":7,"collapse":false,"className":""},{"id":"3a8c8c9c4f3913c6","type":"ui_group","name":"Batterie-Frostschutz","tab":"ae9dd05113ee2414","order":3,"disp":true,"width":7,"collapse":false,"className":""},{"id":"d7b10e4dc1f23ce3","type":"ui_group","name":"Victron Shunt","tab":"c77f413b.09f91","order":7,"disp":true,"width":"6","collapse":false,"className":""},{"id":"eb1c4820.31d898","type":"ui_group","name":"Info China Heater","tab":"429aa80.8e1af58","order":5,"disp":true,"width":"6","collapse":false},{"id":"4373a7f49bda8706","type":"ui_group","name":"Info Autoterm","tab":"429aa80.8e1af58","order":6,"disp":true,"width":"6","collapse":false,"className":""},{"id":"ae9dd05113ee2414","type":"ui_tab","name":"Temperatur Steuerung","icon":"blur_circular","order":3,"disabled":false,"hidden":false},{"id":"c77f413b.09f91","type":"ui_tab","name":"Info","icon":"mi-info","order":2,"disabled":false,"hidden":false},{"id":"429aa80.8e1af58","type":"ui_tab","name":"Heater","icon":"mi-whatshot","order":4,"disabled":false,"hidden":false}]

Hi Sven, teste ich.
Hast du auch etwas mit Luftfeuchte und Lüftung gemacht?

1 Like

Ne, da ich nen Aufstelldach habe hab ich damit keine Probleme

Wäre aber interessant. Wenn die Luftfeuchtigkeit zu hoch ist, dass der maxxfan z.b. startet?

Klar wenn man einen Maxxfan hat :slight_smile:

2 Likes

Also wenn in der “BMStemp” Variable etwas drinsteht, was keine Zahl oder null ist, dann ergibt

else if(temp <= (min))

→ false, heißt die Kondition tritt nicht ein und der Code wird nicht ausgeführt. Mit dem return msg wird aber das “true” aus dem Switch “ON/OFF Batterie” weitergegeben.

Du könntest überprüfen, ob das was aus dem BMS kommt tatsächlich eine Zahl ist, also zum Beispiel

global.set("BMStemp_2", "hallo") // bms temp example, nicht vergessen zu löschen für Praxistest!

if (isNaN(parseInt(global.get("BMStemp_2"))) == false) /* => IS a number*/ {
    global.set("valid_BMStemp_2", global.get("BMStemp_2"))
    msg.payload = global.get("valid_BMStemp_2")
}
else {
    global.set("valid_BMStemp_2", 30)
    msg.payload = "invalid value"
}
return msg

Im ersten if-Block wird die BMStemp variable in einen Integer gewandelt, dann wird überprüft ob es eine Zahl ist. Also wenn isNaN ( = is Not a Number) falsch ist, heißt das im Umkehrschluss, dass es eine Nummer ist. Klingt verwirrend, ist es auch irgendwie :smiley:

Wenn wir eine Nummer haben setzen wir eine neue Variable valid_BMStemp mit dem Temperatur Wert.

Wenn wir keine Nummer haben, also isNaN == true ist, dann setzen wir valid_BMStemp auf 30, sodass die Abfrage in der “check hysteresis” Node immer false ergibt und das Relay damit nicht angeht.

In “check hysteresis” muss natürlich dann noch die neue Variable validBMStemp anstatt der alten abgefragt werden.

Hab das mal kurz in der Theorie angetestet, vielleicht machst du mal einen Praxistest damit und teilst uns dein Ergebnis mit :slight_smile:

EDIT: Die jeweils untere “check hysteresis” function könnte man eigentlich weglassen wenn ich das richtig sehe, oder? Weil es wird ja in jedem Fall ein false weitergegeben.

Hallo zusammen, ich habe die Änderung von Vincent ausprobiert. Sie funktioniert. Der Switch und die zweite hysterese function wird nicht benötigt.

Im Ausgeschalteten zustand funktioniert es, auch die zweite Hysterie konnte wie von @Vincent gesagt raus.
AAAABEBBERRR, nun geht es aus, wenn es eigentlich eingeschaltet sein sollte.
Sprich min Temp ist unterschritten, Relais geht an, dann kommt ein Verbindungsabbruch und dann geht das Relais kurz aus. Irgendwie wäre es coolwenn man die vorher letzte Temp Zwischenspeichern könnte und so die Verbindungsabbrüche rausgefiltert werden.
Aber Programiertechnisch bin ich echt umkreativ.

Ich kann dies bei mir nicht feststellen.
Habe testweise mal anstatt der BMStemp einen Tempsensor verwendete, geht .

Bei einem normalen Tempsensor tritt es ja auch nicht auf, was hast du denn für eine Batterie?

Was steht denn in der Variable BMStemp wenn ein Verbindungsabbruch auftritt?

Laut Debug einfach ein undefined

Habs nochmal umgeschrieben:

if (isNaN(Number(global.get("BMStemp_2"))) == true) /* => is NOT a number*/ {
    return null
}
else {
    global.set("valid_BMStemp_2", Number(global.get("BMStemp_2")))
    msg.payload = global.get("valid_BMStemp_2")
    return msg
}

Wenn es keine Nummer ist brechen wir die Funktion mit “return null” an der Stelle einfach ab und übergeben nichts an die Variable, es bleibt also der alte Wert drin stehen und es passiert nichts weiter.

Wenn wir eine Nummer haben, dann schreiben wir den neuen Wert in die Variable und geben das ganze weiter an die nächste Node

Supi, ds wars also nach ersten Tests funktioniert es so vielen Dank :-*

@Bock.auf.Raus Ich habe ein JDB BMS

@Bock.auf.Raus , liest du das JBD BMS auch über den Liontron Flow aus oder verwendest du eine andere Lösung ? Viele Grüße Thomas

Ich habe da nix geändert, ich habe im VanPi einfach die LIONTRON im Bluetooth ausgewählt.

Och verwende deinen Flow, aber mit der Temperatur „BMS_temp“ . Du verwendest „BMS_temp2“