← Back to Dashboard

IoT Dash Documentation

Platform guide for version 0.4.1-beta — Device-first real-time IoT dashboard

Overview

IoT Dash is a real-time IoT dashboard platform that connects to MQTT brokers to visualize sensor data with gauges, time-series charts, and interactive maps — and control IoT devices with buttons, toggles, and sliders. Everything runs in the browser via WebSocket MQTT.

Key features:

Dashboard UI — visual overview

🌤️ Weather Station

🔓 Lock + Sensor + Control 🗺️ Map + Device 📖 Docs
📡 Roof Sensors 3 💡 Living Room 2 🔧 Garage Unit 1
Connected — emqx.iotdash.app:8084
Disconnect ▶ Simulator ⚙️ ⬇ ESP32
🌡️ Temperature ✏️ 🗑️
23.5 °C
050
💧 Humidity ✏️ 🗑️
62 %
0100
🌀 Pressure ✏️ 🗑️
1013 hPa
9001100
🌡️ Temperature — time series
💧 Humidity — time series
📋 MQTT Data Log
TimeTopicValue
14:32:05weather/roof/temp23.5
14:32:05weather/roof/humidity62
14:32:04weather/roof/pressure1013

Quick Start

Get your first dashboard running in under two minutes:

1

Sign up & verify email

Create an account at www.iotdash.app. Check your inbox for a verification email and click the link.

2

Create an app

Click + New App in the sidebar. Give it a name or pick a template (e.g., "Weather Station", "Smart Home").

3

Add your first device

Click + Device in the header. Name your device (e.g., "ESP32 Living Room"), choose an icon and color. The topic prefix auto-generates from the name.

4

Add sensors & controls

With a device tab active, click + Sensor or + Control to create widgets. They are automatically assigned to the active device.

5

Connect & test

Click Connect in the connection bar. Use the built-in Simulator to generate demo data, or connect real hardware.

Account & Login

IoT Dash uses Firebase Authentication with email/password. After signing up, you must verify your email before accessing the dashboard.

ℹ️ Email Verification

If you don't see the verification email, check your spam folder. You can request a new one from the verification page.

Your data is stored per-user in Cloud Firestore and cached in localStorage for instant loading on return visits.

Apps

An app is an independent dashboard workspace. Each app has its own set of devices, widgets, layout, and broker configuration. You can create up to 5 apps per account.

Creating an App

Click + New App in the sidebar. You can:

Switching Apps

Click any app in the sidebar to switch. The dashboard fully re-mounts on app switch, loading the selected app's data.

Managing Apps

Devices

In v0.4.1, devices are the primary organizational unit. All sensors, controls, and map pins belong to a device. You must create at least one device before adding any widgets.

💡 Device-First Architecture

Think of a device as a physical piece of hardware (e.g., an ESP32 board, a Raspberry Pi, a PLC). Widgets are grouped under the device they report from or control.

Creating a Device

Click + Device in the dashboard header. Configure:

FieldDescription
NameHuman-readable device name (e.g., "Weather Station Roof")
IconEmoji icon displayed on the device tab (📡 🖥️ 💡 🌡️ etc.)
ColorAccent color for the device tab border
Topic PrefixAuto-generated from name. Pre-fills MQTT topics when adding widgets (e.g., weather/station/)

Device Tabs

Each device appears as a tab below the header. Click a tab to view only that device's widgets. The active tab determines which device new widgets are assigned to.

Device Tabs — active tab highlighted
📡 Roof Sensors 3 💡 Living Room 2 🔧 Garage Unit 1 🌱 Garden 4

Deleting a Device

⚠️ Destructive Action

Deleting a device permanently removes all its sensors, controls, and map pins. This cannot be undone.

Limits

Up to 20 devices per app. The "+ Device" button is disabled when the limit is reached.

Sensors

Sensors are read-only widgets that subscribe to an MQTT topic and display incoming values. Each sensor renders as a gauge card and (for numeric types) an accompanying time-series chart.

Adding a Sensor

With a device tab active, click + Sensor. Configure:

