From 1328ca527217498756711eab2a6b7230490d2a7e Mon Sep 17 00:00:00 2001 From: sumitshinde-84 Date: Fri, 14 Aug 2026 19:46:40 +0530 Subject: [PATCH 1/3] Add inline CTA images to next 50 blog posts by traffic --- src/blog/2023/01/environment-variables-in-node-red.md | 3 +++ src/blog/2023/03/3-quick-node-red-tips-4.md | 3 +++ src/blog/2023/03/comparing-node-red-dashboards.md | 3 +++ src/blog/2023/06/import-modules.md | 3 +++ .../07/how-to-build-a-opc-client-dashboard-in-node-red.md | 3 +++ .../07/how-to-deploy-a-basic-opc-ua-server-in-node-red.md | 3 +++ src/blog/2023/07/influxdb-historical-data.md | 3 +++ src/blog/2023/08/flowforge-is-now-flowfuse.md | 3 +++ src/blog/2023/12/device-agent-as-a-windows-service.md | 3 +++ src/blog/2024/01/dashboard-2-multi-user.md | 3 +++ src/blog/2024/02/connect-node-red-to-kepware-opc.md | 2 ++ src/blog/2024/03/dashboard-getting-started.md | 3 +++ src/blog/2024/03/using-kafka-with-node-red.md | 3 +++ src/blog/2024/04/displaying-logged-in-users-on-dashboard.md | 3 +++ src/blog/2024/05/exploring-node-red-dashboard-2-widgets.md | 3 +++ src/blog/2024/05/mapping-location-on-dashboard-2.md | 3 +++ src/blog/2024/06/dashboard-1-deprecated.md | 3 +++ src/blog/2024/08/comparing-dashboard-2-with-uibuilder.md | 3 +++ src/blog/2024/08/customise-theming-in-your-dashboards.md | 3 +++ src/blog/2024/08/opc-ua-to-mqtt-with-node-red.md | 3 +++ src/blog/2024/08/opentelemetry-with-node-red.md | 3 +++ src/blog/2024/09/how-to-scrape-web-data-with-node-red.md | 3 +++ src/blog/2024/09/how-to-use-subflow-in-node-red.md | 3 +++ src/blog/2024/12/flowfuse-release-2-12.md | 3 +++ src/blog/2024/12/publishing-modbus-data-to-uns.md | 3 +++ src/blog/2025/02/interacting-with-arduino-using-node-red.md | 3 +++ src/blog/2025/02/node-red-academy-announcement.md | 4 +++- ...gning-flexible-cron-schedules-in-flowfuse-with-node-red.md | 3 +++ .../2025/05/how-to-generate-pdf-reports-using-node-red.md | 3 +++ src/blog/2025/06/what-is-mes.md | 3 +++ ...ed-opcua-real-time-subscriptions-alarms-historical-data.md | 3 +++ src/blog/2025/09/poka-yoke-mistake-proofing.md | 3 +++ src/blog/2025/09/what-is-takt-time.md | 3 +++ src/blog/2025/10/building-mcp-server-using-flowfuse.md | 3 +++ src/blog/2025/10/node-red-vs-flowfuse.md | 3 +++ src/blog/2025/10/plc-to-mqtt-using-flowfuse.md | 3 +++ src/blog/2025/10/using-ethernet-ip-with-flowfuse.md | 3 +++ src/blog/2025/11/building-hmi-for-equipment-control.md | 3 +++ src/blog/2025/12/kafka-vs-mqtt.md | 3 +++ src/blog/2025/12/node-red-buffer-parser-industrial-data.md | 3 +++ src/blog/2025/12/node-red-timer.md | 3 +++ src/blog/2025/12/read-s7-optimized-datablocks-flowfuse.md | 3 +++ src/blog/2025/12/what-is-teep.md | 3 +++ src/blog/2026/01/opcua-vs-mqtt.md | 3 +++ src/blog/2026/01/why-modbus-still-exist.md | 3 +++ src/blog/2026/02/modbus-tcp-vs-modbus-rtu.md | 3 +++ src/blog/2026/03/why-opcua-is-not-replacing-modbus-yet.md | 3 +++ src/blog/2026/04/diagnosing-modbus-degradation.md | 3 +++ src/blog/2026/04/modbus-polling-best-practices.md | 3 +++ src/blog/2026/06/node-red-5-on-flowfuse.md | 3 +++ 50 files changed, 149 insertions(+), 1 deletion(-) diff --git a/src/blog/2023/01/environment-variables-in-node-red.md b/src/blog/2023/01/environment-variables-in-node-red.md index 3e4dd70fde..41eee26f10 100644 --- a/src/blog/2023/01/environment-variables-in-node-red.md +++ b/src/blog/2023/01/environment-variables-in-node-red.md @@ -63,6 +63,9 @@ Leveraging environment variables can also be done with other nodes, like for exa Node-RED allows you to set environment variables, but not to change them when executing flows. If you want to update data during execution, look into using [persistent context](/docs/user/persistent-context/). Node-RED doesn’t support Environment Variables like other programming environments do. When the flow is deployed the environment variables are replaced with the known values at that time. This is the biggest gotcha for most developers. +:::cta-image{src="/images/cta/book-a-demo.png" alt="Walk through your FlowFuse setup with our team - book a demo" cta="demo"} +:: + ### Predefined variables Our first example was using a predefined variable, exposed by Node-RED. As of 3.0 it exposes a few environment variables among which `NR_NODE_NAME`, `NR_GROUP_NAME`, and `NR_FLOW_NAME`. diff --git a/src/blog/2023/03/3-quick-node-red-tips-4.md b/src/blog/2023/03/3-quick-node-red-tips-4.md index 8aac577960..32022b5d63 100644 --- a/src/blog/2023/03/3-quick-node-red-tips-4.md +++ b/src/blog/2023/03/3-quick-node-red-tips-4.md @@ -28,6 +28,9 @@ You can in turn use this to ignore values that deviate too far from the sample. [{"id":"9484c25a0120bd48","type":"group","z":"dd95c0bca1101c86","name":"Automatically outputs random value (temperature in Celcius) between 0 & 25 every second","style":{"label":!0},"nodes":["e4f972f9daad6246","c7fc075a1915e87b","966a772c46dc2888"],"x":34,"y":59,"w":574,"h":82},{"id":"e4f972f9daad6246","type":"link out","z":"dd95c0bca1101c86","g":"9484c25a0120bd48","name":"link out 1","mode":"link","links":["33594c64783cdc45","e6bf7b494b48861e"],"x":355,"y":100,"wires":[]},{"id":"c7fc075a1915e87b","type":"inject","z":"dd95c0bca1101c86","g":"9484c25a0120bd48","name":"","props":[],"repeat":"1","crontab":"","once":!1,"onceDelay":0.1,"topic":"","x":130,"y":100,"wires":[["966a772c46dc2888"]]},{"id":"966a772c46dc2888","type":"random","z":"dd95c0bca1101c86","g":"9484c25a0120bd48","name":"","low":"0","high":"25","inte":"true","property":"payload","x":260,"y":100,"wires":[["e4f972f9daad6246"]]},{"id":"37380f26e8bfc98a","type":"group","z":"dd95c0bca1101c86","name":"Calculate average, high and low, save to flow","style":{"label":!0},"nodes":["cc3978c7c4ea56ed","e1819526a5f365c8","33594c64783cdc45","fea261a15b3b7683","e28a69232f1cac53","aecb1727be523240","e30039ee13e480a8"],"x":34,"y":259,"w":552,"h":142},{"id":"cc3978c7c4ea56ed","type":"change","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"","rules":[{"t":"set","p":"high","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":!1,"x":310,"y":300,"wires":[["aecb1727be523240"]]},{"id":"e1819526a5f365c8","type":"change","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"","rules":[{"t":"set","p":"low","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":!1,"x":310,"y":360,"wires":[["e30039ee13e480a8"]]},{"id":"33594c64783cdc45","type":"link in","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"link in 1","links":["c07b2e101cecbd3b","e4f972f9daad6246"],"x":75,"y":320,"wires":[["e28a69232f1cac53","fea261a15b3b7683"]]},{"id":"fea261a15b3b7683","type":"smooth","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"Min","property":"payload","action":"min","count":"100","round":"2","mult":"single","reduce":!1,"x":170,"y":360,"wires":[["e1819526a5f365c8"]]},{"id":"e28a69232f1cac53","type":"smooth","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"Max","property":"payload","action":"max","count":"100","round":"2","mult":"single","reduce":!1,"x":170,"y":300,"wires":[["cc3978c7c4ea56ed"]]},{"id":"aecb1727be523240","type":"debug","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"debug 23","active":!0,"tosidebar":!1,"console":!1,"tostatus":!0,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":480,"y":300,"wires":[]},{"id":"e30039ee13e480a8","type":"debug","z":"dd95c0bca1101c86","g":"37380f26e8bfc98a","name":"debug 25","active":!0,"tosidebar":!1,"console":!1,"tostatus":!0,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":480,"y":360,"wires":[]},{"id":"ec11a9ee9148b0b5","type":"group","z":"dd95c0bca1101c86","name":"Evaluate if an incoming value is between flow.high and flow.low, if it is not, send the message down a different wire and show an alert in debug","style":{"label":!0},"nodes":["9393c22b2e3c1ec8","1cd18307cb919159","7c1f474e646765a7","a209cd10f33ec401","f4b15283e55babf4","e6bf7b494b48861e"],"x":34,"y":419,"w":1032,"h":162},{"id":"9393c22b2e3c1ec8","type":"switch","z":"dd95c0bca1101c86","g":"ec11a9ee9148b0b5","name":"Was the value between flow.high and flow.low?","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"high","vt":"flow","v2":"low","v2t":"flow"},{"t":"else"}],"checkall":"true","repair":!1,"outputs":2,"x":300,"y":480,"wires":[["1cd18307cb919159"],["7c1f474e646765a7","a209cd10f33ec401"]]},{"id":"1cd18307cb919159","type":"debug","z":"dd95c0bca1101c86","g":"ec11a9ee9148b0b5","name":"debug 15","active":!0,"tosidebar":!0,"console":!1,"tostatus":!1,"complete":"false","statusVal":"","statusType":"auto","x":560,"y":460,"wires":[]},{"id":"7c1f474e646765a7","type":"debug","z":"dd95c0bca1101c86","g":"ec11a9ee9148b0b5","name":"debug 16","active":!1,"tosidebar":!0,"console":!1,"tostatus":!1,"complete":"false","statusVal":"","statusType":"auto","x":560,"y":540,"wires":[]},{"id":"a209cd10f33ec401","type":"change","z":"dd95c0bca1101c86","g":"ec11a9ee9148b0b5","name":"Alert to debug when value is outside of the range","rules":[{"t":"set","p":"payload","pt":"msg","to":"The value was outside of the range","tot":"str"}],"action":"","property":"","from":"","to":"","reg":!1,"x":690,"y":500,"wires":[["f4b15283e55babf4"]]},{"id":"f4b15283e55babf4","type":"debug","z":"dd95c0bca1101c86","g":"ec11a9ee9148b0b5","name":"debug 17","active":!0,"tosidebar":!0,"console":!1,"tostatus":!1,"complete":"false","statusVal":"","statusType":"auto","x":960,"y":500,"wires":[]},{"id":"e6bf7b494b48861e","type":"link in","z":"dd95c0bca1101c86","g":"ec11a9ee9148b0b5","name":"link in 2","links":["e4f972f9daad6246","c07b2e101cecbd3b"],"x":75,"y":480,"wires":[["9393c22b2e3c1ec8"]]},{"id":"caf4214602d5f2c9","type":"group","z":"dd95c0bca1101c86","name":"Manually send a spurious value","style":{"label":!0},"nodes":["14097fb7ba3a9ecc","c07b2e101cecbd3b"],"x":34,"y":159,"w":232,"h":82},{"id":"14097fb7ba3a9ecc","type":"inject","z":"dd95c0bca1101c86","g":"caf4214602d5f2c9","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":!1,"onceDelay":0.1,"topic":"","payload":"75","payloadType":"num","x":130,"y":200,"wires":[["c07b2e101cecbd3b"]]},{"id":"c07b2e101cecbd3b","type":"link out","z":"dd95c0bca1101c86","g":"caf4214602d5f2c9","name":"link out 2","mode":"link","links":["33594c64783cdc45","e6bf7b494b48861e"],"x":225,"y":200,"wires":[]}] ``` +:::cta-image{src="/images/cta/book-a-demo.png" alt="Walk through your FlowFuse setup with our team - book a demo" cta="demo"} +:: + ### 2. Perform simple maths functions using JSONata in Change nodes You can perform basic maths functions using the Change node and JSONata. Let's say you wanted to take a payload and multiply it by a value. You could use a custom node such as [node-red-contrib-calc](https://flows.nodered.org/node/node-red-contrib-calc) but you can also easily complete the same task within a change node. diff --git a/src/blog/2023/03/comparing-node-red-dashboards.md b/src/blog/2023/03/comparing-node-red-dashboards.md index 10a52bae9f..468ff2e0a9 100644 --- a/src/blog/2023/03/comparing-node-red-dashboards.md +++ b/src/blog/2023/03/comparing-node-red-dashboards.md @@ -74,6 +74,9 @@ There is also an [ongoing discussion](https://github.com/node-red/node-red/issue I believe a few improvements to the install process could make FlexDash a much more popular custom node. +:::cta-image{src="/images/cta/wenco-book-demo.png" alt="Wenco deploys new dashboard pages in days with FlowFuse - book a demo" cta="demo"} +:: + ## How easy is it to get your first demo dashboard running? ### FlexDash - 1st place diff --git a/src/blog/2023/06/import-modules.md b/src/blog/2023/06/import-modules.md index ad0ec3bffc..e057095d13 100644 --- a/src/blog/2023/06/import-modules.md +++ b/src/blog/2023/06/import-modules.md @@ -87,6 +87,9 @@ Recently we wanted to use [moment](https://www.npmjs.com/package/moment) for som So, all we needed to do was import the module into a function node, and define our comparison there instead, here's a working example: +:::cta-image{src="/images/cta/book-a-demo.png" alt="Walk through your FlowFuse setup with our team - book a demo" cta="demo"} +:: + ## Example: Easy CRC