Home Assistant MQTT Auto Discovery Examples

Flow that uses the Home Assistant Examples for MQTT Auto Discovery. Includes example to take existing device to MQTT to use in Home Assistant

[{"id":"3b46df2689956c32","type":"tab","label":"HA MQTT","disabled":true,"info":"","env":[]},{"id":"39b2a555e7bd525e","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["a57a21dbecd3fc9f","c2e1d6c2491ba00a","316a5b249b075bc5","676d0ef759d5fabb","978db48c8dd7869d","80e6e56d16a70ae9"],"x":334,"y":99,"w":472,"h":262},{"id":"e34e4b1481dd2a92","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["2cd4efce3e8c5017","4c77bb5b85aa3a1f","bf71968ee4d53981","d335b2a3ff73639d","c98346166eaa16ce","47b08e0a2f0090d9"],"x":1424,"y":79,"w":542,"h":262},{"id":"8bbeadc7efa303f2","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["33cbff035fcc4a6f","4dabc427568888f7","e147148f569b09fb","cb52583c4d13b9bd","8658422c25e777fd","47e1b98252a649ef","16a2131a6c4749dd","b320af286d92f7f2","90be51b67d985c32"],"x":294,"y":399,"w":732,"h":362},{"id":"9cdef6765d191f3f","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["4b6a10a18f0b51da","f5ad476248110c9b","c9d33dbe82b7f7e0","67dc9db9faf0ade9","731c4cebcc52414b","c391a055f3b13927","087ade63a927cac1"],"x":254,"y":1319,"w":772,"h":262},{"id":"654d0ada0efecab6","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["49fdd44b40d2a4bc","4acb5a6ae01394b9","a836f18101f82f82","d97437e4f77c3a55"],"x":1534,"y":439,"w":372,"h":269.5},{"id":"c3dcdc6afc0ff1b3","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["0bd3fca404bf0a91","bfef62e845f109b7","b3e1d48c1bfeede9","866d6988469ee3ea","a77c7d012cab3949","0cb37a881935c142","498ebda8ea7505f4","becc33053b21b143","00e7b1480a574010","88a4a7ede518b550","1052150828db960b","eb5ff99ac11e28da","2c94c30ba6bc0a4c","ec5b6421cc0ae707","f706328d977c3fe2","65aad510a69eee86","6885ea93df905fe4"],"x":1094,"y":1319,"w":912,"h":502},{"id":"84668abb4a16b0d4","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["a4906e80aee307e2","931753d67b5558b0","088654aa558c6c32","545fc97dbdece04c","d83f7c7190d41faf","b18740ce35b4b020","0f2a12f170e812e0","103143d2f87065aa","113808c7b1f339a6","0fb82d99829bb213","e08ae37d4a86f276","2af94ba200298d1c","53966eeb35636e6b","203d3509d705f248","20dc6c481e5e996a"],"x":2084,"y":1319,"w":952,"h":502},{"id":"17b8676969b8b6ec","type":"group","z":"3b46df2689956c32","style":{"stroke":"#2b2b2b","stroke-opacity":"1","fill":"#181818","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#cccccc"},"nodes":["05b6b8241008064c","1d6d1fdfd4fbd4bb","9c60ec95fc9e4b10","6e86eb8e04bf72fb","13276f53cab07633","1f5677cec70fb75c","2ff2de430c7cb484","b3ac8b9058506632"],"x":354,"y":839,"w":682,"h":362},{"id":"2cd4efce3e8c5017","type":"debug","z":"3b46df2689956c32","g":"e34e4b1481dd2a92","name":"MQTT Publish","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1620,"y":180,"wires":[]},{"id":"4c77bb5b85aa3a1f","type":"mqtt out","z":"3b46df2689956c32","g":"e34e4b1481dd2a92","name":"","topic":"","qos":"2","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"1e512596.02075a","x":1590,"y":220,"wires":[]},{"id":"a57a21dbecd3fc9f","type":"inject","z":"3b46df2689956c32","g":"39b2a555e7bd525e","name":"Garden Motion Config #1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/binary_sensor/garden/config","payload":"{     \"name\":null,     \"device_class\":\"motion\",     \"state_topic\":\"homeassistant/binary_sensor/garden/state\",     \"unique_id\":\"motion01ad\",  \"device\":{        \"identifiers\":[           \"01ad\"        ],        \"name\":\"Garden\"     }  }","payloadType":"json","x":490,"y":200,"wires":[["978db48c8dd7869d"]]},{"id":"33cbff035fcc4a6f","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Bedroom Config - Multi Sensor 2 config messages - 1 of 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroomT/config","payload":"{    \"device_class\":\"temperature\",    \"state_topic\":\"homeassistant/sensor/sensorBedroom/state\",    \"unit_of_measurement\":\"°C\",    \"value_template\":\"{{ value_json.temperature}}\",    \"unique_id\":\"temp01ae\",    \"device\":{       \"identifiers\":[           \"bedroom01ae\"       ],       \"name\":\"Bedroom\",       \"manufacturer\": \"Example sensors Ltd.\",       \"model\": \"Example Sensor\",       \"model_id\": \"K9\",       \"serial_number\": \"12AE3010545\",       \"hw_version\": \"1.01a\",       \"sw_version\": \"2024.1.0\",       \"configuration_url\": \"https://example.com/sensor_portal/config\"    } }","payloadType":"json","x":570,"y":480,"wires":[["90be51b67d985c32"]]},{"id":"4dabc427568888f7","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Bedroom Config #2 - Multi Sensor 2 config messages - 2 of 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroomH/config","payload":"{    \"device_class\":\"humidity\",    \"state_topic\":\"homeassistant/sensor/sensorBedroom/state\",    \"unit_of_measurement\":\"%\",    \"value_template\":\"{{ value_json.humidity}}\",    \"unique_id\":\"hum01ae\",    \"device\":{       \"identifiers\":[          \"bedroom01ae\"       ]    } }","payloadType":"json","x":560,"y":520,"wires":[["90be51b67d985c32"]]},{"id":"e147148f569b09fb","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Send Bedroom Combined Values","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroom/state","payload":"{    \"temperature\":23.20,    \"humidity\":43.70 }","payloadType":"json","x":650,"y":560,"wires":[["90be51b67d985c32"]]},{"id":"c2e1d6c2491ba00a","type":"inject","z":"3b46df2689956c32","g":"39b2a555e7bd525e","name":"Garden Motion Detected","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/binary_sensor/garden/state","payload":"ON","payloadType":"str","x":490,"y":280,"wires":[["978db48c8dd7869d"]]},{"id":"316a5b249b075bc5","type":"inject","z":"3b46df2689956c32","g":"39b2a555e7bd525e","name":"Garden No Motion","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/binary_sensor/garden/state","payload":"OFF","payloadType":"str","x":510,"y":240,"wires":[["978db48c8dd7869d"]]},{"id":"cb52583c4d13b9bd","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Delete Bedroom Humidity Config","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroomH/config","payload":"{ }","payloadType":"json","x":650,"y":720,"wires":[["90be51b67d985c32"]]},{"id":"676d0ef759d5fabb","type":"inject","z":"3b46df2689956c32","g":"39b2a555e7bd525e","name":"Delete Garden","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/binary_sensor/garden/config","payload":"{ }","payloadType":"json","x":520,"y":320,"wires":[["978db48c8dd7869d"]]},{"id":"8658422c25e777fd","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Delete Bedroom Temperature Config","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroomT/config","payload":"{ }","payloadType":"json","x":640,"y":680,"wires":[["90be51b67d985c32"]]},{"id":"86fe915c23f8e332","type":"comment","z":"3b46df2689956c32","name":"Warnings","info":"1. If you use a URL make sure it is valid.  Very annoying but your device won't work.\n2. Unfortunately device & unique ID can't start with a number","x":1120,"y":60,"wires":[]},{"id":"bf71968ee4d53981","type":"link in","z":"3b46df2689956c32","g":"e34e4b1481dd2a92","name":"mqtt pub","links":["978db48c8dd7869d","90be51b67d985c32","f5ad476248110c9b","6885ea93df905fe4","113808c7b1f339a6","3408f226b2d4d641","6e86eb8e04bf72fb"],"x":1465,"y":220,"wires":[["4c77bb5b85aa3a1f","2cd4efce3e8c5017"]]},{"id":"d335b2a3ff73639d","type":"mqtt in","z":"3b46df2689956c32","g":"e34e4b1481dd2a92","name":"","topic":"homeassistant/#","qos":"2","datatype":"auto-detect","broker":"1e512596.02075a","nl":false,"rap":true,"rh":0,"inputs":0,"x":1620,"y":300,"wires":[["c98346166eaa16ce"]]},{"id":"c98346166eaa16ce","type":"debug","z":"3b46df2689956c32","g":"e34e4b1481dd2a92","name":"MQTT Subscribe","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1830,"y":300,"wires":[]},{"id":"978db48c8dd7869d","type":"link out","z":"3b46df2689956c32","g":"39b2a555e7bd525e","name":"link out 1","mode":"link","links":["bf71968ee4d53981"],"x":765,"y":260,"wires":[]},{"id":"e36ec710892922db","type":"comment","z":"3b46df2689956c32","name":"HA MQTT Docmentation","info":"https://www.home-assistant.io/integrations/mqtt/","x":570,"y":60,"wires":[]},{"id":"80e6e56d16a70ae9","type":"comment","z":"3b46df2689956c32","g":"39b2a555e7bd525e","name":"Motion Detector Example","info":"","x":470,"y":140,"wires":[]},{"id":"47b08e0a2f0090d9","type":"comment","z":"3b46df2689956c32","g":"e34e4b1481dd2a92","name":"MQTT Pub/Sub","info":"https://github.com/eclipse-mosquitto/mosquitto","x":1640,"y":120,"wires":[]},{"id":"47e1b98252a649ef","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Send Bedroom Temperature","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroom/state","payload":"{\"temperature\":27.40}","payloadType":"json","x":660,"y":600,"wires":[["90be51b67d985c32"]]},{"id":"16a2131a6c4749dd","type":"inject","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Send Bedroom Humidity","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"homeassistant/sensor/sensorBedroom/state","payload":"{\"humidity\":49.20}","payloadType":"json","x":670,"y":640,"wires":[["90be51b67d985c32"]]},{"id":"b320af286d92f7f2","type":"comment","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"Bedroom Temperature & Humidity","info":"","x":540,"y":440,"wires":[]},{"id":"90be51b67d985c32","type":"link out","z":"3b46df2689956c32","g":"8bbeadc7efa303f2","name":"link out 2","mode":"link","links":["bf71968ee4d53981"],"x":985,"y":620,"wires":[]},{"id":"236d8a86115e3099","type":"comment","z":"3b46df2689956c32","name":"Link to JSON device creator","info":"https://github.com/rmv5004/Home-Assistant-MQTT-Device-Auto-Discovery","x":880,"y":60,"wires":[]},{"id":"4b6a10a18f0b51da","type":"comment","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"Exisiting Device to MQTT","info":"","x":530,"y":1360,"wires":[]},{"id":"f5ad476248110c9b","type":"link out","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"link out 3","mode":"link","links":["bf71968ee4d53981"],"x":985,"y":1520,"wires":[]},{"id":"c9d33dbe82b7f7e0","type":"inject","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":360,"y":1500,"wires":[["67dc9db9faf0ade9"]]},{"id":"67dc9db9faf0ade9","type":"function","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"Master Temperature Config","func":"msg.payload =\n{\n  \"dev_cla\": \"temperature\",\n  \"unit_of_meas\": \"°F\",\n  \"val_tpl\": \"{{ value_json.temperature }}\",\n  \"stat_t\": \"homeassistant/sensor/masterTemp5F9B/state\",\n  \"unique_id\": \"masterTemp5F9B\",\n  \"dev\": {\n    \"name\": \"masterTemp\",\n    \"ids\": [\n      \"masterTemp\"\n    ],\n    \"mf\": \"RVT\",\n    \"mdl\": \"RTD\"\n  }\n};\nmsg.topic = \"homeassistant/sensor/masterTemp5F9B/config\";\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":1500,"wires":[["f5ad476248110c9b"]]},{"id":"731c4cebcc52414b","type":"inject","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"Existing Device Payload","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"72","payloadType":"num","x":400,"y":1540,"wires":[["c391a055f3b13927"]]},{"id":"c391a055f3b13927","type":"function","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"Master Msg","func":"msg.payload = {\"temperature\":msg.payload};\nmsg.topic = \"homeassistant/sensor/masterTemp5F9B/state\";\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1540,"wires":[["f5ad476248110c9b"]]},{"id":"087ade63a927cac1","type":"comment","z":"3b46df2689956c32","g":"9cdef6765d191f3f","name":"Link to JSON device creator","info":"https://github.com/rmv5004/Home-Assistant-MQTT-Device-Auto-Discovery","x":820,"y":1360,"wires":[]},{"id":"49fdd44b40d2a4bc","type":"exec","z":"3b46df2689956c32","g":"654d0ada0efecab6","command":"sudo systemctl stop mosquitto","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"Stop Mosquitto Linux","x":1740,"y":540,"wires":[[],[],[]]},{"id":"4acb5a6ae01394b9","type":"exec","z":"3b46df2689956c32","g":"654d0ada0efecab6","command":"sudo rm /var/lib/mosquitto/mosquitto.db","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"Clear Mosquitto DB Linux","x":1730,"y":600,"wires":[[],[],[]]},{"id":"a836f18101f82f82","type":"exec","z":"3b46df2689956c32","g":"654d0ada0efecab6","command":"sudo systemctl start mosquitto","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"Start Mosquitto Linux","x":1740,"y":660,"wires":[[],[],[]]},{"id":"d97437e4f77c3a55","type":"comment","z":"3b46df2689956c32","g":"654d0ada0efecab6","name":"Linux Mosquitto Commands !!!Warning!!!","info":"Home Assistant occasionally gets hung up with retained messages this provides a way to remove them and start fresh.\n\nThese commands will remove all retained items from mosquitto\n\nsudo systemctl stop mosquitto\nsudo rm /var/lib/mosquitto/mosquitto.db\nsudo systemctl start mosquitto","x":1720,"y":480,"wires":[]},{"id":"0bd3fca404bf0a91","type":"inject","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"30","topic":"","payload":"","payloadType":"date","x":1430,"y":1780,"wires":[["bfef62e845f109b7","a77c7d012cab3949"]]},{"id":"bfef62e845f109b7","type":"function","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"PLC","func":"status = \"homeassistant/binary_sensor/lanDevices/state\";\ndevice = \"PLC\";\nunique = \"7ER9\";\ndeviceUnique = device + unique;\nglobalVar = \"devices.\" + device +\".status\";\n\n\nif (msg.payload == \"reset\"){\n    msg.payload = {deviceUnique:\"{}\"};\n    msg.topic = status;\n}\nelse if (msg.payload == \"update\"){\n\nlast_status = flow.get(deviceUnique);\nstatusVar = global.get(globalVar);\nif (last_status !== (statusVar === \"connected\" ? \"ON\" : \"OFF\")) {\n    msg.payload = statusVar === \"connected\" ? \"ON\" : \"OFF\";\n    flow.set(deviceUnique, msg.payload);\n    msg.payload = {[deviceUnique]:msg.payload};\n    msg.topic = status;\n    return msg;\n}\n}\nelse {\nmsg.payload =\n{\n  \"dev_cla\": \"connectivity\",\n  \"state_color\":true,\n  \"stat_t\": status,\n  \"unique_id\": deviceUnique,\n  \"value_template\":\"{{ value_json.\"+ deviceUnique +\"}}\",\n  \"name\": device,\n  \"dev\": {\n    \"ids\": [\n      \"lanDevices\",\n      \"NRio\"\n    ],\n    \"name\":\"Devices\",\n    \"mf\": \"RVT\",\n    \"model\": \"NR Ping\"\n  }\n};\nmsg.topic = \"homeassistant/binary_sensor/\"+ deviceUnique + \"/config\";\nreturn msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1650,"y":1680,"wires":[["866d6988469ee3ea","6885ea93df905fe4"]]},{"id":"b3e1d48c1bfeede9","type":"inject","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"reset","payloadType":"str","x":1450,"y":1680,"wires":[["bfef62e845f109b7"]]},{"id":"866d6988469ee3ea","type":"debug","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"debug 18","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1840,"y":1640,"wires":[]},{"id":"a77c7d012cab3949","type":"function","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"Internet","func":"status = \"homeassistant/binary_sensor/lanDevices/state\";\ndevice = \"Internet\";\nunique = \"7ER9\";\ndeviceUnique = device + unique;\nglobalVar = \"devices.\" + device +\".status\";\n\n\nif (msg.payload == \"reset\"){\n    msg.payload = {deviceUnique:\"{}\"};\n    msg.topic = status;\n}\nelse if (msg.payload == \"update\"){\n\nlast_status = flow.get(deviceUnique);\nstatusVar = global.get(globalVar);\nif (last_status !== (statusVar === \"connected\" ? \"ON\" : \"OFF\")) {\n    msg.payload = statusVar === \"connected\" ? \"ON\" : \"OFF\";\n    flow.set(deviceUnique, msg.payload);\n    msg.payload = {[deviceUnique]:msg.payload};\n    msg.topic = status;\n    return msg;\n}\n}\nelse {\nmsg.payload =\n{\n  \"dev_cla\": \"connectivity\",\n  \"state_color\":true,\n  \"stat_t\": status,\n  \"unique_id\": deviceUnique,\n  \"value_template\":\"{{ value_json.\"+ deviceUnique +\"}}\",\n  \"name\": device,\n  \"dev\": {\n    \"ids\": [\n      \"lanDevices\"\n    ],\n  }\n};\nmsg.topic = \"homeassistant/binary_sensor/\"+ deviceUnique + \"/config\";\nreturn msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1660,"y":1720,"wires":[["6885ea93df905fe4"]]},{"id":"0cb37a881935c142","type":"inject","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"reset","payloadType":"str","x":1450,"y":1720,"wires":[["a77c7d012cab3949"]]},{"id":"498ebda8ea7505f4","type":"inject","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","props":[{"p":"payload"}],"repeat":"5","crontab":"","once":true,"onceDelay":"60","topic":"","payload":"update","payloadType":"str","x":1440,"y":1620,"wires":[["bfef62e845f109b7","a77c7d012cab3949"]]},{"id":"a4906e80aee307e2","type":"function","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"Circulator_Pump","func":"status = \"homeassistant/binary_sensor/PLCio/state\";\ndevice = \"Circulator_Pump\";\nunique = \"3ZT6\";\ndeviceUnique = device + unique;\nglobalVar = device +\".value\";\n\n\nif (msg.payload == \"reset\"){\n    msg.payload = {deviceUnique:\"{}\"};\n    msg.topic = status;\n}\nelse if (msg.payload == \"update\"){\n\nlast_status = flow.get(deviceUnique);\nstatusVar = global.get(globalVar);\nif (last_status !== (statusVar === true ? \"ON\" : \"OFF\")) {\n    msg.payload = statusVar === true ? \"ON\" : \"OFF\";\n    flow.set(deviceUnique, msg.payload);\n    msg.payload = {[deviceUnique]:msg.payload};\n    msg.topic = status;\n    return msg;\n}\n}\nelse {\nmsg.payload =\n{\n  \"dev_cla\": \"running\",\n  \"state_color\":true,\n  \"stat_t\": status,\n  \"unique_id\": deviceUnique,\n  \"value_template\":\"{{ value_json.\"+ deviceUnique +\"}}\",\n  \"name\": device,\n  \"dev\": {\n    \"ids\": [\n        \"io_PLC\"\n    ],\n    \"name\":\"PLC io\",\n    \"mf\": \"RVT\",\n    \"model\": \"PLC\"\n  }\n};\nmsg.topic = \"homeassistant/binary_sensor/\"+ deviceUnique + \"/config\";\nreturn msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2610,"y":1460,"wires":[["113808c7b1f339a6"]]},{"id":"931753d67b5558b0","type":"inject","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"reset","payloadType":"str","x":2370,"y":1460,"wires":[["a4906e80aee307e2"]]},{"id":"088654aa558c6c32","type":"inject","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","props":[{"p":"payload"}],"repeat":"5","crontab":"","once":true,"onceDelay":"60","topic":"","payload":"update","payloadType":"str","x":2400,"y":1420,"wires":[["a4906e80aee307e2","b18740ce35b4b020"]]},{"id":"545fc97dbdece04c","type":"inject","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"30","topic":"","payload":"","payloadType":"date","x":2380,"y":1540,"wires":[["a4906e80aee307e2","b18740ce35b4b020"]]},{"id":"d83f7c7190d41faf","type":"inject","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"reset","payloadType":"str","x":2360,"y":1500,"wires":[["b18740ce35b4b020"]]},{"id":"b18740ce35b4b020","type":"function","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"WellPumpRunning","func":"status = \"homeassistant/binary_sensor/PLCio/state\";\ndevice = \"WellPumpRunning\";\nunique = \"3ZT6\";\ndeviceUnique = device + unique;\nglobalVar = device +\".value\";\n\n\nif (msg.payload == \"reset\"){\n    msg.payload = {deviceUnique:\"{}\"};\n    msg.topic = status;\n}\nelse if (msg.payload == \"update\"){\n\nlast_status = flow.get(deviceUnique);\nstatusVar = global.get(globalVar);\nif (last_status !== (statusVar === true ? \"ON\" : \"OFF\")) {\n    msg.payload = statusVar === true ? \"ON\" : \"OFF\";\n    flow.set(deviceUnique, msg.payload);\n    msg.payload = {[deviceUnique]:msg.payload};\n    msg.topic = status;\n    return msg;\n}\n}\nelse {\nmsg.payload =\n{\n  \"dev_cla\": \"running\",\n  \"state_color\":true,\n  \"stat_t\": status,\n  \"unique_id\": deviceUnique,\n  \"value_template\":\"{{ value_json.\"+ deviceUnique +\"}}\",\n  \"name\": device,\n  \"dev\": {\n    \"ids\": [\n        \"io_PLC\"\n    ],\n    \"name\":\"PLC io\",\n    \"mf\": \"RVT\",\n    \"model\": \"PLC\"\n  }\n};\nmsg.topic = \"homeassistant/binary_sensor/\"+ deviceUnique + \"/config\";\nreturn msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2600,"y":1500,"wires":[["113808c7b1f339a6"]]},{"id":"0f2a12f170e812e0","type":"comment","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"Unfortunately device & unique ID can't start with a number","info":"Unfortunately device & unique ID can't start with a number","x":2800,"y":1360,"wires":[]},{"id":"103143d2f87065aa","type":"comment","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"Exisiting Modbus IO","info":"","x":2200,"y":1360,"wires":[]},{"id":"becc33053b21b143","type":"comment","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"Ping Test to Check connectivity","info":"","x":1250,"y":1360,"wires":[]},{"id":"88a4a7ede518b550","type":"ping","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","protocol":"Automatic","mode":"triggered","name":"","host":"","timer":"20","inputs":1,"x":1750,"y":1540,"wires":[["ec5b6421cc0ae707"]]},{"id":"1052150828db960b","type":"inject","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":"5","topic":"","payload":"","payloadType":"date","x":1330,"y":1540,"wires":[["f706328d977c3fe2"]]},{"id":"00e7b1480a574010","type":"inject","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"00 12 * * *","once":true,"onceDelay":"2","topic":"","payload":"","payloadType":"date","x":1390,"y":1480,"wires":[["2c94c30ba6bc0a4c"]]},{"id":"eb5ff99ac11e28da","type":"function","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"device list","func":"// Get the incoming array of devices\nlet deviceArray = msg.payload;\n\n// Get the existing global devices object (or initialize it)\nlet devices = global.get('devices') || {};\n\n// Loop through the device array and add each device to the global devices object\ndeviceArray.forEach(device => {\n    devices[device.deviceName] = {\n        ip_address: device.host\n    };\n});\n\n// Save the updated devices object to global context\nglobal.set('devices', devices);\n\n// Return the updated devices object to the output for debugging or further processing\nmsg.payload = devices;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1840,"y":1480,"wires":[[]]},{"id":"2c94c30ba6bc0a4c","type":"function","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"devices","func":"msg.payload = [\n    {\"deviceName\": \"PLC\", \"host\": \"192.168.1.1\"},\n    {\"deviceName\": \"Internet\", \"host\": \"8.8.8.8\"},\n]\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1620,"y":1480,"wires":[["eb5ff99ac11e28da","65aad510a69eee86"]]},{"id":"ec5b6421cc0ae707","type":"function","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"check pings","func":"// Get the incoming device IP address (from msg.payload or msg.topic)\nlet ipAddress = msg.payload.ipAddress || msg.topic;\n\n// Get the existing global devices object (or initialize it)\nlet devices = global.get('devices') || {};\n\n// Find the device by IP address\nlet deviceName = null;\nfor (let key in devices) {\n    if (devices[key].ip_address === ipAddress) {\n        deviceName = key;\n        break;\n    }\n}\n\n// Check if the device exists\nif (deviceName) {\n    // Check if the payload is a boolean\n    if (typeof msg.payload === 'boolean') {\n        // If the payload is false, set status to 'disconnected'\n        if (msg.payload === false) {\n            devices[deviceName].status = \"disconnected\";\n        } else {\n            // If the payload is true (or anything other than false), set status to 'connected'\n            devices[deviceName].status = \"connected\";\n        }\n    } else {\n        // If the payload is not a boolean, treat it as a non-false value and set status to 'connected'\n        devices[deviceName].status = \"connected\";\n    }\n\n    // Save the updated devices object to global context\n    global.set('devices', devices);\n\n    // Return the updated devices object for debugging\n    msg.payload = devices;\n    return msg;\n} else {\n    // If the device with the given IP address doesn't exist, return an error message\n    msg.payload = `Device with IP address ${ipAddress} not found in global devices.`;\n    return msg;\n}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1910,"y":1540,"wires":[[]]},{"id":"f706328d977c3fe2","type":"change","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"pingList","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":1540,"y":1540,"wires":[["88a4a7ede518b550"]]},{"id":"65aad510a69eee86","type":"change","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"","rules":[{"t":"set","p":"pingList","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1860,"y":1420,"wires":[[]]},{"id":"6885ea93df905fe4","type":"link out","z":"3b46df2689956c32","g":"c3dcdc6afc0ff1b3","name":"link out 7","mode":"link","links":["bf71968ee4d53981"],"x":1835,"y":1720,"wires":[]},{"id":"113808c7b1f339a6","type":"link out","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"link out 8","mode":"link","links":["bf71968ee4d53981"],"x":2875,"y":1480,"wires":[]},{"id":"0fb82d99829bb213","type":"change","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","rules":[{"t":"set","p":"Ciculator_Pump.value","pt":"global","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":2490,"y":1640,"wires":[[]]},{"id":"e08ae37d4a86f276","type":"change","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","rules":[{"t":"set","p":"Well_Pump.value","pt":"global","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":2480,"y":1680,"wires":[[]]},{"id":"2af94ba200298d1c","type":"inject","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","props":[{"p":"payload"}],"repeat":"30","crontab":"","once":true,"onceDelay":"30","topic":"","payload":"","payloadType":"date","x":2210,"y":1660,"wires":[["0fb82d99829bb213","e08ae37d4a86f276","20dc6c481e5e996a"]]},{"id":"53966eeb35636e6b","type":"change","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","rules":[{"t":"set","p":"Ciculator_Pump.value","pt":"global","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":2490,"y":1740,"wires":[[]]},{"id":"203d3509d705f248","type":"change","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","rules":[{"t":"set","p":"Well_Pump.value","pt":"global","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":2480,"y":1780,"wires":[[]]},{"id":"20dc6c481e5e996a","type":"delay","z":"3b46df2689956c32","g":"84668abb4a16b0d4","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":2220,"y":1760,"wires":[["53966eeb35636e6b","203d3509d705f248"]]},{"id":"05b6b8241008064c","type":"function","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"Device Setup","func":"msg.payload =\n{\n  \"device\": {\n    \"name\":\"foo device\",\n    \"identifiers\": [\n      \"0AFFD2\"\n    ]\n  },\n  \"o\": {\n    \"name\": \"foobar\"\n  },\n  \"cmps\": {\n    \"bla1\": {\n      \"p\": \"device_automation\",\n      \"automation_type\": \"trigger\",\n      \"payload\": \"short_press\",\n      \"topic\": \"foobar/triggers/button1\",\n      \"type\": \"button_short_press\",\n      \"subtype\": \"button_1\"\n    },\n    \"bla2\": {\n      \"p\": \"sensor\",\n      \"state_topic\": \"foobar/sensor/sensor1\",\n      \"unique_id\": \"bla_sensor001\"\n    },\n        \"bla3\": {\n      \"p\": \"binary_sensor\",\n      \"state_topic\": \"foobar/binary_sensor/sensor2\",\n      \"unique_id\": \"bla_sensor002\"\n    },\n  }\n};\nmsg.topic = \"homeassistant/device/0AFFD2/config\";\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":940,"wires":[["6e86eb8e04bf72fb"]]},{"id":"1d6d1fdfd4fbd4bb","type":"inject","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":460,"y":940,"wires":[["05b6b8241008064c"]]},{"id":"9c60ec95fc9e4b10","type":"comment","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"Device Setup","info":"","x":530,"y":880,"wires":[]},{"id":"6e86eb8e04bf72fb","type":"link out","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"link out 9","mode":"link","links":["bf71968ee4d53981"],"x":995,"y":1060,"wires":[]},{"id":"13276f53cab07633","type":"inject","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"Send Sensor2 On","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"foobar/binary_sensor/sensor2","payload":"ON","payloadType":"str","x":490,"y":1120,"wires":[["6e86eb8e04bf72fb"]]},{"id":"1f5677cec70fb75c","type":"inject","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"Send Sensor2 Off","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"foobar/binary_sensor/sensor2","payload":"OFF","payloadType":"str","x":490,"y":1160,"wires":[["6e86eb8e04bf72fb"]]},{"id":"2ff2de430c7cb484","type":"inject","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"Send Sensor1 On","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"foobar/sensor/sensor1","payload":"ON","payloadType":"str","x":490,"y":1040,"wires":[["6e86eb8e04bf72fb"]]},{"id":"b3ac8b9058506632","type":"inject","z":"3b46df2689956c32","g":"17b8676969b8b6ec","name":"Send Sensor1 Off","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"foobar/sensor/sensor1","payload":"OFF","payloadType":"str","x":490,"y":1080,"wires":[["6e86eb8e04bf72fb"]]},{"id":"1e512596.02075a","type":"mqtt-broker","name":"Mosquitto","broker":"10.0.0.3","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]

Flow Info

Created 3 months, 1 week ago
Updated 2 months, 3 weeks ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • change (x6)
  • comment (x13)
  • debug (x3)
  • delay (x1)
  • exec (x3)
  • function (x10)
  • inject (x29)
  • link in (x1)
  • link out (x6)
  • mqtt in (x1)
  • mqtt out (x1)
  • mqtt-broker (x1)
Other
  • group (x8)
  • ping (x1)
  • tab (x1)

Tags

  • HA
  • Home
  • Automation
  • MQTT
  • Home+Assistant
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option