diff --git a/node-red-example-flow.json b/node-red-example-flow.json new file mode 100644 index 00000000..c030c57c --- /dev/null +++ b/node-red-example-flow.json @@ -0,0 +1,6016 @@ +[ + { + "id": "6ac21a5bccc4f4aa", + "type": "tab", + "label": "Schalter Bett", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "c6c0e39795a740d6", + "type": "tab", + "label": "Schalter Schreibtisch", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "ce543ed835b321b6", + "type": "tab", + "label": "Blind Schalter", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "1e57bfd1e625c8d4", + "type": "tab", + "label": "Schalter Bad", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "82a690d6147dee52", + "type": "tab", + "label": "RGB Switches", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "27b477bf09d00791", + "type": "tab", + "label": "Trigger", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "a669a7d105d30a43", + "type": "tab", + "label": "Rolladen", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "1095d804ba7660cf", + "type": "tab", + "label": "nspanel", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "ba6c8bb20b9aa4cc", + "type": "tab", + "label": "NSP_Kueche", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "1b16bf0e99b71548", + "type": "tab", + "label": "nspdebug", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "6c95d9f2c2806a4c", + "type": "tab", + "label": "Temperature", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "7b975ed1.2c58d", + "type": "server", + "name": "HomeAssistant", + "version": 2, + "addon": true, + "rejectUnauthorizedCerts": true, + "ha_boolean": "y|yes|true|on|home|open", + "connectionDelay": true, + "cacheJson": true, + "heartbeat": false, + "heartbeatInterval": "30" + }, + { + "id": "aeedd16f1f009dd0", + "type": "mqtt-broker", + "name": "", + "broker": "192.168.75.30", + "port": "1883", + "clientid": "", + "autoConnect": true, + "usetls": false, + "protocolVersion": "4", + "keepalive": "60", + "cleansession": true, + "birthTopic": "", + "birthQos": "0", + "birthPayload": "", + "birthMsg": {}, + "closeTopic": "", + "closeQos": "0", + "closePayload": "", + "closeMsg": {}, + "willTopic": "", + "willQos": "0", + "willPayload": "", + "willMsg": {}, + "sessionExpiry": "" + }, + { + "id": "fadcfda41631958d", + "type": "position-config", + "name": "", + "isValide": "true", + "longitude": "0", + "latitude": "0", + "angleType": "deg", + "timeZoneOffset": 99, + "timeZoneDST": 0, + "stateTimeFormat": "3", + "stateDateFormat": "12", + "contextStore": "" + }, + { + "id": "e5c10ae217a2b850", + "type": "position-config", + "name": "", + "isValide": "true", + "longitude": "0", + "latitude": "0", + "angleType": "deg", + "timeZoneOffset": "99", + "timeZoneDST": "0", + "stateTimeFormat": "3", + "stateDateFormat": "12", + "contextStore": "" + }, + { + "id": "161bb087.35566f", + "type": "server", + "name": "Home Assistant", + "version": 2, + "rejectUnauthorizedCerts": true, + "ha_boolean": "y|yes|true|on|home|open", + "connectionDelay": true, + "cacheJson": true, + "heartbeat": false, + "heartbeatInterval": 30 + }, + { + "id": "46eb3326389e67fb", + "type": "trigger-state", + "z": "6ac21a5bccc4f4aa", + "name": "Schalter Bett", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.0x00158d000429ab59_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "None", + "propertyValue": "old_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 90, + "y": 200, + "wires": [ + [], + [ + "d9f2b27f4179197b" + ] + ] + }, + { + "id": "d9f2b27f4179197b", + "type": "switch", + "z": "6ac21a5bccc4f4aa", + "name": "Spilt Button Events", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "single_right", + "vt": "str" + }, + { + "t": "eq", + "v": "double_right", + "vt": "str" + }, + { + "t": "eq", + "v": "hold_right", + "vt": "str" + }, + { + "t": "eq", + "v": "single_left", + "vt": "str" + }, + { + "t": "eq", + "v": "double_left", + "vt": "str" + }, + { + "t": "eq", + "v": "hold_left", + "vt": "str" + }, + { + "t": "eq", + "v": "single_both", + "vt": "str" + }, + { + "t": "eq", + "v": "double_both", + "vt": "str" + }, + { + "t": "eq", + "v": "hold_both", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 9, + "x": 270, + "y": 200, + "wires": [ + [ + "5fe21b09376620ff" + ], + [ + "3f44895e5c27e860" + ], + [], + [ + "713226368bda2679" + ], + [], + [], + [ + "0a241622bfaa2e22", + "ba867b337fa04a5b", + "900ee4c045c74302" + ], + [ + "6841c5c7c9c7350c" + ], + [] + ] + }, + { + "id": "5fe21b09376620ff", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Toggle kleiderschrank Spots", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "light.kleiderschrankspots", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 520, + "y": 40, + "wires": [ + [] + ] + }, + { + "id": "c6824de23136a71f", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Brightness kleiderschrank Spots", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.kleiderschrankspots", + "data": "{\"brightness\":\"{{payload}}\",\"transition\":1}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1070, + "y": 80, + "wires": [ + [] + ] + }, + { + "id": "3f44895e5c27e860", + "type": "api-current-state", + "z": "6ac21a5bccc4f4aa", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "light.kleiderschrankspots", + "state_type": "num", + "blockInputOverrides": true, + "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": 590, + "y": 80, + "wires": [ + [ + "ef4cb58b383e815b" + ] + ] + }, + { + "id": "ef4cb58b383e815b", + "type": "function", + "z": "6ac21a5bccc4f4aa", + "name": "calcBrightness", + "func": "var brightness = msg.data.attributes.brightness\n\n\n// set default brightness in case lamp was off or back to default at max\nif (brightness == null || brightness == 255){\n brightness = 1\n}else{\n // cap to 255\n if (brightness >= 255)\n brightness = 255\n // increase brightness\n brightness = brightness + 51\n \n}\n\nvar newMsg = { transition: 1, payload: brightness }\nreturn newMsg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 840, + "y": 80, + "wires": [ + [ + "c6824de23136a71f" + ] + ] + }, + { + "id": "713226368bda2679", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Toggle kleiderschrank Spots", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "light.nachttischschlampe", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 560, + "y": 140, + "wires": [ + [] + ] + }, + { + "id": "0a241622bfaa2e22", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Turn All off Bett Switch", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "turn_off", + "entityId": "switch.deckenbeleuchtung_vorne, switch.deckenbeleuchtung_hinten", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 820, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "ba867b337fa04a5b", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Turn All off Bett Light", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_off", + "entityId": "light.lampe_schrank, light.schreibtischlampe, light.bad_lights, light.kueche_lights, light.spiegelschrankbad", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 820, + "y": 260, + "wires": [ + [] + ] + }, + { + "id": "3a586673a13d25a0", + "type": "link in", + "z": "6ac21a5bccc4f4aa", + "name": "TurnAllOff", + "links": [ + "fa3123105eb83843", + "03c3479b15ab13cd" + ], + "x": 675, + "y": 320, + "wires": [ + [ + "ba867b337fa04a5b", + "0a241622bfaa2e22" + ] + ] + }, + { + "id": "6841c5c7c9c7350c", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Power TV IR", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "button", + "service": "press", + "entityId": "button.tv_power_on_off", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 470, + "y": 380, + "wires": [ + [] + ] + }, + { + "id": "900ee4c045c74302", + "type": "api-call-service", + "z": "6ac21a5bccc4f4aa", + "name": "Turn All off Bett Light", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_off", + "entityId": "light.kleiderschrank1, light.kleiderschrank2", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 820, + "y": 220, + "wires": [ + [] + ] + }, + { + "id": "e1f3bc8445bc09a6", + "type": "inject", + "z": "6ac21a5bccc4f4aa", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 690, + "y": 440, + "wires": [ + [ + "900ee4c045c74302" + ] + ] + }, + { + "id": "e22860e01975a1de", + "type": "trigger-state", + "z": "c6c0e39795a740d6", + "name": "Schalter Schreibtisch", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.schalter_schreibtisch_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "None", + "propertyValue": "old_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 120, + "y": 220, + "wires": [ + [], + [ + "0257e2c5f2f8aa82" + ] + ] + }, + { + "id": "0257e2c5f2f8aa82", + "type": "switch", + "z": "c6c0e39795a740d6", + "name": "Spilt Button Events", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "single_right", + "vt": "str" + }, + { + "t": "eq", + "v": "double_right", + "vt": "str" + }, + { + "t": "eq", + "v": "hold_right", + "vt": "str" + }, + { + "t": "eq", + "v": "single_left", + "vt": "str" + }, + { + "t": "eq", + "v": "double_left", + "vt": "str" + }, + { + "t": "eq", + "v": "hold_left", + "vt": "str" + }, + { + "t": "eq", + "v": "single_both", + "vt": "str" + }, + { + "t": "eq", + "v": "double_both", + "vt": "str" + }, + { + "t": "eq", + "v": "hold_both", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 9, + "x": 330, + "y": 220, + "wires": [ + [ + "8144900fdbd9a9c4" + ], + [ + "344cb1b60fff8004" + ], + [], + [ + "71367dd4f5e0d388" + ], + [ + "a8f82be3cde72e75" + ], + [], + [ + "03c3479b15ab13cd" + ], + [ + "4ae159bcfb25092d" + ], + [] + ] + }, + { + "id": "8144900fdbd9a9c4", + "type": "api-call-service", + "z": "c6c0e39795a740d6", + "name": "Toggle Schreibtsichlampe", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "light.schreibtischlampe", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 610, + "y": 80, + "wires": [ + [] + ] + }, + { + "id": "71367dd4f5e0d388", + "type": "api-call-service", + "z": "c6c0e39795a740d6", + "name": "Toggle Lampe Schrank", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "light.lampe_schrank", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 600, + "y": 200, + "wires": [ + [] + ] + }, + { + "id": "03c3479b15ab13cd", + "type": "link out", + "z": "c6c0e39795a740d6", + "name": "", + "mode": "link", + "links": [ + "3a586673a13d25a0" + ], + "x": 515, + "y": 320, + "wires": [] + }, + { + "id": "4ae159bcfb25092d", + "type": "api-call-service", + "z": "c6c0e39795a740d6", + "name": "Toggle Deckenbeleuchtung", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "toggle", + "entityId": "switch.deckenbeleuchtung_hinten, switch.deckenbeleuchtung_vorne", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 620, + "y": 360, + "wires": [ + [] + ] + }, + { + "id": "344cb1b60fff8004", + "type": "api-call-service", + "z": "c6c0e39795a740d6", + "name": "Toggle KVM HDMI 2", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "toggle", + "entityId": "switch.hdmi_2", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 600, + "y": 120, + "wires": [ + [] + ] + }, + { + "id": "a8f82be3cde72e75", + "type": "api-call-service", + "z": "c6c0e39795a740d6", + "name": "Toggle KVM HDMI 1", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "toggle", + "entityId": "switch.hdmi_1", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 600, + "y": 240, + "wires": [ + [] + ] + }, + { + "id": "52bc423772386f07", + "type": "trigger-state", + "z": "ce543ed835b321b6", + "name": "Schalter Bett Blind", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.schalter_blind_bett_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "None", + "propertyValue": "old_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 110, + "y": 140, + "wires": [ + [], + [ + "da5ce9d9f90a7ba0" + ] + ] + }, + { + "id": "da5ce9d9f90a7ba0", + "type": "switch", + "z": "ce543ed835b321b6", + "name": "Spilt Button Events", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "open", + "vt": "str" + }, + { + "t": "eq", + "v": "close", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 350, + "y": 140, + "wires": [ + [ + "1860080478b006c4" + ], + [ + "54156386a9a0b913" + ] + ] + }, + { + "id": "54156386a9a0b913", + "type": "api-call-service", + "z": "ce543ed835b321b6", + "name": "Close All Covers", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "close_cover", + "entityId": "cover.blind_fenster_links, cover.blind_fenster_rechts, cover.blind_fenster_terrasse, cover.blind_terrasse", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 560, + "y": 160, + "wires": [ + [] + ] + }, + { + "id": "1860080478b006c4", + "type": "api-call-service", + "z": "ce543ed835b321b6", + "name": "Open All Covers", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "open_cover", + "entityId": "cover.blind_fenster_links, cover.blind_fenster_rechts, cover.blind_fenster_terrasse, cover.blind_terrasse", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 560, + "y": 120, + "wires": [ + [] + ] + }, + { + "id": "3ff73409b53a144f", + "type": "trigger-state", + "z": "ce543ed835b321b6", + "name": "Schalter Terrasse Blind", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.schalter_blind_terasse_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "None", + "propertyValue": "old_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 120, + "y": 240, + "wires": [ + [], + [ + "3d0b55b51054d45f" + ] + ] + }, + { + "id": "3d0b55b51054d45f", + "type": "switch", + "z": "ce543ed835b321b6", + "name": "Spilt Button Events", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "open", + "vt": "str" + }, + { + "t": "eq", + "v": "close", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 350, + "y": 240, + "wires": [ + [ + "4998cd4bc8c0e33b" + ], + [ + "8497522e2f07de64" + ] + ] + }, + { + "id": "4998cd4bc8c0e33b", + "type": "api-call-service", + "z": "ce543ed835b321b6", + "name": "Open Terrasse Covers", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "open_cover", + "entityId": "cover.blind_terrasse", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 580, + "y": 220, + "wires": [ + [] + ] + }, + { + "id": "8497522e2f07de64", + "type": "api-call-service", + "z": "ce543ed835b321b6", + "name": "Close Terrasse Covers", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "close_cover", + "entityId": "cover.blind_terrasse", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 580, + "y": 260, + "wires": [ + [] + ] + }, + { + "id": "c5f975120bcd4bda", + "type": "trigger-state", + "z": "1e57bfd1e625c8d4", + "name": "Schalter Spiegelschrank", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.schalter_spiegelschrank_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "current_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "", + "propertyValue": "new_state.state" + } + ], + "inputs": 0, + "outputs": 4, + "customoutputs": [ + { + "messageType": "payload", + "messageValue": "on", + "messageValueType": "str", + "comparatorPropertyType": "previous_state", + "comparatorType": "is", + "comparatorValue": "off", + "comparatorValueDataType": "str", + "comparatorPropertyValue": "old_state.state" + }, + { + "messageType": "payload", + "messageValue": "off", + "messageValueType": "str", + "comparatorPropertyType": "previous_state", + "comparatorType": "is", + "comparatorValue": "on", + "comparatorValueDataType": "str", + "comparatorPropertyValue": "old_state.state" + } + ], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 170, + "y": 120, + "wires": [ + [], + [ + "d4e4b9335773f890" + ], + [ + "e74e25d77d4a69ac" + ], + [ + "3e3915799dd4404c" + ] + ] + }, + { + "id": "e74e25d77d4a69ac", + "type": "api-call-service", + "z": "1e57bfd1e625c8d4", + "name": "Spiegelschrank ON", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.spiegelschrankbad", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 410, + "y": 140, + "wires": [ + [] + ] + }, + { + "id": "3e3915799dd4404c", + "type": "api-call-service", + "z": "1e57bfd1e625c8d4", + "name": "Spiegelschrank OFF", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_off", + "entityId": "light.spiegelschrankbad", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 420, + "y": 180, + "wires": [ + [] + ] + }, + { + "id": "d4e4b9335773f890", + "type": "switch", + "z": "1e57bfd1e625c8d4", + "name": "Spilt Button Events", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "brightness_move_up", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_move_down", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_stop", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 3, + "x": 410, + "y": 80, + "wires": [ + [ + "fb1b5bc2e9892427" + ], + [ + "eaaf8b841b98756f" + ], + [ + "e5a75d013da20fa4" + ] + ] + }, + { + "id": "35aab01292b816dd", + "type": "api-call-service", + "z": "1e57bfd1e625c8d4", + "name": "Spiegelschrank ON", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.spiegelschrankbad", + "data": "{\"brightness_step\":\"{{payload}}\"}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1010, + "y": 60, + "wires": [ + [] + ] + }, + { + "id": "fb1b5bc2e9892427", + "type": "trigger", + "z": "1e57bfd1e625c8d4", + "name": "send 8 every 100ms", + "op1": "8", + "op2": "10", + "op1type": "num", + "op2type": "num", + "duration": "-100", + "extend": false, + "overrideDelay": false, + "units": "ms", + "reset": "brightness_stop", + "bytopic": "all", + "topic": "topic", + "outputs": 1, + "x": 800, + "y": 40, + "wires": [ + [ + "35aab01292b816dd" + ] + ] + }, + { + "id": "e5a75d013da20fa4", + "type": "change", + "z": "1e57bfd1e625c8d4", + "name": "", + "rules": [ + { + "t": "set", + "p": "reset", + "pt": "msg", + "to": "true", + "tot": "bool" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 600, + "y": 120, + "wires": [ + [ + "fb1b5bc2e9892427", + "eaaf8b841b98756f" + ] + ] + }, + { + "id": "eaaf8b841b98756f", + "type": "trigger", + "z": "1e57bfd1e625c8d4", + "name": "send -8 every 100ms", + "op1": "-8", + "op2": "10", + "op1type": "num", + "op2type": "num", + "duration": "-100", + "extend": false, + "overrideDelay": false, + "units": "ms", + "reset": "brightness_stop", + "bytopic": "all", + "topic": "topic", + "outputs": 1, + "x": 800, + "y": 80, + "wires": [ + [ + "35aab01292b816dd" + ] + ] + }, + { + "id": "b35931682491ca27", + "type": "trigger-state", + "z": "82a690d6147dee52", + "name": "RGB Schalter 1", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.rgb_switch_1_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "", + "propertyValue": "old_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 140, + "y": 560, + "wires": [ + [ + "40d0c5cee6235718" + ], + [] + ] + }, + { + "id": "40d0c5cee6235718", + "type": "switch", + "z": "82a690d6147dee52", + "name": "Spilt Button Events", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "toggle", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_up_click", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_up_hold", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_up_release", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_down_click", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_down_hold", + "vt": "str" + }, + { + "t": "eq", + "v": "brightness_down_release", + "vt": "str" + }, + { + "t": "eq", + "v": "arrow_right_click", + "vt": "str" + }, + { + "t": "eq", + "v": "arrow_right_hold", + "vt": "str" + }, + { + "t": "eq", + "v": "arrow_right_release", + "vt": "str" + }, + { + "t": "eq", + "v": "arrow_left_click", + "vt": "str" + }, + { + "t": "eq", + "v": "arrow_left_hold", + "vt": "str" + }, + { + "t": "eq", + "v": "arrow_left_release", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 13, + "x": 350, + "y": 560, + "wires": [ + [ + "01a886c4c32e1cde" + ], + [ + "714f998e7ec358e0" + ], + [ + "6fa4e53007203af5" + ], + [ + "21328f072495ccec" + ], + [ + "4c6b387147ee7d9b" + ], + [ + "4575757b0d9f5677" + ], + [ + "ddbe433f6a9ec169" + ], + [ + "8e56a71d2dd891f4" + ], + [ + "492f21673d666103" + ], + [ + "717a5743a3cab3ca" + ], + [ + "e79eebeccc168907" + ], + [ + "40697f3e55babc95" + ], + [ + "86ed32cebd5f8d57" + ] + ] + }, + { + "id": "faa4b43942a5bace", + "type": "trigger-state", + "z": "82a690d6147dee52", + "name": "RGB Schalter 2", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "sensor.rgb_switch_2_action", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "", + "propertyValue": "old_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 140, + "y": 620, + "wires": [ + [ + "40d0c5cee6235718" + ], + [] + ] + }, + { + "id": "cef7e6ad9f9ba6e8", + "type": "counter", + "z": "82a690d6147dee52", + "name": "", + "init": "0", + "step": "1", + "lower": "0", + "upper": "5", + "mode": "increment", + "outputs": 1, + "x": 820, + "y": 320, + "wires": [ + [ + "fa8a6b1ffdf05ee3" + ] + ] + }, + { + "id": "fa8a6b1ffdf05ee3", + "type": "change", + "z": "82a690d6147dee52", + "name": "", + "rules": [ + { + "t": "change", + "p": "count", + "pt": "msg", + "from": "0", + "fromt": "num", + "to": "light.schreibtischlampe", + "tot": "str" + }, + { + "t": "change", + "p": "count", + "pt": "msg", + "from": "1", + "fromt": "num", + "to": "light.lampe_schrank", + "tot": "str" + }, + { + "t": "change", + "p": "count", + "pt": "msg", + "from": "2", + "fromt": "num", + "to": "light.kleiderschrankspots", + "tot": "str" + }, + { + "t": "change", + "p": "count", + "pt": "msg", + "from": "3", + "fromt": "num", + "to": "light.nachttischschlampe", + "tot": "str" + }, + { + "t": "change", + "p": "count", + "pt": "msg", + "from": "4", + "fromt": "num", + "to": "light.kleiderschrank1", + "tot": "str" + }, + { + "t": "change", + "p": "count", + "pt": "msg", + "from": "5", + "fromt": "num", + "to": "light.kleiderschrank2", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 850, + "y": 360, + "wires": [ + [ + "aaecda9d4866f415" + ] + ] + }, + { + "id": "8e56a71d2dd891f4", + "type": "function", + "z": "82a690d6147dee52", + "name": "increment+blink", + "func": "var newMsg = {};\nnewMsg.increment = 1;\nnewMsg.payload = \"blink\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 600, + "wires": [ + [ + "cef7e6ad9f9ba6e8" + ] + ] + }, + { + "id": "e79eebeccc168907", + "type": "function", + "z": "82a690d6147dee52", + "name": "decrement+blink", + "func": "var newMsg = {}\nnewMsg.decrement = 1;\nnewMsg.payload = \"blink\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 720, + "wires": [ + [ + "cef7e6ad9f9ba6e8" + ] + ] + }, + { + "id": "e750d3a13bd1d6e2", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness\":\"{{brightness}}\",\"transition\":\"{{transition}}\"}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1610, + "y": 40, + "wires": [ + [] + ] + }, + { + "id": "a7323e2adb03807a", + "type": "api-current-state", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "{{payload}}", + "state_type": "num", + "blockInputOverrides": true, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "triggerId" + }, + { + "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": 230, + "y": 40, + "wires": [ + [ + "e3ebc1defa72e698" + ] + ] + }, + { + "id": "9201e59a63b6e7b9", + "type": "function", + "z": "82a690d6147dee52", + "name": "calcBrightnessBlink", + "func": "var brightness = msg.data.attributes.brightness\n\n\n// set default brightness in case lamp was off or back to default at max\nif (brightness == null || brightness == 255){\n brightness = 1\n}else{\n // cap to 255\n if (brightness >= 255)\n brightness = 255\n // dst brightness for blink, depending on current brightness\n if (brightness >= 127)\n brightness = brightness - 40\n else\n brightness = brightness + 40\n \n}\n\nvar newMsg = { payload: msg.payload, transition: 1, brightness: brightness }\n//newMsg.remainingRecurrences = 3\nreturn newMsg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1390, + "y": 40, + "wires": [ + [ + "e750d3a13bd1d6e2" + ] + ] + }, + { + "id": "ddf78a7d2a8fe266", + "type": "delay", + "z": "82a690d6147dee52", + "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": 1200, + "y": 80, + "wires": [ + [ + "4b0575c6ccead45b" + ] + ] + }, + { + "id": "4b0575c6ccead45b", + "type": "function", + "z": "82a690d6147dee52", + "name": "restoreBrightness", + "func": "var brightness = msg.data.attributes.brightness\n\nif (brightness == null || brightness == 255)\n brightness = 1\n\nvar newMsg = { payload: msg.payload, transition: 1, brightness: brightness }\nreturn newMsg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1390, + "y": 80, + "wires": [ + [ + "e750d3a13bd1d6e2" + ] + ] + }, + { + "id": "4642832bd7356e74", + "type": "comment", + "z": "82a690d6147dee52", + "name": "blink", + "info": "", + "x": 130, + "y": 100, + "wires": [] + }, + { + "id": "b5efb3ca9cd38fa9", + "type": "link in", + "z": "82a690d6147dee52", + "name": "", + "links": [ + "e9e1d5c3df911a12", + "701bf5ace0e94b39", + "d5322a15c384af61" + ], + "x": 75, + "y": 40, + "wires": [ + [ + "a7323e2adb03807a" + ] + ] + }, + { + "id": "e9e1d5c3df911a12", + "type": "link out", + "z": "82a690d6147dee52", + "name": "blink", + "mode": "link", + "links": [ + "b5efb3ca9cd38fa9" + ], + "x": 1195, + "y": 260, + "wires": [] + }, + { + "id": "01a886c4c32e1cde", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+toggle", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"toggle\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 550, + "y": 320, + "wires": [ + [ + "cef7e6ad9f9ba6e8" + ] + ] + }, + { + "id": "c2021adb12dc0c48", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "{{payload}}", + "data": "{\"transition\":1}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1260, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "845df17fe468d432", + "type": "switch", + "z": "82a690d6147dee52", + "name": "Spilt Events", + "property": "action", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "blink", + "vt": "str" + }, + { + "t": "eq", + "v": "toggle", + "vt": "str" + }, + { + "t": "eq", + "v": "increase", + "vt": "str" + }, + { + "t": "eq", + "v": "decrease", + "vt": "str" + }, + { + "t": "eq", + "v": "temp_up", + "vt": "str" + }, + { + "t": "eq", + "v": "temp_down", + "vt": "str" + }, + { + "t": "eq", + "v": "color_up", + "vt": "str" + }, + { + "t": "eq", + "v": "color_down", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 8, + "x": 990, + "y": 460, + "wires": [ + [ + "e9e1d5c3df911a12" + ], + [ + "c2021adb12dc0c48", + "28947e6bd4f8419c" + ], + [ + "792c3a99f62cef25" + ], + [ + "e85fbe1106f33efd" + ], + [ + "87b4786a2a22779b" + ], + [ + "75574c2b8802f50f" + ], + [ + "837b04f5cf1531ee" + ], + [ + "6ef1eb0d50cc436d" + ] + ] + }, + { + "id": "792c3a99f62cef25", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "increase brightness 10%", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness_step_pct\":10}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1290, + "y": 340, + "wires": [ + [] + ] + }, + { + "id": "714f998e7ec358e0", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+increase", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"increase\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 360, + "wires": [ + [ + "cef7e6ad9f9ba6e8" + ] + ] + }, + { + "id": "4c6b387147ee7d9b", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+decrease", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"decrease\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 480, + "wires": [ + [ + "cef7e6ad9f9ba6e8" + ] + ] + }, + { + "id": "aaecda9d4866f415", + "type": "function", + "z": "82a690d6147dee52", + "name": "mod", + "func": "var newMsg = { payload: msg.count, action: msg.payload }\nreturn newMsg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 810, + "y": 400, + "wires": [ + [ + "845df17fe468d432" + ] + ] + }, + { + "id": "a3da312ff23b4cb0", + "type": "switch", + "z": "82a690d6147dee52", + "name": "Spilt Events", + "property": "missing", + "propertyType": "msg", + "rules": [ + { + "t": "false" + }, + { + "t": "true" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 650, + "y": 40, + "wires": [ + [ + "9201e59a63b6e7b9", + "ddf78a7d2a8fe266" + ], + [ + "33f9208759dc824f" + ] + ] + }, + { + "id": "33f9208759dc824f", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 350, + "y": 120, + "wires": [ + [ + "7a57e382580cbb7c" + ] + ] + }, + { + "id": "7a57e382580cbb7c", + "type": "api-current-state", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "{{payload}}", + "state_type": "num", + "blockInputOverrides": true, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "triggerId" + }, + { + "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": 590, + "y": 120, + "wires": [ + [ + "36dfea3a8124ca35" + ] + ] + }, + { + "id": "36dfea3a8124ca35", + "type": "function", + "z": "82a690d6147dee52", + "name": "checkBrightness", + "func": "var brightness = msg.data.attributes.brightness\n\nmsg.missing = false\n\n// set default brightness in case lamp was off\nif (brightness == null){\n msg.missing = true\n}\nmsg.wasoff = true\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 820, + "y": 120, + "wires": [ + [ + "1eefb216230aee24", + "3ef12c2896ff8cdc" + ] + ] + }, + { + "id": "e3ebc1defa72e698", + "type": "function", + "z": "82a690d6147dee52", + "name": "checkBrightness", + "func": "var brightness = msg.data.attributes.brightness\n\nmsg.missing = false\n\n// set default brightness in case lamp was off or back to default at max\nif (brightness == null || brightness == 255){\n msg.missing = true\n}\n\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 460, + "y": 40, + "wires": [ + [ + "a3da312ff23b4cb0" + ] + ] + }, + { + "id": "1eefb216230aee24", + "type": "switch", + "z": "82a690d6147dee52", + "name": "Spilt Events", + "property": "missing", + "propertyType": "msg", + "rules": [ + { + "t": "false" + }, + { + "t": "true" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 810, + "y": 180, + "wires": [ + [ + "1d4846fd005f6f1c", + "323e8e9e07772bf6" + ], + [ + "7a57e382580cbb7c" + ] + ] + }, + { + "id": "1d4846fd005f6f1c", + "type": "delay", + "z": "82a690d6147dee52", + "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": 1100, + "y": 120, + "wires": [ + [ + "9201e59a63b6e7b9" + ] + ] + }, + { + "id": "323e8e9e07772bf6", + "type": "delay", + "z": "82a690d6147dee52", + "name": "", + "pauseType": "delay", + "timeout": "2", + "timeoutUnits": "seconds", + "rate": "1", + "nbRateUnits": "1", + "rateUnits": "second", + "randomFirst": "1", + "randomLast": "5", + "randomUnits": "seconds", + "drop": false, + "allowrate": false, + "outputs": 1, + "x": 1100, + "y": 160, + "wires": [ + [ + "4b0575c6ccead45b", + "35f76b53801c20ac" + ] + ] + }, + { + "id": "35f76b53801c20ac", + "type": "delay", + "z": "82a690d6147dee52", + "name": "", + "pauseType": "delay", + "timeout": "400", + "timeoutUnits": "milliseconds", + "rate": "1", + "nbRateUnits": "1", + "rateUnits": "second", + "randomFirst": "1", + "randomLast": "5", + "randomUnits": "seconds", + "drop": false, + "allowrate": false, + "outputs": 1, + "x": 1400, + "y": 160, + "wires": [ + [ + "aa0d53851c284a7b" + ] + ] + }, + { + "id": "aa0d53851c284a7b", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_off", + "entityId": "{{payload}}", + "data": "{\"transition\":1}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1610, + "y": 160, + "wires": [ + [] + ] + }, + { + "id": "e85fbe1106f33efd", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "decrease brightness 10%", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness_step_pct\":-10}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1290, + "y": 380, + "wires": [ + [] + ] + }, + { + "id": "aef7e7206dc0fa61", + "type": "trigger", + "z": "82a690d6147dee52", + "name": "send every 100ms", + "op1": "", + "op2": "10", + "op1type": "pay", + "op2type": "num", + "duration": "-100", + "extend": false, + "overrideDelay": false, + "units": "ms", + "reset": "", + "bytopic": "all", + "topic": "topic", + "outputs": 1, + "x": 850, + "y": 600, + "wires": [ + [ + "cef7e6ad9f9ba6e8" + ] + ] + }, + { + "id": "21328f072495ccec", + "type": "change", + "z": "82a690d6147dee52", + "name": "set reset", + "rules": [ + { + "t": "set", + "p": "reset", + "pt": "msg", + "to": "true", + "tot": "bool" + }, + { + "t": "set", + "p": "decrement", + "pt": "msg", + "to": "0", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 540, + "y": 440, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "86ed32cebd5f8d57", + "type": "change", + "z": "82a690d6147dee52", + "name": "", + "rules": [ + { + "t": "set", + "p": "reset", + "pt": "msg", + "to": "true", + "tot": "bool" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 560, + "y": 800, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "6fa4e53007203af5", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+temp_up", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"temp_up\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 400, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "4575757b0d9f5677", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+temp_down", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"temp_down\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 570, + "y": 520, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "ddbe433f6a9ec169", + "type": "change", + "z": "82a690d6147dee52", + "name": "set reset", + "rules": [ + { + "t": "set", + "p": "reset", + "pt": "msg", + "to": "true", + "tot": "bool" + }, + { + "t": "set", + "p": "decrement", + "pt": "msg", + "to": "0", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 540, + "y": 560, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "717a5743a3cab3ca", + "type": "change", + "z": "82a690d6147dee52", + "name": "set reset", + "rules": [ + { + "t": "set", + "p": "reset", + "pt": "msg", + "to": "true", + "tot": "bool" + }, + { + "t": "set", + "p": "decrement", + "pt": "msg", + "to": "0", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 540, + "y": 680, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "492f21673d666103", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+color_up", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"color_up\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 640, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "40697f3e55babc95", + "type": "function", + "z": "82a690d6147dee52", + "name": "stay+color_down", + "func": "var newMsg = {};\nnewMsg.decrement = 0;\nnewMsg.payload = \"color_down\"\nreturn newMsg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 570, + "y": 760, + "wires": [ + [ + "aef7e7206dc0fa61" + ] + ] + }, + { + "id": "baf092aa39fd876e", + "type": "function", + "z": "82a690d6147dee52", + "name": "calcColor", + "func": "var color = msg.data.attributes.hs_color[0]\n\ncolor = color+msg.step\n// cap color to 359\nif(color > 360)\n color = 359\n \n// cap to higher than 1\nif(color < 1)\n color = 1\n \n// set sat to 100\nsat = 100\n\nmsg.transition = 1\nmsg.hs_color = color\nmsg.hs_sat = sat\n\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1380, + "y": 740, + "wires": [ + [ + "9dd60c146e5ba51b" + ] + ] + }, + { + "id": "837b04f5cf1531ee", + "type": "change", + "z": "82a690d6147dee52", + "name": "set step 6", + "rules": [ + { + "t": "set", + "p": "step", + "pt": "msg", + "to": "6", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1200, + "y": 600, + "wires": [ + [ + "a7d5993606472d85" + ] + ] + }, + { + "id": "6ef1eb0d50cc436d", + "type": "change", + "z": "82a690d6147dee52", + "name": "set step -6", + "rules": [ + { + "t": "set", + "p": "step", + "pt": "msg", + "to": "-6", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1210, + "y": 640, + "wires": [ + [ + "a7d5993606472d85" + ] + ] + }, + { + "id": "9dd60c146e5ba51b", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"hs_color\":[{{hs_color}},{{hs_sat}}],\"transition\":1}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1410, + "y": 800, + "wires": [ + [] + ] + }, + { + "id": "a7d5993606472d85", + "type": "api-current-state", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "{{payload}}", + "state_type": "num", + "blockInputOverrides": true, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "triggerId" + }, + { + "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": 1430, + "y": 680, + "wires": [ + [ + "baf092aa39fd876e" + ] + ] + }, + { + "id": "87b4786a2a22779b", + "type": "change", + "z": "82a690d6147dee52", + "name": "set step 4", + "rules": [ + { + "t": "set", + "p": "step", + "pt": "msg", + "to": "4", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1200, + "y": 520, + "wires": [ + [ + "63987438e50b7bf8" + ] + ] + }, + { + "id": "75574c2b8802f50f", + "type": "change", + "z": "82a690d6147dee52", + "name": "set step -4", + "rules": [ + { + "t": "set", + "p": "step", + "pt": "msg", + "to": "-4", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1210, + "y": 560, + "wires": [ + [ + "63987438e50b7bf8" + ] + ] + }, + { + "id": "63987438e50b7bf8", + "type": "api-current-state", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "{{payload}}", + "state_type": "num", + "blockInputOverrides": true, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "triggerId" + }, + { + "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": 1430, + "y": 480, + "wires": [ + [ + "611084761d9517fd" + ] + ] + }, + { + "id": "611084761d9517fd", + "type": "function", + "z": "82a690d6147dee52", + "name": "calcColorTemp", + "func": "var temp = msg.data.attributes.color_temp\nvar min_mireds = msg.data.attributes.min_mireds\nvar max_mireds = msg.data.attributes.max_mireds\n\nif(temp == null)\ntemp = max_mireds-min_mireds\n\ntemp = temp+msg.step\n// cap color to 359\nif(temp > max_mireds)\n temp = max_mireds\n \n// cap to higher than 1\nif(temp < min_mireds)\n temp = min_mireds\n \nmsg.transition = 1\nmsg.color_temp = temp\n\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1400, + "y": 540, + "wires": [ + [ + "3a18915164e20b3b", + "f9ef405a5945cc0c" + ] + ] + }, + { + "id": "3a18915164e20b3b", + "type": "api-call-service", + "z": "82a690d6147dee52", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"color_temp\":{{color_temp}},\"transition\":1}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "all", + "x": 1410, + "y": 600, + "wires": [ + [] + ] + }, + { + "id": "f9ef405a5945cc0c", + "type": "debug", + "z": "82a690d6147dee52", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1570, + "y": 540, + "wires": [] + }, + { + "id": "28947e6bd4f8419c", + "type": "debug", + "z": "82a690d6147dee52", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1490, + "y": 420, + "wires": [] + }, + { + "id": "3ef12c2896ff8cdc", + "type": "debug", + "z": "82a690d6147dee52", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1030, + "y": 220, + "wires": [] + }, + { + "id": "b61ff34a86cd7856", + "type": "mqtt in", + "z": "27b477bf09d00791", + "name": "", + "topic": "RuleTrigger/#", + "qos": "2", + "datatype": "auto", + "broker": "aeedd16f1f009dd0", + "nl": false, + "rap": true, + "rh": 0, + "inputs": 0, + "x": 90, + "y": 40, + "wires": [ + [ + "ec365e8789272db9" + ] + ] + }, + { + "id": "ec365e8789272db9", + "type": "switch", + "z": "27b477bf09d00791", + "name": "Spilt MQTT Topics", + "property": "topic", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "RuleTrigger/AllOffRuleTrigger/state", + "vt": "str" + }, + { + "t": "eq", + "v": "RuleTrigger/AußenbeleuchtungEingangRuleTrigger/state", + "vt": "str" + }, + { + "t": "eq", + "v": "RuleTrigger/TerrasseSwitchRuleTrigger/state", + "vt": "str" + }, + { + "t": "eq", + "v": "RuleTrigger/BadSwitchRuleTrigger/state", + "vt": "str" + }, + { + "t": "eq", + "v": "RuleTrigger/KuecheSwitchRuleTrigger/state", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 5, + "x": 130, + "y": 120, + "wires": [ + [ + "fa3123105eb83843" + ], + [ + "227ba6f8bc6c99f8" + ], + [ + "74b8f83d2c8d1a0f" + ], + [ + "522b7860927b1033" + ], + [ + "b337b9d30ef146ea" + ] + ] + }, + { + "id": "fa3123105eb83843", + "type": "link out", + "z": "27b477bf09d00791", + "name": "TurnAllOff", + "mode": "link", + "links": [ + "3a586673a13d25a0", + "815cd0e80742835d" + ], + "x": 255, + "y": 20, + "wires": [] + }, + { + "id": "05bfb7e32aab2bdf", + "type": "api-call-service", + "z": "27b477bf09d00791", + "name": "Eingang ON", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.beleuchtung_eingang_2", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 670, + "y": 80, + "wires": [ + [] + ] + }, + { + "id": "227ba6f8bc6c99f8", + "type": "switch", + "z": "27b477bf09d00791", + "name": "Spilt OFF ON", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "0", + "vt": "str" + }, + { + "t": "eq", + "v": "1", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 340, + "y": 60, + "wires": [ + [ + "edb324ef57ecaff2" + ], + [ + "05bfb7e32aab2bdf" + ] + ] + }, + { + "id": "edb324ef57ecaff2", + "type": "api-call-service", + "z": "27b477bf09d00791", + "name": "Eingang OFF", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_off", + "entityId": "light.beleuchtung_eingang_2", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 670, + "y": 40, + "wires": [ + [] + ] + }, + { + "id": "3dc115cd6de1bab6", + "type": "function", + "z": "27b477bf09d00791", + "name": "20", + "func": "msg.brightness = 20\nmsg.transition = 1\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 850, + "y": 280, + "wires": [ + [ + "ea2cedf677aed301" + ] + ] + }, + { + "id": "ea2cedf677aed301", + "type": "api-call-service", + "z": "27b477bf09d00791", + "name": "Toggle Light", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "{{payload}}", + "data": "{\"brightness_pct\":\"{{brightness}}\",\"transition\":\"{{transition}}\"}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1010, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "3c07adb6bb29ac6e", + "type": "time-range-switch", + "z": "27b477bf09d00791", + "name": "", + "lat": "49.99987", + "lon": "8.00604", + "startTime": "sunrise", + "endTime": "sunset", + "startOffset": "-120", + "endOffset": 0, + "x": 640, + "y": 200, + "wires": [ + [ + "6c5992e9ad2d2222" + ], + [ + "3dc115cd6de1bab6" + ] + ] + }, + { + "id": "b337b9d30ef146ea", + "type": "function", + "z": "27b477bf09d00791", + "name": "light.kueche_lights", + "func": "msg.payload = \"light.kueche_lights\"\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 350, + "y": 180, + "wires": [ + [ + "92e44f05a7a47224" + ] + ] + }, + { + "id": "6c5992e9ad2d2222", + "type": "function", + "z": "27b477bf09d00791", + "name": "100", + "func": "msg.brightness = 100\nmsg.transition = 1\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 850, + "y": 240, + "wires": [ + [ + "ea2cedf677aed301" + ] + ] + }, + { + "id": "522b7860927b1033", + "type": "function", + "z": "27b477bf09d00791", + "name": "light.bad_lights", + "func": "msg.payload = \"light.bad_lights\"\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 340, + "y": 140, + "wires": [ + [ + "3c07adb6bb29ac6e", + "244725441187d7fc" + ] + ] + }, + { + "id": "74b8f83d2c8d1a0f", + "type": "function", + "z": "27b477bf09d00791", + "name": "light.beleuchtung_terrasse", + "func": "msg.payload = \"light.beleuchtung_terrasse\"\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 380, + "y": 100, + "wires": [ + [ + "3c07adb6bb29ac6e" + ] + ] + }, + { + "id": "3d0a43dec81d6c91", + "type": "api-call-service", + "z": "27b477bf09d00791", + "name": "Spiegelschrank", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "toggle", + "entityId": "light.spiegelschrankbad", + "data": "", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 860, + "y": 140, + "wires": [ + [] + ] + }, + { + "id": "244725441187d7fc", + "type": "time-range-switch", + "z": "27b477bf09d00791", + "name": "", + "lat": "49.99987", + "lon": "8.00604", + "startTime": "sunrise", + "endTime": "9:00", + "startOffset": "-120", + "endOffset": 0, + "x": 640, + "y": 140, + "wires": [ + [ + "3d0a43dec81d6c91" + ], + [] + ] + }, + { + "id": "f2e24eedca16fcb1", + "type": "trigger-state", + "z": "27b477bf09d00791", + "name": "Klingel", + "server": "7b975ed1.2c58d", + "version": 1, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityid": "binary_sensor.sensor_klingel_contact", + "entityidfiltertype": "exact", + "debugenabled": false, + "constraints": [ + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "previous_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "off", + "propertyValue": "old_state.state" + }, + { + "targetType": "this_entity", + "targetValue": "", + "propertyType": "current_state", + "comparatorType": "is", + "comparatorValueDatatype": "str", + "comparatorValue": "on", + "propertyValue": "new_state.state" + } + ], + "inputs": 0, + "outputs": 2, + "customoutputs": [], + "outputinitially": false, + "state_type": "str", + "enableInput": false, + "x": 70, + "y": 540, + "wires": [ + [ + "9ab3ef7d26772c71" + ], + [] + ] + }, + { + "id": "40928f63.2537", + "type": "exec", + "z": "27b477bf09d00791", + "command": "curl http://192.168.62.5:888/", + "addpay": false, + "append": "", + "useSpawn": "false", + "timer": "", + "winHide": false, + "oldrc": false, + "name": "", + "x": 1060, + "y": 540, + "wires": [ + [], + [], + [] + ] + }, + { + "id": "9ab3ef7d26772c71", + "type": "debounce-leading-trailing", + "z": "27b477bf09d00791", + "time": "3000", + "debouncetype": "leading", + "name": "debounce-leading", + "x": 270, + "y": 540, + "wires": [ + [ + "77bc3c4dc51df80e" + ] + ] + }, + { + "id": "92e44f05a7a47224", + "type": "time-range-switch", + "z": "27b477bf09d00791", + "name": "", + "lat": "49.99987", + "lon": "8.00604", + "startTime": "23:30", + "endTime": "sunset", + "startOffset": "", + "endOffset": 0, + "x": 640, + "y": 260, + "wires": [ + [ + "6c5992e9ad2d2222" + ], + [ + "3dc115cd6de1bab6" + ] + ] + }, + { + "id": "182ea94132e76fc4", + "type": "function", + "z": "27b477bf09d00791", + "name": "10", + "func": "msg.brightness = 10\nmsg.transition = 1\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 850, + "y": 320, + "wires": [ + [ + "ea2cedf677aed301" + ] + ] + }, + { + "id": "76dec314c329b7e7", + "type": "inject", + "z": "27b477bf09d00791", + "name": "block on deploy", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "block", + "payload": "change-state", + "payloadType": "str", + "x": 280, + "y": 480, + "wires": [ + [ + "77bc3c4dc51df80e", + "e21a393ad43b83ce" + ] + ] + }, + { + "id": "b8e4a67a927a0c7c", + "type": "debug", + "z": "27b477bf09d00791", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 990, + "y": 480, + "wires": [] + }, + { + "id": "77bc3c4dc51df80e", + "type": "state-machine", + "z": "27b477bf09d00791", + "name": "", + "triggerProperty": "topic", + "triggerPropertyType": "msg", + "stateProperty": "topic", + "statePropertyType": "msg", + "initialDelay": "0", + "persistOnReload": false, + "outputStateChangeOnly": false, + "throwException": false, + "states": [ + "block", + "accepting" + ], + "transitions": [ + { + "name": "accept", + "from": "block", + "to": "accepting" + }, + { + "name": "block", + "from": "accepting", + "to": "block" + } + ], + "x": 580, + "y": 540, + "wires": [ + [ + "a5f592fe9b2c06c9" + ] + ] + }, + { + "id": "1d89a4f8cff5ae37", + "type": "inject", + "z": "27b477bf09d00791", + "name": "accept", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "accept", + "payload": "change-state", + "payloadType": "str", + "x": 310, + "y": 600, + "wires": [ + [ + "77bc3c4dc51df80e" + ] + ] + }, + { + "id": "a5f592fe9b2c06c9", + "type": "function", + "z": "27b477bf09d00791", + "name": "filter accepting topic", + "func": "if(msg.topic == 'accepting' && msg.payload != 'change-state')\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 800, + "y": 540, + "wires": [ + [ + "b8e4a67a927a0c7c", + "40928f63.2537" + ] + ] + }, + { + "id": "7053352d26410454", + "type": "inject", + "z": "27b477bf09d00791", + "name": "ring", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "true", + "payloadType": "bool", + "x": 310, + "y": 640, + "wires": [ + [ + "77bc3c4dc51df80e" + ] + ] + }, + { + "id": "0770baa844598f61", + "type": "function", + "z": "27b477bf09d00791", + "name": "send accept", + "func": "msg.topic = 'accept'\nmsg.payload = 'change-state'\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 690, + "y": 480, + "wires": [ + [ + "77bc3c4dc51df80e" + ] + ] + }, + { + "id": "e21a393ad43b83ce", + "type": "delay", + "z": "27b477bf09d00791", + "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": 520, + "y": 480, + "wires": [ + [ + "0770baa844598f61" + ] + ] + }, + { + "id": "eab3b05f10c2ee22", + "type": "sunrise", + "z": "a669a7d105d30a43", + "name": "ganz dunkel, ganz hell", + "lat": "50.00069", + "lon": "7.99212", + "start": "goldenHourEnd", + "end": "night", + "soff": 0, + "eoff": 0, + "x": 120, + "y": 100, + "wires": [ + [ + "cf01af4051a352d1" + ], + [ + "cc0b157d50993f5e" + ] + ] + }, + { + "id": "cf94899baec8a3c4", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "rolläden 0% auf", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "set_cover_position", + "entityId": "cover.rolladenfenster_cover_1, cover.nspterrasse_cover_1", + "data": "{\"position\": 0}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 940, + "y": 100, + "wires": [ + [] + ] + }, + { + "id": "8ff8477d3301e5f7", + "type": "inject", + "z": "a669a7d105d30a43", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payloadType": "str", + "x": 790, + "y": 80, + "wires": [ + [ + "cf94899baec8a3c4" + ] + ] + }, + { + "id": "349776b03c80b456", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "rolläden 10% auf", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "set_cover_position", + "entityId": "cover.rolladenfenster_cover_1, cover.nspterrasse_cover_1", + "data": "{\"position\": 10}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 950, + "y": 220, + "wires": [ + [] + ] + }, + { + "id": "cf01af4051a352d1", + "type": "debug", + "z": "a669a7d105d30a43", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 370, + "y": 80, + "wires": [] + }, + { + "id": "cc0b157d50993f5e", + "type": "switch", + "z": "a669a7d105d30a43", + "name": "", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "0", + "vt": "num" + }, + { + "t": "eq", + "v": "1", + "vt": "num" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 350, + "y": 120, + "wires": [ + [ + "cf94899baec8a3c4" + ], + [ + "dd0d61f2f5fa8141" + ] + ] + }, + { + "id": "aa88cab3742c148c", + "type": "sunrise", + "z": "a669a7d105d30a43", + "name": "wird dunkel, wird hell", + "lat": "50.00069", + "lon": "7.99212", + "start": "nightEnd", + "end": "dusk", + "soff": 0, + "eoff": 0, + "x": 110, + "y": 220, + "wires": [ + [ + "f23876ece24152b1" + ], + [ + "8e31156790c8e45a" + ] + ] + }, + { + "id": "8e31156790c8e45a", + "type": "switch", + "z": "a669a7d105d30a43", + "name": "", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "0", + "vt": "num" + }, + { + "t": "eq", + "v": "1", + "vt": "num" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 350, + "y": 240, + "wires": [ + [ + "349776b03c80b456" + ], + [ + "3ab098a3992af543" + ] + ] + }, + { + "id": "f23876ece24152b1", + "type": "debug", + "z": "a669a7d105d30a43", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 370, + "y": 200, + "wires": [] + }, + { + "id": "dd0d61f2f5fa8141", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "rolläden 100% auf", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "set_cover_position", + "entityId": "cover.rolladenfenster_cover_1, cover.nspterrasse_cover_1", + "data": "{\"position\": 100}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 950, + "y": 160, + "wires": [ + [] + ] + }, + { + "id": "3ab098a3992af543", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "rolläden 60% auf", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "set_cover_position", + "entityId": "cover.rolladenfenster_cover_1, cover.nspterrasse_cover_1", + "data": "{\"position\": 60}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 950, + "y": 280, + "wires": [ + [] + ] + }, + { + "id": "158def8be44c3849", + "type": "inject", + "z": "a669a7d105d30a43", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payloadType": "str", + "x": 790, + "y": 260, + "wires": [ + [ + "3ab098a3992af543" + ] + ] + }, + { + "id": "7cc039123553baf7", + "type": "inject", + "z": "a669a7d105d30a43", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payloadType": "str", + "x": 790, + "y": 140, + "wires": [ + [ + "dd0d61f2f5fa8141" + ] + ] + }, + { + "id": "5fa204a9271ea46d", + "type": "inject", + "z": "a669a7d105d30a43", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payloadType": "str", + "x": 790, + "y": 200, + "wires": [ + [ + "349776b03c80b456" + ] + ] + }, + { + "id": "2e62b6559a4a37ac", + "type": "inject", + "z": "a669a7d105d30a43", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payloadType": "str", + "x": 310, + "y": 380, + "wires": [ + [ + "7db42b.e3de6bd4" + ] + ] + }, + { + "id": "7db42b.e3de6bd4", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "1%", + "server": "161bb087.35566f", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.kleiderschrank2", + "data": "{\"brightness\":1}", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "data" + } + ], + "queue": "none", + "x": 230, + "y": 480, + "wires": [ + [ + "5f30d3cb.1aadac" + ] + ] + }, + { + "id": "5f30d3cb.1aadac", + "type": "looptimer", + "z": "a669a7d105d30a43", + "duration": "20", + "units": "Second", + "maxloops": "40", + "maxtimeout": "15", + "maxtimeoutunits": "Minute", + "name": "", + "x": 300, + "y": 540, + "wires": [ + [ + "de710702.9a2d98" + ], + [] + ] + }, + { + "id": "de710702.9a2d98", + "type": "api-render-template", + "z": "a669a7d105d30a43", + "name": "Get new light setting", + "server": "161bb087.35566f", + "version": 0, + "template": "{{ [250, state_attr('light.kleiderschrank2', 'brightness') + 9] | min }}", + "resultsLocation": "payload", + "resultsLocationType": "msg", + "templateLocation": "template", + "templateLocationType": "msg", + "x": 360, + "y": 600, + "wires": [ + [ + "3df7037a.2f373c", + "a14ff921410310dd" + ] + ] + }, + { + "id": "3df7037a.2f373c", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "Increase light", + "server": "161bb087.35566f", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.kleiderschrank2", + "data": "{\"brightness\":{{ payload }}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "data" + } + ], + "queue": "none", + "x": 370, + "y": 660, + "wires": [ + [] + ] + }, + { + "id": "def6df1b6ced88b2", + "type": "api-call-service", + "z": "a669a7d105d30a43", + "name": "licht an", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "light.kleiderschrank2", + "data": "{\"brightness_pct\": 25, \"transition\": 10}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 520, + "y": 440, + "wires": [ + [] + ] + }, + { + "id": "a14ff921410310dd", + "type": "debug", + "z": "a669a7d105d30a43", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 630, + "y": 560, + "wires": [] + }, + { + "id": "0406144a8517cec9", + "type": "mqtt out", + "z": "1095d804ba7660cf", + "name": "", + "topic": "cmnd/tasmota_NsPanelTerrasse/NSPSend", + "qos": "", + "retain": "", + "respTopic": "", + "contentType": "", + "userProps": "", + "correl": "", + "expiry": "", + "broker": "aeedd16f1f009dd0", + "x": 1750, + "y": 1240, + "wires": [] + }, + { + "id": "a0d8f1eaf39022f8", + "type": "inject", + "z": "1095d804ba7660cf", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "Backlog NSPSend {\"HMI_resources\":[{\"index\":1,\"ctype\":\"group\",\"id\":\"1\",\"uiid\":10}]}; NSPSend {\"HMI_resources\":[{\"index\":2,\"ctype\":\"group\",\"id\":\"2\",\"uiid\":11}]}; NSPSend {\"HMI_resources\":[{\"index\":3,\"ctype\":\"group\",\"id\":\"3\",\"uiid\":12}]}; NSPSend {\"HMI_resources\":[{\"index\":4,\"ctype\":\"group\",\"id\":\"4\",\"uiid\":13}]}; NSPSend {\"HMI_resources\":[{\"index\":5,\"ctype\":\"group\",\"id\":\"5\",\"uiid\":14}]}; NSPSend {\"HMI_resources\":[{\"index\":6,\"ctype\":\"group\",\"id\":\"6\",\"uiid\":15}]}; NSPSend {\"HMI_resources\":[{\"index\":7,\"ctype\":\"group\",\"id\":\"7\",\"uiid\":16}]}; NSPSend {\"HMI_resources\":[{\"index\":8,\"ctype\":\"group\",\"id\":\"8\",\"uiid\":17}]}", + "payloadType": "str", + "x": 1390, + "y": 1260, + "wires": [ + [ + "0406144a8517cec9" + ] + ] + }, + { + "id": "efe70144433fa22a", + "type": "inject", + "z": "1095d804ba7660cf", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "{\"relation\":[{\"id\":\"2\",\"online\":true,\"params\":{\"switch\":\"on\"}}]}", + "payloadType": "str", + "x": 1360, + "y": 1320, + "wires": [ + [ + "0406144a8517cec9" + ] + ] + }, + { + "id": "eb8b7ad2eea3a9b4", + "type": "function", + "z": "1095d804ba7660cf", + "name": "InitWidgets", + "func": "var widgets = [{type: 11, name: \"test\"}]\n\nvar messages = []\n\nfor(var i in widgets){\n pos = parseInt(i)+1\n type = widgets[i][\"type\"]\n msg = { payload:'{\"HMI_resources\":[{\"index\":'+pos+',\"ctype\":\"device\",\"id\":\"'+pos+'\",\"uiid\":'+type+'}]}' }\n messages.push(msg);\n}\n\nfor (let i = widgets.length; i <= 8; i++) {\n //msg = { payload:'{\"index\":'+(i+1)+',\"type\":\"delete\"}' }\n //msg = { payload:'{\"HMI_resources\":[{\"index\":'+(i+1)+',\"type\":\"delete\"}]}' }\n msg = { payload:'{\"HMI_resources\":[{\"index\":'+pos+',\"ctype\":\"device\",\"id\":\"'+pos+'\",\"uiid\":1}]}' }\n messages.push(msg);\n}\n\n//for(var j in widgets){\n// pos = j+1\n// type = widgets[i][\"type\"]\n// msg = { payload:'{\"relation\":[{\"id\":\"'+pos+'\",\"online\":true}]}' }\n// messages.push(msg);\n//}\n\nreturn [messages];", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1860, + "y": 1300, + "wires": [ + [ + "ed05bd42131f434a", + "0406144a8517cec9" + ] + ] + }, + { + "id": "fa41aa7e30f8ca15", + "type": "inject", + "z": "1095d804ba7660cf", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "11", + "payloadType": "str", + "x": 1550, + "y": 1300, + "wires": [ + [ + "eb8b7ad2eea3a9b4" + ] + ] + }, + { + "id": "ed05bd42131f434a", + "type": "debug", + "z": "1095d804ba7660cf", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 2090, + "y": 1300, + "wires": [] + }, + { + "id": "ce92ba2dd30d18b5", + "type": "mqtt in", + "z": "1095d804ba7660cf", + "name": "", + "topic": "tele/tasmota_NsPanelTerrasse/RESULT", + "qos": "2", + "datatype": "utf8", + "broker": "aeedd16f1f009dd0", + "nl": false, + "rap": true, + "rh": 0, + "inputs": 0, + "x": 230, + "y": 80, + "wires": [ + [ + "d932fa74aac36dae", + "760998e7025450dd" + ] + ] + }, + { + "id": "ced9fe90e59b1a20", + "type": "mqtt out", + "z": "1095d804ba7660cf", + "name": "", + "topic": "cmnd/tasmota_NsPanelTerrasse/CustomSend", + "qos": "", + "retain": "", + "respTopic": "", + "contentType": "", + "userProps": "", + "correl": "", + "expiry": "", + "broker": "aeedd16f1f009dd0", + "x": 1200, + "y": 120, + "wires": [] + }, + { + "id": "5b15e207af7b04ad", + "type": "function", + "z": "1095d804ba7660cf", + "name": "wrap in relation", + "func": "msg.payload = '{\"relation\":' + msg.payload + '}'\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1860, + "y": 960, + "wires": [ + [] + ] + }, + { + "id": "8ae6cb2ef939f32e", + "type": "json", + "z": "1095d804ba7660cf", + "name": "", + "property": "payload", + "action": "obj", + "pretty": false, + "x": 1510, + "y": 1020, + "wires": [ + [ + "801e698fef52c523" + ] + ] + }, + { + "id": "5341740d5b2eea7b", + "type": "debug", + "z": "1095d804ba7660cf", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1690, + "y": 1160, + "wires": [] + }, + { + "id": "acd902ead01a3ee6", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "control cover", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "{{action}}", + "entityId": "{{entityId}}", + "data": "", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 2110, + "y": 1040, + "wires": [ + [] + ] + }, + { + "id": "801e698fef52c523", + "type": "function", + "z": "1095d804ba7660cf", + "name": "convertNSPanelCover", + "func": "var newMsg = { payload: \"\" }\n\nswitch (msg.payload.NSPanel.id) {\n case \"1\":\n newMsg.entityId = \"cover.rolladenfenster_cover_1\"\n break;\n case \"2\":\n newMsg.entityId = \"cover.nspterrasse_cover_1\"\n break;\n case \"3\":\n newMsg.entityId = \"cover.rolladenterasse_cover_1\"\n break;\n}\n\nif (\"switch\" in msg.payload.NSPanel.params){\n switch (msg.payload.NSPanel.params.switch) {\n case \"pause\":\n newMsg.action = \"stop_cover\"\n break;\n case \"off\":\n newMsg.action = \"close_cover\"\n break;\n case \"on\":\n newMsg.action = \"open_cover\"\n break;\n }\n return [ newMsg, null ];\n}\n\nif (\"setclose\" in msg.payload.NSPanel.params){\n newMsg.action = \"set_cover_position\"\n newMsg.args = msg.payload.NSPanel.params.setclose\n //newMsg.args = '{\"position\":\"'+msg.payload.NSPanel.params.setclose+'\"}'\n return [ null, newMsg ];\n\n}", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1900, + "y": 1080, + "wires": [ + [ + "acd902ead01a3ee6" + ], + [ + "9fe9c9447763dd75" + ] + ] + }, + { + "id": "cc63cfa5c9ae6db5", + "type": "function", + "z": "1095d804ba7660cf", + "name": "", + "func": "if(!msg.payload.includes(\"error\")){\n msg.payload = msg.payload.replace(\"\u0005}\", \"\");\n return msg;\n}\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1640, + "y": 960, + "wires": [ + [ + "5b15e207af7b04ad", + "8ae6cb2ef939f32e", + "5341740d5b2eea7b" + ] + ] + }, + { + "id": "9fe9c9447763dd75", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "set pos", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "set_cover_position", + "entityId": "{{entityId}}", + "data": "{\"position\":\"{{args}}\"}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 2100, + "y": 1120, + "wires": [ + [] + ] + }, + { + "id": "2140d330acaedb32", + "type": "debug", + "z": "1095d804ba7660cf", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1090, + "y": 80, + "wires": [] + }, + { + "id": "d932fa74aac36dae", + "type": "function", + "z": "1095d804ba7660cf", + "name": "check for '\"{\"CustomRecv\":'", + "func": "if(msg.payload.startsWith('\\{\"CustomRecv\":')){\n obj = JSON.parse(msg.payload)\n msg.payload = obj.CustomRecv\n return msg;\n}", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 580, + "y": 80, + "wires": [ + [ + "2140d330acaedb32", + "8c55fa4e04afcc7e" + ] + ] + }, + { + "id": "8c55fa4e04afcc7e", + "type": "function", + "z": "1095d804ba7660cf", + "name": "pages", + "func": "var pages = \n[\n { \n type: \"cardEntities\",\n heading: \"Rolladen\",\n items: [\"cover.rolladenfenster_cover_1\", \"cover.nspterrasse_cover_1\", \"cover.rolladenterasse_cover_1\", \"sensor.nspterrasse_analog_temperature1\"] \n },\n {\n type: \"cardEntities\",\n heading: \"TestPage\",\n items: [\"button.beamer_key_left\", \"cover.rolladenterasse_cover_1\", \"light.schreibtischlampe\", \"sensor.kleiderschrank1_si7021_temperature\"] \n }\n]\n\nfunction genEntitiesPage(pageNum){\n var out_msgs = [ {payload:\"pageType,cardEntities\"}, { payload: \"entityUpdHeading,\"+pages[pageNum].heading } ]\n\n pages[pageNum].items.forEach(function (id, i) {\n \n var type = \"delete\"\n var iconId = 0\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n \n switch (id.substring(0,id.indexOf('.'))) {\n case \"cover\":\n type = \"shutter\"\n iconId = 0\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type})\n break\n case \"light\":\n type = \"light\"\n iconId = 1\n var optVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n optVal = \"1\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"sensor\":\n type = \"text\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.device_class\") == \"temperature\"){\n iconId = 2\n }\n var optVal = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") + \" \" + global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.unit_of_measurement\")\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"button\":\n type = \"button\"\n iconId = 3\n var optVal = \"PRESS\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"delete\":\n type = \"delete\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",0,dc,\"+type})\n break\n default:\n break\n }\n\n })\n\n\n \n return out_msgs\n \n}\n\nfunction genThermoPage(pageNum){\n id = pages[pageNum].item\n var out_msgs = [ {payload:\"pageType,cardThermo\"} ]\n \n let heading = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n let currentTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.current_temperature\")*10\n let destTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.temperature\")*10\n let status = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.hvac_action\")\n let minTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.min_temp\")*10\n let maxTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.max_temp\")*10\n //let stepTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.target_temp_step\")*10\n let stepTemp = 0.5*10\n \n out_msgs.push({ payload: \"entityUpd,\"+heading+\",\"+currentTemp+\",\"+destTemp+\",\"+status+\",\"+minTemp+\",\"+maxTemp+\",\"+stepTemp })\n \n \n return out_msgs\n}\n\n\nfunction handleButtonEvent(pageNum, words){\n var out_msgs = [ ]\n pages[pageNum].items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(words[4]==name){\n if(words[6]==\"OnOff\"){\n var domain = \"switch\"\n if(id.startsWith(\"light\"))\n domain = \"light\"\n var action = \"turn_off\"\n if(words[7]==\"1\")\n action = \"turn_on\"\n out_msgs.push( {payload: id, action: action, domain: domain})\n }\n \n if(words[6]==\"up\")\n out_msgs.push( {payload: id, action: \"open_cover\", domain: \"cover\"})\n if(words[6]==\"stop\")\n out_msgs.push( {payload: id, action: \"stop_cover\", domain: \"cover\"})\n if(words[6]==\"down\")\n out_msgs.push( {payload: id, action: \"close_cover\", domain: \"cover\"})\n \n if(words[6]==\"brightnessSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightBrightness\", brightness: parseInt(words[7])})\n if(words[6]==\"colorTempSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightTemperature\", temperature: parseInt(words[7])})\n \n }\n }\n \n )\n return out_msgs\n}\n\nfunction searchIdInPages(friendlyName){\n let id_ret = \"\"\n // search entity in pages\n pages.forEach(page => {\n if(\"items\" in page){\n page.items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(name == friendlyName){\n id_ret = id\n }\n })\n }\n })\n return id_ret\n}\n\nfunction scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nfunction genDetailPage(type, friendlyName){\n var out_msgs = [ ]\n \n let id = searchIdInPages(friendlyName)\n if(type == \"popupLight\"){\n let switchVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n switchVal = \"1\"\n \n let attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n \n let brightness = Math.trunc(scale(attr.brightness, 0, 255, 0, 100))\n \n let colortemp = Math.trunc(scale(attr.color_temp, attr.min_mireds, attr.max_mireds, 0, 100))\n \n out_msgs.push({ payload: \"entityUpdateDetail,\"+switchVal+\",\"+brightness+\",\"+colortemp})\n }\n\n\n \n return out_msgs\n \n}\n\n\nwords = msg.payload.split(',')\nif(words[0]=='event'){\n var pageNum = parseInt(words[2])\n pageNum = (pageNum % pages.length)\n pageNum = Math.abs(pageNum)\n context.set(\"currentPage\", pageNum)\n \n if(words[1]=='pageOpen'){\n var retMsgs = []\n \n if(pages[pageNum].type == \"cardEntities\"){\n retMsgs = genEntitiesPage(pageNum)\n }else if(pages[pageNum].type == \"cardThermo\")\n {\n retMsgs = genThermoPage(pageNum)\n }\n \n return [retMsgs, null]\n }\n if(words[1]=='buttonPress'){\n return [null, handleButtonEvent(pageNum, words)]\n }\n if(words[1]=='pageOpenDetail'){\n return [genDetailPage(words[2], words[3]), null]\n }\n \n}\nif(words[0]=='extUpd'){\n if (context.get(\"currentPage\") === undefined) {\n context.set(\"currentPage\", 0)\n }\n \n return [genPage(context.get(\"currentPage\")), null]\n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 870, + "y": 120, + "wires": [ + [ + "2140d330acaedb32", + "ced9fe90e59b1a20" + ], + [ + "ae6d506a1008c205", + "9c8ab27f51037aa3" + ] + ] + }, + { + "id": "7db7ae0f4d1fe069", + "type": "server-state-changed", + "z": "1095d804ba7660cf", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityidfilter": "light.schreibtischlampe", + "entityidfiltertype": "exact", + "outputinitially": false, + "state_type": "str", + "haltifstate": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "outputs": 1, + "output_only_on_state_change": 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": 350, + "y": 300, + "wires": [ + [ + "8a3085aa19cd3c6d" + ] + ] + }, + { + "id": "ae6d506a1008c205", + "type": "debug", + "z": "1095d804ba7660cf", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1090, + "y": 200, + "wires": [] + }, + { + "id": "602c4f7a025d61a3", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1310, + "y": 200, + "wires": [ + [] + ] + }, + { + "id": "9c8ab27f51037aa3", + "type": "switch", + "z": "1095d804ba7660cf", + "name": "", + "property": "domain", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "light", + "vt": "str" + }, + { + "t": "eq", + "v": "lightBrightness", + "vt": "str" + }, + { + "t": "eq", + "v": "lightTemperature", + "vt": "str" + }, + { + "t": "eq", + "v": "switch", + "vt": "str" + }, + { + "t": "eq", + "v": "cover", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 5, + "x": 1090, + "y": 260, + "wires": [ + [ + "602c4f7a025d61a3" + ], + [ + "ba9a8d410af75a64" + ], + [ + "343b75acbe526882" + ], + [ + "e6a9a4a3944c7b8e" + ], + [ + "3873d586c01f7b45" + ] + ] + }, + { + "id": "e6a9a4a3944c7b8e", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1320, + "y": 360, + "wires": [ + [] + ] + }, + { + "id": "8a3085aa19cd3c6d", + "type": "function", + "z": "1095d804ba7660cf", + "name": "extUpd", + "func": "msg.payload = \"extUpd\"\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 680, + "y": 180, + "wires": [ + [] + ] + }, + { + "id": "79787e0e3fb0e1f5", + "type": "inject", + "z": "1095d804ba7660cf", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 440, + "y": 340, + "wires": [ + [ + "8a3085aa19cd3c6d" + ] + ] + }, + { + "id": "3873d586c01f7b45", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1310, + "y": 420, + "wires": [ + [] + ] + }, + { + "id": "ba9a8d410af75a64", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "lightBrightness", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness_pct\":{{brightness}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1300, + "y": 240, + "wires": [ + [] + ] + }, + { + "id": "343b75acbe526882", + "type": "function", + "z": "1095d804ba7660cf", + "name": "calcMireds", + "func": "function scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nvar id = msg.payload\nvar attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n\nvar mireds = scale(msg.temperature, 0, 100, attr.min_mireds, attr.max_mireds)\n\nmsg.temperature = mireds\nreturn msg\n\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1290, + "y": 300, + "wires": [ + [ + "3348538675dd1031" + ] + ] + }, + { + "id": "3348538675dd1031", + "type": "api-call-service", + "z": "1095d804ba7660cf", + "name": "lightTemperature", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"color_temp\":{{temperature}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1470, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "760998e7025450dd", + "type": "debug", + "z": "1095d804ba7660cf", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 330, + "y": 220, + "wires": [] + }, + { + "id": "df42e19d07582858", + "type": "mqtt in", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "topic": "tele/tasmota_nspkueche/RESULT", + "qos": "2", + "datatype": "auto", + "broker": "aeedd16f1f009dd0", + "nl": false, + "rap": true, + "rh": 0, + "inputs": 0, + "x": 190, + "y": 80, + "wires": [ + [ + "a44b586b7fd6c26d" + ] + ] + }, + { + "id": "f1c977fd5eacc769", + "type": "debug", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 990, + "y": 80, + "wires": [] + }, + { + "id": "a44b586b7fd6c26d", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "check for CustomRecv", + "func": "if(msg.payload.startsWith('\\{\"CustomRecv\":')){\n obj = JSON.parse(msg.payload)\n msg.payload = obj.CustomRecv\n return msg;\n}", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 460, + "y": 80, + "wires": [ + [ + "f1c977fd5eacc769", + "86dcef64cf01cad1" + ] + ] + }, + { + "id": "86dcef64cf01cad1", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "pages", + "func": "var pages = flow.get(\"ns-config\")\n\nfunction genEntitiesPage(pageNum){\n var out_msgs = [ {payload:\"pageType,cardEntities\"}, { payload: \"entityUpdHeading,\"+pages[pageNum].heading } ]\n\n pages[pageNum].items.forEach(function (id, i) {\n \n var type = \"delete\"\n var iconId = 0\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n \n switch (id.substring(0,id.indexOf('.'))) {\n case \"cover\":\n type = \"shutter\"\n iconId = 0\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type})\n break\n case \"light\":\n type = \"light\"\n iconId = 1\n var optVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n optVal = \"1\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"sensor\":\n type = \"text\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.device_class\") == \"temperature\"){\n iconId = 2\n }\n var optVal = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") + \" \" + global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.unit_of_measurement\")\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"button\":\n type = \"button\"\n iconId = 3\n var optVal = \"PRESS\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"delete\":\n type = \"delete\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",0,dc,\"+type})\n break\n default:\n break\n }\n\n })\n\n\n \n return out_msgs\n \n}\n\nfunction genThermoPage(pageNum){\n id = pages[pageNum].item\n var out_msgs = [ {payload:\"pageType,cardThermo\"} ]\n \n let heading = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n let currentTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.current_temperature\")*10\n let destTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.temperature\")*10\n let status = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.hvac_action\")\n let minTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.min_temp\")*10\n let maxTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.max_temp\")*10\n //let stepTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.target_temp_step\")*10\n let stepTemp = 0.5*10\n \n out_msgs.push({ payload: \"entityUpd,\"+heading+\",\"+currentTemp+\",\"+destTemp+\",\"+status+\",\"+minTemp+\",\"+maxTemp+\",\"+stepTemp })\n \n \n return out_msgs\n}\n\n\nfunction handleButtonEvent(pageNum, words){\n var out_msgs = [ ]\n pages[pageNum].items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(words[4]==name){\n if(words[6]==\"OnOff\"){\n var domain = \"switch\"\n if(id.startsWith(\"light\"))\n domain = \"light\"\n var action = \"turn_off\"\n if(words[7]==\"1\")\n action = \"turn_on\"\n out_msgs.push( {payload: id, action: action, domain: domain})\n }\n \n if(words[6]==\"up\")\n out_msgs.push( {payload: id, action: \"open_cover\", domain: \"cover\"})\n if(words[6]==\"stop\")\n out_msgs.push( {payload: id, action: \"stop_cover\", domain: \"cover\"})\n if(words[6]==\"down\")\n out_msgs.push( {payload: id, action: \"close_cover\", domain: \"cover\"})\n \n if(words[6]==\"brightnessSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightBrightness\", brightness: parseInt(words[7])})\n if(words[6]==\"colorTempSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightTemperature\", temperature: parseInt(words[7])})\n \n }\n }\n \n )\n return out_msgs\n}\n\nfunction searchIdInPages(friendlyName){\n let id_ret = \"\"\n // search entity in pages\n pages.forEach(page => {\n if(\"items\" in page){\n page.items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(name == friendlyName){\n id_ret = id\n }\n })\n }\n })\n return id_ret\n}\n\nfunction scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nfunction genDetailPage(type, friendlyName){\n var out_msgs = [ ]\n \n let id = searchIdInPages(friendlyName)\n if(type == \"popupLight\"){\n let switchVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n switchVal = \"1\"\n \n let attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n \n let brightness = Math.trunc(scale(attr.brightness, 0, 255, 0, 100))\n \n let colortemp = Math.trunc(scale(attr.color_temp, attr.min_mireds, attr.max_mireds, 0, 100))\n \n out_msgs.push({ payload: \"entityUpdateDetail,\"+switchVal+\",\"+brightness+\",\"+colortemp})\n }\n\n\n \n return out_msgs\n \n}\n\n\nwords = msg.payload.split(',')\nif(words[0]=='event'){\n var pageNum = parseInt(words[2])\n pageNum = (pageNum % pages.length)\n pageNum = Math.abs(pageNum)\n flow.set(\"ns-currentPage\", pageNum)\n \n if(words[1]=='pageOpen'){\n var retMsgs = []\n \n if(pages[pageNum].type == \"cardEntities\"){\n retMsgs = genEntitiesPage(pageNum)\n }else if(pages[pageNum].type == \"cardThermo\")\n {\n retMsgs = genThermoPage(pageNum)\n }\n \n return [retMsgs, null]\n }\n if(words[1]=='buttonPress'){\n return [null, handleButtonEvent(pageNum, words)]\n }\n if(words[1]=='pageOpenDetail'){\n return [genDetailPage(words[2], words[3]), null]\n }\n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 770, + "y": 120, + "wires": [ + [ + "f1c977fd5eacc769", + "1c40e3fbed77566a" + ], + [ + "bea462f25c2d6594", + "bb5a45a85294d141" + ] + ] + }, + { + "id": "23673f9ed21f9314", + "type": "server-state-changed", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityidfilter": "light.kueche_lights", + "entityidfiltertype": "exact", + "outputinitially": false, + "state_type": "str", + "haltifstate": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "outputs": 1, + "output_only_on_state_change": 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": 200, + "y": 300, + "wires": [ + [ + "056cb9e82f6134a5" + ] + ] + }, + { + "id": "bea462f25c2d6594", + "type": "debug", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 990, + "y": 200, + "wires": [] + }, + { + "id": "d89d65da2c861934", + "type": "api-call-service", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1210, + "y": 200, + "wires": [ + [] + ] + }, + { + "id": "bb5a45a85294d141", + "type": "switch", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "property": "domain", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "light", + "vt": "str" + }, + { + "t": "eq", + "v": "lightBrightness", + "vt": "str" + }, + { + "t": "eq", + "v": "lightTemperature", + "vt": "str" + }, + { + "t": "eq", + "v": "switch", + "vt": "str" + }, + { + "t": "eq", + "v": "cover", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 5, + "x": 990, + "y": 260, + "wires": [ + [ + "d89d65da2c861934" + ], + [ + "1ddde5e25ac783b8" + ], + [ + "1207b113e1e44be4" + ], + [ + "f494954196883dd7" + ], + [ + "0cea8c43c493c215" + ] + ] + }, + { + "id": "f494954196883dd7", + "type": "api-call-service", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1220, + "y": 360, + "wires": [ + [] + ] + }, + { + "id": "0cea8c43c493c215", + "type": "api-call-service", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1210, + "y": 420, + "wires": [ + [] + ] + }, + { + "id": "1ddde5e25ac783b8", + "type": "api-call-service", + "z": "ba6c8bb20b9aa4cc", + "name": "lightBrightness", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness_pct\":{{brightness}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1200, + "y": 240, + "wires": [ + [] + ] + }, + { + "id": "1207b113e1e44be4", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "calcMireds", + "func": "function scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nvar id = msg.payload\nvar attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n\nvar mireds = scale(msg.temperature, 0, 100, attr.min_mireds, attr.max_mireds)\n\nmsg.temperature = mireds\nreturn msg\n\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1190, + "y": 300, + "wires": [ + [ + "8f0f6a771251ef17" + ] + ] + }, + { + "id": "8f0f6a771251ef17", + "type": "api-call-service", + "z": "ba6c8bb20b9aa4cc", + "name": "lightTemperature", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"color_temp\":{{temperature}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1370, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "b968e02c88f3500d", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "pages", + "func": "msg.payload = global.get(\"homeassistant.homeAssistant.states['sensor.kleiderschrank1_si7021_temperature']\")\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 790, + "y": 580, + "wires": [ + [ + "b51a0f5849d2a1a0" + ] + ] + }, + { + "id": "1f1d39ecab559597", + "type": "inject", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 640, + "y": 580, + "wires": [ + [ + "b968e02c88f3500d" + ] + ] + }, + { + "id": "b51a0f5849d2a1a0", + "type": "debug", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 950, + "y": 580, + "wires": [] + }, + { + "id": "1c40e3fbed77566a", + "type": "mqtt out", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "topic": "cmnd/tasmota_nspkueche/Screen", + "qos": "", + "retain": "", + "respTopic": "", + "contentType": "", + "userProps": "", + "correl": "", + "expiry": "", + "broker": "aeedd16f1f009dd0", + "x": 1060, + "y": 120, + "wires": [] + }, + { + "id": "06345c11ce5d62fe", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "config", + "func": "//see start tab", + "outputs": 1, + "noerr": 0, + "initialize": "if (flow.get(\"ns-config\") === undefined) {\n \n var pages = \n [\n {\n type: \"cardEntities\",\n heading: \"TestPage\",\n items: [\"light.kueche_lights\", \"sensor.nsp_kueche_analog_temperature1\", \"delete\", \"delete\"] \n },\n {\n type: \"cardThermo\",\n item: \"climate.kuche_boden\"\n }\n ]\n\n\n flow.set(\"ns-config\", pages)\n}", + "finalize": "", + "libs": [], + "x": 1390, + "y": 60, + "wires": [ + [] + ] + }, + { + "id": "cac2f4129b2e5a4f", + "type": "inject", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "event,pageOpen,0", + "payloadType": "str", + "x": 430, + "y": 360, + "wires": [ + [ + "86dcef64cf01cad1" + ] + ] + }, + { + "id": "056cb9e82f6134a5", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "externalUpdates", + "func": "let currentPageNr = flow.get(\"ns-currentPage\")\n\nlet currentPageConfig = flow.get(\"ns-config\")[currentPageNr]\n\nif(\"items\" in currentPageConfig){\n if(msg.topic in currentPageConfig.items){\n \n }\n}\n\n", + "outputs": 1, + "noerr": 0, + "initialize": "if (flow.get(\"ns-currentPage\") === undefined) {\n flow.set(\"ns-currentPage\", 0)\n}", + "finalize": "", + "libs": [], + "x": 460, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "946aaade2d1f150a", + "type": "server-state-changed", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityidfilter": "light.kueche_lights", + "entityidfiltertype": "exact", + "outputinitially": false, + "state_type": "str", + "haltifstate": "on", + "halt_if_type": "str", + "halt_if_compare": "is", + "outputs": 2, + "output_only_on_state_change": 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": 760, + "y": 440, + "wires": [ + [ + "962b6a55abf0113e" + ], + [] + ] + }, + { + "id": "962b6a55abf0113e", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "wake&display", + "func": "var out_msgs = \n[ {payload:\"wake\"}, \n {payload: \"pageType,popupLight,Kueche\"} \n]\n\n\n\nreturn [out_msgs]", + "outputs": 1, + "noerr": 0, + "initialize": "if (flow.get(\"ns-currentPage\") === undefined) {\n flow.set(\"ns-currentPage\", 0)\n}", + "finalize": "", + "libs": [], + "x": 800, + "y": 380, + "wires": [ + [ + "1c40e3fbed77566a", + "f1c977fd5eacc769" + ] + ] + }, + { + "id": "f3a47d87b237c392", + "type": "inject", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "pageType,popupLight,Kueche", + "payloadType": "str", + "x": 730, + "y": 340, + "wires": [ + [ + "1c40e3fbed77566a" + ] + ] + }, + { + "id": "fc261f2d1db2acab", + "type": "mqtt out", + "z": "1b16bf0e99b71548", + "name": "", + "topic": "cmnd/tasmota_nspdebugtest/Screen", + "qos": "", + "retain": "", + "respTopic": "", + "contentType": "", + "userProps": "", + "correl": "", + "expiry": "", + "broker": "aeedd16f1f009dd0", + "x": 1190, + "y": 140, + "wires": [] + }, + { + "id": "3adbb7a87040adcb", + "type": "debug", + "z": "1b16bf0e99b71548", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1070, + "y": 80, + "wires": [] + }, + { + "id": "3f8b47affabd553d", + "type": "mqtt in", + "z": "1b16bf0e99b71548", + "name": "", + "topic": "tele/tasmota_nspdebugtest/RESULT", + "qos": "2", + "datatype": "auto", + "broker": "aeedd16f1f009dd0", + "nl": false, + "rap": true, + "rh": 0, + "inputs": 0, + "x": 260, + "y": 80, + "wires": [ + [ + "799924b71e358164" + ] + ] + }, + { + "id": "799924b71e358164", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "check for '\"{\"csv\":'", + "func": "if(msg.payload.startsWith('\\{\"csv\":')){\n obj = JSON.parse(msg.payload)\n msg.payload = obj.csv\n return msg;\n}", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 530, + "y": 80, + "wires": [ + [ + "3adbb7a87040adcb", + "85003e2af29ab409" + ] + ] + }, + { + "id": "85003e2af29ab409", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "pages", + "func": "var pages = \n[\n { \n type: \"cardEntities\",\n heading: \"Rolladen\",\n items: [\"cover.rolladenfenster_cover_1\", \"cover.nspterrasse_cover_1\", \"cover.rolladenterasse_cover_1\", \"delete\"] \n },\n {\n type: \"cardEntities\",\n heading: \"TestPage\",\n items: [\"button.beamer_key_left\", \"cover.rolladenterasse_cover_1\", \"light.schreibtischlampe\", \"sensor.kleiderschrank1_si7021_temperature\"] \n },\n {\n type: \"cardThermo\",\n item: \"climate.kuche_boden\"\n }\n]\n\nfunction genEntitiesPage(pageNum){\n var out_msgs = [ {payload:\"pageType,cardEntities\"}, { payload: \"entityUpdHeading,\"+pages[pageNum].heading } ]\n\n pages[pageNum].items.forEach(function (id, i) {\n \n var type = \"delete\"\n var iconId = 0\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n \n switch (id.substring(0,id.indexOf('.'))) {\n case \"cover\":\n type = \"shutter\"\n iconId = 0\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type})\n break\n case \"light\":\n type = \"light\"\n iconId = 1\n var optVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n optVal = \"1\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"sensor\":\n type = \"text\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.device_class\") == \"temperature\"){\n iconId = 2\n }\n var optVal = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") + \" \" + global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.unit_of_measurement\")\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"button\":\n type = \"button\"\n iconId = 3\n var optVal = \"PRESS\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n break\n case \"delete\":\n type = \"delete\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",0,dc,\"+type})\n break\n default:\n break\n }\n\n })\n\n\n \n return out_msgs\n \n}\n\nfunction genThermoPage(pageNum){\n id = pages[pageNum].item\n var out_msgs = [ {payload:\"pageType,cardThermo\"} ]\n \n let heading = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n let currentTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.current_temperature\")*10\n let destTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.temperature\")*10\n let status = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.hvac_action\")\n let minTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.min_temp\")*10\n let maxTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.max_temp\")*10\n //let stepTemp = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.target_temp_step\")*10\n let stepTemp = 0.5*10\n \n out_msgs.push({ payload: \"entityUpd,\"+heading+\",\"+currentTemp+\",\"+destTemp+\",\"+status+\",\"+minTemp+\",\"+maxTemp+\",\"+stepTemp })\n \n \n return out_msgs\n}\n\n\nfunction handleButtonEvent(pageNum, words){\n var out_msgs = [ ]\n pages[pageNum].items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(words[4]==name){\n if(words[6]==\"OnOff\"){\n var domain = \"switch\"\n if(id.startsWith(\"light\"))\n domain = \"light\"\n var action = \"turn_off\"\n if(words[7]==\"1\")\n action = \"turn_on\"\n out_msgs.push( {payload: id, action: action, domain: domain})\n }\n \n if(words[6]==\"up\")\n out_msgs.push( {payload: id, action: \"open_cover\", domain: \"cover\"})\n if(words[6]==\"stop\")\n out_msgs.push( {payload: id, action: \"stop_cover\", domain: \"cover\"})\n if(words[6]==\"down\")\n out_msgs.push( {payload: id, action: \"close_cover\", domain: \"cover\"})\n \n if(words[6]==\"brightnessSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightBrightness\", brightness: parseInt(words[7])})\n if(words[6]==\"colorTempSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightTemperature\", temperature: parseInt(words[7])})\n \n }\n }\n \n )\n return out_msgs\n}\n\nfunction searchIdInPages(friendlyName){\n let id_ret = \"\"\n // search entity in pages\n pages.forEach(page => {\n if(\"items\" in page){\n page.items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(name == friendlyName){\n id_ret = id\n }\n })\n }\n })\n return id_ret\n}\n\nfunction scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nfunction genDetailPage(type, friendlyName){\n var out_msgs = [ ]\n \n let id = searchIdInPages(friendlyName)\n if(type == \"popupLight\"){\n let switchVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n switchVal = \"1\"\n \n let attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n \n let brightness = Math.trunc(scale(attr.brightness, 0, 255, 0, 100))\n \n let colortemp = Math.trunc(scale(attr.color_temp, attr.min_mireds, attr.max_mireds, 0, 100))\n \n out_msgs.push({ payload: \"entityUpdateDetail,\"+switchVal+\",\"+brightness+\",\"+colortemp})\n }\n\n //pages[1].items.forEach(function (id, i) {\n // \n // var type = \"delete\"\n // var iconId = 0\n // var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n // \n // switch (id.substring(0,id.indexOf('.'))) {\n // case \"light\":\n // type = \"light\"\n // iconId = 1\n // var optVal = \"0\"\n // if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n // optVal = \"1\"\n // out_msgs.push({ payload: \"entityUpdateDetail,\"++\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n // break\n // default:\n // break\n // }\n//\n //})\n\n\n \n return out_msgs\n \n}\n\n\nwords = msg.payload.split(',')\nif(words[0]=='event'){\n var pageNum = parseInt(words[2])\n pageNum = (pageNum % pages.length)\n pageNum = Math.abs(pageNum)\n context.set(\"currentPage\", pageNum)\n \n if(words[1]=='pageOpen'){\n var retMsgs = []\n \n if(pages[pageNum].type == \"cardEntities\"){\n retMsgs = genEntitiesPage(pageNum)\n }else if(pages[pageNum].type == \"cardThermo\")\n {\n retMsgs = genThermoPage(pageNum)\n }\n \n return [retMsgs, null]\n }\n if(words[1]=='buttonPress'){\n return [null, handleButtonEvent(pageNum, words)]\n }\n if(words[1]=='pageOpenDetail'){\n return [genDetailPage(words[2], words[3]), null]\n }\n \n}\nif(words[0]=='extUpd'){\n if (context.get(\"currentPage\") === undefined) {\n context.set(\"currentPage\", 0)\n }\n \n return [genPage(context.get(\"currentPage\")), null]\n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 850, + "y": 120, + "wires": [ + [ + "fc261f2d1db2acab", + "3adbb7a87040adcb" + ], + [ + "9e65c8b0a6164b41", + "c2ce60ae97237e54" + ] + ] + }, + { + "id": "ad12712f4d203754", + "type": "server-state-changed", + "z": "1b16bf0e99b71548", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityidfilter": "light.schreibtischlampe", + "entityidfiltertype": "exact", + "outputinitially": false, + "state_type": "str", + "haltifstate": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "outputs": 1, + "output_only_on_state_change": 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": 330, + "y": 300, + "wires": [ + [ + "cd7f5a96eb38397f" + ] + ] + }, + { + "id": "9e65c8b0a6164b41", + "type": "debug", + "z": "1b16bf0e99b71548", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1070, + "y": 200, + "wires": [] + }, + { + "id": "05197826ebe7c1af", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1290, + "y": 200, + "wires": [ + [] + ] + }, + { + "id": "c2ce60ae97237e54", + "type": "switch", + "z": "1b16bf0e99b71548", + "name": "", + "property": "domain", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "light", + "vt": "str" + }, + { + "t": "eq", + "v": "lightBrightness", + "vt": "str" + }, + { + "t": "eq", + "v": "lightTemperature", + "vt": "str" + }, + { + "t": "eq", + "v": "switch", + "vt": "str" + }, + { + "t": "eq", + "v": "cover", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 5, + "x": 1070, + "y": 260, + "wires": [ + [ + "05197826ebe7c1af" + ], + [ + "20f5ee9a5622c10c" + ], + [ + "967e2ba5ebf31f47" + ], + [ + "e51c68a584fd494f" + ], + [ + "b64afa1882d55eaf" + ] + ] + }, + { + "id": "e51c68a584fd494f", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "switch", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1300, + "y": 360, + "wires": [ + [] + ] + }, + { + "id": "cd7f5a96eb38397f", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "extUpd", + "func": "msg.payload = \"extUpd\"\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 660, + "y": 180, + "wires": [ + [] + ] + }, + { + "id": "06ee793a02d15ff6", + "type": "inject", + "z": "1b16bf0e99b71548", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 420, + "y": 340, + "wires": [ + [ + "cd7f5a96eb38397f" + ] + ] + }, + { + "id": "b64afa1882d55eaf", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "cover", + "service": "{{action}}", + "entityId": "{{payload}}", + "data": "", + "dataType": "jsonata", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1290, + "y": 420, + "wires": [ + [] + ] + }, + { + "id": "20f5ee9a5622c10c", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "lightBrightness", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness_pct\":{{brightness}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1280, + "y": 240, + "wires": [ + [] + ] + }, + { + "id": "967e2ba5ebf31f47", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "calcMireds", + "func": "function scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nvar id = msg.payload\nvar attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n\nvar mireds = scale(msg.temperature, 0, 100, attr.min_mireds, attr.max_mireds)\n\nmsg.temperature = mireds\nreturn msg\n\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1270, + "y": 300, + "wires": [ + [ + "41eac1fcf4784c53" + ] + ] + }, + { + "id": "41eac1fcf4784c53", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "lightTemperature", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"color_temp\":{{temperature}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1450, + "y": 300, + "wires": [ + [] + ] + }, + { + "id": "b4ee2c699f24babb", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "test", + "func": "msg.payload = global.get(\"homeassistant.homeAssistant.states['light.schreibtischlampe']\")\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1450, + "y": 780, + "wires": [ + [ + "1f8f8e6dda770b85" + ] + ] + }, + { + "id": "48655032e4a2ded6", + "type": "inject", + "z": "1b16bf0e99b71548", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 1260, + "y": 800, + "wires": [ + [ + "b4ee2c699f24babb" + ] + ] + }, + { + "id": "1f8f8e6dda770b85", + "type": "debug", + "z": "1b16bf0e99b71548", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1570, + "y": 800, + "wires": [] + }, + { + "id": "4b7c3b76828028e4", + "type": "inject", + "z": "6c95d9f2c2806a4c", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "v": "", + "vt": "num" + } + ], + "repeat": "", + "crontab": "00 19 * * *", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "15", + "payloadType": "num", + "x": 210, + "y": 240, + "wires": [ + [ + "8bd149c892e229db" + ] + ] + }, + { + "id": "8bd149c892e229db", + "type": "api-call-service", + "z": "6c95d9f2c2806a4c", + "name": "set temp", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "climate", + "service": "set_temperature", + "entityId": "climate.bad_boden, climate.wohnzimmer_boden, climate.kuche_boden", + "data": "{\"temperature\":\"{{payload}}\"}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 460, + "y": 240, + "wires": [ + [] + ] + }, + { + "id": "d7ecaaac3c22fb89", + "type": "inject", + "z": "6c95d9f2c2806a4c", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "v": "", + "vt": "num" + } + ], + "repeat": "", + "crontab": "00 04 * * *", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "21.5", + "payloadType": "num", + "x": 210, + "y": 280, + "wires": [ + [ + "8bd149c892e229db" + ] + ] + } +] \ No newline at end of file