FieldDescriptionRequired
NameDisplay label (e.g., "Room Temperature")
MQTT TopicTopic to subscribe to. Topic prefix auto-fills from device. (e.g., home/bedroom/temp)
UnitDisplay unit (°C, %, hPa, lux, etc.)
Data Typenumber, integer, boolean, or string
Min / MaxGauge range (numeric types only)
Warning Low / HighThreshold values that trigger visual warnings on the gauge
DecimalsDecimal places for display (0–5)
IconEmoji icon for the gauge card
ColorAccent color for gauge arc and chart line

Data Types

TypeGaugeChartExample MQTT Payload
numberArc gauge with min/max✅ Line chart23.5
integerArc gauge with min/max✅ Line chart42
booleanON/OFF indicator1 or 0
stringRaw text displayOK

Editing & Deleting

Hover over a gauge card to reveal the edit (✏️) and delete (🗑️) buttons in the top-right corner.

Gauge Cards — sensor widgets
🌡️ Temperature ✏️ 🗑️
23.5 °C
050
🚪 Door Sensor ✏️ 🗑️
🟢
OPEN boolean
📊 Status ✏️ 🗑️
📋
Running OK string

Controls

Controls are write widgets that publish MQTT messages when the user interacts with them. Use them to switch relays, set thresholds, or send commands to your devices.

Control Types

TypeUI ElementPublishes
ButtonClick buttonA fixed payload string (e.g., 1) on each click
ToggleON/OFF switchAlternates between ON payload and OFF payload (e.g., 1 / 0)
SliderRange sliderThe current slider value (e.g., 75) with configurable min, max, step, and unit

Adding a Control

With a device tab active, click + Control. Configure the label, MQTT topic, widget type, and type-specific settings (payloads, labels, slider range).

Control Fields

FieldApplies ToDescription
LabelAllDisplay name
MQTT TopicAllTopic to publish to
PayloadButtonMessage to publish on click
Button TextButtonLabel on the button (default: "Send")
ON / OFF PayloadToggleValues sent for each state
ON / OFF LabelToggleText displayed in each state
Min / Max / StepSliderSlider range configuration
Default ValueSliderInitial slider position
UnitSliderUnit displayed next to the slider value
Control Widgets — button, toggle, slider
🔔 Ring Alarm
🔔 Ring Now → home/alarm/ring
💡 Room Light
ON → home/light/switch
🌀 Fan Speed
75 %
→ home/fan/speed

Map Pins

Map pins display real-time GPS positions on an interactive Leaflet map. Each pin subscribes to separate MQTT topics for latitude and longitude, enabling live tracking of vehicles, drones, or mobile sensors.

Adding a Map Pin

With a device tab active, click 🗺️ Map. Configure:

FieldDescription
Pin NameLabel shown on the map marker
Latitude TopicMQTT topic publishing latitude (e.g., device/gps/lat)
Longitude TopicMQTT topic publishing longitude (e.g., device/gps/lng)
IconMap marker emoji
Marker ColorColor of the map marker
ℹ️ Topic-Based GPS

Map pins use MQTT topics, not static coordinates. Your device publishes its GPS position as separate lat and lng values, and the map updates in real time. The topic prefix from the device auto-fills.

Expected MQTT Payloads

topic: device/gps/lat   →  payload: 28.6139
topic: device/gps/lng   →  payload: 77.2090

Payloads should be plain numeric strings (decimal degrees).

MQTT Broker

