Z2M Admin with OTA
A copy of this flow with added OTA update support
https://flows.nodered.org/flow/1f1c0dde4ff193e5c14d5b99442a7d00
[{"id":"fa91bcef.d5514","type":"tab","label":"Z2M Admin","disabled":false,"info":""},{"id":"2c4cc4c2.209a8c","type":"function","z":"fa91bcef.d5514","name":"Format Data","func":"var groupname = flow.get('groupname');\nvar device = flow.get('device');\n\nif (typeof groupname !== undefined && typeof device !== undefined) {\n var action = \"Adding \";\n var what = \" to group \";\n if(msg.payload == \"remove\") {\n action = \"Removing \";\n what = \" from group \";\n }\nvar msg1 = { payload: device, topic: \"zigbee2mqtt/bridge/group/\" + groupname + \"/\" + msg.payload};\nvar msg2 = { payload: action + \" \" + device + what + groupname };\n\nreturn [msg1, msg2];\n}","outputs":2,"noerr":0,"x":770,"y":1920,"wires":[["a132ccb5.5aeb08"],["de1dd029.fcafa"]]},{"id":"a96564e2.7ac208","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"89b532ae.b8d6b8","order":9,"width":"3","height":"1","passthru":false,"label":"Add to group","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Add","payloadType":"str","topic":"","x":110,"y":1900,"wires":[["23f61184.a6363e"]]},{"id":"de1dd029.fcafa","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"5","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"System Notification","name":"","x":810,"y":1980,"wires":[]},{"id":"c68d0f1f.923e58","type":"comment","z":"fa91bcef.d5514","name":"Group management","info":"","x":130,"y":1460,"wires":[]},{"id":"bbe02d85.02c3b","type":"function","z":"fa91bcef.d5514","name":"Format Data","func":"var srcdev = flow.get('device');\nvar bindtarget = flow.get('bindtarget');\n\nif (typeof srcdev !== undefined && typeof bindtarget !== undefined) {\n msg1 = { 'payload': bindtarget, 'topic': 'zigbee2mqtt/bridge/' + msg.payload + '/' + srcdev};\n msg2 = { 'payload': msg.payload + ' ' + srcdev + ' to target ' + bindtarget };\n\n return [msg1, msg2];\n}","outputs":2,"noerr":0,"x":750,"y":2260,"wires":[["ab3f204b.c5f5f8"],["de07751.d705888"]]},{"id":"64754c09.0eec1c","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"89b532ae.b8d6b8","order":13,"width":"3","height":"1","passthru":false,"label":"Bind device","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Bind","payloadType":"str","topic":"","x":110,"y":2240,"wires":[["c877d9db.e54648"]]},{"id":"e70fe841.36c6d","type":"mqtt in","z":"fa91bcef.d5514","name":"","topic":"zigbee2mqtt/#","qos":"2","datatype":"utf8","broker":"6aeedb7a.2760d4","x":110,"y":100,"wires":[["d24e16e9.85cf18"]]},{"id":"7d532df4.59917c","type":"switch","z":"fa91bcef.d5514","name":"log type","property":"payload.type","propertyType":"msg","rules":[{"t":"eq","v":"devices","vt":"str"},{"t":"eq","v":"groups","vt":"str"},{"t":"eq","v":"zigbee_publish_error","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":4,"x":540,"y":540,"wires":[["f7963e19.ab6e2"],["be2e179c.0553a"],["a17b3390.725b88"],["102b770a.ccb4e9"]]},{"id":"76633111.bd687","type":"json","z":"fa91bcef.d5514","name":"","property":"payload","action":"","pretty":false,"x":410,"y":540,"wires":[["7d532df4.59917c"]]},{"id":"f7963e19.ab6e2","type":"link out","z":"fa91bcef.d5514","name":"Z2M LOG DEVICELIST","links":["f6d1d78b.e51618","d116520d.84af08"],"x":695,"y":500,"wires":[]},{"id":"e86a0eb5.4448","type":"function","z":"fa91bcef.d5514","name":"Reformat for list","func":"newPayload = [];\nmsg.payload.message.forEach(function(entry) {\n if(entry.type != 'Coordinator') {\n newentry = {'title': entry.friendly_name, \n 'description': entry.model + ' (' + entry.ieeeAddr + ')',\n 'icon': 'https://www.zigbee2mqtt.io/images/devices/' + entry.model.replace(new RegExp('/', 'g'), '-') + '.jpg'\n };\n newPayload.push(newentry);\n }\n});\n\nmsg.payload=newPayload;\nreturn msg;\n","outputs":1,"noerr":0,"x":180,"y":920,"wires":[["a3aa715f.2bf12"]]},{"id":"f6d1d78b.e51618","type":"link in","z":"fa91bcef.d5514","name":"Z2M DEV LIST INPUT","links":["f7963e19.ab6e2"],"x":55,"y":940,"wires":[["e86a0eb5.4448","5ae32ad8.984ac4"]]},{"id":"a3aa715f.2bf12","type":"ui_list","z":"fa91bcef.d5514","group":"52856ead.61b81","name":"Devices","order":1,"width":"6","height":"11","lineType":"three","actionType":"click","allowHTML":true,"outputs":1,"topic":"","x":340,"y":920,"wires":[["73ced396.aafa54"]]},{"id":"73ced396.aafa54","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"device","pt":"flow","to":"payload.title","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":960,"wires":[["1300cb69.1ef0f5","989bbbd.2ab9ac8","e17b64d5.f91288"]]},{"id":"1e9840bd.abf7ef","type":"mqtt out","z":"fa91bcef.d5514","name":"Generic output","topic":"","qos":"","retain":"false","broker":"6aeedb7a.2760d4","x":420,"y":160,"wires":[]},{"id":"5dbc6a54.637a3c","type":"link in","z":"fa91bcef.d5514","name":"Z2M GENERIC MQTT OUT","links":["a132ccb5.5aeb08","458d2db0.4f1c14","c16d4c04.ed403","5dfb3985.3f266","ab3f204b.c5f5f8","56396dcd.f8262c","c617c966.da337","20f583a0.f64f34","c4ee4cfc.c1bbc8"],"x":55,"y":160,"wires":[["1e9840bd.abf7ef"]]},{"id":"a132ccb5.5aeb08","type":"link out","z":"fa91bcef.d5514","name":"Z2M GROUP BIND OUT","links":["5dbc6a54.637a3c"],"x":875,"y":1900,"wires":[]},{"id":"5ae32ad8.984ac4","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"devices","pt":"flow","to":"payload.message","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":960,"wires":[[]]},{"id":"1300cb69.1ef0f5","type":"function","z":"fa91bcef.d5514","name":"Lookup device details","func":"devices = flow.get('devices');\n\nfor (var i in devices) {\n if(devices[i].friendly_name == msg.payload.title) {\n flow.set('seldevice_details', devices[i]);\n msg.payload = devices[i];\n return msg;\n }\n}\n\nmsg.payload.friendly_name='unknown';\nreturn msg;\n","outputs":1,"noerr":0,"x":600,"y":960,"wires":[["345d7350.720594"]]},{"id":"2dd49d51.dbb0da","type":"function","z":"fa91bcef.d5514","name":"Reformat for dropdown","func":"newPayload = [];\nmsg.payload.message.forEach(function(entry) {\n newPayload.push(entry.friendly_name);\n});\n\nnewMsg = {'payload': flow.get('bindtarget'), 'options': newPayload};\n\nreturn newMsg;\n","outputs":1,"noerr":0,"x":200,"y":2180,"wires":[["3c95dc78.1ff66c"]]},{"id":"d116520d.84af08","type":"link in","z":"fa91bcef.d5514","name":"Z2M BIND LIST INPUT","links":["f7963e19.ab6e2"],"x":55,"y":2180,"wires":[["2dd49d51.dbb0da"]]},{"id":"3c95dc78.1ff66c","type":"ui_dropdown","z":"fa91bcef.d5514","name":"","label":"Target device","tooltip":"","place":"Select target device","group":"89b532ae.b8d6b8","order":12,"width":"6","height":"1","passthru":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"","x":410,"y":2180,"wires":[["622a4a8b.3aa86c"]]},{"id":"622a4a8b.3aa86c","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"bindtarget","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":2180,"wires":[[]]},{"id":"e298820e.8f0c6","type":"inject","z":"fa91bcef.d5514","name":"","topic":"","payload":"","payloadType":"date","repeat":"6","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":1140,"wires":[["8b86fbbc.f4dab"]]},{"id":"458469bd.58ece","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"bridgestate","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":480,"wires":[[]]},{"id":"69b708f0.da4a28","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"89b532ae.b8d6b8","order":10,"width":"3","height":"1","passthru":false,"label":"Remove from group","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Remove","payloadType":"str","topic":"","x":140,"y":1940,"wires":[["8842a35d.8c0548"]]},{"id":"4535384.738c0c8","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"89b532ae.b8d6b8","order":14,"width":"3","height":"1","passthru":false,"label":"Unbind device","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Unbind","payloadType":"str","topic":"","x":120,"y":2280,"wires":[["93d63d36.439cf"]]},{"id":"23f61184.a6363e","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}} device <b>{{flow.device}}</b> in group <b>{{flow.groupname}}</b>?","output":"str","x":320,"y":1900,"wires":[["e188c13d.546508"]]},{"id":"e188c13d.546508","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"add","cancel":"cancel","topic":"Add to group","name":"","x":470,"y":1900,"wires":[["fd8074f6.cab7f8"]]},{"id":"fd8074f6.cab7f8","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"add","vt":"str"},{"t":"eq","v":"remove","vt":"str"},{"t":"eq","v":"cancel","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":630,"y":1920,"wires":[["2c4cc4c2.209a8c"],["2c4cc4c2.209a8c"],[]]},{"id":"8842a35d.8c0548","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}} device <b>{{flow.device}}</b> in group <b>{{flow.groupname}}</b>?","output":"str","x":320,"y":1940,"wires":[["3bf34fb.0a3ceb"]]},{"id":"3bf34fb.0a3ceb","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"remove","cancel":"cancel","topic":"Remove from group","name":"","x":470,"y":1940,"wires":[["fd8074f6.cab7f8"]]},{"id":"c877d9db.e54648","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}} device <b>{{flow.device}}</b> to <b>{{flow.bindtarget}}</b>?","output":"str","x":280,"y":2240,"wires":[["477e55d4.c2e53c"]]},{"id":"477e55d4.c2e53c","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"bind","cancel":"cancel","topic":"Bind device","name":"","x":430,"y":2240,"wires":[["9a4ab292.1a87c8"]]},{"id":"93d63d36.439cf","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}} device <b>{{flow.device}}</b> from <b>{{flow.bindtarget}}</b>?","output":"str","x":280,"y":2280,"wires":[["45253386.1979e4"]]},{"id":"45253386.1979e4","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"unbind","cancel":"cancel","topic":"Unbind device","name":"","x":430,"y":2280,"wires":[["9a4ab292.1a87c8"]]},{"id":"9a4ab292.1a87c8","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"bind","vt":"str"},{"t":"eq","v":"unbind","vt":"str"},{"t":"eq","v":"cancel","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":590,"y":2260,"wires":[["bbe02d85.02c3b"],["bbe02d85.02c3b"],[]]},{"id":"9ab1c661.c239e8","type":"ui_text_input","z":"fa91bcef.d5514","name":"","label":"New device name","tooltip":"","group":"89b532ae.b8d6b8","order":5,"width":"6","height":"1","passthru":true,"mode":"text","delay":"100","topic":"","x":130,"y":1860,"wires":[["7bd2a0fe.453b1"]]},{"id":"c7a86d97.ea1948","type":"comment","z":"fa91bcef.d5514","name":"Device management","info":"","x":130,"y":1740,"wires":[]},{"id":"7bd2a0fe.453b1","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"newdevicename","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":1860,"wires":[[]]},{"id":"f02c725a.6c64f","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"89b532ae.b8d6b8","order":6,"width":"6","height":"1","passthru":false,"label":"Rename device","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Rename","payloadType":"str","topic":"","x":120,"y":2080,"wires":[["f35cf66d.9e499"]]},{"id":"f35cf66d.9e499","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}} device <b>{{flow.device}}</b> to <b>{{flow.newdevicename}}</b>?","output":"str","x":280,"y":2080,"wires":[["b3a30dd2.2a4bb8"]]},{"id":"b3a30dd2.2a4bb8","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"rename","cancel":"cancel","topic":"Rename device","name":"","x":430,"y":2080,"wires":[["75339c5.03a5664"]]},{"id":"75339c5.03a5664","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"rename","vt":"str"},{"t":"eq","v":"cancel","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":570,"y":2080,"wires":[["5ac13b2e.12e1fc"],[]]},{"id":"5ac13b2e.12e1fc","type":"function","z":"fa91bcef.d5514","name":"Format Data","func":"var oldname = flow.get('device');\nvar newname = flow.get('newdevicename');\n\nif (typeof oldname !== undefined && typeof newname !== undefined) {\n msg1 = { 'payload': {\"old\": oldname, \"new\": newname}, 'topic': 'zigbee2mqtt/bridge/config/rename'};\n msg2 = { 'payload': msg.payload + ' ' + oldname + ' to ' + newname };\n\n return [msg1, msg2];\n}","outputs":2,"noerr":0,"x":730,"y":2080,"wires":[["56396dcd.f8262c"],["33a78da5.aa8ada"]]},{"id":"33a78da5.aa8ada","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"5","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"System Notification","name":"","x":790,"y":2140,"wires":[]},{"id":"4cbfc717.c2d8a8","type":"switch","z":"fa91bcef.d5514","name":"","property":"topic","propertyType":"msg","rules":[{"t":"regex","v":".*/bridge/state","vt":"str","case":false},{"t":"regex","v":".*/bridge/log","vt":"str","case":false},{"t":"regex","v":".*/bridge/config$","vt":"str","case":false},{"t":"regex","v":".*/networkmap/graphviz$","vt":"str","case":false},{"t":"regex","v":".*/bridge/config/.*","vt":"str","case":false},{"t":"regex","v":"^(?!.*get$|.*set$).*$","vt":"str","case":false}],"checkall":"false","repair":false,"outputs":6,"x":230,"y":540,"wires":[["458469bd.58ece"],["76633111.bd687"],["69dbae76.0409f"],["dfa58d81.240b"],[],["1f8e0c51.af69ac"]]},{"id":"69dbae76.0409f","type":"json","z":"fa91bcef.d5514","name":"","property":"payload","action":"","pretty":false,"x":410,"y":620,"wires":[["8064ed61.66a2d8"]]},{"id":"8064ed61.66a2d8","type":"link out","z":"fa91bcef.d5514","name":"Z2M BRIDGE CONFIG INPUT","links":["d07fb2a5.70a258"],"x":515,"y":620,"wires":[]},{"id":"dbe8f502.93e2a","type":"ui_switch","z":"fa91bcef.d5514","name":"","label":"Permit join","tooltip":"","group":"d9241e5a.51bda","order":1,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"zigbee2mqtt/bridge/config/permit_join","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":470,"y":1280,"wires":[["c16d4c04.ed403"]]},{"id":"2ba77afa.0e3ffe","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"move","p":"payload.permit_join","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":1280,"wires":[["dbe8f502.93e2a"]]},{"id":"d07fb2a5.70a258","type":"link in","z":"fa91bcef.d5514","name":"Z2M BRIDGE CONFIG","links":["8064ed61.66a2d8"],"x":55,"y":1280,"wires":[["2ba77afa.0e3ffe","d80fb187.080ff8","3b9d6dee.160052","5b82c0cd.5e94b"]]},{"id":"277cd6b5.07ee9a","type":"ui_dropdown","z":"fa91bcef.d5514","name":"","label":"Log level","tooltip":"","place":"Select log level","group":"d9241e5a.51bda","order":2,"width":0,"height":0,"passthru":false,"options":[{"label":"Info","value":"info","type":"str"},{"label":"Debug","value":"debug","type":"str"},{"label":"Warn","value":"warn","type":"str"},{"label":"Error","value":"error","type":"str"}],"payload":"","topic":"zigbee2mqtt/bridge/config/log_level","x":460,"y":1320,"wires":[["c16d4c04.ed403"]]},{"id":"c16d4c04.ed403","type":"link out","z":"fa91bcef.d5514","name":"Z2M BRIDGE CONFIG OUT","links":["5dbc6a54.637a3c"],"x":615,"y":1300,"wires":[]},{"id":"d80fb187.080ff8","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"move","p":"payload.log_level","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":240,"y":1320,"wires":[["277cd6b5.07ee9a"]]},{"id":"102b770a.ccb4e9","type":"link out","z":"fa91bcef.d5514","name":"Z2M NOTIFICATIONS OUT","links":["e566b64a.4cdd68"],"x":695,"y":600,"wires":[]},{"id":"729a2a53.6c76cc","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"3","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"","name":"","x":840,"y":2600,"wires":[]},{"id":"e566b64a.4cdd68","type":"link in","z":"fa91bcef.d5514","name":"Z2M NOTIFICATIONS INPUT","links":["102b770a.ccb4e9"],"x":65,"y":2580,"wires":[["9ceb5f8b.bd8198"]]},{"id":"58f86ac9.c8c284","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.type","tot":"msg"},{"t":"move","p":"payload.message","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":2680,"wires":[["729a2a53.6c76cc"]]},{"id":"775983ad.275c4c","type":"comment","z":"fa91bcef.d5514","name":"Bridge status","info":"","x":110,"y":1100,"wires":[]},{"id":"a80028e6.31f2e8","type":"ui_button","z":"fa91bcef.d5514","name":"remove device","group":"89b532ae.b8d6b8","order":3,"width":"6","height":"1","passthru":false,"label":"Remove device","tooltip":"","color":"","bgcolor":"","icon":"","payload":"remove","payloadType":"str","topic":"","x":120,"y":1820,"wires":[["45a300ac.0538f8"]]},{"id":"45a300ac.0538f8","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}} device <b>{{flow.device}}</b> permanently?","output":"str","x":280,"y":1820,"wires":[["95fe06f.39f22f8"]]},{"id":"95fe06f.39f22f8","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"remove","cancel":"cancel","topic":"Remove device","name":"","x":430,"y":1820,"wires":[["98c5b878.e909e8"]]},{"id":"98c5b878.e909e8","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"remove","vt":"str"},{"t":"eq","v":"cancel","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":570,"y":1820,"wires":[["45ed7ac9.7db4fc"],[]]},{"id":"45ed7ac9.7db4fc","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"zigbee2mqtt/bridge/config/remove","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"device","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":1820,"wires":[["c617c966.da337"]]},{"id":"ecdd086b.478248","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":4,"width":"0","height":"0","name":"","label":"Status","format":"{{msg.payload.bridgestate}}","layout":"row-left","x":510,"y":1200,"wires":[]},{"id":"91e49398.0de438","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":7,"width":"0","height":"0","name":"","label":"Devices","format":"{{msg.payload.numdevices}}","layout":"row-left","x":520,"y":1160,"wires":[]},{"id":"8b86fbbc.f4dab","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.numdevices","pt":"msg","to":"devices.length","tot":"flow"},{"t":"set","p":"payload.bridgestate","pt":"msg","to":"bridgestate","tot":"flow"},{"t":"set","p":"payload.nwlast","pt":"msg","to":"networkmap_last","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":1140,"wires":[["91e49398.0de438","ecdd086b.478248","7cfcfdcd.d48704"]]},{"id":"345d7350.720594","type":"function","z":"fa91bcef.d5514","name":"Reformat for details","func":"newPayload = [];\n\nnewentry = {\n 'title': msg.payload.friendly_name,\n 'description': 'zigbee2mqtt/' + msg.payload.friendly_name,\n 'icon': 'https://www.zigbee2mqtt.io/images/logo.png'\n};\nnewPayload.push(newentry);\nnewentry = {\n 'title': msg.payload.ieeeAddr,\n 'description': 'NwkAddr: ' + msg.payload.nwkAddr + ' / manufId: ' + msg.payload.manufId,\n 'icon_name': 'settings_input_antenna'\n};\nnewPayload.push(newentry);\nnewentry = { \n 'title': msg.payload.model,\n 'description': msg.payload.modelId,\n 'icon': 'https://www.zigbee2mqtt.io/images/devices/' + msg.payload.model.replace(new RegExp('/', 'g'), '-') + '.jpg'\n};\nnewPayload.push(newentry);\nnewentry = { \n 'title': msg.payload.manufName,\n 'description': 'HW: ' + msg.payload.hwVersion + ' / SW: ' + msg.payload.swBuildId,\n 'icon_name': 'bookmark'\n};\nnewPayload.push(newentry);\nvar type_icon = msg.payload.type=='Router' ? 'device_hub' : 'input';\nnewentry = {\n 'title': msg.payload.type,\n 'description': 'Powersource: ' + msg.payload.powerSource,\n 'icon_name': type_icon\n};\nnewPayload.push(newentry);\n\nmsg.payload=newPayload;\nreturn msg;\n","outputs":1,"noerr":0,"x":630,"y":1020,"wires":[["79d6992a.ef1908"]]},{"id":"dfa58d81.240b","type":"change","z":"fa91bcef.d5514","name":"save networkmap","rules":[{"t":"set","p":"networkmap","pt":"flow","to":"payload","tot":"msg"},{"t":"set","p":"networkmap_last","pt":"flow","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":680,"wires":[["bb0e1fda.91bba8"]]},{"id":"460627dd.378488","type":"http in","z":"fa91bcef.d5514","name":"","url":"/z2mpanel/networkmap","method":"get","upload":false,"swaggerDoc":"","x":160,"y":3080,"wires":[["24d48323.7ce484"]]},{"id":"24d48323.7ce484","type":"template","z":"fa91bcef.d5514","name":"Render page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n <meta charset=\"utf-8\">\n <title>Network topology</title>\n <style>\n #graphviz_svg_div svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n \n </style>\n </head>\n <body>\n <div id=\"graphviz_svg_div\"></div>\n <script language=\"javascript\" type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/npm/[email protected]/viz.js\"></script>\n <script language=\"javascript\" type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/npm/[email protected]/full.render.js\"></script>\n <script language=\"javascript\" type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/svg-pan-zoom.min.js\"></script>\n <script type=\"bogus\" id=\"graphviz_input\">\n {{{flow.networkmap}}}\n </script>\n <script language=\"javascript\" type=\"text/javascript\">\n document.addEventListener(\"DOMContentLoaded\", function(event) {\n var viz = new Viz();\n var svg = document.getElementById(\"graphviz_input\").innerHTML;\n viz.renderSVGElement(svg, {engine: \"{{{flow.nwrenderengine}}}\"})\n .then(function(element) {\n document.getElementById(\"graphviz_svg_div\").appendChild(element);\n panZoom = svgPanZoom(element, {\n zoomEnabled: true,\n controlIconsEnabled: true,\n fit: true,\n center: true,\n minZoom: 0.1\n });\n\n element.addEventListener('paneresize', function(e) {\n panZoom.resize();\n }, false);\n window.addEventListener('resize', function(e) {\n panZoom.resize();\n });\n })\n .catch(error => {\n // Create a new Viz instance (@see Caveats page for more info)\n viz = new Viz();\n\n // Possibly display the error\n console.error(error);\n });\n //var svg = Viz(document.getElementById(\"graphviz_input\").innerHTML, \"svg\", {render: \"circo\"});\n //document.getElementById(\"graphviz_svg_div\").innerHTML = svg;\n });\n </script>\n </body>\n</html>","output":"str","x":450,"y":3080,"wires":[["f025cce6.f64868"]]},{"id":"f025cce6.f64868","type":"http response","z":"fa91bcef.d5514","name":"","statusCode":"","headers":{},"x":650,"y":3080,"wires":[]},{"id":"db9799ee.9c3ed","type":"ui_template","z":"fa91bcef.d5514","group":"af8c7c50.c7554","name":"iframe nw map","order":0,"width":"27","height":"11","format":"<iframe frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"/z2mpanel/networkmap\"></iframe>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":120,"y":3040,"wires":[[]]},{"id":"79d6992a.ef1908","type":"ui_list","z":"fa91bcef.d5514","group":"52856ead.61b81","name":"Selected device","order":1,"width":"6","height":"7","lineType":"three","actionType":"none","allowHTML":true,"outputs":0,"topic":"","x":820,"y":1020,"wires":[]},{"id":"b105b87c.fc5b78","type":"comment","z":"fa91bcef.d5514","name":"Device list & selected device","info":"","x":160,"y":880,"wires":[]},{"id":"4ae7b90f.d2c59","type":"inject","z":"fa91bcef.d5514","name":"Create network map","topic":"zigbee2mqtt/bridge/networkmap","payload":"graphviz","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"10","x":130,"y":200,"wires":[["1e9840bd.abf7ef"]]},{"id":"d978ee44.4c462","type":"inject","z":"fa91bcef.d5514","name":"Request Device List","topic":"zigbee2mqtt/bridge/config/devices/get","payload":"","payloadType":"date","repeat":"5","crontab":"","once":true,"onceDelay":0.1,"x":140,"y":240,"wires":[["1e9840bd.abf7ef"]]},{"id":"15dc94c7.4ab763","type":"ui_button","z":"fa91bcef.d5514","name":"Create nw map","group":"d9241e5a.51bda","order":12,"width":"1","height":"1","passthru":false,"label":"","tooltip":"Refresh network map","color":"","bgcolor":"","icon":"refresh","payload":"graphviz","payloadType":"str","topic":"zigbee2mqtt/bridge/networkmap","x":120,"y":2880,"wires":[["5dfb3985.3f266"]]},{"id":"5dfb3985.3f266","type":"link out","z":"fa91bcef.d5514","name":"Z2M NW MAP GEN","links":["5dbc6a54.637a3c"],"x":255,"y":2880,"wires":[]},{"id":"9ceb5f8b.bd8198","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload.type","propertyType":"msg","rules":[{"t":"eq","v":"pairing","vt":"str"},{"t":"eq","v":"device_connected","vt":"str"},{"t":"eq","v":"device_removed","vt":"str"},{"t":"istype","v":"object","vt":"object"},{"t":"else"}],"checkall":"false","repair":false,"outputs":5,"x":160,"y":2580,"wires":[["f17ab207.7ac4c"],["65b6a5ed.61696c"],["e2ba253a.581778"],["35140db8.e1d84a"],["58f86ac9.c8c284"]]},{"id":"f17ab207.7ac4c","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload.message","propertyType":"msg","rules":[{"t":"eq","v":"connecting with device","vt":"str"},{"t":"eq","v":"device incoming","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":320,"y":2480,"wires":[["9b68f3a3.47a328"],["9f067839.7778a"]]},{"id":"9b68f3a3.47a328","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"A device is attempting to pair...","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":2460,"wires":[["729a2a53.6c76cc"]]},{"id":"9f067839.7778a","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"A device is incoming or repairing...","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":2500,"wires":[["729a2a53.6c76cc"]]},{"id":"65b6a5ed.61696c","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Device paired successfully: {{msg.payload.message}}","output":"str","x":330,"y":2540,"wires":[["729a2a53.6c76cc"]]},{"id":"e2ba253a.581778","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Deviced removed: {{msg.payload.message}}","output":"str","x":330,"y":2580,"wires":[["729a2a53.6c76cc"]]},{"id":"53bb7fc6.bee718","type":"comment","z":"fa91bcef.d5514","name":"Notifications","info":"","x":120,"y":2420,"wires":[]},{"id":"de07751.d705888","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"5","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"System Notification","name":"","x":790,"y":2320,"wires":[]},{"id":"ab3f204b.c5f5f8","type":"link out","z":"fa91bcef.d5514","name":"Z2M BINDING OUT","links":["5dbc6a54.637a3c"],"x":875,"y":2240,"wires":[]},{"id":"56396dcd.f8262c","type":"link out","z":"fa91bcef.d5514","name":"Z2M RENAME OUT","links":["5dbc6a54.637a3c"],"x":855,"y":2060,"wires":[]},{"id":"c617c966.da337","type":"link out","z":"fa91bcef.d5514","name":"Z2M REMOVE OUT","links":["5dbc6a54.637a3c"],"x":835,"y":1820,"wires":[]},{"id":"16209083.ea68cf","type":"comment","z":"fa91bcef.d5514","name":"Zigbee2Mqtt Admin Panel","info":"","x":150,"y":40,"wires":[]},{"id":"8b2ba0af.77b9d8","type":"comment","z":"fa91bcef.d5514","name":"---- Dont change things down here ----","info":"","x":190,"y":400,"wires":[]},{"id":"35140db8.e1d84a","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload.type.group","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":410,"y":2620,"wires":[["d36e2ee6.f0533"]]},{"id":"d36e2ee6.f0533","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Succesfully changed device {{payload.type.device}} in group {{payload.type.group}}","output":"str","x":570,"y":2620,"wires":[["729a2a53.6c76cc"]]},{"id":"ffe8337f.2ac488","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"3","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"","name":"","x":880,"y":640,"wires":[]},{"id":"bb0e1fda.91bba8","type":"debug","z":"fa91bcef.d5514","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":650,"y":680,"wires":[]},{"id":"7cfcfdcd.d48704","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":9,"width":"0","height":"0","name":"","label":"Last created","format":"{{msg.payload.nwlast | date:'dd.MM.yy HH:mm'}}","layout":"row-spread","x":530,"y":1120,"wires":[]},{"id":"cbc38ca2.d6be98","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"d9241e5a.51bda","order":11,"width":"5","height":"1","passthru":false,"label":"Show network map","tooltip":"","color":"","bgcolor":"","icon":"","payload":"{\"tab\":\"Z2M Network map\"}","payloadType":"json","topic":"","x":130,"y":2920,"wires":[["384423e7.0bafcc"]]},{"id":"384423e7.0bafcc","type":"ui_ui_control","z":"fa91bcef.d5514","name":"","x":340,"y":2920,"wires":[[]]},{"id":"989bbbd.2ab9ac8","type":"link out","z":"fa91bcef.d5514","name":"Z2M FLOW DEV TRIGGER","links":["f7eaa817.70bfd8","ced9b243.c5dfc","afb0f244.23a25","da2b26de.c052c"],"x":475,"y":1020,"wires":[]},{"id":"cd2a84d5.ebb94","type":"inject","z":"fa91bcef.d5514","name":"","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":true,"onceDelay":0.1,"x":330,"y":1020,"wires":[["989bbbd.2ab9ac8"]]},{"id":"a17b3390.725b88","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload.message}} to device {{payload.meta.entity.friendlyName}}\nOriginal message: {{payload.meta.message}}","output":"str","x":780,"y":580,"wires":[["ffe8337f.2ac488","ae4c69c8.d48ff"]]},{"id":"ae4c69c8.d48ff","type":"link out","z":"fa91bcef.d5514","name":"PUBLISH ERROR TO TELEGRAM","links":["34d4fa40.340716","237ac04e.ab42b"],"x":895,"y":560,"wires":[]},{"id":"47034667.56342","type":"inject","z":"fa91bcef.d5514","name":"Request Group List","topic":"zigbee2mqtt/bridge/config/groups","payload":"","payloadType":"date","repeat":"5","crontab":"","once":true,"onceDelay":0.1,"x":140,"y":280,"wires":[["1e9840bd.abf7ef"]]},{"id":"be2e179c.0553a","type":"link out","z":"fa91bcef.d5514","name":"Z2M LOG GROUPLIST","links":["7ede0202.b35fec","17915c5d.ad574c","9c4402a9.11c0c"],"x":695,"y":540,"wires":[]},{"id":"c96f1e63.21bf38","type":"comment","z":"fa91bcef.d5514","name":"Networkmap","info":"","x":110,"y":2840,"wires":[]},{"id":"b24bebf5.4db998","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"groupname","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":2020,"wires":[[]]},{"id":"17915c5d.ad574c","type":"link in","z":"fa91bcef.d5514","name":"Z2M GROUP UI","links":["be2e179c.0553a"],"x":55,"y":2020,"wires":[["7dcf4fc0.17c4f8"]]},{"id":"7dcf4fc0.17c4f8","type":"function","z":"fa91bcef.d5514","name":"Reformat for list","func":"newPayload = [];\nObject.keys(msg.payload.message).forEach(function(key) {\n var msgKey = msg.payload.message[key].friendly_name + \" (ID: \" + key + \")\";\n var msgVar = msg.payload.message[key].friendly_name;\n newentry = '{\"'+msgKey+'\":\" '+ msgVar+'\"}';\n newPayload.push(msg.payload.message[key].friendly_name);\n});\n\nnewMsg = {'payload': flow.get('groupname'), 'options': newPayload}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":170,"y":2020,"wires":[["12710e90.ae2129"]]},{"id":"3b9d6dee.160052","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":5,"width":"0","height":"0","name":"","label":"Zigbee2MQTT version","format":"{{msg.payload.version}}","layout":"row-left","x":220,"y":1180,"wires":[]},{"id":"5b82c0cd.5e94b","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":6,"width":"0","height":"0","name":"","label":"Coordinator firmware","format":"{{msg.payload.coordinator_firmware}}","layout":"row-left","x":220,"y":1220,"wires":[]},{"id":"26ae2373.18761c","type":"inject","z":"fa91bcef.d5514","name":"Reset CC253x","topic":"zigbee2mqtt/bridge/config/reset","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":320,"wires":[["1e9840bd.abf7ef"]]},{"id":"12710e90.ae2129","type":"ui_dropdown","z":"fa91bcef.d5514","name":"Groups","label":"Group","tooltip":"","place":"Select group","group":"89b532ae.b8d6b8","order":8,"width":"6","height":"1","passthru":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"","x":340,"y":2020,"wires":[["b24bebf5.4db998"]]},{"id":"a6e799d1.1d7648","type":"ui_text_input","z":"fa91bcef.d5514","name":"Selected device","label":"Selected device","tooltip":"Select device in device list","group":"89b532ae.b8d6b8","order":2,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":420,"y":1780,"wires":[[]]},{"id":"da2b26de.c052c","type":"link in","z":"fa91bcef.d5514","name":"Z2M BIND DEVICE INP","links":["989bbbd.2ab9ac8"],"x":55,"y":1780,"wires":[["b971a87.b5a86d8"]]},{"id":"b971a87.b5a86d8","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"device","tot":"flow"},{"t":"set","p":"enabled","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":180,"y":1780,"wires":[["a6e799d1.1d7648"]]},{"id":"a037bbdc.20b578","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"5","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"System Notification","name":"","x":810,"y":1580,"wires":[]},{"id":"cec22d03.dcdbb","type":"function","z":"fa91bcef.d5514","name":"Format Data","func":"\nif (msg.payload == \"add\") {\n var action = \"Adding \";\n var what = \"group \";\n var cmd = \"add_group\";\n var groupname = flow.get('newgroupname');\n}\nif(msg.payload == \"remove\") {\n action = \"Removing \";\n what = \"group \";\n cmd = \"remove_group\";\n groupname = flow.get('groupname2');\n}\nvar msg1 = { payload: groupname, topic: \"zigbee2mqtt/bridge/config/\" + cmd};\nvar msg2 = { payload: action + what + groupname };\n\nreturn [msg1, msg2];\n","outputs":2,"noerr":0,"x":770,"y":1520,"wires":[["20f583a0.f64f34"],["a037bbdc.20b578"]]},{"id":"20f583a0.f64f34","type":"link out","z":"fa91bcef.d5514","name":"Z2M GROUP BIND OUT","links":["5dbc6a54.637a3c"],"x":875,"y":1500,"wires":[]},{"id":"cc0be7a0.df203","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"add","vt":"str"},{"t":"eq","v":"remove","vt":"str"},{"t":"eq","v":"cancel","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":630,"y":1520,"wires":[["cec22d03.dcdbb"],["cec22d03.dcdbb"],[]]},{"id":"59357001.2907a8","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"add","cancel":"cancel","topic":"Add group","name":"","x":470,"y":1500,"wires":[["cc0be7a0.df203"]]},{"id":"5e27b454.4c7664","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","outputs":1,"ok":"remove","cancel":"cancel","topic":"Remove group","name":"","x":470,"y":1540,"wires":[["cc0be7a0.df203"]]},{"id":"49deaab.f269054","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Add group <b>{{flow.newgroupname}}</b>?","output":"str","x":320,"y":1500,"wires":[["59357001.2907a8"]]},{"id":"8be4429d.4ab7c8","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Remove group <b>{{flow.groupname2}}</b>?","output":"str","x":320,"y":1540,"wires":[["5e27b454.4c7664"]]},{"id":"4b2728ef.f80a18","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"ea9d2517.e12668","order":15,"width":"6","height":"1","passthru":false,"label":"Add group","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Add","payloadType":"str","topic":"","x":110,"y":1500,"wires":[["49deaab.f269054"]]},{"id":"ebf0546.6fe8828","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"ea9d2517.e12668","order":17,"width":"6","height":"1","passthru":false,"label":"Remove group","tooltip":"","color":"","bgcolor":"","icon":"","payload":"Remove","payloadType":"str","topic":"","x":120,"y":1540,"wires":[["8be4429d.4ab7c8"]]},{"id":"4976bb77.f93974","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"groupname2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":1580,"wires":[[]]},{"id":"9c4402a9.11c0c","type":"link in","z":"fa91bcef.d5514","name":"Z2M GROUP UI","links":["be2e179c.0553a"],"x":55,"y":1580,"wires":[["da649e9.64200e"]]},{"id":"da649e9.64200e","type":"function","z":"fa91bcef.d5514","name":"Reformat for list","func":"newPayload = [];\nObject.keys(msg.payload.message).forEach(function(key) {\n var msgKey = msg.payload.message[key].friendly_name + \" (ID: \" + key + \")\";\n var msgVar = msg.payload.message[key].friendly_name;\n newentry = '{\"'+msgKey+'\":\" '+ msgVar+'\"}';\n newPayload.push(msg.payload.message[key].friendly_name);\n});\n\nnewMsg = {'payload': flow.get('groupname2'), 'options': newPayload}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":170,"y":1580,"wires":[["25d20e3e.64a07a"]]},{"id":"25d20e3e.64a07a","type":"ui_dropdown","z":"fa91bcef.d5514","name":"Groups","label":"","tooltip":"Selected group","place":"Select group","group":"ea9d2517.e12668","order":16,"width":"6","height":"1","passthru":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"","x":340,"y":1580,"wires":[["4976bb77.f93974"]]},{"id":"ec80356b.02d3f","type":"ui_text_input","z":"fa91bcef.d5514","name":"","label":"New group name","tooltip":"","group":"ea9d2517.e12668","order":14,"width":"6","height":"1","passthru":true,"mode":"text","delay":"100","topic":"","x":130,"y":1640,"wires":[["a792fd66.84c178"]]},{"id":"a792fd66.84c178","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"newgroupname","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":1640,"wires":[[]]},{"id":"7803417d.5b8378","type":"ui_text","z":"fa91bcef.d5514","group":"89b532ae.b8d6b8","order":7,"width":"6","height":"1","name":"Group membership","label":"<h3>Device group membership</h3>","format":"","layout":"row-left","x":130,"y":1980,"wires":[]},{"id":"d306083.8265df8","type":"ui_text","z":"fa91bcef.d5514","group":"89b532ae.b8d6b8","order":11,"width":"6","height":"1","name":"Bind device label","label":"<h3>Bind device</h3>","format":"","layout":"row-left","x":130,"y":2140,"wires":[]},{"id":"d7811939.737618","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":3,"width":0,"height":0,"name":"bridge status label","label":"<h3>Bridge status</h3>","format":"","layout":"row-left","x":140,"y":1380,"wires":[]},{"id":"9e76ef7.3aeab9","type":"ui_text","z":"fa91bcef.d5514","group":"89b532ae.b8d6b8","order":4,"width":0,"height":0,"name":"rename device label","label":"<h3>Rename device</h3>","format":"","layout":"row-left","x":660,"y":1780,"wires":[]},{"id":"96a15eb1.2f192","type":"debug","z":"fa91bcef.d5514","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":730,"y":740,"wires":[]},{"id":"1278b7f4.a43278","type":"ui_dropdown","z":"fa91bcef.d5514","name":"renderer","label":"Renderer","tooltip":"Graphviz renderer","place":"Select renderer","group":"d9241e5a.51bda","order":10,"width":"0","height":"0","passthru":false,"options":[{"label":"Circo","value":"circo","type":"str"},{"label":"Dot","value":"dot","type":"str"},{"label":"Neato","value":"neato","type":"str"},{"label":"Twopi","value":"twopi","type":"str"},{"label":"Fdp","value":"fdp","type":"str"}],"payload":"","topic":"","x":340,"y":2960,"wires":[["64b4bd6d.3d927c"]]},{"id":"64b4bd6d.3d927c","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"nwrenderengine","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":2960,"wires":[[]]},{"id":"579344cc.a010a4","type":"inject","z":"fa91bcef.d5514","name":"","topic":"","payload":"nwrenderengine","payloadType":"flow","repeat":"","crontab":"","once":true,"onceDelay":"1","x":140,"y":2960,"wires":[["1278b7f4.a43278"]]},{"id":"ae0f2725.2ef7f","type":"ui_text","z":"fa91bcef.d5514","group":"d9241e5a.51bda","order":8,"width":0,"height":0,"name":"nw map label","label":"<h3>Network map</h3>","format":"","layout":"row-left","x":430,"y":2880,"wires":[]},{"id":"d24e16e9.85cf18","type":"link out","z":"fa91bcef.d5514","name":"Z2M GENERIC IN","links":["b367636c.05e04"],"x":255,"y":100,"wires":[]},{"id":"b367636c.05e04","type":"link in","z":"fa91bcef.d5514","name":"Z2M INPUT","links":["d24e16e9.85cf18"],"x":75,"y":540,"wires":[["4cbfc717.c2d8a8"]]},{"id":"525a6763.2c6768","type":"inject","z":"fa91bcef.d5514","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":470,"y":320,"wires":[["64da17cd.7715e8"]]},{"id":"64da17cd.7715e8","type":"change","z":"fa91bcef.d5514","name":"","rules":[{"t":"set","p":"nwrenderengine","pt":"flow","to":"circo","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":320,"wires":[[]]},{"id":"4f391262.c111f4","type":"function","z":"fa91bcef.d5514","name":"Save last msg","func":"lastDevMsgs = flow.get('lastdevmsgs')||{};\n\nlastDevMsgs[msg.topic] = msg.payload;\nflow.set('lastdevmsgs', lastDevMsgs);\n\nreturn msg;","outputs":1,"noerr":0,"x":540,"y":740,"wires":[["96a15eb1.2f192"]]},{"id":"e17b64d5.f91288","type":"function","z":"fa91bcef.d5514","name":"Lookup device last msg","func":"lastmsgs = flow.get('lastdevmsgs');\n\nentry=lastmsgs[\"zigbee2mqtt/\"+msg.payload.title];\n\nnewPayload = [];\n\nnewentry = {\n 'title': '<h3>Last message</h3>'\n};\nnewPayload.push(newentry);\n\nfor(var prop in entry) {\n newentry = {\n 'title': '<b>' + prop + '</b>: ' + entry[prop],\n 'description': entry[prop]\n };\n newPayload.push(newentry);\n}\n\nmsg.payload = newPayload;\nreturn msg;\n","outputs":1,"noerr":0,"x":610,"y":920,"wires":[["921939e8.abf81"]]},{"id":"1f8e0c51.af69ac","type":"json","z":"fa91bcef.d5514","name":"","property":"payload","action":"","pretty":false,"x":390,"y":740,"wires":[["4f391262.c111f4"]]},{"id":"921939e8.abf81","type":"ui_list","z":"fa91bcef.d5514","group":"52856ead.61b81","name":"Selected device msg","order":2,"width":"6","height":"6","lineType":"one","actionType":"none","allowHTML":true,"outputs":0,"topic":"","x":840,"y":920,"wires":[]},{"id":"621ea741.65b2e8","type":"ui_button","z":"fa91bcef.d5514","name":"","group":"89b532ae.b8d6b8","order":6,"width":"6","height":"1","passthru":false,"label":"OTA for device","tooltip":"","color":"","bgcolor":"","icon":"","payload":"OTA","payloadType":"str","topic":"","x":220,"y":3380,"wires":[["9994ea1b.bb1608"]]},{"id":"9994ea1b.bb1608","type":"template","z":"fa91bcef.d5514","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Perform {{payload}} for device <b>{{flow.device}}?","output":"str","x":380,"y":3380,"wires":[["d4400a04.2cbed8"]]},{"id":"d4400a04.2cbed8","type":"ui_toast","z":"fa91bcef.d5514","position":"dialog","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"perform OTA","cancel":"cancel","raw":false,"topic":"Rename device","name":"","x":530,"y":3380,"wires":[["4ff910b6.ebb6c"]]},{"id":"4ff910b6.ebb6c","type":"switch","z":"fa91bcef.d5514","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"perform OTA","vt":"str"},{"t":"eq","v":"cancel","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":670,"y":3380,"wires":[["77d28bc5.fd704c"],[]]},{"id":"77d28bc5.fd704c","type":"function","z":"fa91bcef.d5514","name":"Format Data","func":"var devicename = flow.get('device');\n\nif (typeof devicename !== undefined) {\n msg1 = { 'payload': devicename, 'topic': 'zigbee2mqtt/bridge/ota_update/update'};\n msg2 = { 'payload': msg.payload + devicename};\n\n return [msg1, msg2];\n}","outputs":2,"noerr":0,"x":830,"y":3380,"wires":[["c4ee4cfc.c1bbc8"],["dcfbc250.f9379"]]},{"id":"dcfbc250.f9379","type":"ui_toast","z":"fa91bcef.d5514","position":"top right","displayTime":"5","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"","raw":false,"topic":"System Notification","name":"","x":890,"y":3440,"wires":[]},{"id":"c4ee4cfc.c1bbc8","type":"link out","z":"fa91bcef.d5514","name":"Z2M RENAME OUT","links":["5dbc6a54.637a3c"],"x":955,"y":3360,"wires":[]},{"id":"3091322a.2a29ee","type":"comment","z":"fa91bcef.d5514","name":"OTA","info":"","x":190,"y":3320,"wires":[]},{"id":"89b532ae.b8d6b8","type":"ui_group","z":"","name":"Device management","tab":"9509716.1a22d1","order":3,"disp":true,"width":"6","collapse":false},{"id":"6aeedb7a.2760d4","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"52856ead.61b81","type":"ui_group","z":"","name":"Device list","tab":"9509716.1a22d1","order":1,"disp":true,"width":"6","collapse":false},{"id":"d9241e5a.51bda","type":"ui_group","z":"","name":"Bridge configuration","tab":"9509716.1a22d1","order":5,"disp":true,"width":"6","collapse":true},{"id":"af8c7c50.c7554","type":"ui_group","z":"","name":"Network map","tab":"aa5f984f.7cbec","order":1,"disp":false,"width":"27","collapse":false},{"id":"ea9d2517.e12668","type":"ui_group","z":"","name":"Group configuration","tab":"9509716.1a22d1","order":4,"disp":true,"width":"6","collapse":true},{"id":"9509716.1a22d1","type":"ui_tab","z":"","name":"Z2M Admin","icon":"dashboard","disabled":false,"hidden":false},{"id":"aa5f984f.7cbec","type":"ui_tab","z":"","name":"Z2M Network map","icon":"dashboard","disabled":false,"hidden":true}]