[{"data":1,"prerenderedAt":650},["ShallowReactive",2],{"blog-\u002Fblog\u002F2025\u002F12\u002Fnode-red-timer":3},{"id":4,"title":5,"body":6,"description":12,"extension":639,"meta":640,"navigation":645,"path":646,"seo":647,"stem":648,"__hash__":649},"blog\u002Fblog\u002F2025\u002F12\u002Fnode-red-timer.md","Node-RED Timer Tutorial: Create Stopwatch and Countdown Timers",{"type":7,"value":8,"toc":626},"minimark",[9,13,21,33,46,58,63,66,89,119,122,127,138,141,146,153,181,187,191,198,230,233,237,244,312,323,326,334,340,351,354,359,363,366,373,378,384,404,407,411,418,541,552,560,563,566,569,589,605,609,617,623],[10,11,12],"p",{},"Timers are everywhere in industrial automation. You need them to track how long a machine has been running, measure downtime, schedule maintenance, or coordinate processes that happen in sequence.",[10,14,15,16,20],{},"Through my work as a technical writer covering IIoT, building industrial applications, and being part of a company where our customers deploy real-world automation systems, I've observed that ",[17,18,19],"strong",{},"timers"," are ubiquitous in production environments. Whether it's a production floor display showing machine runtime, a maintenance terminal counting down to the next service window, or an operator interface tracking downtime by reason code—timers are foundational to industrial visibility. Here's an example of a performance operator terminal with timer functionality:",[10,22,23,29],{},[24,25],"img",{"alt":26,"dataZoomable":27,"src":28},"Performance Operator Terminal","","\u002Fblog\u002F2025\u002F12\u002Fimages\u002Fperformance-operator-terminal.png",[30,31,32],"em",{},"Performance operator terminal displaying real-time production metrics with timer functionality",[10,34,35,36,41,42,45],{},"If you want to explore this interface yourself, you can ",[37,38,40],"a",{"href":39},"\u002Fblueprints\u002Fmanufacturing\u002Fperformance-operator-terminal\u002F","deploy this blueprint"," to your ",[17,43,44],{},"FlowFuse"," instance and start experimenting immediately.",[10,47,48,49,53,54,57],{},"In this article, we'll build two types of timers in ",[37,50,52],{"href":51},"\u002F","Node-RED",": ",[17,55,56],{},"stopwatches"," that measure elapsed time and countdowns that trigger actions after a set duration. Both are straightforward to implement and essential for most automation projects.",[59,60,62],"h2",{"id":61},"prerequisites","Prerequisites",[10,64,65],{},"Before following this tutorial, you should have:",[67,68,69],"ul",{},[70,71,72,73,76,77,81,82,88],"li",{},"A running ",[17,74,75],{},"Node-RED instance",". For professional development and production deployments, ",[17,78,79],{},[37,80,44],{"href":51}," is the recommended platform. If you don’t have an account, ",[37,83,87],{"href":84,"rel":85},"http:\u002F\u002Fapp.flowfuse.com",[86],"nofollow","start your free trial"," today.",[90,91,92],"blockquote",{},[10,93,94,95,99,100,99,104,99,108,112,113,118],{},"FlowFuse provides enterprise-grade Node-RED hosting with managed infrastructure, built-in ",[37,96,98],{"href":97},"\u002Fblog\u002F2024\u002F10\u002Fhow-to-build-automate-devops-pipelines-node-red-deployments\u002F","DevOps tools",", ",[37,101,103],{"href":102},"\u002Fblog\u002F2025\u002F10\u002Fplc-to-mqtt-using-flowfuse\u002F#step-3%3A-set-up-mqtt-with-flowfuse","MQTT broker",[37,105,107],{"href":106},"\u002Fblog\u002F2025\u002F08\u002Fgetting-started-with-flowfuse-tables\u002F","database",[37,109,111],{"href":110},"\u002Fblog\u002F2024\u002F12\u002Fflowfuse-team-collaboration\u002F","team collaboration"," with ",[37,114,117],{"href":115,"rel":116},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mb1s1YQIpZY",[86],"granular access control",", and seamless scaling capabilities. Whether you need cloud-hosted instances managed by FlowFuse or remote instances running on your edge devices, the platform provides unified management for both. FlowFuse also includes AI-powered features that accelerate flow development and streamline automation projects. From prototyping to mission-critical production deployments, FlowFuse handles the infrastructure complexity so you can focus on building flows.",[10,120,121],{},"That's all you need to get started.",[123,124,126],"h1",{"id":125},"getting-started","Getting Started",[10,128,129,130,133,134,137],{},"We'll use two Node-RED community nodes for this tutorial: ",[17,131,132],{},"node-red-contrib-hourglass"," for stopwatch timers and node-red-contrib-countdown for ",[17,135,136],{},"countdown timers",". Both are simple to configure and work reliably in production environments.",[10,139,140],{},"Let's start with installing and building a stopwatch.",[142,143,145],"h3",{"id":144},"installing-the-hourglass-node","Installing the Hourglass Node",[10,147,148,149,152],{},"First, install the ",[17,150,151],{},"hourglass node"," in your Node-RED instance:",[154,155,156,159,166,169,175],"ol",{},[70,157,158],{},"Open the Node-RED editor",[70,160,161,162,165],{},"Click the ",[17,163,164],{},"hamburger menu"," (top right) and select \"Manage palette\"",[70,167,168],{},"Go to the \"Install\" tab",[70,170,171,172],{},"Search for ",[173,174,132],"code",{},[70,176,177,178],{},"Click ",[17,179,180],{},"\"Install\"",[10,182,183,184,186],{},"The ",[17,185,151],{}," will appear in your palette under the function category.",[59,188,190],{"id":189},"understanding-hourglass-commands","Understanding Hourglass Commands",[10,192,193,194,197],{},"The hourglass node responds to control commands sent via ",[173,195,196],{},"msg.command",". The available commands are:",[67,199,200,206,212,218,224],{},[70,201,202,205],{},[17,203,204],{},"start"," - Begins timing operation",[70,207,208,211],{},[17,209,210],{},"stop"," - Stops the timer and outputs elapsed time",[70,213,214,217],{},[17,215,216],{},"pause"," - Pauses timing without resetting",[70,219,220,223],{},[17,221,222],{},"reset"," - Clears timer state and stops operation",[70,225,226,229],{},[17,227,228],{},"status"," - Outputs current timer state without stopping",[10,231,232],{},"These commands control timer behavior.",[142,234,236],{"id":235},"implementing-a-stopwatch-timer","Implementing a Stopwatch Timer",[10,238,239,240,243],{},"Build a basic ",[17,241,242],{},"stopwatch flow",":",[154,245,246,249,256,294,300,306,309],{},[70,247,248],{},"Drag four inject nodes onto the canvas",[70,250,251,252,255],{},"Add four ",[17,253,254],{},"change nodes",", one after each inject node, and connect them",[70,257,258,259,261,262],{},"Configure the change nodes to set ",[173,260,196],{},":\n",[67,263,264,274,280,288],{},[70,265,266,267,270,271],{},"First ",[17,268,269],{},"change node",": set to ",[173,272,273],{},"\"start\"",[70,275,276,277],{},"Second change node: set to ",[173,278,279],{},"\"status\"",[70,281,282,283,270,285],{},"Third ",[17,284,269],{},[173,286,287],{},"\"stop\"",[70,289,290,291],{},"Fourth change node: set to ",[173,292,293],{},"\"reset\"",[70,295,296,297,299],{},"Drag an ",[17,298,151],{}," onto the canvas",[70,301,302,303,305],{},"Connect all four change nodes to the ",[17,304,151],{}," input",[70,307,308],{},"Add a debug node and connect it to the hourglass node output",[70,310,311],{},"Deploy the flow",[10,313,314,315,318,319,322],{},"When you trigger the first inject node, the ",[17,316,317],{},"stopwatch starts",". The second inject node checks current elapsed time without stopping the timer—you can configure this inject node to repeat at intervals for continuous time monitoring. The third inject node stops the ",[17,320,321],{},"stopwatch"," and outputs the total elapsed time. The fourth inject node resets the stopwatch back to zero.",[10,324,325],{},"The node outputs a message containing timing information:",[10,327,328,332],{},[24,329],{"alt":330,"dataZoomable":27,"src":331},"Hourglass node output message showing elapsed time in multiple formats","\u002Fblog\u002F2025\u002F12\u002Fimages\u002Fhourglass-output.png",[30,333,330],{},[10,335,183,336,339],{},[173,337,338],{},"elapsed"," object provides multiple formats: a human-readable string, total milliseconds, and broken-down time components. This flexibility supports different display requirements and calculation needs.",[10,341,342,343,346,347,350],{},"This basic example demonstrates the pattern. In production applications, replace the inject nodes with actual process triggers—",[17,344,345],{},"machine status signals"," from PLCs or MQTT messages from sensors. The ",[17,348,349],{},"hourglass node output"," then connects to databases for logging, dashboards for visualization, or notification systems for alerts when thresholds are exceeded.",[10,352,353],{},"Below is the complete flow.",[355,356],"render-flow",{":height":357,"flow":358},"300","W3siaWQiOiJhOGUwNWU0YjFhOGE4ZTVlIiwidHlwZSI6Imdyb3VwIiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJzdHlsZSI6eyJzdHJva2UiOiIjYjJiM2JkIiwic3Ryb2tlLW9wYWNpdHkiOiIxIiwiZmlsbCI6IiNmMmYzZmIiLCJmaWxsLW9wYWNpdHkiOiIwLjUiLCJsYWJlbCI6dHJ1ZSwibGFiZWwtcG9zaXRpb24iOiJudyIsImNvbG9yIjoiIzMyMzMzYiJ9LCJub2RlcyI6WyI4MTM2NWZhYzFjY2Y2Mjk5IiwiNjVjZjVhNTIzZWFlZTkyNiIsIjU2MGE5MjcxZjJiNDY2ODciLCI0YzU0NDlhZjdhNGRkNmVmIiwiZTg0MDA0NjFjZDUwYjM1NiIsIjU1YTAwOGFhYjYyMDQ1NjUiLCIxODYzMGRlZWRjMzhhZjlmIiwiOWVmNGE3NDViZDAxOTRjZiIsImNmODRhZGQ1NDBjMDc5Y2UiLCIzNWFiM2JiYjE2NzRiNGY2Il0sIngiOjE5NCwieSI6MjIzMSwidyI6ODkyLCJoIjoyMzB9LHsiaWQiOiI4MTM2NWZhYzFjY2Y2Mjk5IiwidHlwZSI6ImhvdXJnbGFzcyIsInoiOiJiNDQ2ZGZhMDRkNzlkMzU5IiwiZyI6ImE4ZTA1ZTRiMWE4YThlNWUiLCJuYW1lIjoiIiwiaHVtYW5pemVMb2NhbGUiOiIiLCJ4Ijo4MjAsInkiOjIzNDAsIndpcmVzIjpbWyI5ZWY0YTc0NWJkMDE5NGNmIl1dfSx7ImlkIjoiNjVjZjVhNTIzZWFlZTkyNiIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYjQ0NmRmYTA0ZDc5ZDM1OSIsImciOiJhOGUwNWU0YjFhOGE4ZTVlIiwibmFtZSI6IkF1dG8gU3RhcnQiLCJwcm9wcyI6W3sicCI6InBheWxvYWQiLCJ2IjoiIiwidnQiOiJkYXRlIn0seyJwIjoidG9waWMiLCJ2IjoiIiwidnQiOiJzdHIifV0sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjp0cnVlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJwYXlsb2FkIjoiIiwicGF5bG9hZFR5cGUiOiJkYXRlIiwieCI6MzEwLCJ5IjoyMjcyLCJ3aXJlcyI6W1siNTYwYTkyNzFmMmI0NjY4NyJdXX0seyJpZCI6IjU2MGE5MjcxZjJiNDY2ODciLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJnIjoiYThlMDVlNGIxYThhOGU1ZSIsIm5hbWUiOiJTdGFydCIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6ImNvbW1hbmQiLCJwdCI6Im1zZyIsInRvIjoic3RhcnQiLCJ0b3QiOiJzdHIifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6NTcwLCJ5IjoyMjcyLCJ3aXJlcyI6W1siODEzNjVmYWMxY2NmNjI5OSJdXX0seyJpZCI6IjRjNTQ0OWFmN2E0ZGQ2ZWYiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJnIjoiYThlMDVlNGIxYThhOGU1ZSIsIm5hbWUiOiJTdGF0dXMiLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJjb21tYW5kIiwicHQiOiJtc2ciLCJ0byI6InN0YXR1cyIsInRvdCI6InN0ciJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo1NzAsInkiOjIzMjAsIndpcmVzIjpbWyI4MTM2NWZhYzFjY2Y2Mjk5Il1dfSx7ImlkIjoiZTg0MDA0NjFjZDUwYjM1NiIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiYjQ0NmRmYTA0ZDc5ZDM1OSIsImciOiJhOGUwNWU0YjFhOGE4ZTVlIiwibmFtZSI6IlN0b3AiLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJjb21tYW5kIiwicHQiOiJtc2ciLCJ0byI6InN0b3AiLCJ0b3QiOiJzdHIifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6NTcwLCJ5IjoyMzY4LCJ3aXJlcyI6W1siODEzNjVmYWMxY2NmNjI5OSJdXX0seyJpZCI6IjU1YTAwOGFhYjYyMDQ1NjUiLCJ0eXBlIjoiaW5qZWN0IiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJnIjoiYThlMDVlNGIxYThhOGU1ZSIsIm5hbWUiOiJSZWFkIGV2ZXJ5IDEgc2Vjb25kcyIsInByb3BzIjpbeyJwIjoicGF5bG9hZCJ9LHsicCI6InRvcGljIiwidnQiOiJzdHIifV0sInJlcGVhdCI6IjEiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsInBheWxvYWQiOiIiLCJwYXlsb2FkVHlwZSI6ImRhdGUiLCJ4IjozNTAsInkiOjIzMjAsIndpcmVzIjpbWyI0YzU0NDlhZjdhNGRkNmVmIl1dfSx7ImlkIjoiMTg2MzBkZWVkYzM4YWY5ZiIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYjQ0NmRmYTA0ZDc5ZDM1OSIsImciOiJhOGUwNWU0YjFhOGE4ZTVlIiwibmFtZSI6Ik1hbnVhbCBTdG9wIiwicHJvcHMiOlt7InAiOiJwYXlsb2FkIiwidiI6IiIsInZ0IjoiZGF0ZSJ9LHsicCI6InRvcGljIiwidiI6IiIsInZ0Ijoic3RyIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsInBheWxvYWQiOiIiLCJwYXlsb2FkVHlwZSI6ImRhdGUiLCJ4IjozMTAsInkiOjIzNjksIndpcmVzIjpbWyJlODQwMDQ2MWNkNTBiMzU2Il1dfSx7ImlkIjoiOWVmNGE3NDViZDAxOTRjZiIsInR5cGUiOiJkZWJ1ZyIsInoiOiJiNDQ2ZGZhMDRkNzlkMzU5IiwiZyI6ImE4ZTA1ZTRiMWE4YThlNWUiLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoidHJ1ZSIsInRhcmdldFR5cGUiOiJmdWxsIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo5OTAsInkiOjIzNDAsIndpcmVzIjpbXX0seyJpZCI6ImNmODRhZGQ1NDBjMDc5Y2UiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJnIjoiYThlMDVlNGIxYThhOGU1ZSIsIm5hbWUiOiJSZXNldCIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6ImNvbW1hbmQiLCJwdCI6Im1zZyIsInRvIjoicmVzZXQiLCJ0b3QiOiJzdHIifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6NTcwLCJ5IjoyNDIwLCJ3aXJlcyI6W1siODEzNjVmYWMxY2NmNjI5OSJdXX0seyJpZCI6IjM1YWIzYmJiMTY3NGI0ZjYiLCJ0eXBlIjoiaW5qZWN0IiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJnIjoiYThlMDVlNGIxYThhOGU1ZSIsIm5hbWUiOiJNYW51YWwgUmVzZXQiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifSx7InAiOiJ0b3BpYyIsInZ0Ijoic3RyIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsInBheWxvYWQiOiIiLCJwYXlsb2FkVHlwZSI6ImRhdGUiLCJ4IjozMTAsInkiOjI0MjAsIndpcmVzIjpbWyJjZjg0YWRkNTQwYzA3OWNlIl1dfSx7ImlkIjoiNTE5MWRkMjU4OThjNjMxYyIsInR5cGUiOiJnbG9iYWwtY29uZmlnIiwiZW52IjpbXSwibW9kdWxlcyI6eyJub2RlLXJlZC1jb250cmliLWhvdXJnbGFzcyI6IjEuNS4wIn19XQ==",[59,360,362],{"id":361},"implementing-a-countdown-timer","Implementing a Countdown Timer",[10,364,365],{},"Countdown timers trigger actions after a specified duration. Common applications include scheduled maintenance windows, batch process timeouts, and timed equipment shutdowns.",[10,367,368,369,372],{},"To implement a countdown, we will use ",[173,370,371],{},"node-red-contrib-countdown",".",[374,375,377],"h4",{"id":376},"installing-the-countdown-node","Installing the Countdown Node",[10,379,380,381,152],{},"Install the ",[17,382,383],{},"countdown node",[154,385,386,388,394,396,400],{},[70,387,158],{},[70,389,390,391],{},"Click the hamburger menu (top right) and select ",[17,392,393],{},"\"Manage palette\"",[70,395,168],{},[70,397,171,398],{},[173,399,371],{},[70,401,177,402],{},[17,403,180],{},[10,405,406],{},"The countdown node will appear in your palette.",[142,408,410],{"id":409},"building-a-countdown-timer","Building a Countdown Timer",[10,412,413,414,417],{},"Create a ",[17,415,416],{},"countdown timer flow"," in Node-RED:",[154,419,420,426,470,522,528,535],{},[70,421,296,422,425],{},[17,423,424],{},"Inject"," node onto the canvas.",[70,427,428,429],{},"Add a Change node and configure it to:",[67,430,431,446,455],{},[70,432,433,434,437,438,441,442,445],{},"Set ",[173,435,436],{},"msg.payload"," to the countdown duration in ",[17,439,440],{},"seconds"," (for example, ",[173,443,444],{},"50"," for 50 seconds).",[70,447,433,448,451,452,372],{},[173,449,450],{},"msg.topic"," to ",[173,453,454],{},"\"control\"",[70,456,457,458,461,462,464,465,467,468,372],{},"You can configure the countdown duration either in the ",[17,459,460],{},"Change"," node or directly in the Inject node, as long as ",[173,463,436],{}," is in milliseconds and ",[173,466,450],{}," is ",[173,469,454],{},[70,471,472,473,476,477],{},"Drag a ",[17,474,475],{},"Countdown"," node onto the canvas and configure it with the following settings:",[67,478,479,489,498,504,510,516],{},[70,480,481,484,485,488],{},[17,482,483],{},"Timer On payload",": The message payload sent when the countdown starts (for example, ",[173,486,487],{},"true",").",[70,490,491,494,495,488],{},[17,492,493],{},"Timer Off payload",": The message payload sent when the countdown completes (for example, ",[173,496,497],{},"false",[70,499,500,503],{},[17,501,502],{},"Restart countdown if message is received while running",": Enable this to restart the countdown if a new control message is received.",[70,505,506,509],{},[17,507,508],{},"Send output message on Reset",": Enable this to send a message when the countdown is reset.",[70,511,512,515],{},[17,513,514],{},"Set time to new duration if control message is received while running",": Enable this to update the countdown duration while it is running.",[70,517,518,521],{},[17,519,520],{},"Start countdown if control message is received while not running",": Enable this to start the countdown using a control message, enable it for this example to allow starting countdown when control message recived",[70,523,524,525,527],{},"Connect the Change node to the ",[17,526,475],{}," node.",[70,529,530,531,534],{},"Add a ",[17,532,533],{},"Debug"," node and connect it to the Countdown node output.",[70,536,177,537,540],{},[17,538,539],{},"Deploy"," to activate the flow.",[10,542,543,544,547,548,551],{},"When you trigger the Inject node, the ",[17,545,546],{},"countdown starts",". The Countdown node outputs messages at regular intervals, and the ",[17,549,550],{},"second output"," shows the remaining time.",[10,553,554,558],{},[24,555],{"alt":556,"dataZoomable":27,"src":557},"Countdown node output showing remaining time updates","\u002Fblog\u002F2025\u002F12\u002Fimages\u002Fcountdown.png",[30,559,556],{},[10,561,562],{},"From the first output, it will send the message you configured at the start of the count and at the end of the countdown.",[10,564,565],{},"Below is the flow implementation that you can use as a starting point.",[355,567],{":height":357,"flow":568},"W3siaWQiOiIxM2UzOTM3YjA1NTVkMzRkIiwidHlwZSI6Imdyb3VwIiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJzdHlsZSI6eyJzdHJva2UiOiIjYjJiM2JkIiwic3Ryb2tlLW9wYWNpdHkiOiIxIiwiZmlsbCI6IiNmMmYzZmIiLCJmaWxsLW9wYWNpdHkiOiIwLjUiLCJsYWJlbCI6dHJ1ZSwibGFiZWwtcG9zaXRpb24iOiJudyIsImNvbG9yIjoiIzMyMzMzYiJ9LCJub2RlcyI6WyIwYTdmZGNlYjdiODQ0Yzc2IiwiYjFkMzZiNjA4YmFmYjUzMSIsImU3ZTA4OTRiMjgzMmU5M2UiLCI1MmQwYWJlMTVlMzUzM2M4IiwiYzQ4ZGNhZWM5OTg0NDBhYSJdLCJ4IjoxMzQsInkiOjM0MTksInciOjY5MiwiaCI6MTIyfSx7ImlkIjoiMGE3ZmRjZWI3Yjg0NGM3NiIsInR5cGUiOiJjb3VudGRvd24iLCJ6IjoiYjQ0NmRmYTA0ZDc5ZDM1OSIsImciOiIxM2UzOTM3YjA1NTVkMzRkIiwibmFtZSI6IiIsInRvcGljIjoiIiwicGF5bG9hZFRpbWVyU3RhcnQiOiJ0cnVlIiwicGF5bG9hZFRpbWVyU3RhcnRUeXBlIjoiYm9vbCIsInBheWxvYWRUaW1lclN0b3AiOiJmYWxzZSIsInBheWxvYWRUaW1lclN0b3BUeXBlIjoiYm9vbCIsInRpbWVyIjoiMzAiLCJyZXNldFdoaWxlUnVubmluZyI6ZmFsc2UsIm91dHB1dE9uUmVzZXQiOmZhbHNlLCJzZXRUaW1lVG9OZXdXaGlsZVJ1bm5pbmciOmZhbHNlLCJzdGFydENvdW50ZG93bk9uQ29udHJvbE1lc3NhZ2UiOnRydWUsIngiOjU1MCwieSI6MzQ4MCwid2lyZXMiOltbImU3ZTA4OTRiMjgzMmU5M2UiXSxbIjUyZDBhYmUxNWUzNTMzYzgiXV19LHsiaWQiOiJiMWQzNmI2MDhiYWZiNTMxIiwidHlwZSI6ImluamVjdCIsInoiOiJiNDQ2ZGZhMDRkNzlkMzU5IiwiZyI6IjEzZTM5MzdiMDU1NWQzNGQiLCJuYW1lIjoiU3RhcnQiLCJwcm9wcyI6W10sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwieCI6MjMwLCJ5IjozNDgwLCJ3aXJlcyI6W1siYzQ4ZGNhZWM5OTg0NDBhYSJdXX0seyJpZCI6ImU3ZTA4OTRiMjgzMmU5M2UiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYjQ0NmRmYTA0ZDc5ZDM1OSIsImciOiIxM2UzOTM3YjA1NTVkMzRkIiwibmFtZSI6IlJlc3VsdCIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo2OTAsInkiOjM0NjAsIndpcmVzIjpbXX0seyJpZCI6IjUyZDBhYmUxNWUzNTMzYzgiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYjQ0NmRmYTA0ZDc5ZDM1OSIsImciOiIxM2UzOTM3YjA1NTVkMzRkIiwibmFtZSI6IkNvdW50ZG93biIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo3MTAsInkiOjM1MDAsIndpcmVzIjpbXX0seyJpZCI6ImM0OGRjYWVjOTk4NDQwYWEiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImI0NDZkZmEwNGQ3OWQzNTkiLCJnIjoiMTNlMzkzN2IwNTU1ZDM0ZCIsIm5hbWUiOiJTZXQgQ291bnRkb3duIiwicnVsZXMiOlt7InQiOiJzZXQiLCJwIjoicGF5bG9hZCIsInB0IjoibXNnIiwidG8iOiI1MCIsInRvdCI6Im51bSJ9LHsidCI6InNldCIsInAiOiJ0b3BpYyIsInB0IjoibXNnIiwidG8iOiJjb250cm9sIiwidG90Ijoic3RyIn1dLCJhY3Rpb24iOiIiLCJwcm9wZXJ0eSI6IiIsImZyb20iOiIiLCJ0byI6IiIsInJlZyI6ZmFsc2UsIngiOjM4MCwieSI6MzQ4MCwid2lyZXMiOltbIjBhN2ZkY2ViN2I4NDRjNzYiXV19LHsiaWQiOiI2NmJlMDhlYWQ3OTMwNGJmIiwidHlwZSI6Imdsb2JhbC1jb25maWciLCJlbnYiOltdLCJtb2R1bGVzIjp7Im5vZGUtcmVkLWNvbnRyaWItY291bnRkb3duIjoiMS4zLjIifX1d",[10,570,571,572,575,576,99,580,584,585,588],{},"For this demonstration, we used an inject node to manually trigger the countdown. In production environments, you would replace this with actual process triggers—",[17,573,574],{},"equipment status signals"," from ",[37,577,579],{"href":578},"\u002Fblog\u002F2025\u002F10\u002Fplc-to-mqtt-using-flowfuse\u002F","PLCs",[37,581,583],{"href":582},"\u002Fblog\u002F2024\u002F06\u002Fhow-to-use-mqtt-in-node-red\u002F","MQTT"," messages from sensors, or completion signals from upstream operations. For example, you might start a ",[17,586,587],{},"maintenance window countdown"," when equipment reaches a scheduled service interval, or initiate a cleanup cycle timer when a batch process completes.",[10,590,591,592,596,597,601,602,372],{},"While these examples cover the essential timer operations, both nodes offer additional configuration options. For comprehensive documentation, visit the ",[37,593,132],{"href":594,"rel":595},"https:\u002F\u002Fflows.nodered.org\u002Fnode\u002Fnode-red-contrib-hourglass",[86]," and ",[37,598,371],{"href":599,"rel":600},"https:\u002F\u002Fflows.nodered.org\u002Fnode\u002Fnode-red-contrib-countdown",[86]," pages on the ",[17,603,604],{},"Node-RED flows library",[123,606,608],{"id":607},"conclusion","Conclusion",[10,610,611,612,596,614,616],{},"That's it, you now have working ",[17,613,321],{},[17,615,136],{}," in Node-RED. The hourglass node tracks elapsed time, and the countdown node triggers actions after a set duration.",[10,618,619,620,622],{},"These implementations are ready for production use. Start with these basic patterns, test them in your environment, and expand as needed. Connect them to your ",[17,621,579],{},", add dashboard displays, or integrate with your existing automation workflows.",[10,624,625],{},"Both nodes are actively maintained and used in real industrial systems, so you're building on proven foundations.",{"title":27,"searchDepth":627,"depth":627,"links":628},2,[629,633,636],{"id":61,"depth":627,"text":62,"children":630},[631],{"id":144,"depth":632,"text":145},3,{"id":189,"depth":627,"text":190,"children":634},[635],{"id":235,"depth":632,"text":236},{"id":361,"depth":627,"text":362,"children":637},[638],{"id":409,"depth":632,"text":410},"md",{"navTitle":5,"excerpt":641},{"type":7,"value":642},[643],[10,644,12],{},true,"\u002Fblog\u002F2025\u002F12\u002Fnode-red-timer",{"title":5,"description":12},"blog\u002F2025\u002F12\u002Fnode-red-timer","S-mooThQeR3BJum-9GMmmrqDIDmSfHJH0WIss2v7StE",1780070553906]