Skip to content

Instantly share code, notes, and snippets.

@nate8199
Last active June 2, 2019 23:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nate8199/882ef4fefb63e700c8c31be60275d9b0 to your computer and use it in GitHub Desktop.
Save nate8199/882ef4fefb63e700c8c31be60275d9b0 to your computer and use it in GitHub Desktop.
OPNSense API Alias toggle

This flow connects to your opnsense router to grab the alias list, and then save it to a global array.

It allows you to see status of each and toggle on/off each

I have mine connected to a discord bot, with a lowercase node to get rid of the capital letters my phone inserts, and a switch reading the msg.channel.id to route it to this flow.

It all goes back out to a discord channel you can set.

https://flows.nodered.org/node/node-red-contrib-lower

This assumes you have a opnsense router with aliases made up and the relevant firewall rules, and have discord and already have a bot.

You could setup a dashboard I'm sure to use this, easier to just chat IMO.

I used this page to try and figure out the API, the alias stuff isn't documented yet.

https://github.com/opnsense/core/blob/master/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php

The firewall basics are as follows

Alias:Thing 1, LAN firewall rule which blocks all traffic from this alias.

When the alias is enabled, its traffic is blocked, disabled allows traffic.

Alias:Special, Lan firewall rule which allows all traffic from this alias.

When the alias is enabled its traffic is allowed, disabled just skips this rule.

I have this special rule right above my scheduled block rule for all their devices, allows me to give them extra time online if I want to.

The IP could also be a switch to set it if you had more than one router. I would use it this way to block my kids internet at grandmas house with only this node-red instance, zerotier installed on opnsense allows me to get to grandmas router remotely.

