[{"id":"1e3b2497ef419a1e","type":"group","z":"ccadcc24865511e2","name":"Determine Boost scheme","style":{"fill":"#ffff7f","label":true},"nodes":["abe6720dc11d7cc3","8d7c8370184164a6","75214284ce889602","ab5e3d2e697c859a","4ae0d63a15d498a8"],"x":34,"y":1279,"w":822,"h":142},{"id":"abe6720dc11d7cc3","type":"ps-strategy-lowest-price","z":"ccadcc24865511e2","g":"1e3b2497ef419a1e","name":"DHW Boost negative price ","fromTime":"00","toTime":"00","hoursOn":"4","maxPrice":"0.00","doNotSplit":false,"sendCurrentValueWhenRescheduling":true,"outputValueForOn":"true","outputValueForOff":"false","outputValueForOntype":"bool","outputValueForOfftype":"bool","outputIfNoSchedule":"false","outputOutsidePeriod":"false","contextStorage":"memoryOnly","x":240,"y":1340,"wires":[["ab5e3d2e697c859a"],["4ae0d63a15d498a8"],["75214284ce889602"]]},{"id":"8d7c8370184164a6","type":"link in","z":"ccadcc24865511e2","g":"1e3b2497ef419a1e","name":"link in 80","links":["67fd7b3293b538cf"],"x":75,"y":1340,"wires":[["abe6720dc11d7cc3"]]},{"id":"75214284ce889602","type":"link out","z":"ccadcc24865511e2","g":"1e3b2497ef419a1e","name":"link out 108","mode":"link","links":["b0897fa49e0b6e73"],"x":805,"y":1380,"wires":[]},{"id":"ab5e3d2e697c859a","type":"link out","z":"ccadcc24865511e2","g":"1e3b2497ef419a1e","name":"Boost DHW","mode":"link","links":["50510191e3d7f7fc"],"x":815,"y":1320,"wires":[]},{"id":"4ae0d63a15d498a8","type":"function","z":"ccadcc24865511e2","g":"1e3b2497ef419a1e","name":"Check WP State","func":"var HP_state = global.get('TOP0_Heatpump_State', \"file\"); // get the current state of the heatpump. Is it on or off.\nvar Operating_state = global.get('TOP4_Operating_Mode_State', \"file\"); // get the current state of the heatpump. Is it on or off.\nvar Pump_Flow = global.get('TOP1_Pump_Flow', \"memoryOnly\");\nvar Sterilization = global.get('TOP69_Sterilization_State', \"file\");\nvar ForceDHW = global.get('TOP2_Force_DHW_State', \"memoryOnly\");\nvar DHWBoost = global.get('DHW_boost_state', \"file\");\n\n////////////////////////////////////////////////////////////////\n//if ((HP_state == 1 && Sterilization == 1)) //check Sterilization - Do nothing\n//{\n//}\n//else if ((HP_state == 1 && ForceDHW == 1))\n//{\n//}\nif ((HP_state == 1 && Operating_state == 3 && DHWBoost == 1))\n{\n return [ msg, null ];\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":1340,"wires":[["ab5e3d2e697c859a"]]},{"id":"1b8443f3a2fbced4","type":"group","z":"ccadcc24865511e2","name":"Determine sterilisation scheme","style":{"fill":"#ffbfbf","label":true},"nodes":["b661b0da22d60992","230cbd34c03550c8","fb60cc084377388f","ea2a1e3399a58c98","161227f39fcbc429","1c054137d0201081","64ca8a80f8111a29","ec4f8ec0d7256a72","44f94521f6a2d901","cc2c987231bf3a2d","eaa87b4a270cdd5e","5b904e262c96b711"],"x":34,"y":1479,"w":1302,"h":209.5},{"id":"b661b0da22d60992","type":"ps-strategy-lowest-price","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Sterilisation lowest price ","fromTime":"00","toTime":"00","hoursOn":"3","maxPrice":"","doNotSplit":true,"sendCurrentValueWhenRescheduling":true,"outputValueForOn":"true","outputValueForOff":"false","outputValueForOntype":"bool","outputValueForOfftype":"bool","outputIfNoSchedule":"false","outputOutsidePeriod":"false","contextStorage":"memoryOnly","x":230,"y":1560,"wires":[[],[],["230cbd34c03550c8"]]},{"id":"230cbd34c03550c8","type":"ps-schedule-merger","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Merge day and time for sterilisation","outputIfNoSchedule":"false","logicFunction":"AND","schedulingDelay":"1000","sendCurrentValueWhenRescheduling":true,"outputValueForOn":"true","outputValueForOff":"false","outputValueForOntype":"bool","outputValueForOfftype":"bool","x":540,"y":1560,"wires":[["cc2c987231bf3a2d","eaa87b4a270cdd5e"],[],["64ca8a80f8111a29"]]},{"id":"fb60cc084377388f","type":"ps-strategy-fixed-schedule","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Sterilisation day","periods":[{"start":"00","value":"true"}],"validFrom":"","validTo":"","days":{"Mon":false,"Tue":false,"Wed":false,"Thu":false,"Fri":false,"Sat":true,"Sun":false},"sendCurrentValueWhenRescheduling":true,"outputValueForOn":"true","outputValueForOff":"false","outputValueForOntype":"bool","outputValueForOfftype":"bool","outputIfNoSchedule":"false","contextStorage":"memoryOnly","x":200,"y":1640,"wires":[[],[],["230cbd34c03550c8"]]},{"id":"ea2a1e3399a58c98","type":"function","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Turn heatpump on if necessary","func":"var HP_state = global.get('TOP0_Heatpump_State', \"file\"); // get the current state of the heatpump. Is it on or off.\n////////////////////////////////////////////////////////////////\nif ((HP_state == 0)) // check if the override state is enabled, AND currently heatpump state is off \n{\n msg = { payload: 1, topic: \"override\" };\n};\nreturn msg; ","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1090,"y":1640,"wires":[["ec4f8ec0d7256a72"]]},{"id":"161227f39fcbc429","type":"link in","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"link in 63","links":["67fd7b3293b538cf"],"x":75,"y":1560,"wires":[["b661b0da22d60992"]]},{"id":"1c054137d0201081","type":"link in","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"link in 64","links":["67fd7b3293b538cf"],"x":75,"y":1640,"wires":[["fb60cc084377388f"]]},{"id":"64ca8a80f8111a29","type":"link out","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"link out 63","mode":"link","links":["b0897fa49e0b6e73"],"x":755,"y":1640,"wires":[]},{"id":"ec4f8ec0d7256a72","type":"link out","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Power on Planning","mode":"link","links":["025597cef8c50d11"],"x":1295,"y":1640,"wires":[]},{"id":"44f94521f6a2d901","type":"change","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Force Sterilization","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"Toggle","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1050,"y":1540,"wires":[["5b904e262c96b711"]]},{"id":"cc2c987231bf3a2d","type":"delay","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":755,"y":1560,"wires":[["ea2a1e3399a58c98"]],"l":false},{"id":"eaa87b4a270cdd5e","type":"function","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"Check WP State","func":"var Operating_state = global.get('TOP4_Operating_Mode_State', \"file\"); // get the current state of the heatpump. Is it on or off.\nvar Pump_Flow = global.get('TOP1_Pump_Flow', \"memoryOnly\")\nvar Sterilization = global.get('TOP69_Sterilization_State', \"file\")\nvar ForceDHW = global.get('TOP2_Force_DHW_State', \"memoryOnly\")\n////////////////////////////////////////////////////////////////\nif ((Sterilization == 1)) //check Sterilization - Do nothing\n{\n}\nelse {\n return [ msg, null ];\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":1520,"wires":[["44f94521f6a2d901"]]},{"id":"5b904e262c96b711","type":"link out","z":"ccadcc24865511e2","g":"1b8443f3a2fbced4","name":"link out 119","mode":"link","links":["f19d9753da86f709"],"x":1295,"y":1540,"wires":[]},{"id":"628b23cdd7529b06","type":"group","z":"ccadcc24865511e2","name":"Determine DHW strategy","style":{"fill":"#bfdbef","label":true},"nodes":["a0d088fca91b26b4","8446dc090c0347fc","da7e68fd39fd25f2","f4b11920a2bc19b7","7406ef2f61d0906a","5e57908d7ea0be44","16428e63b0053db5","62e6d22be4a85170","b7343f35e0a9f012","3cfe80337fa4db08","ba08d603d70c58a6","fa4f9f444376a45d","ca41f0de55efca8b","7b7e6e510123afa7","ab9073fcc99c6801","4b2f8966053186f3"],"x":34,"y":1799,"w":1672,"h":262},{"id":"a0d088fca91b26b4","type":"ps-strategy-lowest-price","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Lowest Price","fromTime":"18","toTime":"06","hoursOn":"1","maxPrice":"","doNotSplit":true,"sendCurrentValueWhenRescheduling":true,"outputValueForOn":"true","outputValueForOff":"false","outputValueForOntype":"bool","outputValueForOfftype":"bool","outputIfNoSchedule":"false","outputOutsidePeriod":"false","contextStorage":"memoryOnly","x":730,"y":1880,"wires":[["7b7e6e510123afa7"],[],["16428e63b0053db5"]]},{"id":"8446dc090c0347fc","type":"function","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Determine DHW strategy ","func":"const DHWTemp = msg.payload\nconst date = new Date();\nconst hour = date.getHours();\nconst TargetTemp = global.get('TOP9_DHW_Target_Temp','file')\nconst heatdelta = global.get('TOP22_DHW_Heat_Delta', 'file');\nconst delta = TargetTemp - DHWTemp + heatdelta;\n\nif(hour >= 6 && hour <18){\n var toTime = 18\n}\nelse {\n var toTime = 6\n};\n\nif (delta > 0) {\n const config = {\n \"name\": \"Lowest Price\",\n \"config\": {\n \"fromTime\": hour,\n \"toTime\": toTime,\n \"hoursOn\": 1,\n \"override\": \"auto\"\n }\n };\n\nmsg.payload = config;\n}\nelse \n\n{ const config = {\n \"name\": \"Lowest Price\",\n \"config\": {\n \"fromTime\": hour,\n \"toTime\": toTime,\n \"hoursOn\": 0,\n \"override\": \"off\"\n }\n};\n\nmsg.payload = config};\n\n// msg.payload = context.data.DHW_Target_Temp\n\nreturn msg; \n\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":1900,"wires":[["a0d088fca91b26b4"]]},{"id":"da7e68fd39fd25f2","type":"mqtt in","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"DHWTemp","topic":"panasonic_heat_pump/main/DHW_Temp","qos":"2","datatype":"auto-detect","broker":"92e5b2c.00a8b5","nl":false,"rap":true,"rh":0,"inputs":0,"x":120,"y":1900,"wires":[["f4b11920a2bc19b7"]]},{"id":"f4b11920a2bc19b7","type":"rbe","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":270,"y":1900,"wires":[["8446dc090c0347fc"]]},{"id":"7406ef2f61d0906a","type":"change","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Prep for force DHW ","rules":[{"t":"set","p":"topic","pt":"msg","to":"DHW","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1170,"y":1860,"wires":[["4b2f8966053186f3"]]},{"id":"5e57908d7ea0be44","type":"link in","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"link in 65","links":["67fd7b3293b538cf"],"x":565,"y":1840,"wires":[["a0d088fca91b26b4"]]},{"id":"16428e63b0053db5","type":"link out","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"link out 64","mode":"link","links":["b0897fa49e0b6e73"],"x":875,"y":1940,"wires":[]},{"id":"62e6d22be4a85170","type":"link out","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Force DHW","mode":"link","links":["8c9808071334d371"],"x":1665,"y":1860,"wires":[]},{"id":"b7343f35e0a9f012","type":"cronplus","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"7AM","outputField":"payload","timeZone":"","storeName":"","commandResponseMsgOutput":"output1","defaultLocation":"","defaultLocationType":"default","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"default","payload":"","expressionType":"cron","expression":"0 7 * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":130,"y":1960,"wires":[["3cfe80337fa4db08"]]},{"id":"3cfe80337fa4db08","type":"api-call-service","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Block DHW - Input Boolean Off","server":"174cadde2a1685d7","version":7,"debugenabled":false,"action":"input_boolean.turn_off","floorId":[],"areaId":[],"deviceId":[],"entityId":["input_boolean.block_dhw_boolean"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"input_boolean","service":"turn_off","x":390,"y":1960,"wires":[["ca41f0de55efca8b"]]},{"id":"ba08d603d70c58a6","type":"api-call-service","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Block DHW - Input Boolean On","server":"174cadde2a1685d7","version":7,"debugenabled":false,"action":"input_boolean.turn_on","floorId":[],"areaId":[],"deviceId":[],"entityId":["input_boolean.block_dhw_boolean"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"input_boolean","service":"turn_on","x":390,"y":2020,"wires":[["ca41f0de55efca8b"]]},{"id":"fa4f9f444376a45d","type":"inject","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Inject","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":2020,"wires":[["ba08d603d70c58a6"]]},{"id":"ca41f0de55efca8b","type":"api-current-state","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Block Boolean Off?","server":"174cadde2a1685d7","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is_not","entity_id":"input_boolean.block_dhw_boolean","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":670,"y":2000,"wires":[[],[]]},{"id":"7b7e6e510123afa7","type":"api-current-state","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Block DHW Off?","server":"174cadde2a1685d7","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is_not","entity_id":"input_boolean.block_dhw_boolean","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":940,"y":1860,"wires":[["7406ef2f61d0906a"],[]]},{"id":"ab9073fcc99c6801","type":"change","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"On","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"},{"t":"delete","p":"topic","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1570,"y":1860,"wires":[["62e6d22be4a85170"]]},{"id":"4b2f8966053186f3","type":"function","z":"ccadcc24865511e2","g":"628b23cdd7529b06","name":"Check WP State","func":"var Operating_state = global.get('TOP4_Operating_Mode_State', \"file\"); // get the current state of the heatpump. Is it on or off.\nvar Pump_Flow = global.get('TOP1_Pump_Flow', \"memoryOnly\")\nvar Sterilization = global.get('TOP69_Sterilization_State', \"file\")\nvar ForceDHW = global.get('TOP2_Force_DHW_State', \"memoryOnly\")\n////////////////////////////////////////////////////////////////\nif ((Sterilization == 1)) //check Sterilization - Do nothing\n{\n}\nelse if ((ForceDHW == 1)) //check Forced DHW - Do nothing\n{\n}\nelse if ((Operating_state == 3) && Pump_Flow >1 ) //check DHW - Do nothing\n{\n}\nelse {\n return [ msg, null ];\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1400,"y":1860,"wires":[["ab9073fcc99c6801"]]},{"id":"92e5b2c.00a8b5","type":"mqtt-broker","name":"MQTT (192.168.69.21)","broker":"smarthome-mosquitto-1","port":"1883","clientid":"Node_Red_Client","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"5","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"1","birthRetain":"true","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"174cadde2a1685d7","type":"server","name":"HA Sarlaith","version":5,"addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":false,"heartbeat":true,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"63f58601642903de","type":"group","z":"ccadcc24865511e2","name":"Determine room temperature","style":{"label":true,"fill":"#d1d1d1"},"nodes":["86eaf8ad791419d7","8a24b55b79985c68","3147ab1f956d046c","c0e57cf29dad07e8","95cd56a804040ee4","d7c259b46cf19bfe","2b21ea5bf8af4371"],"x":34,"y":2084,"w":872,"h":197},{"id":"86eaf8ad791419d7","type":"switch","z":"ccadcc24865511e2","g":"63f58601642903de","name":"Filter outliers","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"10","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":730,"y":2140,"wires":[["8a24b55b79985c68"],[]]},{"id":"8a24b55b79985c68","type":"link out","z":"ccadcc24865511e2","g":"63f58601642903de","name":"Set room setpoint","mode":"link","links":["9a106cdefc873348"],"x":865,"y":2140,"wires":[]},{"id":"3147ab1f956d046c","type":"link in","z":"ccadcc24865511e2","g":"63f58601642903de","name":"link in 62","links":["67fd7b3293b538cf"],"x":75,"y":2140,"wires":[["d7c259b46cf19bfe"]]},{"id":"c0e57cf29dad07e8","type":"mqtt in","z":"ccadcc24865511e2","g":"63f58601642903de","name":"Livingroom Target Temp","topic":"climate/tydom/1676295559_1676295559/setpoint","qos":"0","datatype":"auto-detect","broker":"92e5b2c.00a8b5","nl":false,"rap":true,"rh":0,"inputs":0,"x":160,"y":2220,"wires":[["95cd56a804040ee4"]]},{"id":"95cd56a804040ee4","type":"change","z":"ccadcc24865511e2","g":"63f58601642903de","name":"Prepare for Setpoint","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"config\": {\t \"setpoint\":payload\t }\t}","tot":"jsonata"},{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"qos","pt":"msg"},{"t":"delete","p":"retain","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":2220,"wires":[["d7c259b46cf19bfe"]]},{"id":"d7c259b46cf19bfe","type":"ps-strategy-heat-capacitor","z":"ccadcc24865511e2","g":"63f58601642903de","name":"Determine room temperature","timeHeat1C":"240","timeCool1C":"240","maxTempAdjustment":"0.4","boostTempHeat":"0.5","boostTempCool":"0.7","minSavings":"0.03","setpoint":"19.5","x":440,"y":2140,"wires":[["86eaf8ad791419d7"],[],[],["2b21ea5bf8af4371"]]},{"id":"2b21ea5bf8af4371","type":"link out","z":"ccadcc24865511e2","g":"63f58601642903de","name":"link out 110","mode":"link","links":["b0897fa49e0b6e73"],"x":675,"y":2240,"wires":[]},{"id":"608a7292e1808e4d","type":"group","z":"ccadcc24865511e2","name":"Visualisation for HA (opt)","style":{"fill":"#e3f3d3","label":true},"nodes":["01c3265cd075021e","cad33a63f66ef72e","b0a01df532296971","b0897fa49e0b6e73"],"x":44,"y":2311.5,"w":862,"h":97},{"id":"01c3265cd075021e","type":"ps-schedule-merger","z":"ccadcc24865511e2","g":"608a7292e1808e4d","name":"Merge for HA visuatisation","outputIfNoSchedule":"false","logicFunction":"OR","schedulingDelay":2000,"sendCurrentValueWhenRescheduling":true,"outputValueForOn":"true","outputValueForOff":"false","outputValueForOntype":"bool","outputValueForOfftype":"bool","x":260,"y":2360,"wires":[[],[],["cad33a63f66ef72e"]]},{"id":"cad33a63f66ef72e","type":"function","z":"ccadcc24865511e2","g":"608a7292e1808e4d","name":"Convert true/false to 1/0","func":"msg.payload.hours.forEach(h => h.onOff = h.onOff ? \"1\" : \"0\")\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":2360,"wires":[["b0a01df532296971"]]},{"id":"b0a01df532296971","type":"ha-sensor","z":"ccadcc24865511e2","g":"608a7292e1808e4d","name":"Info from PS to HA","entityConfig":"eab799518168f5a3","version":0,"state":"payload","stateType":"str","attributes":[{"property":"Schedule","value":"payload.schedule","valueType":"msg"},{"property":"Hours","value":"payload.hours","valueType":"msg"},{"property":"Control","value":"payload.hours[0].onOff","valueType":"str"},{"property":"Current","value":"payload.current","valueType":"str"}],"inputOverride":"allow","outputProperties":[],"x":790,"y":2360,"wires":[[]]},{"id":"b0897fa49e0b6e73","type":"link in","z":"ccadcc24865511e2","g":"608a7292e1808e4d","name":"link in 66","links":["16428e63b0053db5","64ca8a80f8111a29","75214284ce889602","f92ebf244f76a281","2b21ea5bf8af4371","d772383a519e4ec2"],"x":85,"y":2360,"wires":[["01c3265cd075021e"]]},{"id":"eab799518168f5a3","type":"ha-entity-config","server":"174cadde2a1685d7","deviceConfig":"541b42292cfc1dd5","name":"sensor config ","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Powersaver"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":true,"debugEnabled":false},{"id":"541b42292cfc1dd5","type":"ha-device-config","name":"","hwVersion":"","manufacturer":"Node-RED","model":"","swVersion":""},{"id":"0cb7ab7756136463","type":"group","z":"ccadcc24865511e2","name":"Automatically Enable-Disable Cooling - DISABLED","style":{"label":true,"fill":"#0070c0"},"nodes":["71da7b3f1f554a8b","bfbb73af8c1b4fd3","3518dba8a7935e0c","e15dc4e6659f3fb2","aa384670ed9ff78f","3785767dbe482da5","f716e64c6472a2b7","f98970b981a3b58a","015ca3900e50e317","276a3a820e510e06","c2e437ea8f5f9d18","4363d0f8f2a7cef2","4a38bd70532d0792","c59303577d173c0a","ba75ac8cbbc9ff16","b0efffc359e4cbfe","61467ef8caad8bad","26761c9625c17cb9","934b6ad1cb2f429d","3f6149699fbbe416","89ffb8bd543e646c","f9969562737ccbdf","b4d242d90ae32ccb","9d894af75bd9c686","5a246895376e80c3"],"x":34,"y":2659,"w":1832,"h":362},{"id":"71da7b3f1f554a8b","type":"time-range-switch","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"10:00 - 19:00","lat":"52.24729","lon":"6.27319","startTime":"10:00","endTime":"19:00","startOffset":0,"endOffset":0,"x":830,"y":2720,"wires":[["c2e437ea8f5f9d18","9d894af75bd9c686"],["b0efffc359e4cbfe"]]},{"id":"bfbb73af8c1b4fd3","type":"openweathermap in","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Bathmen","wtype":"current","lon":"","lat":"","city":"Bathmen","country":"NL","language":"en","x":140,"y":2720,"wires":[["3518dba8a7935e0c"]]},{"id":"3518dba8a7935e0c","type":"function","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Max Outside-Temp higher than 25?","func":"Max_OutsideTemp = msg.payload.temp_maxc\nMin_CoolTemp = 25\n\nif (Max_OutsideTemp > Min_CoolTemp) {\n return [ msg, null ];\n} else {\n return [ null, msg ];\n}","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":2760,"wires":[["aa384670ed9ff78f"],[]]},{"id":"e15dc4e6659f3fb2","type":"time-range-switch","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"10:00 - 20:30","lat":"52.24729","lon":"6.27319","startTime":"10:00","endTime":"20:30","startOffset":0,"endOffset":0,"x":830,"y":2800,"wires":[["c2e437ea8f5f9d18","9d894af75bd9c686"],["b0efffc359e4cbfe"]]},{"id":"aa384670ed9ff78f","type":"weekday","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"","sun":true,"mon":true,"tue":true,"wed":true,"thu":true,"fri":false,"sat":false,"x":660,"y":2760,"wires":[["71da7b3f1f554a8b"],["e15dc4e6659f3fb2"]]},{"id":"3785767dbe482da5","type":"change","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Cool-Only","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1500,"y":2740,"wires":[["26761c9625c17cb9"]]},{"id":"f716e64c6472a2b7","type":"change","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"DHW-Only","rules":[{"t":"set","p":"payload","pt":"msg","to":"3","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1690,"y":2780,"wires":[["4a38bd70532d0792"]]},{"id":"f98970b981a3b58a","type":"openweathermap","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Bathmen","wtype":"current","lon":"","lat":"","city":"Bathmen","country":"NL","language":"en","x":140,"y":2800,"wires":[["3518dba8a7935e0c"]]},{"id":"015ca3900e50e317","type":"inject","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Inject","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":2860,"wires":[["f98970b981a3b58a"]]},{"id":"276a3a820e510e06","type":"function","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Turn heatpump on if necessary","func":"var HP_state = global.get('TOP0_Heatpump_State', \"file\"); // get the current state of the heatpump. Is it on or off.\n////////////////////////////////////////////////////////////////\nif ((HP_state == 0)) // check if the override state is enabled, AND currently heatpump state is off \n{\n msg = { payload: 1, topic: \"override\" };\n};\nreturn msg; ","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1450,"y":2700,"wires":[["c59303577d173c0a"]]},{"id":"c2e437ea8f5f9d18","type":"delay","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1025,"y":2760,"wires":[["b4d242d90ae32ccb"]],"l":false},{"id":"4363d0f8f2a7cef2","type":"delay","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1505,"y":2780,"wires":[["f716e64c6472a2b7"]],"l":false},{"id":"4a38bd70532d0792","type":"link out","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"link out 113","mode":"link","links":["fbaf7140575589b7"],"x":1825,"y":2780,"wires":[]},{"id":"c59303577d173c0a","type":"link out","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Power on Planning","mode":"link","links":["025597cef8c50d11"],"x":1825,"y":2700,"wires":[]},{"id":"ba75ac8cbbc9ff16","type":"link out","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"link out 115","mode":"link","links":["fbaf7140575589b7"],"x":1825,"y":2740,"wires":[]},{"id":"b0efffc359e4cbfe","type":"function","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Turn heatpump off if cooling","func":"var Operating_state = global.get('TOP4_Operating_Mode_State', \"file\"); // get the current state of the heatpump. Is it on or off.\nvar Pump_Flow = global.get('TOP1_Pump_Flow', \"memoryOnly\")\n////////////////////////////////////////////////////////////////\nif (Operating_state == 1) // check if only DHW is enabled \n{\n msg = { payload: 0, topic: \"override\" };\n};\nreturn msg; ","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1100,"y":2820,"wires":[["4363d0f8f2a7cef2","61467ef8caad8bad"]]},{"id":"61467ef8caad8bad","type":"link out","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Power off Planning","mode":"link","links":["025597cef8c50d11"],"x":1825,"y":2820,"wires":[]},{"id":"26761c9625c17cb9","type":"function","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Check WP State","func":"var Operating_state = global.get('TOP4_Operating_Mode_State', \"file\"); // get the current state of the heatpump. Is it on or off.\nvar Pump_Flow = global.get('TOP1_Pump_Flow', \"memoryOnly\")\nvar Sterilization = global.get('TOP69_Sterilization_State', \"file\")\nvar ForceDHW = global.get('TOP2_Force_DHW_State', \"memoryOnly\")\n////////////////////////////////////////////////////////////////\nif ((Sterilization == 1)) //check Sterilization - Do nothing\n{\n}\nelse if ((ForceDHW == 1)) //check Forced DHW - Do nothing\n{\n}\nelse if ((Operating_state == 3) && Pump_Flow >1 ) //check DHW - Do nothing\n{\n}\nelse if ((Operating_state == 1)) //check already Cooling \n{\n}\nelse {\n return [ msg, null ];\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1680,"y":2740,"wires":[["ba75ac8cbbc9ff16"]]},{"id":"934b6ad1cb2f429d","type":"cronplus","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"9PM","outputField":"payload","timeZone":"","storeName":"","commandResponseMsgOutput":"output1","defaultLocation":"","defaultLocationType":"default","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"default","payload":"","expressionType":"cron","expression":"0 21 * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":130,"y":2920,"wires":[["3f6149699fbbe416"]]},{"id":"3f6149699fbbe416","type":"api-call-service","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Block Cooling - Input Boolean Off","server":"174cadde2a1685d7","version":7,"debugenabled":false,"action":"input_boolean.turn_off","floorId":[],"areaId":[],"deviceId":[],"entityId":["input_boolean.block_cooling_boolean"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"input_boolean","service":"turn_off","x":400,"y":2920,"wires":[["5a246895376e80c3"]]},{"id":"89ffb8bd543e646c","type":"api-call-service","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Block Cooling - Input Boolean On","server":"174cadde2a1685d7","version":7,"debugenabled":false,"action":"input_boolean.turn_on","floorId":[],"areaId":[],"deviceId":[],"entityId":["input_boolean.block_cooling_boolean"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"input_boolean","service":"turn_on","x":400,"y":2980,"wires":[["5a246895376e80c3"]]},{"id":"f9969562737ccbdf","type":"inject","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Inject","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":2980,"wires":[["89ffb8bd543e646c"]]},{"id":"b4d242d90ae32ccb","type":"api-current-state","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Block Cooling On?","server":"174cadde2a1685d7","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.block_cooling_boolean","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1170,"y":2760,"wires":[[],["3785767dbe482da5"]]},{"id":"9d894af75bd9c686","type":"api-current-state","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Block Coolin On?","server":"174cadde2a1685d7","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.block_cooling_boolean","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1170,"y":2700,"wires":[[],["276a3a820e510e06"]]},{"id":"5a246895376e80c3","type":"api-current-state","z":"ccadcc24865511e2","d":true,"g":"0cb7ab7756136463","name":"Block Cooling On?","server":"174cadde2a1685d7","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.block_cooling_boolean","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":690,"y":2960,"wires":[[],[]]}]