IoT Dash connects to MQTT brokers over WebSocket (ws:// or wss://). Each app has its own independent broker configuration.

⚠️ WebSocket Required

Browsers cannot use raw TCP MQTT. Your broker must support WebSocket connections. Most modern brokers (EMQX, Mosquitto, HiveMQ) have this enabled by default on a separate port.

Configuring the Broker

Click the ⚙️ gear icon in the connection bar to open Broker Settings. Options:

Connection Bar — broker status & controls
Connected — IoT Dash Cloud (EMQX) · emqx.iotdash.app:8084
Disconnect ▶ Simulator ⚙️ ⬇ ESP32
Disconnected — tap Connect to start
Connect ▶ Simulator ⚙️ ⬇ ESP32
FieldDescriptionDefault
Broker URLFull WebSocket URLwss://test.mosquitto.org:8081/mqtt
UsernameMQTT auth username (optional)
PasswordMQTT auth password (optional)
Client IDUnique client ID (auto-generated if blank)Auto
Keep-alivePing interval in seconds60
Clean SessionStart with no prior subscriptionstrue
Reconnect PeriodReconnect delay in ms5000
Connect TimeoutConnection timeout in ms10000

Connection Status

The connection bar shows the current MQTT state:

StatusMeaning
🟢 ConnectedActively receiving messages
🟡 ConnectingEstablishing connection
🔴 DisconnectedNot connected — click "Connect"
🔴 ErrorConnection failed — check broker URL and credentials

Broker Presets

IoT Dash includes pre-configured broker presets for quick setup:

PresetProviderAuthNotes
IoT Dash CloudEMQX CloudPre-filledBuilt-in broker, ready to use out of the box
🦟 Mosquitto (Public)Eclipse FoundationNonePublic test broker — anyone can see your data
🐝 HiveMQ (Public)HiveMQNonePublic test broker
🔧 Custom BrokerYour ownYour configEnter any WebSocket-enabled MQTT broker
💡 Recommended for Testing

Use the IoT Dash Cloud preset for the easiest experience. It comes pre-configured with authentication and works immediately with the simulator and ESP32 code generator.

Simulator

The built-in simulator publishes random demo data to all your configured sensor topics without needing any hardware. It also simulates GPS coordinates for map pins.

Using the Simulator

  1. Ensure you're connected to an MQTT broker
  2. Click ▶ Simulate in the connection bar
  3. Watch your gauges, charts, and map update with randomized values
  4. Click ⏹ Stop to stop the simulator

The simulator publishes values within each sensor's configured min/max range and random GPS coordinates near a base location (New Delhi by default for the ESP32, but map pins use their own topic subscriptions).

Grid Layout

The dashboard uses a responsive drag-and-drop grid powered by react-grid-layout. Widgets auto-arrange but their positions can be customized.

Editing Layout

  1. Click the 🔒 button to unlock the layout (changes to 🔓 Editing)
  2. Drag widgets by the handle that appears in the top-left
  3. Resize widgets by dragging the bottom-right corner
  4. Click 🔓 Editing to lock and save

Layout changes are auto-saved with an 800ms debounce — you don't need to manually save.

Responsive Breakpoints

BreakpointWidthGrid Columns
Large (lg)> 900px12
Medium (md)600–900px8
Small (sm)< 600px4

Widget Types

Each device's dashboard can contain the following widget types:

Gauge Card

An SVG arc gauge showing the current sensor value. Displays the sensor icon, name, value, unit, and a colored arc that fills proportionally between min and max. Warning zones are highlighted when values exceed thresholds.

Time-Series Chart

A Recharts line chart that appears automatically for number and integer data types. Shows the recent history of values over time with the sensor's accent color.

Control Card

Interactive widget for buttons, toggles, and sliders. Each publishes to its configured MQTT topic when the user interacts.

Map Widget

A Leaflet map showing all the active device's map pins as markers. Positions update in real time from MQTT. The map appears automatically when at least one map pin exists.

Data Table

A raw MQTT message log table at the bottom of the grid. Shows recent incoming and outgoing messages with timestamps, topics, and payloads. Always present on the dashboard.

ESP32 Code Generator

IoT Dash can generate a ready-to-upload Arduino sketch (.ino file) pre-configured with your app's sensors, controls, map pins, and broker settings.

Downloading the Sketch

Click the ESP32 download button in the connection bar. A .ino file is downloaded with a unique ID in the filename (so multiple downloads don't overwrite each other).

What's Included

Requirements

ItemDetails
BoardAny ESP32 board (ESP32, ESP32-S3, etc.)
IDEArduino IDE 2.x
LibraryPubSubClient by Nick O'Leary (install from Library Manager)
ConnectionPlain MQTT over TCP (port 1883) — no TLS

Flashing Steps

1

Open the .ino file in Arduino IDE

2

Install PubSubClient library (Sketch → Include Library → Manage Libraries)

3

Set WIFI_SSID and WIFI_PASSWORD at the top of the file

4

Choose a broker preset (first one is active by default) or enter custom broker details

5

Select your ESP32 board and port, then click Upload

6

Open Serial Monitor at 115200 baud to see connection status and published data

ℹ️ Demo Data Only

The generated sketch publishes random simulated values. Replace the publishSensorData() function body with real sensor readings from your hardware (DHT22, BMP280, GPS module, etc.).

App Templates

When creating a new app, you can choose from pre-built templates that include pre-configured sensors and controls:

TemplateSensorsDescription
📄 Blank0Start from scratch
🌤️ Weather Station4Temperature, humidity, pressure, wind speed
🏠 Smart Home3 sensors + 3 controlsRoom temp, humidity, light + LED, fan, thermostat
🏭 Industrial4Motor RPM, tank level, pressure, vibration
🌱 Agriculture4 sensors + 2 controlsSoil moisture, temp, rain, light + irrigation, fan
Energy Monitor4Voltage, current, power, energy consumption

Template sensors come with sensible defaults for min/max, warning thresholds, units, and icons. You can edit or delete any of them after creation.

Limits & Quotas

ResourceLimit
Apps per account5
Devices per app20
Sensors per appNo hard limit (practical: ~50)
Controls per appNo hard limit (practical: ~50)
Map pins per appNo hard limit (practical: ~20)
Message historyKept in browser memory (cleared on page refresh)
Data persistenceConfig persisted to Firestore; live sensor data is ephemeral
ℹ️ Data Storage

IoT Dash stores your configuration (devices, sensors, controls, layout, broker) in the cloud. Live sensor data (values, chart history, raw messages) are kept in browser memory only and are lost on page refresh. IoT Dash is a real-time visualization tool, not a data logger.

Tips & Shortcuts

ActionHow
Edit a deviceRight-click the device tab
Edit a sensorHover gauge → click ✏️
Delete a sensorHover gauge → click 🗑️
Edit a controlHover control card → click ✏️
Edit a map pinClick the pin on the map → click Edit
Unlock layoutClick 🔒 in the header
Drag a widgetGrab the ⠿ handle (layout must be unlocked)
Resize a widgetDrag the bottom-right corner (layout unlocked)
Open broker settingsClick ⚙️ in the connection bar
Toggle sidebarClick ☰ in the header

FAQ

Why can't I add sensors? The buttons are hidden.

You need to create a device first. In v0.4.1, all widgets belong to a device. Click + Device to get started.

My gauges show "—" instead of a value.

This means no MQTT message has been received on that topic yet. Check that:

Can I use my own MQTT broker?

Yes! Choose "Custom Broker" in broker settings and enter your WebSocket URL (must be ws:// or wss://). Raw TCP (mqtt://) is not supported in browsers.

Why does my ESP32 use port 1883 but the dashboard uses 8084?

Browsers use WebSocket MQTT (port 8084 for WSS on EMQX). ESP32 uses raw TCP MQTT (port 1883). Both connect to the same broker but through different protocol listeners.

Is my data private?

Your dashboard configuration is stored in Firebase Firestore under your user account and is only accessible to you. However, MQTT messages pass through the broker you choose — if you use a public broker, anyone subscribed to the same topics can see your data. Use the IoT Dash Cloud preset or your own private broker for secure communication.

What happens when I delete a device?

All sensors, controls, and map pins belonging to that device are permanently deleted. The dashboard switches to the next available device tab.

Can I export my data?

Currently, IoT Dash does not support data export. The Data Table shows raw messages during the session, but they are not persisted. The ESP32 code generator exports your configuration as an Arduino sketch.

What browsers are supported?

IoT Dash works on all modern browsers: Chrome, Firefox, Edge, Safari. A WebSocket-capable browser is required for MQTT connectivity.