[{"id":"b101138b.b75dc","type":"tab","label":"API","disabled":false,"info":""},{"id":"7f93e35f.a10afc","type":"http request","z":"b101138b.b75dc","name":"API","method":"use","ret":"obj","paytoqs":false,"url":"","tls":"","proxy":"","authType":"basic","x":1350,"y":380,"wires":[["88e855d8.8f4c38"]]},{"id":"68e094ed.7a7e1c","type":"http request","z":"b101138b.b75dc","name":"API","method":"use","ret":"obj","paytoqs":false,"url":"","tls":"","proxy":"","authType":"basic","x":1350,"y":300,"wires":[["ce54ac22.a8009"]]},{"id":"4d904ab6.78dcf4","type":"link in","z":"b101138b.b75dc","name":"from discord","links":[],"x":95,"y":220,"wires":[["f6385fe.e2782a"]]},{"id":"4f78a0d4.c15fa","type":"http request","z":"b101138b.b75dc","name":"API","method":"use","ret":"obj","paytoqs":false,"url":"","tls":"","proxy":"","authType":"basic","x":430,"y":180,"wires":[["dd9d98c9.1cc018"]]},{"id":"2eea401.09af5c","type":"switch","z":"b101138b.b75dc","name":"on/off","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"refresh","vt":"str"},{"t":"cont","v":"on","vt":"str"},{"t":"cont","v":"off","vt":"str"},{"t":"cont","v":"status","vt":"str"},{"t":"cont","v":"reload","vt":"str"},{"t":"cont","v":"help","vt":"str"}],"checkall":"false","repair":false,"outputs":6,"x":130,"y":360,"wires":[["211a0130.cd679e"],["4a79eb16.d18fe4"],["1db73fb5.1dfea"],["456dd626.00e4e8"],[],["4f9a6ba5.6ff1b4"]]},{"id":"64b29252.e4adfc","type":"link out","z":"b101138b.b75dc","name":"out to discord","links":[],"x":1875,"y":500,"wires":[]},{"id":"f977713e.5d714","type":"change","z":"b101138b.b75dc","name":"Discord Channel","rules":[{"t":"set","p":"channel.id","pt":"msg","to":"put your number here","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1820,"y":460,"wires":[["64b29252.e4adfc"]]},{"id":"4f9a6ba5.6ff1b4","type":"template","z":"b101138b.b75dc","name":"help","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Aliases on/off\n\nThe schedule blocks like normal,\nThese block before the schedule can enable\n\nthing1\nthing2\nconsoles\nkids\nspecial\n","output":"str","x":610,"y":460,"wires":[["f977713e.5d714"]]},{"id":"211a0130.cd679e","type":"function","z":"b101138b.b75dc","name":"refresh_aliases","func":"// this grabs all the aliases and pushes them into a global array\nvar ip = msg.ip;\n\nvar msg1 = {\n name: msg.topic,\n what: msg.payload,\n method: \"GET\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/searchItem\"};\n\nreturn msg1;","outputs":1,"noerr":0,"x":400,"y":140,"wires":[["4f78a0d4.c15fa"]]},{"id":"98faebed.5c7168","type":"inject","z":"b101138b.b75dc","name":"5am refresh","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"00 05 * * *","once":false,"onceDelay":"10","x":170,"y":180,"wires":[["211a0130.cd679e"]]},{"id":"dd9d98c9.1cc018","type":"splitter","z":"b101138b.b75dc","name":"","property":"payload.rows","x":430,"y":220,"wires":[["6f9fb97c.8bc448"]]},{"id":"78bc527c.3d4b5c","type":"function","z":"b101138b.b75dc","name":"block","func":"// for block rules with an alias\n// this is to disable an alias with on, enable with off\n\nvar name = msg.payload.name;\nvar uuid = msg.payload.uuid;\nvar time = new Date().toLocaleString();\n\nvar bool1 = context.set('bool',0);\nif (msg.payload.enabled ==\"1\"){\n context.set('bool',1);\n}\nvar stat1 = context.set('stat',\"on\");\nif (msg.payload.enabled ==\"1\"){\n context.set('stat',\"blocked\");\n}\n\nvar stat = context.get('stat');\n\nvar bool = context.get('bool');\n\nvar all = {\"name\":\"\"+name+\"\", \"uuid\":\"\"+uuid+\"\", \"stat\": \"\"+stat+\"\", \"bool\": \"\"+bool+\"\", \"time\": \"\"+time+\"\"};\n\nglobal.set(\"\"+name+\"\", all);\n\nmsg1 = {payload: \"\"+name+\"\", uuid:\"\"+uuid+\"\", status: \"\"+stat+\"\", bool: \"\"+bool+\"\", time: \"\"+time+\"\"};\nnode.send([ msg1 ]);\n\n\n","outputs":1,"noerr":0,"x":770,"y":140,"wires":[["aade3020.54721"]]},{"id":"aade3020.54721","type":"debug","z":"b101138b.b75dc","name":"aliases","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":930,"y":140,"wires":[]},{"id":"6f9fb97c.8bc448","type":"switch","z":"b101138b.b75dc","name":"","property":"payload.name","propertyType":"msg","rules":[{"t":"eq","v":"thing1","vt":"str"},{"t":"eq","v":"thing2","vt":"str"},{"t":"eq","v":"consoles","vt":"str"},{"t":"eq","v":"kids","vt":"str"},{"t":"eq","v":"special","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":6,"x":610,"y":160,"wires":[["78bc527c.3d4b5c"],["78bc527c.3d4b5c"],["78bc527c.3d4b5c"],["78bc527c.3d4b5c"],["4c9bf114.6799a"],[]]},{"id":"4c9bf114.6799a","type":"function","z":"b101138b.b75dc","name":"allow","func":"// for allow rules with an alias\n// this is inverted to enable an alias with on, disable with off\n\n\nvar name = msg.payload.name;\nvar uuid = msg.payload.uuid;\nvar time = new Date().toLocaleString();\n\nvar bool1 = context.set('bool',0);\nif (msg.payload.enabled ==\"1\"){\n context.set('bool',1);\n}\nvar stat1 = context.set('stat',\"disabled\");\nif (msg.payload.enabled ==\"1\"){\n context.set('stat',\"enabled\");\n}\n\nvar stat = context.get('stat');\n\nvar bool = context.get('bool');\n\nvar all = {\"name\":\"\"+name+\"\", \"uuid\":\"\"+uuid+\"\", \"stat\": \"\"+stat+\"\", \"bool\": \"\"+bool+\"\", \"time\": \"\"+time+\"\"};\n\nglobal.set(\"\"+name+\"\", all);\n\nmsg1 = {payload: \"\"+name+\"\", uuid:\"\"+uuid+\"\", status: \"\"+stat+\"\", bool: \"\"+bool+\"\", time: \"\"+time+\"\"};\nnode.send([ msg1 ]);\n\n\n","outputs":1,"noerr":0,"x":770,"y":180,"wires":[["aade3020.54721"]]},{"id":"8266b143.436ac","type":"switch","z":"b101138b.b75dc","name":"sort","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"kenny","vt":"str"},{"t":"cont","v":"zachary","vt":"str"},{"t":"cont","v":"consoles","vt":"str"},{"t":"cont","v":"kids","vt":"str"},{"t":"cont","v":"special","vt":"str"},{"t":"cont","v":"all","vt":"str"}],"checkall":"false","repair":false,"outputs":6,"x":430,"y":340,"wires":[["8984008f.68cb"],["701d7cf8.8f7454"],["e7c46a3c.d310b8"],["46a435a3.b42d3c"],["8d82045a.3694b8"],["8d82045a.3694b8","46a435a3.b42d3c","e7c46a3c.d310b8","701d7cf8.8f7454","8984008f.68cb"]]},{"id":"8984008f.68cb","type":"change","z":"b101138b.b75dc","name":"thing1","rules":[{"t":"set","p":"topic","pt":"msg","to":"thing1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":260,"wires":[["aee3b7ec.c40048"]]},{"id":"701d7cf8.8f7454","type":"change","z":"b101138b.b75dc","name":"thing2","rules":[{"t":"set","p":"topic","pt":"msg","to":"thing2","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":300,"wires":[["aee3b7ec.c40048"]]},{"id":"e7c46a3c.d310b8","type":"change","z":"b101138b.b75dc","name":"console","rules":[{"t":"set","p":"topic","pt":"msg","to":"console","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":340,"wires":[["aee3b7ec.c40048"]]},{"id":"46a435a3.b42d3c","type":"change","z":"b101138b.b75dc","name":"kids","rules":[{"t":"set","p":"topic","pt":"msg","to":"kids","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":380,"wires":[["aee3b7ec.c40048"]]},{"id":"8d82045a.3694b8","type":"change","z":"b101138b.b75dc","name":"special","rules":[{"t":"set","p":"topic","pt":"msg","to":"special","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":420,"wires":[["48b665d.0e5ca9c"]]},{"id":"8dd36d96.b211a","type":"comment","z":"b101138b.b75dc","name":"aliases","info":"my aliases are simple\n\nthing1/2 is that kids devices\n\nconsoles is consoles\n\nkids is both of their devices and consoles\n\nspecial is to bypass their time scheduled rule\nits allow rule is before the sheduled rule","x":350,"y":100,"wires":[]},{"id":"4a79eb16.d18fe4","type":"change","z":"b101138b.b75dc","name":"on","rules":[{"t":"set","p":"what","pt":"msg","to":"on","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":300,"wires":[["8266b143.436ac"]]},{"id":"1db73fb5.1dfea","type":"change","z":"b101138b.b75dc","name":"off","rules":[{"t":"set","p":"what","pt":"msg","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":340,"wires":[["8266b143.436ac"]]},{"id":"456dd626.00e4e8","type":"change","z":"b101138b.b75dc","name":"status","rules":[{"t":"set","p":"what","pt":"msg","to":"status","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":380,"wires":[["8266b143.436ac"]]},{"id":"aee3b7ec.c40048","type":"delay","z":"b101138b.b75dc","name":"limit","pauseType":"queue","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":770,"y":240,"wires":[["10825721.c10149"]]},{"id":"8461b0e0.5ae84","type":"template","z":"b101138b.b75dc","name":"status","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload}}'s internet is {{status}}\n","output":"str","x":1630,"y":240,"wires":[["50f6eea5.0d242","f977713e.5d714"]]},{"id":"48b665d.0e5ca9c","type":"delay","z":"b101138b.b75dc","name":"limit","pauseType":"queue","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":770,"y":420,"wires":[["6d924759.9aaa28"]]},{"id":"10825721.c10149","type":"switch","z":"b101138b.b75dc","name":"sort","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"on","vt":"str"},{"t":"cont","v":"off","vt":"str"},{"t":"cont","v":"status","vt":"str"},{"t":"cont","v":"reload","vt":"str"}],"checkall":"false","repair":false,"outputs":4,"x":770,"y":300,"wires":[["e5e5d49e.0c34a8"],["270cd1c6.31dcbe"],["bb9edb5f.742168"],[]]},{"id":"bb9edb5f.742168","type":"function","z":"b101138b.b75dc","name":"status","func":"var payload = msg.what;\nvar topic = msg.topic;\nvar array = global.get(\"\"+topic+\"\");\nvar uuid = array[\"uuid\"];\nvar stat = array[\"stat\"];\n\nnode.status({fill:\"red\", shape:\"ring\", text: topic});\n\nvar stats = {payload: \"\"+topic+\"\", status: \"\"+stat+\"\"};\n\n\n///// Status Check ////\n{\nif(payload === \"status\");\n\n node.send([ stats ]);\n \n}\n","outputs":1,"noerr":0,"x":970,"y":380,"wires":[["7f729c5d.b21b54"]]},{"id":"e5e5d49e.0c34a8","type":"function","z":"b101138b.b75dc","name":"on","func":"var ip = msg.ip;\nvar payload = msg.what;\nvar topic = msg.topic;\nvar array = global.get(\"\"+topic+\"\");\nvar uuid = array[\"uuid\"];\nvar bool = array[\"bool\"];\nvar stat = array[\"stat\"];\n\nnode.status({fill:\"red\", shape:\"ring\", text: topic});\n\nvar stats = {payload: \"\"+topic+\"\", status: \"\"+stat+\"\"};\n\nvar refresh = {what: \"\"+payload+\"\", topic: \"\"+topic+\"\", ip: \"\"+ip+\"\"};\n \nvar toggle = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/toggleItem/\"+uuid+\"\",\n payload:\"\"};\n \nvar reload = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/reconfigure\",\n };\n \n\n\n///// ON Check ////\nif(array[\"bool\"] !== \"1\"){\n node.send([ stats, null, null, null ]);\n}\nelse{\n node.send([ null, toggle, reload, refresh ]);\n \n}","outputs":4,"noerr":0,"x":970,"y":220,"wires":[["7f729c5d.b21b54"],["13eedcaf.7762c3"],["f324f4f9.adee68"],["3684332b.766d0c"]]},{"id":"2cc86ba.6c80694","type":"debug","z":"b101138b.b75dc","name":"toggle","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1630,"y":280,"wires":[]},{"id":"dddb3676.065448","type":"debug","z":"b101138b.b75dc","name":"reload","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1630,"y":360,"wires":[]},{"id":"df02d400.4b1408","type":"debug","z":"b101138b.b75dc","name":"refresh","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1390,"y":420,"wires":[]},{"id":"50f6eea5.0d242","type":"debug","z":"b101138b.b75dc","name":"no change","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1810,"y":240,"wires":[]},{"id":"f324f4f9.adee68","type":"delay","z":"b101138b.b75dc","name":"reload","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1210,"y":380,"wires":[["7f93e35f.a10afc"]]},{"id":"3684332b.766d0c","type":"delay","z":"b101138b.b75dc","name":"refresh","pauseType":"delay","timeout":"2500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1210,"y":420,"wires":[["df02d400.4b1408","c35407e8.89f068","33bff14.a8aa60e"]]},{"id":"270cd1c6.31dcbe","type":"function","z":"b101138b.b75dc","name":"off","func":"var ip = msg.ip;\nvar payload = msg.what;\nvar topic = msg.topic;\nvar array = global.get(\"\"+topic+\"\");\nvar uuid = array[\"uuid\"];\nvar bool = array[\"bool\"];\nvar stat = array[\"stat\"];\n\nnode.status({fill:\"red\", shape:\"ring\", text: topic});\n\nvar stats = {payload: \"\"+topic+\"\", status: \"\"+stat+\"\"};\n\nvar refresh = {what: \"\"+payload+\"\", topic: \"\"+topic+\"\", ip: \"\"+ip+\"\"};\n \nvar toggle = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/toggleItem/\"+uuid+\"\",\n payload:\"\"};\n \nvar reload = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/reconfigure\",\n };\n \n\n\n///// OFF Check ////\nif(array[\"bool\"] !== \"0\"){\n node.send([ stats, null, null, null ]);\n}\nelse{\n node.send([ null, toggle, reload, refresh ]);\n \n}","outputs":4,"noerr":0,"x":970,"y":300,"wires":[["7f729c5d.b21b54"],["13eedcaf.7762c3"],["f324f4f9.adee68"],["3684332b.766d0c"]]},{"id":"603734e4.1f864c","type":"function","z":"b101138b.b75dc","name":"invert on","func":"var ip = msg.ip;\nvar payload = msg.what;\nvar topic = msg.topic;\nvar array = global.get(\"\"+topic+\"\");\nvar uuid = array[\"uuid\"];\nvar bool = array[\"bool\"];\nvar stat = array[\"stat\"];\n\nnode.status({fill:\"red\", shape:\"ring\", text: topic});\n\nvar stats = {payload: \"\"+topic+\"\", status: \"\"+stat+\"\"};\n\nvar refresh = {what: \"\"+payload+\"\", topic: \"\"+topic+\"\", ip: \"\"+ip+\"\"};\n \nvar toggle = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/toggleItem/\"+uuid+\"\",\n payload:\"\"};\n \nvar reload = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/reconfigure\",\n };\n \n\n\n///// ON Check ////\nif(array[\"bool\"] !== \"0\"){\n node.send([ stats, null, null, null ]);\n}\nelse{\n node.send([ null, toggle, reload, refresh ]);\n \n}","outputs":4,"noerr":0,"x":980,"y":440,"wires":[["7f729c5d.b21b54"],["13eedcaf.7762c3","4bc99f77.f420b"],["f324f4f9.adee68"],["3684332b.766d0c"]]},{"id":"249c62c8.2aac5e","type":"function","z":"b101138b.b75dc","name":"invert off","func":"var ip = msg.ip;\nvar payload = msg.what;\nvar topic = msg.topic;\nvar array = global.get(\"\"+topic+\"\");\nvar uuid = array[\"uuid\"];\nvar bool = array[\"bool\"];\nvar stat = array[\"stat\"];\n\nnode.status({fill:\"red\", shape:\"ring\", text: topic});\n\nvar stats = {payload: \"\"+topic+\"\", status: \"\"+stat+\"\"};\n\nvar refresh = {what: \"\"+payload+\"\", topic: \"\"+topic+\"\", ip: \"\"+ip+\"\"};\n \nvar toggle = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/toggleItem/\"+uuid+\"\",\n payload:\"\"};\n \nvar reload = {\n\n method: \"POST\",\n header: \"Content-Type: application/json\",\n url: \"http://\"+ip+\"/api/firewall/alias/reconfigure\",\n };\n \n\n\n///// OFF Check ////\nif(array[\"bool\"] !== \"1\"){\n node.send([ stats, null, null, null ]);\n}\nelse{\n node.send([ null, toggle, reload, refresh ]);\n \n}","outputs":4,"noerr":0,"x":980,"y":520,"wires":[["7f729c5d.b21b54"],["13eedcaf.7762c3"],["f324f4f9.adee68"],["3684332b.766d0c"]]},{"id":"13eedcaf.7762c3","type":"delay","z":"b101138b.b75dc","name":"toggle","pauseType":"delay","timeout":"10","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1210,"y":300,"wires":[["68e094ed.7a7e1c"]]},{"id":"c35407e8.89f068","type":"link out","z":"b101138b.b75dc","name":"","links":["27c873ef.bdb90c"],"x":1315,"y":420,"wires":[]},{"id":"27c873ef.bdb90c","type":"link in","z":"b101138b.b75dc","name":"refresh alias","links":["c35407e8.89f068"],"x":255,"y":140,"wires":[["211a0130.cd679e"]]},{"id":"ad263a93.c75368","type":"template","z":"b101138b.b75dc","name":"toggle","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Toggle didn't work\n","output":"str","x":1630,"y":320,"wires":[["fd6e0cf7.e4051","f977713e.5d714"]]},{"id":"33bff14.a8aa60e","type":"delay","z":"b101138b.b75dc","name":"status","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1210,"y":460,"wires":[["5787bcd0.67adc4"]]},{"id":"3363c13b.c9439e","type":"link in","z":"b101138b.b75dc","name":"","links":["5787bcd0.67adc4"],"x":855,"y":380,"wires":[["bb9edb5f.742168"]]},{"id":"5787bcd0.67adc4","type":"link out","z":"b101138b.b75dc","name":"","links":["3363c13b.c9439e"],"x":1295,"y":480,"wires":[]},{"id":"88e855d8.8f4c38","type":"switch","z":"b101138b.b75dc","name":"error","property":"payload.status","propertyType":"msg","rules":[{"t":"cont","v":"ok","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":1490,"y":380,"wires":[["dddb3676.065448"],["48ca5a1d.a436b4"]]},{"id":"ce54ac22.a8009","type":"switch","z":"b101138b.b75dc","name":"error","property":"payload.changed","propertyType":"msg","rules":[{"t":"true"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":1490,"y":300,"wires":[["2cc86ba.6c80694"],["ad263a93.c75368"]]},{"id":"48ca5a1d.a436b4","type":"template","z":"b101138b.b75dc","name":"reload","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Reload failed\n","output":"str","x":1630,"y":400,"wires":[["3c783514.7bf9ea"]]},{"id":"fd6e0cf7.e4051","type":"debug","z":"b101138b.b75dc","name":"toggle err","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1800,"y":320,"wires":[]},{"id":"3c783514.7bf9ea","type":"debug","z":"b101138b.b75dc","name":"reload err","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1800,"y":400,"wires":[]},{"id":"6d924759.9aaa28","type":"switch","z":"b101138b.b75dc","name":"sort","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"on","vt":"str"},{"t":"cont","v":"off","vt":"str"},{"t":"cont","v":"status","vt":"str"},{"t":"cont","v":"reload","vt":"str"}],"checkall":"false","repair":false,"outputs":4,"x":770,"y":480,"wires":[["603734e4.1f864c"],["249c62c8.2aac5e"],["bb9edb5f.742168"],[]]},{"id":"7f729c5d.b21b54","type":"delay","z":"b101138b.b75dc","name":"no change","pauseType":"delay","timeout":"10","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1230,"y":220,"wires":[["8461b0e0.5ae84"]]},{"id":"f32443c3.95ff1","type":"comment","z":"b101138b.b75dc","name":"special","info":"special is an allow rule instead of block","x":490,"y":420,"wires":[]},{"id":"fbb964ef.e44158","type":"comment","z":"b101138b.b75dc","name":"API","info":"enable use authentication, basic\n\nsetting an API up gives you a file with the proper info\n\nusername is\nkey=\n\npassword is\nsecret=","x":450,"y":100,"wires":[]},{"id":"a227406.748c3c","type":"comment","z":"b101138b.b75dc","name":"API","info":"enable use authentication, basic\n\nsetting an API up gives you a file with the proper info\n\nusername is\nkey=\n\npassword is\nsecret=","x":1350,"y":340,"wires":[]},{"id":"f6385fe.e2782a","type":"change","z":"b101138b.b75dc","name":"IP","rules":[{"t":"set","p":"ip","pt":"msg","to":"PUT YOUR IP HERE","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":130,"y":280,"wires":[["2eea401.09af5c"]]},{"id":"c2132f8e.e3a67","type":"inject","z":"b101138b.b75dc","name":"restart","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":"2","x":170,"y":100,"wires":[["211a0130.cd679e"]]},{"id":"b828a6ea.f8ab78","type":"comment","z":"b101138b.b75dc","name":"toggles","info":"restart just populates the list after node-red restarts\n\n\n\n5AM refreshes the list daily","x":150,"y":140,"wires":[]},{"id":"a5d903c0.1f96d","type":"comment","z":"b101138b.b75dc","name":"reload","info":"this reloads the rules after they are toggled","x":1210,"y":340,"wires":[]},{"id":"8222f740.249678","type":"comment","z":"b101138b.b75dc","name":"toggle","info":"this toggles the alias enable/disable bit","x":1210,"y":260,"wires":[]},{"id":"f02d05af.bd98d8","type":"comment","z":"b101138b.b75dc","name":"on/off","info":"I tried to make one big function, but it didn't work\n","x":970,"y":280,"wires":[]},{"id":"1b406e07.dbe6c2","type":"change","z":"b101138b.b75dc","name":"auto off","rules":[{"t":"set","p":"what","pt":"msg","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1200,"y":560,"wires":[["249c62c8.2aac5e"]]},{"id":"4bc99f77.f420b","type":"delay","z":"b101138b.b75dc","name":"30m","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1210,"y":520,"wires":[["1b406e07.dbe6c2"]]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment