I built a Node-RED flow for my Coffee Grinder. There was a very subtle bug.
There are four ways that you can start the grinder:
- Trigger an HTTP Request for a Single
- Trigger an HTTP Request for a Double
- Start the grinder manually using the button on the socket
- Start the grinder using HomeKit or MQTT
This is all fine, and 18 seconds after a manual trigger, the grinder will turn off.
Except, if you manually stop the grinder, and then restart it before the initial 18 seconds has elapsed, it will still turn of at that 18 second point. Which, whilst probably okay, is still frustrating.
What I wanted to do instead is “cancel” a flow, if the switch is turned off (in any way).
It turns out there is a way to use the “Trigger” node to get this behaviour:
This allows me to simplify the flow, because the values I need to turn things on and off (
0) are the same ones we want to use to trigger and reset.
I found I needed to respond to the HTTP request from Siri Shortcuts immediately, because the timeout appears to be shorter than my grind time. It would have been nice to be able to respond when the grind had finished: perhaps I could do something where it returns bytes once per second until it’s done, but for now, this works great.
It actually got me thinking: I wonder how maintainable a really complex project would be in Node-RED.