OK, quickie for a Friday night.
I found myself in need of being able to manually turn off a light recently. But rather than doing it immediately, I needed a 5 minute delay.
While I could certainly set this up with my home dashboard, my Telegram bot or indeed some of the remote controllers around the house, each of those would take a bit of work and I probably won't need this for that long.
So I remembered that you can now use Apple's "Shortcuts" app to call a URL which makes it great for triggering Node-RED flows. 5 minutes of messing later, I had this simple flow set up.
[{"id":"e9114e5d.15e04","type":"http in","z":"fa3e1078.ef619","name":"","url":"/lights/:onoff/:switch/:delay","method":"get","upload":false,"swaggerDoc":"","x":190,"y":520,"wires":[["fb53d863.cfd198"]]},{"id":"fb53d863.cfd198","type":"change","z":"fa3e1078.ef619","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"req.params.onoff","tot":"msg"},{"t":"set","p":"delay","pt":"msg","to":"$number(req.params.delay)*60000","tot":"jsonata"},{"t":"set","p":"topic","pt":"msg","to":"\"COMMAND/SWITCH\" & req.params.switch","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":520,"wires":[["24e558f7.e962f8","8a320c7.2098af"]]},{"id":"8a320c7.2098af","type":"http response","z":"fa3e1078.ef619","name":"","statusCode":"","headers":{},"x":610,"y":480,"wires":[]},{"id":"24e558f7.e962f8","type":"switch","z":"fa3e1078.ef619","name":"","property":"delay","propertyType":"msg","rules":[{"t":"null"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":610,"y":520,"wires":[["5f1e823d.6c71bc"],["42775d28.67e374"]]},{"id":"ea19310e.531de","type":"http in","z":"fa3e1078.ef619","name":"","url":"/lights/:onoff/:switch","method":"get","upload":false,"swaggerDoc":"","x":170,"y":560,"wires":[["fb53d863.cfd198"]]},{"id":"42775d28.67e374","type":"delay","z":"fa3e1078.ef619","name":"","pauseType":"delayv","timeout":"5","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":760,"y":540,"wires":[["5f1e823d.6c71bc"]]},{"id":"5f1e823d.6c71bc","type":"link out","z":"fa3e1078.ef619","name":"To-Pi2-MQTT-Retained","links":["9d14e3db.2817"],"x":895,"y":500,"wires":[]}]
The shortcut on the phone is just 2 steps:
- URL: set to "https://:1880/lights/off/04/5" - That is light switch 04 turned off after a 5 minute delay.
- Get Contents of URL - it doesn't matter what Node-RED returns to this as we are just ignoring the output.
Then I add the shortcut to the home screen and I have a very quick and easy trigger.
You will note that I have 2 input http nodes. One with the delay and one without. I also have parameters that let me turn things on or off and lets me choose which light to control. So the whole thing can be used to control any light with or without delays.
I could extend the shortcut to ask for the delay, light and on/off choice as well if I wanted to.
Note that the output is a link node which goes to an MQTT out node since my lights are, of course, controlled via MQTT messages.