Geräteprofil · Gateways
UniFi Controller
Voraussetzungen
- Ein UniFi Controller (Cloud Key, Dream Machine oder Software-Controller), erreichbar im lokalen Netz.
- Ein eigener Admin-Benutzer für nomos im Controller.
- Node-RED auf dem nomos Controller und ein MQTT-Broker, den nomos nutzt.
Einrichtung
- Im UniFi Controller einen eigenen Admin-Benutzer für nomos anlegen
- In nomos das Node-RED-Panel öffnen
- Die Palette node-red-contrib-unifi installieren
- Den folgenden Flow importieren:
JSON zum Einfügen
[{"id":"256964ab.cfd84c","type":"tab","label":"UniFi Interface","disabled":false,"info":"https://github.com/Isaksson/node-red-contrib-unifi\n\nhttps://flows.nodered.org/node/node-red-contrib-unifi\n\nhttps://www.npmjs.com/package/node-red-contrib-unifi"},{"id":"e8d3dd1e.593df","type":"Unifi","z":"256964ab.cfd84c","name":"UniFi","ip":"192.168.0.1","port":"8443","site":"default","command":1,"unifios":true,"x":570,"y":160,"wires":[["cedb14e.3e8a3e8","ba40ac37.10ada"]]},{"id":"cedb14e.3e8a3e8","type":"debug","z":"256964ab.cfd84c","name":"UNIFI","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":530,"y":220,"wires":[]},{"id":"b8f048b9.e3bd98","type":"function","z":"256964ab.cfd84c","name":"GET Health","func":"msg.topic = 'stat/unifi/health';\nmsg.payload = { command: \"Health\"};\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":80,"wires":[["6fcc74cc.802a4c"]]},{"id":"d5d7b2c3.be4a7","type":"inject","z":"256964ab.cfd84c","name":"TEST","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":80,"wires":[["b8f048b9.e3bd98"]]},{"id":"4cb54a43.d857e4","type":"mqtt out","z":"256964ab.cfd84c","name":"","topic":"","qos":"","retain":"","broker":"429b82b6.49b00c","x":1270,"y":160,"wires":[]},{"id":"b0f64253.78f6a","type":"inject","z":"256964ab.cfd84c","name":"1 minute interval","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":120,"wires":[["b8f048b9.e3bd98"]]},{"id":"11d3c9dc.0fabb6","type":"function","z":"256964ab.cfd84c","name":"PREPARE Health","func":"function recursive(obj) {\n if (Array.isArray(obj)) {\n for(var i = 0; i < obj.length; i++) {\n recursive(obj[i]);\n }\n } else if (typeof obj === 'object') {\n node.send({\n whitelist: ['num_user', 'num_guest', 'num_iot', 'status', 'num_ap', 'num_adopted', 'num_disabled', 'num_disconnected', 'num_pending', 'speedtest_status', 'speedtest_ping', 'drops'],\n topic: 'stat/unifi/health/' + obj.subsystem,\n payload: obj\n });\n }\n}\n\nrecursive(msg.payload);\nreturn null;","outputs":1,"noerr":0,"x":890,"y":80,"wires":[["64de39ca.17e478"]]},{"id":"ba40ac37.10ada","type":"switch","z":"256964ab.cfd84c","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"stat/unifi/health","vt":"str"},{"t":"eq","v":"stat/unifi/sitesysinfo","vt":"str"},{"t":"eq","v":"AccessDevices","vt":"str"},{"t":"eq","v":"RogueAccessPoints","vt":"str"},{"t":"eq","v":"ClientDevices","vt":"str"},{"t":"eq","v":"WLanSettings","vt":"str"}],"checkall":"true","repair":false,"outputs":6,"x":710,"y":160,"wires":[["11d3c9dc.0fabb6"],["d45c3b32.c844c8"],["ee7ad331.9a162"],["bdcdc654.0fa558"],["956d17ed.9c1b28"],["a4d0ee3b.5a0c4"]]},{"id":"4681afda.debdf","type":"mqtt in","z":"256964ab.cfd84c","name":"stat/unifi/health/#","topic":"stat/unifi/#","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":860,"y":560,"wires":[["dfbc7e3.677928"]]},{"id":"dfbc7e3.677928","type":"debug","z":"256964ab.cfd84c","name":"MQTT DEBUG","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1100,"y":560,"wires":[]},{"id":"e0f77157.39823","type":"function","z":"256964ab.cfd84c","name":"setAPLed","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"setAPLed\", \n device_id: msg.payload,\n mode: 'on'\n};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":560,"wires":[["6fcc74cc.802a4c"]]},{"id":"ccf5aa44.25dee8","type":"function","z":"256964ab.cfd84c","name":"GET SiteSysinfo","func":"msg.topic = 'stat/unifi/sitesysinfo';\nmsg.payload = {command: \"SiteSysinfo\"};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":300,"wires":[["6fcc74cc.802a4c"]]},{"id":"81e7e75c.486d08","type":"inject","z":"256964ab.cfd84c","name":"EXEC","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":300,"wires":[["ccf5aa44.25dee8"]]},{"id":"d45c3b32.c844c8","type":"function","z":"256964ab.cfd84c","name":"PREPARE SiteSysinfo","func":"function recursive(obj) {\n if (Array.isArray(obj)) {\n for(var i = 0; i < obj.length; i++) {\n recursive(obj[i]);\n }\n } else if (typeof obj === 'object') {\n node.send({\n whitelist: ['version', 'name', 'ubnt_device_type', 'udm_version'],\n topic: 'stat/unifi/sitesysinfo/' + obj.ubnt_device_type,\n payload: obj\n });\n }\n}\n\nrecursive(msg.payload);\nreturn null;","outputs":1,"noerr":0,"x":900,"y":300,"wires":[["64de39ca.17e478"]]},{"id":"ee50ab77.e86b38","type":"inject","z":"256964ab.cfd84c","name":"EXEC","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":340,"wires":[["98ee0b46.2c1e68"]]},{"id":"98ee0b46.2c1e68","type":"function","z":"256964ab.cfd84c","name":"GET AccessDevices","func":"msg.topic = 'AccessDevices';\nmsg.payload = {command: \"AccessDevices\"};\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":340,"wires":[["6fcc74cc.802a4c"]]},{"id":"ee7ad331.9a162","type":"function","z":"256964ab.cfd84c","name":"PREPARE AccessDevices","func":"function recursive(obj) {\n if (Array.isArray(obj)) {\n for(var i = 0; i < obj.length; i++) {\n recursive(obj[i]);\n }\n } else if (typeof obj === 'object') {\n node.send({\n output: 'debug',\n whitelist: ['name', 'ip', 'mac', 'model', 'version', 'serial', 'device_id'],\n topic: 'stat/unifi/accessdevices/' + obj.type,\n payload: obj\n });\n }\n}\n\nrecursive(msg.payload);\nreturn null;","outputs":1,"noerr":0,"x":910,"y":340,"wires":[["64de39ca.17e478"]]},{"id":"50d0364d.38da58","type":"debug","z":"256964ab.cfd84c","name":"DEBUG","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1280,"y":220,"wires":[]},{"id":"d0b02edc.64799","type":"comment","z":"256964ab.cfd84c","name":"GET DATA AND ID'S","info":"","x":240,"y":260,"wires":[]},{"id":"64de39ca.17e478","type":"function","z":"256964ab.cfd84c","name":"Whitelisting","func":"if (msg.whitelist) {\n const keys = Object.keys(msg.payload);\n for(var i = 0; i < keys.length; i++) {\n if (!msg.whitelist.includes(keys[i])) {\n delete msg.payload[keys[i]];\n }\n }\n}\nreturn msg;","outputs":1,"noerr":0,"x":1110,"y":160,"wires":[["84716a.d3f42e98"]]},{"id":"84716a.d3f42e98","type":"switch","z":"256964ab.cfd84c","name":"","property":"output","propertyType":"msg","rules":[{"t":"eq","v":"debug","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":1270,"y":100,"wires":[["50d0364d.38da58"],["4cb54a43.d857e4"]]},{"id":"5270ac3.f5b9854","type":"comment","z":"256964ab.cfd84c","name":"AUTOMATIC POLLING","info":"","x":260,"y":40,"wires":[]},{"id":"61fc8ac9.5dead4","type":"inject","z":"256964ab.cfd84c","name":"EXEC","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":380,"wires":[["f5d7bf22.2242f"]]},{"id":"f5d7bf22.2242f","type":"function","z":"256964ab.cfd84c","name":"GET RogueAccessPoints","func":"msg.topic = 'RogueAccessPoints';\nmsg.payload = {command: \"RogueAccessPoints\"};\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":380,"wires":[["6fcc74cc.802a4c"]]},{"id":"bdcdc654.0fa558","type":"function","z":"256964ab.cfd84c","name":"PREPARE RogueAccessPoints","func":"function recursive(obj) {\n if (Array.isArray(obj)) {\n for(var i = 0; i < obj.length; i++) {\n recursive(obj[i]);\n }\n } else if (typeof obj === 'object') {\n node.send({\n output: 'debug',\n whitelist: ['ap_mac', 'age', 'band', 'bw', 'channel', 'noise', 'rssi', 'security', 'last_seen'],\n topic: 'stat/unifi/rogueaccesspoints/' + obj.essid,\n payload: obj\n });\n }\n}\n\nrecursive(msg.payload);\nreturn null;","outputs":1,"noerr":0,"x":930,"y":380,"wires":[["64de39ca.17e478"]]},{"id":"93d905b7.f2d8b8","type":"function","z":"256964ab.cfd84c","name":"GET ClientDevices","func":"msg.topic = 'ClientDevices';\nmsg.payload = {command: \"ClientDevices\"};\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":420,"wires":[["6fcc74cc.802a4c"]]},{"id":"f02ce7bc.8039f8","type":"inject","z":"256964ab.cfd84c","name":"EXEC","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":420,"wires":[["93d905b7.f2d8b8"]]},{"id":"956d17ed.9c1b28","type":"function","z":"256964ab.cfd84c","name":"PREPARE ClientDevices","func":"function recursive(obj) {\n if (Array.isArray(obj)) {\n for(var i = 0; i < obj.length; i++) {\n recursive(obj[i]);\n }\n } else if (typeof obj === 'object') {\n node.send({\n output: 'debug',\n whitelist: ['name', 'oui', 'mac', 'is_guest', 'first_seen', 'last_seen', 'hostname', 'score', 'network', 'ip', 'uptime'],\n topic: 'stat/unifi/clientdevices/' + obj.essid,\n payload: obj\n });\n }\n}\n\nrecursive(msg.payload);\nreturn null;","outputs":1,"noerr":0,"x":910,"y":420,"wires":[["64de39ca.17e478"]]},{"id":"45d62241.e9eafc","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/ledon","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":180,"y":560,"wires":[["e0f77157.39823"]]},{"id":"4695c52d.169bcc","type":"comment","z":"256964ab.cfd84c","name":"MQTT API'S","info":"","x":221,"y":520,"wires":[]},{"id":"b72f9169.21bfd","type":"function","z":"256964ab.cfd84c","name":"setAPLed","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"setAPLed\", \n device_id: msg.payload,\n mode: 'off'\n};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":620,"wires":[["6fcc74cc.802a4c"]]},{"id":"8aa59cf6.b4bae","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/ledoff","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":180,"y":620,"wires":[["b72f9169.21bfd"]]},{"id":"9d6d7942.3166f8","type":"comment","z":"256964ab.cfd84c","name":"MQTT DEBUG","info":"","x":860,"y":520,"wires":[]},{"id":"1f778612.5f593a","type":"inject","z":"256964ab.cfd84c","name":"EXEC","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":460,"wires":[["a6d85a49.deefc8"]]},{"id":"a6d85a49.deefc8","type":"function","z":"256964ab.cfd84c","name":"GET WLanSettings","func":"msg.topic = 'WLanSettings';\nmsg.payload = {command: \"WLanSettings\"};\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":460,"wires":[["6fcc74cc.802a4c"]]},{"id":"a4d0ee3b.5a0c4","type":"function","z":"256964ab.cfd84c","name":"PREPARE WLanSettings","func":"function recursive(obj) {\n if (Array.isArray(obj)) {\n for(var i = 0; i < obj.length; i++) {\n recursive(obj[i]);\n }\n } else if (typeof obj === 'object') {\n node.send({\n output: 'debug',\n whitelist: ['_id', 'name', 'is_guest', 'hide_ssid', 'wlangroup_id', 'wpa_mode', 'security', 'enabled', 'vlan_enabled'],\n topic: 'stat/unifi/wlansettings/' + obj.name,\n payload: obj\n });\n }\n}\n\nrecursive(msg.payload);\nreturn null;","outputs":1,"noerr":0,"x":910,"y":460,"wires":[["64de39ca.17e478"]]},{"id":"cbfff594.228198","type":"function","z":"256964ab.cfd84c","name":"DisableWLan","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"DisableWLan\", \n wlan_id: msg.payload,\n disable: false\n};\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":680,"wires":[["6fcc74cc.802a4c"]]},{"id":"97ddbff2.4d4a3","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/wlanon","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":180,"y":680,"wires":[["cbfff594.228198"]]},{"id":"c9b4d52b.63ae18","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/wlanoff","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":180,"y":740,"wires":[["22140af9.d88a36"]]},{"id":"22140af9.d88a36","type":"function","z":"256964ab.cfd84c","name":"DisableWLan","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"DisableWLan\", \n wlan_id: msg.payload,\n disable: true\n};\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":740,"wires":[["6fcc74cc.802a4c"]]},{"id":"9cf90d93.10bb1","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/blockclient","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":200,"y":800,"wires":[["3d278cfc.529ed4"]]},{"id":"3d278cfc.529ed4","type":"function","z":"256964ab.cfd84c","name":"blockClient","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"blockClient\", \n mac: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":800,"wires":[["6fcc74cc.802a4c"]]},{"id":"1b8a3b75.8e4bb5","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/unblockclient","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":200,"y":860,"wires":[["fbf0ddba.bf01e"]]},{"id":"fbf0ddba.bf01e","type":"function","z":"256964ab.cfd84c","name":"unblockClient","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"unblockClient\", \n mac: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":860,"wires":[["6fcc74cc.802a4c"]]},{"id":"258ead8c.c2e7d2","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/reconnectclient","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":210,"y":920,"wires":[["737a495a.953268"]]},{"id":"737a495a.953268","type":"function","z":"256964ab.cfd84c","name":"reconnectClient","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"reconnectClient\", \n mac: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":920,"wires":[["6fcc74cc.802a4c"]]},{"id":"7e77c651.879bf8","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/authorizeguest60","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":220,"y":980,"wires":[["36720a77.c895b6"]]},{"id":"36720a77.c895b6","type":"function","z":"256964ab.cfd84c","name":"authorizeGuest (60min)","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"authorizeGuest\", \n mac: msg.payload,\n minutes: 60\n};\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":980,"wires":[["6fcc74cc.802a4c"]]},{"id":"e8692940.f119a8","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/authorizeguest30","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":220,"y":1040,"wires":[["3ff22bc4.92dd54"]]},{"id":"3ff22bc4.92dd54","type":"function","z":"256964ab.cfd84c","name":"authorizeGuest (30min)","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"authorizeGuest\", \n mac: msg.payload,\n minutes: 30\n};\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":1040,"wires":[["6fcc74cc.802a4c"]]},{"id":"b66b1ac4.2a7be8","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/authorizeguest120","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":220,"y":1100,"wires":[["d7187abd.2b0638"]]},{"id":"d7187abd.2b0638","type":"function","z":"256964ab.cfd84c","name":"authorizeGuest (120min)","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"authorizeGuest\", \n mac: msg.payload,\n minutes: 120\n};\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":1100,"wires":[["6fcc74cc.802a4c"]]},{"id":"8d2f1fd9.2b6f3","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/restartap","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":190,"y":1160,"wires":[["18a97c86.23c033"]]},{"id":"18a97c86.23c033","type":"function","z":"256964ab.cfd84c","name":"restartAP","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"restartAP\", \n mac: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":1160,"wires":[["6fcc74cc.802a4c"]]},{"id":"7feadbd5.59f9b4","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/enableap","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":190,"y":1220,"wires":[["1d4872f4.fa83bd"]]},{"id":"1d4872f4.fa83bd","type":"function","z":"256964ab.cfd84c","name":"enableAP","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"enableAP\", \n device_id: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":1220,"wires":[["6fcc74cc.802a4c"]]},{"id":"875a9fcc.68b4d","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/disableap","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":190,"y":1280,"wires":[["52419791.542d68"]]},{"id":"52419791.542d68","type":"function","z":"256964ab.cfd84c","name":"disableAP","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"disableAP\", \n device_id: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":1280,"wires":[["6fcc74cc.802a4c"]]},{"id":"9eb59097.bf2f1","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/setlocate","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":190,"y":1340,"wires":[["cd0c0004.23b6b"]]},{"id":"cd0c0004.23b6b","type":"function","z":"256964ab.cfd84c","name":"setLocate","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"setLocate\", \n mac: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":1340,"wires":[["6fcc74cc.802a4c"]]},{"id":"e12b4bc.4808cb8","type":"mqtt in","z":"256964ab.cfd84c","name":"","topic":"cmd/unifi/unsetlocate","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":200,"y":1400,"wires":[["d76b2229.14831"]]},{"id":"d76b2229.14831","type":"function","z":"256964ab.cfd84c","name":"unsetLocate","func":"msg.topic = 'none';\nmsg.payload = { \n command: \"unsetLocate\", \n mac: msg.payload\n};\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":1400,"wires":[["6fcc74cc.802a4c"]]},{"id":"cb9fa226.0110d","type":"mqtt in","z":"256964ab.cfd84c","name":"cmd/unifi/#","topic":"stat/unifi/#","qos":"2","datatype":"auto","broker":"429b82b6.49b00c","x":850,"y":620,"wires":[["dfbc7e3.677928"]]},{"id":"3d63c443.f1303c","type":"comment","z":"256964ab.cfd84c","name":"YOUR UNIFI CONTROLLER","info":"","x":600,"y":120,"wires":[]},{"id":"6fcc74cc.802a4c","type":"delay","z":"256964ab.cfd84c","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"2","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":400,"y":160,"wires":[["e8d3dd1e.593df"]]},{"id":"429b82b6.49b00c","type":"mqtt-broker","z":"","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}] - Den UniFi-Knoten (direkt unter „YOUR UNIFI CONTROLLER”) mit den Zugangsdaten aus Schritt 1 einrichten
- In der nomos Konfiguration unter Skills → Add-ons das UniFi Controller-Profil importieren
- Gerät anlegen
- Einen Namen vergeben und unifi als MQTT-Topic eintragen
Datenbereich
Der Flow fragt den Controller zyklisch ab und veröffentlicht die Werte; nomos liest mit.
- Internet (
www_ok), WAN (wan_ok), LAN (lan_ok), WLAN (wlan_ok) und VPN (vpn_ok): je ein Ja/Nein aus dem Gesundheitsbericht des Controllers - Geräte im LAN: Nutzer, Gäste, IoT-Geräte und getrennte Geräte, je als Zahl
- Geräte im WLAN: Nutzer, Gäste, IoT-Geräte, Access Points, abgeschaltete und getrennte, je als Zahl
- Erreichbar (
reachable): abgeleitet aus dem LAN-Zustand des Controllers
Auslösbar sind: LED am Access Point ein/aus, Access Point neu starten, Access Point aktivieren/deaktivieren, Locate ein/aus, WLAN ein/aus, einen Client sperren, entsperren oder neu verbinden sowie einen Gast für 30, 60 oder 120 Minuten freischalten.
Hinweise
- Befehle laufen über
cmd/<Topic>/…, die Werte überstat/<Topic>/…. Dascmdist hier ohnen— anders als bei den MQTT-Vorlagen. Der Flow oben hört auf genau diese Topics. - Die Befehle brauchen ein Ziel. Access Point, Client oder WLAN werden im Flow festgelegt, nicht in nomos; wer mehrere Access Points schalten will, legt die Befehle im Flow entsprechend mehrfach an.
- Die Zahlen kommen aus dem Gesundheitsbericht, nicht aus einer Geräteliste. Sie zeigen, wie viele Geräte verbunden sind, nicht welche.
- Ein eigener Admin-Benutzer ist kein Luxus: Ändert sich das Passwort des persönlichen Kontos, steht sonst der Flow still.