From 23d0514339985465d9fd4bd38d686a07055488ff Mon Sep 17 00:00:00 2001 From: Johannes Date: Sun, 20 Mar 2022 22:42:01 +0100 Subject: [PATCH] added advanced examples nodered --- doc-pics/nodered-remote-control.png | Bin 0 -> 17719 bytes nodered/README.md | 9 +- nodered/node-red-example-flow.json | 736 ++++------------------------ 3 files changed, 84 insertions(+), 661 deletions(-) create mode 100644 doc-pics/nodered-remote-control.png diff --git a/doc-pics/nodered-remote-control.png b/doc-pics/nodered-remote-control.png new file mode 100644 index 0000000000000000000000000000000000000000..63a0ccbd6d5117144635757b6cef4e1057edbdc9 GIT binary patch literal 17719 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 As{jB1 literal 0 HcmV?d00001 diff --git a/nodered/README.md b/nodered/README.md index 0b5a1d14..6f0992f9 100644 --- a/nodered/README.md +++ b/nodered/README.md @@ -1,11 +1,6 @@ # Node-Red Flow -## Note: -**This flow has been deprecated in favour of the AppDaemon Backend.** -**It's still functioning with a limited feature set.** +There is no node-red backend, but for some advanced scenarios nodered can become handy, like remote controlling your nspanel. +![nodered-remote-control](../doc-pics/nodered-remote-control.png) - -This is the exmaple node red flow which an be used to control the screen over MQTT. - -Import the example node-red flow from "node-red-example-flow.json" file and adjust to your needs. \ No newline at end of file diff --git a/nodered/node-red-example-flow.json b/nodered/node-red-example-flow.json index 91c7ae52..c0b1f56e 100644 --- a/nodered/node-red-example-flow.json +++ b/nodered/node-red-example-flow.json @@ -1,98 +1,16 @@ [ { - "id": "1095d804ba7660cf", + "id": "ba6c8bb20b9aa4cc", "type": "tab", - "label": "nspanel", + "label": "NSP_Kueche", "disabled": false, "info": "", "env": [] }, { - "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": 190, - "y": 120, - "wires": [ - [ - "e91144d67ea326b2" - ] - ] - }, - { - "id": "90dd992b9c45dace", - "type": "debug", - "z": "1095d804ba7660cf", - "name": "", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 990, - "y": 120, - "wires": [] - }, - { - "id": "e91144d67ea326b2", - "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": 460, - "y": 120, - "wires": [ - [ - "90dd992b9c45dace", - "e0a3b3c8887ff55f" - ] - ] - }, - { - "id": "e0a3b3c8887ff55f", - "type": "function", - "z": "1095d804ba7660cf", - "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)+\",\"+type+\",\"+id+\",\"+iconId+\",\"+name})\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)+\",\"+type+\",\"+id+\",\"+iconId+\",\"+name+\",\"+optVal})\n break\n case \"switch\":\n type = \"switch\"\n iconId = 4\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)+\",\"+type+\",\"+id+\",\"+iconId+\",\"+name+\",\"+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)+\",\"+type+\",\"+id+\",\"+iconId+\",\"+name+\",\"+optVal})\n break\n case \"button\":\n type = \"button\"\n iconId = 3\n var optVal = \"PRESS\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+type+\",\"+id+\",\"+iconId+\",\"+name+\",\"+optVal})\n break\n case \"delete\":\n type = \"delete\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+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,\"+id+\",\"+heading+\",\"+currentTemp+\",\"+destTemp+\",\"+status+\",\"+minTemp+\",\"+maxTemp+\",\"+stepTemp })\n \n \n return out_msgs\n}\n\n\nfunction handleButtonEvent(words){\n var out_msgs = [ ]\n let id = words[4]\n\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 return out_msgs\n}\n\nfunction scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nfunction genDetailPage(type, entityId){\n var out_msgs = [ ]\n \n let id = entityId\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 = \"disable\"\n let attr_support_color = attr.supported_color_modes\n if (attr_support_color.includes(\"color_temp\"))\n 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 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 \n if(words[1]=='pageOpen' || words[1]=='startup' ){\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(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": 160, - "wires": [ - [ - "90dd992b9c45dace", - "a9571b3ad08027d6" - ], - [ - "d365471c93b90620", - "3bc7b6a09e86cf1f" - ] - ] - }, - { - "id": "cb442d0ff23ccd50", + "id": "6873c08312276c95", "type": "server-state-changed", - "z": "1095d804ba7660cf", + "z": "ba6c8bb20b9aa4cc", "name": "", "server": "7b975ed1.2c58d", "version": 4, @@ -111,10 +29,10 @@ "entityidfiltertype": "exact", "outputinitially": false, "state_type": "str", - "haltifstate": "", + "haltifstate": "on", "halt_if_type": "str", "halt_if_compare": "is", - "outputs": 1, + "outputs": 2, "output_only_on_state_change": true, "for": 0, "forType": "num", @@ -144,319 +62,75 @@ "valueType": "triggerId" } ], - "x": 200, - "y": 340, + "x": 220, + "y": 140, "wires": [ [ - "a267036facc87a9c" - ] - ] - }, - { - "id": "d365471c93b90620", - "type": "debug", - "z": "1095d804ba7660cf", - "name": "", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "true", - "targetType": "full", - "statusVal": "", - "statusType": "auto", - "x": 990, - "y": 240, - "wires": [] - }, - { - "id": "76f2b49f12c59fd2", - "type": "api-call-service", - "z": "1095d804ba7660cf", - "name": "", - "server": "7b975ed1.2c58d", - "version": 4, - "debugenabled": false, - "domain": "light", - "service": "{{action}}", - "target": { - "entityId": [ - "{{payload}}" + "bfd318a07b2568f7" ], - "areaId": [], - "deviceId": [] - }, - "data": "", - "dataType": "jsonata", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "x": 1210, - "y": 240, - "wires": [ [] ] }, { - "id": "3bc7b6a09e86cf1f", - "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": 990, - "y": 300, - "wires": [ - [ - "76f2b49f12c59fd2" - ], - [ - "439c4edaa91cfd46" - ], - [ - "8b9fd15277f38896" - ], - [ - "d67a45b07be3f0e2" - ], - [ - "948f928f2606a5c7" - ] - ] - }, - { - "id": "d67a45b07be3f0e2", - "type": "api-call-service", - "z": "1095d804ba7660cf", - "name": "", - "server": "7b975ed1.2c58d", - "version": 4, - "debugenabled": false, - "domain": "switch", - "service": "{{action}}", - "target": { - "entityId": [ - "{{payload}}" - ], - "areaId": [], - "deviceId": [] - }, - "data": "", - "dataType": "jsonata", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "x": 1220, - "y": 400, - "wires": [ - [] - ] - }, - { - "id": "948f928f2606a5c7", - "type": "api-call-service", - "z": "1095d804ba7660cf", - "name": "", - "server": "7b975ed1.2c58d", - "version": 4, - "debugenabled": false, - "domain": "cover", - "service": "{{action}}", - "target": { - "entityId": [ - "{{payload}}" - ], - "areaId": [], - "deviceId": [] - }, - "data": "", - "dataType": "jsonata", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "x": 1210, - "y": 460, - "wires": [ - [] - ] - }, - { - "id": "439c4edaa91cfd46", - "type": "api-call-service", - "z": "1095d804ba7660cf", - "name": "lightBrightness", - "server": "7b975ed1.2c58d", - "version": 4, - "debugenabled": false, - "domain": "light", - "service": "turn_on", - "target": { - "entityId": [ - "{{payload}}" - ], - "areaId": [], - "deviceId": [] - }, - "data": "{\"brightness_pct\":{{brightness}}}", - "dataType": "json", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "x": 1200, - "y": 280, - "wires": [ - [] - ] - }, - { - "id": "8b9fd15277f38896", + "id": "bfd318a07b2568f7", "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": 1190, - "y": 340, - "wires": [ - [ - "c45664b5317f7a0f" - ] - ] - }, - { - "id": "c45664b5317f7a0f", - "type": "api-call-service", - "z": "1095d804ba7660cf", - "name": "lightTemperature", - "server": "7b975ed1.2c58d", - "version": 4, - "debugenabled": false, - "domain": "light", - "service": "turn_on", - "target": { - "entityId": [ - "{{payload}}" - ], - "areaId": [], - "deviceId": [] - }, - "data": "{\"color_temp\":{{temperature}}}", - "dataType": "json", - "mergeContext": "", - "mustacheAltTags": false, - "outputProperties": [], - "queue": "none", - "x": 1370, - "y": 340, - "wires": [ - [] - ] - }, - { - "id": "275db83c5edd2c9b", - "type": "function", - "z": "1095d804ba7660cf", - "name": "config", - "func": "//see start tab", - "outputs": 1, - "noerr": 0, - "initialize": "//if (flow.get(\"ns-config\") === undefined) {\n \nvar 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\n\n flow.set(\"ns-config\", pages)\n//}", - "finalize": "", - "libs": [], - "x": 1390, - "y": 100, - "wires": [ - [] - ] - }, - { - "id": "ab0817adc78e3c5b", - "type": "inject", - "z": "1095d804ba7660cf", - "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": 400, - "wires": [ - [ - "e0a3b3c8887ff55f" - ] - ] - }, - { - "id": "a267036facc87a9c", - "type": "function", - "z": "1095d804ba7660cf", - "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", + "z": "ba6c8bb20b9aa4cc", + "name": "wake&display", + "func": "var out_msgs = \n[ {payload:\"wake\"}, \n {payload: \"pageType,popupLight,Kueche,light.kueche_lights\"} \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": 460, - "y": 340, + "x": 580, + "y": 140, "wires": [ - [] + [ + "4d9bb7275b2766b4" + ] ] }, { - "id": "a9571b3ad08027d6", + "id": "4d9bb7275b2766b4", "type": "mqtt out", - "z": "1095d804ba7660cf", + "z": "ba6c8bb20b9aa4cc", + "name": "", + "topic": "cmnd/tasmota_nspkueche/CustomSend", + "qos": "", + "retain": "", + "respTopic": "", + "contentType": "", + "userProps": "", + "correl": "", + "expiry": "", + "broker": "aeedd16f1f009dd0", + "x": 880, + "y": 140, + "wires": [] + }, + { + "id": "82f69bb2a315cff9", + "type": "function", + "z": "ba6c8bb20b9aa4cc", + "name": "send notification", + "func": "var out_msgs = \n[ {payload:\"pageType,popupNotify\"}, \n {payload: \"entityUpdateDetail,|updateBerryNoYes|Notification|65535|No|65535|Yes|65535|\"+msg.payload+\"|65535|4\"} \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": 580, + "y": 200, + "wires": [ + [ + "d10a4ffac527a5d1" + ] + ] + }, + { + "id": "d10a4ffac527a5d1", + "type": "mqtt out", + "z": "ba6c8bb20b9aa4cc", "name": "", "topic": "cmnd/tasmota_NsPanelTerrasse/CustomSend", "qos": "", @@ -467,260 +141,14 @@ "correl": "", "expiry": "", "broker": "aeedd16f1f009dd0", - "x": 1100, - "y": 160, + "x": 900, + "y": 200, "wires": [] }, { - "id": "8638719b967711fa", + "id": "74da15741b812983", "type": "inject", - "z": "1095d804ba7660cf", - "name": "", - "props": [ - { - "p": "payload" - }, - { - "p": "topic", - "vt": "str" - } - ], - "repeat": "60", - "crontab": "", - "once": false, - "onceDelay": 0.1, - "topic": "", - "payload": "", - "payloadType": "date", - "x": 310, - "y": 600, - "wires": [ - [ - "d56371833aa274cc" - ] - ] - }, - { - "id": "7288ca775329100e", - "type": "debug", - "z": "1095d804ba7660cf", - "name": "", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "false", - "statusVal": "", - "statusType": "auto", - "x": 670, - "y": 600, - "wires": [] - }, - { - "id": "d56371833aa274cc", - "type": "function", - "z": "1095d804ba7660cf", - "name": "time string", - "func": "var today = new Date();\n\nlet hours = today.getHours()\nlet mins = today.getMinutes()\n\nif (hours < 10) {\n hours = \"0\" + hours;\n}\nif (mins < 10) {\n mins = \"0\" + mins;\n}\n\n\nvar time = hours + \" : \" + mins;\nmsg.payload = \"time,\"+time;\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 510, - "y": 600, - "wires": [ - [ - "7288ca775329100e", - "a9571b3ad08027d6" - ] - ] - }, - { - "id": "bfd12f4e368fe345", - "type": "inject", - "z": "1095d804ba7660cf", - "name": "", - "props": [ - { - "p": "payload" - }, - { - "p": "topic", - "vt": "str" - } - ], - "repeat": "", - "crontab": "00 23 * * *", - "once": false, - "onceDelay": 0.1, - "topic": "", - "payload": "dimmode,0", - "payloadType": "str", - "x": 750, - "y": 540, - "wires": [ - [ - "a9571b3ad08027d6" - ] - ] - }, - { - "id": "07fd340861321ee3", - "type": "inject", - "z": "1095d804ba7660cf", - "name": "", - "props": [ - { - "p": "payload" - }, - { - "p": "topic", - "vt": "str" - } - ], - "repeat": "", - "crontab": "00 07 * * *", - "once": false, - "onceDelay": 0.1, - "topic": "", - "payload": "dimmode,1", - "payloadType": "str", - "x": 750, - "y": 420, - "wires": [ - [ - "a9571b3ad08027d6" - ] - ] - }, - { - "id": "9b76fcd1a10e74b1", - "type": "inject", - "z": "1095d804ba7660cf", - "name": "", - "props": [ - { - "p": "payload" - }, - { - "p": "topic", - "vt": "str" - } - ], - "repeat": "", - "crontab": "00 09 * * *", - "once": false, - "onceDelay": 0.1, - "topic": "", - "payload": "dimmode,10", - "payloadType": "str", - "x": 760, - "y": 460, - "wires": [ - [ - "a9571b3ad08027d6" - ] - ] - }, - { - "id": "4f31d122bf51281e", - "type": "inject", - "z": "1095d804ba7660cf", - "name": "", - "props": [ - { - "p": "payload" - }, - { - "p": "topic", - "vt": "str" - } - ], - "repeat": "", - "crontab": "00 19 * * *", - "once": false, - "onceDelay": 0.1, - "topic": "", - "payload": "dimmode,1", - "payloadType": "str", - "x": 750, - "y": 500, - "wires": [ - [ - "a9571b3ad08027d6" - ] - ] - }, - { - "id": "243b5fd457f41904", - "type": "inject", - "z": "1095d804ba7660cf", - "name": "", - "props": [ - { - "p": "payload" - }, - { - "p": "topic", - "vt": "str" - } - ], - "repeat": "", - "crontab": "00 00 * * *", - "once": false, - "onceDelay": "5", - "topic": "", - "payload": "", - "payloadType": "date", - "x": 310, - "y": 640, - "wires": [ - [ - "e0eb13c55bb592c9" - ] - ] - }, - { - "id": "e038718f48e4b5b4", - "type": "debug", - "z": "1095d804ba7660cf", - "name": "", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "false", - "statusVal": "", - "statusType": "auto", - "x": 670, - "y": 640, - "wires": [] - }, - { - "id": "e0eb13c55bb592c9", - "type": "function", - "z": "1095d804ba7660cf", - "name": "date string", - "func": "var today = new Date();\n\nlet day = today.getDay()\nlet month = today.getMonth()\n\nconst options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n\nvar date = today.toLocaleDateString('de-DE', options);\n\nmsg.payload = \"date,?\"+date;\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 510, - "y": 640, - "wires": [ - [ - "e038718f48e4b5b4", - "a9571b3ad08027d6" - ] - ] - }, - { - "id": "a3a9cf753a414c52", - "type": "inject", - "z": "1095d804ba7660cf", + "z": "ba6c8bb20b9aa4cc", "name": "", "props": [ { @@ -733,19 +161,32 @@ ], "repeat": "", "crontab": "", - "once": true, - "onceDelay": "5", + "once": false, + "onceDelay": 0.1, "topic": "", - "payload": "", - "payloadType": "date", - "x": 310, - "y": 680, + "payload": "some text", + "payloadType": "str", + "x": 300, + "y": 200, "wires": [ [ - "e0eb13c55bb592c9" + "82f69bb2a315cff9" ] ] }, + { + "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", @@ -771,18 +212,5 @@ "willPayload": "", "willMsg": {}, "sessionExpiry": "" - }, - { - "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" } -] +] \ No newline at end of file