From 787812ea504513b4dc5719909c8fa9e5e27eb1aa Mon Sep 17 00:00:00 2001 From: m038 Date: Thu, 28 May 2026 20:35:27 +0200 Subject: [PATCH] Update flow files --- flows.json | 900 ++++++++++++++++++++++++++++------------------------- 1 file changed, 483 insertions(+), 417 deletions(-) diff --git a/flows.json b/flows.json index c4b768e..429b23b 100644 --- a/flows.json +++ b/flows.json @@ -13,11 +13,6 @@ } ] }, - { - "id": "1f4d4622.7490ca", - "type": "tab", - "label": "Temperature & climate" - }, { "id": "e52c44dc.71cb5", "type": "subflow", @@ -3184,418 +3179,6 @@ "x": 2340, "y": 720 }, - { - "id": "eb217ba8.833d48", - "type": "server-state-changed", - "z": "1f4d4622.7490ca", - "name": "Outside temperature", - "wires": [ - [ - "c8bf7086.b32ab8", - "be230668.4e6718", - "1de4cd6b31838517" - ] - ], - "d": true, - "server": "657c7463.48e1e4", - "version": 6, - "outputs": 1, - "exposeAsEntityConfig": "", - "entities": { - "entity": [ - "sensor.openweathermap_temperature" - ], - "substring": [], - "regex": [] - }, - "outputInitially": true, - "stateType": "num", - "ifState": "", - "ifStateType": "str", - "ifStateOperator": "is", - "outputOnlyOnStateChange": true, - "for": "", - "forType": "num", - "forUnits": "minutes", - "ignorePrevStateNull": false, - "ignorePrevStateUnknown": false, - "ignorePrevStateUnavailable": false, - "ignoreCurrentStateUnknown": false, - "ignoreCurrentStateUnavailable": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "eventData" - }, - { - "property": "topic", - "propertyType": "msg", - "value": "", - "valueType": "triggerId" - } - ], - "x": 110, - "y": 120 - }, - { - "id": "c8bf7086.b32ab8", - "type": "api-current-state", - "z": "1f4d4622.7490ca", - "name": "Inside temperature", - "wires": [ - [ - "13a9b38f.3ab9d4", - "1de4cd6b31838517" - ] - ], - "server": "657c7463.48e1e4", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "sensor.livingroom_temperature_avg", - "state_type": "num", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "string", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": 0, - "forType": "num", - "forUnits": "minutes", - "x": 470, - "y": 120 - }, - { - "id": "68aa8fe5.4cd4f", - "type": "function", - "z": "1f4d4622.7490ca", - "name": "Determine cooler or warmer", - "wires": [ - [ - "e27e4896.4eefa", - "1de4cd6b31838517" - ] - ], - "func": "var outsideTemp = parseFloat(msg.payload.outside);\nvar insideTemp = parseFloat(msg.payload.inside);\nvar notification = '';\n\nif (outsideTemp < insideTemp) {\n notification = 'Outside is cooler than inside';\n} else {\n notification = 'Outside is warmer than inside';\n}\n\nmsg.payload = notification;\n\nreturn msg;", - "outputs": 1, - "timeout": "", - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 880, - "y": 180 - }, - { - "id": "e27e4896.4eefa", - "type": "api-call-service", - "z": "1f4d4622.7490ca", - "name": "Notify via HA", - "wires": [ - [] - ], - "server": "657c7463.48e1e4", - "version": 7, - "debugenabled": false, - "action": "notify.gotify_ha", - "floorId": [], - "areaId": [], - "deviceId": [], - "entityId": [], - "labelId": [], - "data": "{\"title\":\"Info\",\"message\":\"{{{payload}}}\"}", - "dataType": "json", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "blockInputOverrides": false, - "domain": "notify", - "service": "gotify_ha", - "output_location": "", - "output_location_type": "none", - "x": 1130, - "y": 180 - }, - { - "id": "be230668.4e6718", - "type": "change", - "z": "1f4d4622.7490ca", - "name": "Clear data", - "wires": [ - [ - "2119da07.2ad496" - ] - ], - "rules": [ - { - "t": "delete", - "p": "data", - "pt": "msg" - }, - { - "t": "set", - "p": "topic", - "pt": "msg", - "to": "outside", - "tot": "str" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 470, - "y": 260 - }, - { - "id": "13a9b38f.3ab9d4", - "type": "change", - "z": "1f4d4622.7490ca", - "name": "Clear data", - "wires": [ - [ - "2119da07.2ad496" - ] - ], - "rules": [ - { - "t": "delete", - "p": "data", - "pt": "msg" - }, - { - "t": "set", - "p": "topic", - "pt": "msg", - "to": "inside", - "tot": "str" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 470, - "y": 200 - }, - { - "id": "2119da07.2ad496", - "type": "join", - "z": "1f4d4622.7490ca", - "name": "", - "wires": [ - [ - "68aa8fe5.4cd4f" - ] - ], - "mode": "custom", - "build": "object", - "property": "payload", - "propertyType": "msg", - "key": "topic", - "joiner": "\\n", - "joinerType": "str", - "accumulate": false, - "timeout": "", - "count": "2", - "reduceRight": false, - "reduceExp": "", - "reduceInit": "", - "reduceInitType": "", - "reduceFixup": "", - "x": 670, - "y": 180 - }, - { - "id": "1de4cd6b31838517", - "type": "debug", - "z": "1f4d4622.7490ca", - "name": "Temperature alert", - "wires": [], - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 830, - "y": 60 - }, - { - "id": "9a99a3d8e416b026", - "type": "comment", - "z": "1f4d4622.7490ca", - "name": "Temperature alert", - "wires": [], - "info": "", - "x": 100, - "y": 80 - }, - { - "id": "a676209fc00d4d6c", - "type": "comment", - "z": "1f4d4622.7490ca", - "name": "Climate control", - "wires": [], - "info": "", - "x": 100, - "y": 360 - }, - { - "id": "6156c5585680e99e", - "type": "server-state-changed", - "z": "1f4d4622.7490ca", - "name": "Livingroom window open", - "wires": [ - [ - "ea05134bce8525ef" - ], - [ - "e2f354b6c7b22e8d" - ] - ], - "d": true, - "server": "657c7463.48e1e4", - "version": 6, - "outputs": 2, - "exposeAsEntityConfig": "", - "entities": { - "entity": [ - "sensor.window_handle_bedroom_state" - ], - "substring": [], - "regex": [] - }, - "outputInitially": true, - "stateType": "str", - "ifState": "closed", - "ifStateType": "str", - "ifStateOperator": "is_not", - "outputOnlyOnStateChange": true, - "for": "0", - "forType": "num", - "forUnits": "minutes", - "ignorePrevStateNull": false, - "ignorePrevStateUnknown": false, - "ignorePrevStateUnavailable": false, - "ignoreCurrentStateUnknown": false, - "ignoreCurrentStateUnavailable": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "eventData" - }, - { - "property": "topic", - "propertyType": "msg", - "value": "", - "valueType": "triggerId" - } - ], - "x": 130, - "y": 420 - }, - { - "id": "ea05134bce8525ef", - "type": "api-call-service", - "z": "1f4d4622.7490ca", - "name": "Activate window open mode", - "wires": [ - [] - ], - "d": true, - "server": "657c7463.48e1e4", - "version": 7, - "debugenabled": false, - "action": "scene.turn_on", - "floorId": [], - "areaId": [ - "7047cdd7d50e49f980eba16f832acb57" - ], - "deviceId": [], - "entityId": [ - "scene.bedroom_climate_window_open" - ], - "labelId": [], - "data": "", - "dataType": "json", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "blockInputOverrides": false, - "domain": "scene", - "service": "turn_on", - "output_location": "", - "output_location_type": "none", - "x": 520, - "y": 420 - }, - { - "id": "e2f354b6c7b22e8d", - "type": "api-call-service", - "z": "1f4d4622.7490ca", - "name": "Activate window open mode", - "wires": [ - [] - ], - "d": true, - "server": "657c7463.48e1e4", - "version": 7, - "debugenabled": false, - "action": "scene.apply", - "floorId": [], - "areaId": [], - "deviceId": [], - "entityId": [], - "labelId": [], - "data": "", - "dataType": "json", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "blockInputOverrides": false, - "domain": "scene", - "service": "apply", - "output_location": "", - "output_location_type": "none", - "x": 520, - "y": 500 - }, { "id": "b70ee13eafa73823", "type": "tab", @@ -23113,5 +22696,488 @@ "output_location_type": "none", "x": 660, "y": 1020 + }, + { + "type": "tab", + "label": "Temperature & climate", + "id": "1f4d4622.7490ca" + }, + { + "id": "eb217ba8.833d48", + "type": "server-state-changed", + "z": "1f4d4622.7490ca", + "name": "Outside temperature", + "wires": [ + [ + "c8bf7086.b32ab8", + "be230668.4e6718", + "1de4cd6b31838517" + ] + ], + "d": true, + "server": "657c7463.48e1e4", + "version": 6, + "outputs": 1, + "exposeAsEntityConfig": "", + "entities": { + "entity": [ + "sensor.openweathermap_temperature" + ], + "substring": [], + "regex": [] + }, + "outputInitially": true, + "stateType": "num", + "ifState": "", + "ifStateType": "str", + "ifStateOperator": "is", + "outputOnlyOnStateChange": true, + "for": "", + "forType": "num", + "forUnits": "minutes", + "ignorePrevStateNull": false, + "ignorePrevStateUnknown": false, + "ignorePrevStateUnavailable": false, + "ignoreCurrentStateUnknown": false, + "ignoreCurrentStateUnavailable": false, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "entityState" + }, + { + "property": "data", + "propertyType": "msg", + "value": "", + "valueType": "eventData" + }, + { + "property": "topic", + "propertyType": "msg", + "value": "", + "valueType": "triggerId" + } + ], + "x": 110, + "y": 120 + }, + { + "id": "c8bf7086.b32ab8", + "type": "api-current-state", + "z": "1f4d4622.7490ca", + "name": "Inside temperature", + "wires": [ + [ + "13a9b38f.3ab9d4", + "1de4cd6b31838517" + ] + ], + "server": "657c7463.48e1e4", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "sensor.livingroom_temperature_avg", + "state_type": "num", + "blockInputOverrides": false, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "string", + "valueType": "entityState" + }, + { + "property": "data", + "propertyType": "msg", + "value": "", + "valueType": "entity" + } + ], + "for": 0, + "forType": "num", + "forUnits": "minutes", + "x": 470, + "y": 120 + }, + { + "id": "68aa8fe5.4cd4f", + "type": "function", + "z": "1f4d4622.7490ca", + "name": "Determine cooler or warmer", + "wires": [ + [ + "e27e4896.4eefa", + "1de4cd6b31838517" + ] + ], + "func": "var outsideTemp = parseFloat(msg.payload.outside);\nvar insideTemp = parseFloat(msg.payload.inside);\nvar notification = '';\n\nif (outsideTemp < insideTemp) {\n notification = 'Outside is cooler than inside';\n} else {\n notification = 'Outside is warmer than inside';\n}\n\nmsg.payload = notification;\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 880, + "y": 180 + }, + { + "id": "e27e4896.4eefa", + "type": "api-call-service", + "z": "1f4d4622.7490ca", + "name": "Notify via HA", + "wires": [ + [] + ], + "server": "657c7463.48e1e4", + "version": 7, + "debugenabled": false, + "action": "notify.gotify_ha", + "floorId": [], + "areaId": [], + "deviceId": [], + "entityId": [], + "labelId": [], + "data": "{\"title\":\"Info\",\"message\":\"{{{payload}}}\"}", + "dataType": "json", + "mergeContext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "blockInputOverrides": false, + "domain": "notify", + "service": "gotify_ha", + "output_location": "", + "output_location_type": "none", + "x": 1130, + "y": 180 + }, + { + "id": "be230668.4e6718", + "type": "change", + "z": "1f4d4622.7490ca", + "name": "Clear data", + "wires": [ + [ + "2119da07.2ad496" + ] + ], + "rules": [ + { + "t": "delete", + "p": "data", + "pt": "msg" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "outside", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 470, + "y": 260 + }, + { + "id": "13a9b38f.3ab9d4", + "type": "change", + "z": "1f4d4622.7490ca", + "name": "Clear data", + "wires": [ + [ + "2119da07.2ad496" + ] + ], + "rules": [ + { + "t": "delete", + "p": "data", + "pt": "msg" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "inside", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 470, + "y": 200 + }, + { + "id": "2119da07.2ad496", + "type": "join", + "z": "1f4d4622.7490ca", + "name": "", + "wires": [ + [ + "68aa8fe5.4cd4f" + ] + ], + "mode": "custom", + "build": "object", + "property": "payload", + "propertyType": "msg", + "key": "topic", + "joiner": "\\n", + "joinerType": "str", + "accumulate": false, + "timeout": "", + "count": "2", + "reduceRight": false, + "reduceExp": "", + "reduceInit": "", + "reduceInitType": "", + "reduceFixup": "", + "x": 670, + "y": 180 + }, + { + "id": "1de4cd6b31838517", + "type": "debug", + "z": "1f4d4622.7490ca", + "name": "Temperature alert", + "wires": [], + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 830, + "y": 60 + }, + { + "id": "9a99a3d8e416b026", + "type": "comment", + "z": "1f4d4622.7490ca", + "name": "Temperature alert", + "wires": [], + "info": "", + "x": 100, + "y": 80 + }, + { + "id": "a676209fc00d4d6c", + "type": "comment", + "z": "1f4d4622.7490ca", + "name": "Climate control", + "wires": [], + "info": "", + "x": 100, + "y": 360 + }, + { + "id": "6156c5585680e99e", + "type": "server-state-changed", + "z": "1f4d4622.7490ca", + "name": "Livingroom window open", + "wires": [ + [ + "ea05134bce8525ef" + ], + [ + "e2f354b6c7b22e8d" + ] + ], + "d": true, + "server": "657c7463.48e1e4", + "version": 6, + "outputs": 2, + "exposeAsEntityConfig": "", + "entities": { + "entity": [ + "sensor.window_handle_bedroom_state" + ], + "substring": [], + "regex": [] + }, + "outputInitially": true, + "stateType": "str", + "ifState": "closed", + "ifStateType": "str", + "ifStateOperator": "is_not", + "outputOnlyOnStateChange": true, + "for": "0", + "forType": "num", + "forUnits": "minutes", + "ignorePrevStateNull": false, + "ignorePrevStateUnknown": false, + "ignorePrevStateUnavailable": false, + "ignoreCurrentStateUnknown": false, + "ignoreCurrentStateUnavailable": false, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "entityState" + }, + { + "property": "data", + "propertyType": "msg", + "value": "", + "valueType": "eventData" + }, + { + "property": "topic", + "propertyType": "msg", + "value": "", + "valueType": "triggerId" + } + ], + "x": 130, + "y": 420 + }, + { + "id": "ea05134bce8525ef", + "type": "api-call-service", + "z": "1f4d4622.7490ca", + "name": "Activate window open mode", + "wires": [ + [] + ], + "d": true, + "server": "657c7463.48e1e4", + "version": 7, + "debugenabled": false, + "action": "scene.turn_on", + "floorId": [], + "areaId": [ + "7047cdd7d50e49f980eba16f832acb57" + ], + "deviceId": [], + "entityId": [ + "scene.bedroom_climate_window_open" + ], + "labelId": [], + "data": "", + "dataType": "json", + "mergeContext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "blockInputOverrides": false, + "domain": "scene", + "service": "turn_on", + "output_location": "", + "output_location_type": "none", + "x": 520, + "y": 420 + }, + { + "id": "e2f354b6c7b22e8d", + "type": "api-call-service", + "z": "1f4d4622.7490ca", + "name": "Activate window open mode", + "wires": [ + [] + ], + "d": true, + "server": "657c7463.48e1e4", + "version": 7, + "debugenabled": false, + "action": "scene.apply", + "floorId": [], + "areaId": [], + "deviceId": [], + "entityId": [], + "labelId": [], + "data": "", + "dataType": "json", + "mergeContext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "blockInputOverrides": false, + "domain": "scene", + "service": "apply", + "output_location": "", + "output_location_type": "none", + "x": 520, + "y": 500 + }, + { + "id": "p2catch_tmp", + "type": "catch", + "z": "1f4d4622.7490ca", + "name": "Catch all errors", + "wires": [ + [ + "p2fmt_tmp" + ] + ], + "scope": null, + "uncaught": false, + "x": 160, + "y": 700 + }, + { + "id": "p2fmt_tmp", + "type": "function", + "z": "1f4d4622.7490ca", + "name": "Format error", + "wires": [ + [ + "p2ntfy_tmp" + ] + ], + "func": "const err = (msg.error && msg.error.message) ? msg.error.message : String(msg.payload || 'Unknown error');\nconst src = (msg.error && msg.error.source) ? (msg.error.source.name || msg.error.source.id || '') : '';\nmsg.payload = JSON.stringify({\n title: 'Node-RED Error: Temperature & climate',\n message: err + (src ? '\\n\\nNode: ' + src : '')\n});\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "timeout": "", + "x": 400, + "y": 700 + }, + { + "id": "p2ntfy_tmp", + "type": "api-call-service", + "z": "1f4d4622.7490ca", + "name": "Notify error", + "wires": [ + [] + ], + "server": "657c7463.48e1e4", + "version": 7, + "debugenabled": false, + "action": "notify.gotify_ha", + "floorId": [], + "areaId": [], + "deviceId": [], + "entityId": [], + "labelId": [], + "data": "{{{payload}}}", + "dataType": "json", + "mergeContext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "blockInputOverrides": false, + "domain": "notify", + "service": "gotify_ha", + "output_location": "", + "output_location_type": "none", + "x": 660, + "y": 700 } ] \ No newline at end of file