Visualization dashboard does not display device data in SAP IoT sapiot-24

Our visualization dashboards stopped showing device data after configuring new MQTT topics for a fleet of 320 industrial sensors. The dashboard widgets remain empty even though devices are actively sending telemetry data. We can see the data flowing in the MQTT broker logs, but it’s not appearing in any dashboard visualizations.

The dashboard configuration shows the correct MQTT topic patterns (sensors/+/telemetry), and the data source is set to our primary device data stream. However, checking the widget data source permissions shows “access_denied” warnings.


Widget: Temperature Trend Chart
Data Source: device_telemetry_stream
MQTT Topic: sensors/+/telemetry
Status: No data available
Permission: access_denied

We need these dashboards operational for monitoring and reporting. Is this a permissions issue or a topic mapping problem in sapiot-24?

This is a multi-layered configuration issue common in sapiot-24. Here’s the comprehensive solution:

Dashboard Configuration: The dashboard needs to be explicitly linked to MQTT data sources with proper topic mapping:

{
  "dashboard_id": "industrial_monitoring_001",
  "data_sources": [
    {
      "source_id": "device_telemetry_stream",
      "topic_pattern": "sensors/+/telemetry",
      "refresh_interval_seconds": 30
    }
  ]
}

Update this via Dashboard Settings → Data Sources → Edit Configuration.

MQTT Topic Permissions: The critical issue: data source permissions in sapiot-24 require explicit wildcard authorization. Update your data source:

PUT /viz/v1/data-sources/device_telemetry_stream
{
  "allow_topic_wildcards": true,
  "topic_patterns": ["sensors/+/telemetry"],
  "authorized_roles": ["admin", "analyst", "operator"],
  "data_retention_hours": 168
}

Data Source Permissions: Verify role-based access at the data source level:


GET /viz/v1/data-sources/device_telemetry_stream/permissions

Should return:
{
  "role_permissions": [
    {"role": "admin", "access": "read_write"},
    {"role": "analyst", "access": "read"}
  ],
  "wildcard_enabled": true
}

Implementation steps:

  1. Enable wildcard support on your data source (this is disabled by default in sapiot-24)
  2. Add your MQTT topic pattern to the data source’s authorized patterns list
  3. Refresh dashboard topic subscriptions after updating data source config
  4. Clear the dashboard cache: Dashboard Settings → Advanced → Clear Cache
  5. Verify data flow using diagnostics API: GET /viz/v1/diagnostics/data-source/device_telemetry_stream/message-count

The access_denied error occurs because sapiot-24 treats wildcard topic subscriptions as a security-sensitive feature. Even with admin role access, wildcards must be explicitly enabled at the data source level. This prevents accidental exposure of device data through overly broad topic patterns.

After enabling wildcard support and refreshing the dashboard, your widgets should populate within 30-60 seconds (one refresh interval). If data still doesn’t appear, check the MQTT topic mapping in the device configuration - the devices must be publishing to topics that exactly match your pattern (sensors/device_id/telemetry, not sensors/device_id/data or similar variations).

For your 320 sensors, I also recommend creating a device group filter in the dashboard to avoid performance issues when rendering all devices simultaneously. Use widget-level filtering to show subsets of devices per dashboard page.

Refreshed the topic subscriptions but widgets still show no data. I’m noticing the MQTT topic pattern uses a wildcard (sensors/+/telemetry) - does the dashboard need specific topic permissions per device, or should the wildcard pattern be sufficient? Also, is there a way to test if data is actually reaching the visualization service from MQTT?

The access_denied error indicates a data source permissions issue. In sapiot-24, dashboard widgets need explicit permissions to access MQTT-based data sources. Check the data source security settings and ensure your user role has read access to the device_telemetry_stream. This changed from sapiot-23 where permissions were inherited from device access.

Good thinking. Dashboard configurations in sapiot-24 cache the MQTT topic subscriptions when first created. If you added new topics after dashboard creation, you need to refresh the dashboard’s topic bindings. Go to Dashboard Settings → Data Sources → Refresh Topic Subscriptions. This forces the dashboard to re-scan available topics and update its subscription list. The caching was added for performance but can cause this exact issue with new topics.

The wildcard should work, but sapiot-24 requires data source permissions to explicitly allow wildcard subscriptions. Check if your data source has “allow_topic_wildcards” enabled. Also, use the visualization service diagnostics API to verify data flow: GET /viz/v1/diagnostics/data-source/{source_id}/message-count. This shows if messages are reaching the viz service from your MQTT topics.