We’re running Watson IoT Platform v25 with Node-RED for device management workflows. Our dashboard widgets are not reflecting device attribute changes in real-time even though MQTT messages are being received successfully.
The issue manifests when devices update attributes like temperature or status. The MQTT topic subscription appears active in Node-RED, and I can see messages flowing through the debug node:
However, the dashboard widget bound to these attributes shows stale data. I’ve verified the widget data binding configuration points to the correct device ID and attribute paths. The Node-RED flow uses the standard IBM IoT input node connected to a dashboard gauge widget. Manual refresh of the browser doesn’t help. Is there a known issue with widget data binding in v25, or could this be a flow configuration problem?
I’ve seen similar behavior when the MQTT topic subscription doesn’t match the widget’s expected data structure. Check if your Node-RED flow is transforming the payload correctly before passing it to the dashboard node. The IBM IoT input node sometimes wraps the data in additional metadata layers that need to be extracted. Try adding a function node between the IoT input and the dashboard widget to log the exact payload structure being received.
That refresh pattern suggests a dashboard configuration issue. Check your Node-RED dashboard settings - there’s a global refresh interval that can throttle widget updates. Go to the dashboard configuration tab and look for the ‘Site’ settings. The default refresh interval might be set too high. Also, some widget types have their own update intervals separate from the data flow rate. For gauge widgets specifically, check if there’s a ‘throttle’ or ‘update interval’ property in the widget configuration.
Also verify your widget’s data binding path. In v25, the binding syntax changed slightly. If you’re using something like msg.payload.d.temperature, make sure it matches the actual message structure. I had a case where the device type prefix was required in the binding path but wasn’t documented clearly. Run a debug node right before the dashboard widget to capture the exact msg object structure.
I encountered this exact issue last month. The problem is often in how the IBM IoT node publishes to the dashboard’s internal message bus. The dashboard widgets subscribe to specific topics internally, and if the topic structure doesn’t align, updates get dropped. Have you checked the Node-RED logs for any subscription warnings? Also, v25 introduced stricter validation on device event schemas - if your event format doesn’t match the registered device type schema, the platform might be silently dropping the updates.
The issue stems from incompatible message passing between Node-RED’s IBM IoT node and dashboard widgets in v25. Here’s the comprehensive solution:
1. MQTT Topic Subscription Fix:
The IBM IoT input node needs explicit topic configuration. Edit your IoT input node and set:
Device Type: Match your registered type exactly
Event: ‘status’ (or your event name)
Format: ‘json’
2. Widget Data Binding Correction:
The binding path changed in v25. Your dashboard widget configuration needs:
// Function node between IoT input and widget:
var deviceData = msg.payload.d;
msg.payload = deviceData.temperature;
return msg;
This extracts the nested data structure. The widget then binds directly to msg.payload.
3. Node-RED Flow Configuration:
Add a ‘change’ node after the function node to set the message topic:
Set msg.topic to a static value like ‘device/temperature’
Dashboard widgets key their subscriptions off msg.topic
The root cause is that v25’s IBM IoT node wraps device events in a payload.d structure, but dashboard widgets expect flat msg.payload values. Without the transformation, the widget’s data binding can’t resolve the path correctly, causing sporadic updates only when the internal cache expires.
Additional check: Verify your device type schema in Watson IoT Platform allows the attributes you’re publishing. Go to Device Types → [Your Type] → Schema and confirm ‘temperature’ and ‘status’ are defined. Undefined attributes get filtered before reaching Node-RED.
After implementing these changes, your widgets should update in real-time with each MQTT message received. The transformation ensures compatibility between Watson IoT’s event structure and Node-RED dashboard’s data binding expectations.
Thanks for the suggestions. I added debug nodes throughout the flow. The payload structure looks correct and matches what the widget expects. The IBM IoT input node is receiving events consistently every 30 seconds, but the dashboard gauge only updates sporadically - maybe once every 5-10 minutes. Could this be a Node-RED dashboard refresh rate issue rather than a data flow problem?