← Back to Dashboard

IoT Dash Documentation

Complete platform guide for v0.9.2-beta — Real-time IoT Dashboard with 15 widget types & light/dark theme

Overview

IoT Dash is a real-time IoT dashboard platform that connects to MQTT brokers to visualize sensor data, control IoT devices, and track GPS locations — all from your browser via WebSocket MQTT.

The platform organizes widgets into three categories:

Plus automatic Time-Series Charts for gauge widgets and a live Data Table for all MQTT messages.

Dashboard UI — full layout overview

🌤️ Weather Station

🔒 Lock + Add Widget ▾ + Device
📡 Roof Sensors 6 💡 Living Room 4 🔧 Garage 2
Connected — IoT Dash Cloud · emqx.iotdash.app:8084
Disconnect ▶ Simulator ⚙️ 📥 ESP32
🌡️Temperature
23.5 °C
🔵Pressure
1013 hPa
Lo 1008Avg 1012Hi 1018
💧Humidity
65 %
🌧️Rain
Detected
💡Room Light
ON
🌀Fan Speed
75 %
🌡️ Temperature — time series
💧 Humidity — time series
📋 MQTT Data Log
TimeTopicValue
14:32:05weather/roof/temp23.5
14:32:05weather/roof/humidity65
14:32:04weather/roof/pressure1013

Quick Start — Manual Setup

Build your first dashboard from scratch in under 3 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 (e.g., "My Workshop"). Choose Blank template.

3

Add a device

Click + Device in the header. Name it (e.g., "ESP32-Sensor"), pick an icon and color. A topic prefix auto-generates.

4

Add widgets

With the device tab active, click + Add Widget. The dropdown shows all 12 types grouped by category. Pick a Gauge from Display, give it a name, topic, unit, and min/max. Add a Toggle from Control to send commands.

5

Connect & test

Click Connect in the connection bar (uses IoT Dash Cloud by default). Then click ▶ Simulator to see live data flowing through your widgets.

Quick Start — AI Generator

The fastest way to build a dashboard. Describe your IoT setup in plain English and AI creates everything for you.

1

Open the AI Generator

Click the 🤖 AI Generate button in the sidebar (below your app list).

2

Describe your setup

Type a natural language description of your IoT project. Be specific about devices, sensors, and controls. Example:

"I have an ESP32 monitoring a greenhouse with temperature,
humidity, soil moisture sensors and a water pump relay.
Also a GPS tracker on my delivery van."
3

Preview the result

AI generates a complete dashboard blueprint showing devices, sensors (with appropriate widget types), controls, and map pins. Review the preview to make sure it looks right.

4

Click "Create Dashboard"

The app is created with all devices, sensors, controls, and map pins pre-configured. Connect to the broker and start the simulator to see it in action.

ℹ️ Early Preview Feature

The AI Generator uses GPT-4o-mini via GitHub Models API (free tier: 150 requests/day). It may not always produce perfect configurations — you can edit any generated widget afterwards.

Quick Start — From Template

Templates create a pre-configured dashboard with mixed widget types in one click.

1

Create a new app

Click + New App in the sidebar.

2

Pick a template

Choose one of 5 pre-built templates: 🌤️ Weather Station, 🏠 Smart Home, 🏭 Industrial IoT, ⚡ Energy Monitor, or 🌱 Smart Agriculture. Each comes with sensors using a mix of widget types (gauges, digital displays, 7-segment readouts, stat cards, LEDs, progress bars, terminal logs) and preset controls.

3

Connect & explore

Hit Connect → Start Simulator. All widgets spring to life with simulated data. Edit or delete any widget to customize.

See the full App Templates reference for what each template includes.

Account & Login

IoT Dash uses Firebase Authentication with email/password.

ℹ️ Email Verification

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

Apps

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

Creating an App

Click + New App in the sidebar. Options:

Switching & Managing Apps

Devices

Devices are the primary organizational unit. All widgets (sensors, controls, map pins) belong to a device. You must create at least one device before adding widgets.

💡 Think Physical Hardware

A device typically represents one physical board (ESP32, Raspberry Pi, PLC). Its topic prefix ensures all its widgets publish/subscribe under a common MQTT namespace.

Creating a Device

FieldDescription
NameHuman-readable label (e.g., "Weather Station Roof")
IconEmoji icon for the device tab (📡 🖥️ 💡 🌡️)
ColorAccent color for the device tab border
Topic PrefixAuto-generated from name. Pre-fills MQTT topics in widget modals (e.g., weather/station/)
Device Tabs — active tab highlighted with widget count badges
📡 Roof Sensors 6 💡 Living Room 4 🔧 Garage 2 🌱 Garden 5

Device Profiles

Save a device's complete widget set as a reusable profile. Apply saved profiles when creating new devices to instantly set up all sensors, controls, and map pins. See Device Profiles.

Limits

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

Widget Categories

IoT Dash organizes its 15 widget types into three categories. When you click + Add Widget, the dropdown shows all types grouped:

+ Add Widget dropdown — grouped by category
📊 Display
📊 Gauge
🔢 Digital Display
📟 7-Segment
📈 Stat Card
🟢 Status Card
🔴 LED Indicator
📶 Progress Bar
🖥️ Terminal Log
🖼️ Image Card
🎛️ Control
🔘 Button
🔀 Toggle
📏 Slider
🔢 Number Input
🎨 RGB Color
📍 Location
🗺️ Map Pin
CategoryDirectionCount
DisplayRead-only — subscribes to topics9 types
ControlWrite — publishes to topics5 types
LocationRead-only — lat/lng topics1 type

Display widgets subscribe to an MQTT topic and show incoming data. Control widgets publish MQTT messages when users interact. Map Pins subscribe to lat/lng topics for real-time GPS.

📊 Display Widgets

Gauge

The classic SVG arc gauge — a semicircular dial that fills proportionally between min and max. Best for real-time numeric values like temperature, pressure, or speed. Gauge widgets also automatically generate a time-series chart below them.

Gauge widget — SVG arc with warning thresholds
🌡️Temperature✏️ 🗑️
23.5 °C
-1060
💨Wind Speed✏️ 🗑️
42.3 km/h
0150
🔥Machine Temp✏️ 🗑️
158 °C
20200

Configuration Fields

FieldDescriptionRequired
NameDisplay label (e.g., "Room Temperature")
MQTT TopicTopic to subscribe to. Device prefix auto-fills.
UnitDisplay unit (°C, %, hPa, km/h, RPM)
Data Typenumber, integer, boolean, or string
Min / MaxGauge arc range (defines 0% and 100% fill)
Warning Low / HighThresholds that trigger visual warning colors
DecimalsDecimal places for display (0–5)
Icon / ColorEmoji icon and accent color for the gauge arc

Best For

Temperature, pressure, speed, RPM, voltage — any value with a known range where you want to see "how full" the reading is.

Digital Display

A clean, large numeric readout — like a digital multimeter. Shows the value prominently in a monospace font with an optional thin bar indicating position within its range and a last-updated timestamp. Perfect when a gauge arc is overkill and you just need a big, readable number.

Digital Display — large numeric readout with thin range bar
💨Wind Speed✏️ 🗑️
42.3 km/h
0 – 150 km/h⏱ 12:04:11
🔋Power Draw✏️ 🗑️
67.2 kW
0 – 100 kW⏱ 12:04:08
📊Energy✏️ 🗑️
4521.80 kWh
0 – 9999 kWh⏱ 12:04:05

Features

Gauge vs Digital Display

FeatureGaugeDigital Display
Best forValues with a "fill level" feelExact readout focus
VisualSVG arc + auto chartLarge number + thin bar
Chart✅ Auto-generated belowNo chart (add separately)
TimestampNo✅ Shows last update
SizeTaller (gauge arc)Compact

Best For

Cumulative values (kWh, total count), high-precision readings, fast-changing values where a gauge arc would be distracting, or when you simply want the cleanest possible number display.

7-Segment Display

A retro-style seven-segment LED display — the classic look from industrial panels, digital clocks, and multimeters. Each digit is rendered as SVG segments with inactive segments faintly visible, giving that authentic hardware feel. The widget always keeps a dark panel background even in light theme for maximum realism.

7-Segment Display — retro LED digits with dark panel
Motor RPM✏️ 🗑️
3420 RPM
Voltage✏️ 🗑️
230.5 V
🌡️Temperature✏️ 🗑️
-12.5 °C

Features

Best For

RPM, voltage, frequency, counters — any value where you want that classic industrial hardware panel aesthetic. Especially effective on dark dashboards for monitoring environments.

Stat Card

Shows the current value prominently with a trend arrow (↑ rising, ↓ falling, → stable) and min / avg / max from recent history. Great for at-a-glance monitoring.

Stat Card — value + trend + min/avg/max history
🔵Pressure
1013 hPa
Lo 1008Avg 1012Hi 1018
🌀Vibration
12.4 mm/s
Lo 8.2Avg 11.1Hi 15.6
🧪Soil pH
6.8 pH
Lo 6.5Avg 6.7Hi 7.0

Best For

Values where trend direction matters more than a gauge position — barometric pressure, vibration, pH, current draw. Also ideal when you want min/avg/max at a glance.

Status Card

A large, bold ON / OFF text display with a color glow. Designed for binary status indicators where you need instant, unmistakable visual clarity at a glance.

Status Card — big ON/OFF text with glow effect
🚪Door
● ON OPEN
🏭Machine Status
● ON RUNNING
⚠️Alarm
○ OFF SAFE

How It Works

Boolean data type: payloads 1, true, ON, open display as ON (glowing). Everything else displays as OFF (dim).

Best For

Door open/closed, machine running/stopped, alarm active/clear — any binary state where visibility from across the room matters.

LED Indicator

A simple colored glowing dot — mimics a physical LED on a circuit board. Compact and perfect for dense dashboards with many binary indicators.

LED Indicator — colored dot with glow animation
🏃Motion
Alert
🌧️Rain
Detected
⚠️Fault
Normal
🚿Pump
Active

LED vs Status Card

FeatureLED IndicatorStatus Card
SizeCompact (small dot)Large (big text)
VisibilityGood for nearby monitoringVisible from across the room
Best useDense dashboards, many indicatorsCritical status, few indicators

Best For

Motion detected, rain sensor, fault alerts, pump active, relay status — compact binary indicators when you have many on one dashboard.

Progress Bar

A horizontal bar that fills proportionally between min and max. Shows a percentage value alongside. Changes color when entering warning zones.

Progress Bar — horizontal fill for levels and percentages
💧Humidity
65 %
🔋Power Draw
80 kW
💧Soil Moisture
35 %

Best For

Tank levels, fill percentages, battery level, soil moisture, humidity, power consumption — any value naturally expressed as "how full" a horizontal bar is.

Terminal Log

A scrollable monospace log that displays every MQTT message received on the sensor's topic. Auto-scrolls to the latest message. Styled like a serial monitor terminal.

Terminal Log — scrollable MQTT message log in monospace font
🖥️Serial Log
12:04:01 system boot OK
12:04:03 WiFi connected: 192.168.1.42
12:04:05 MQTT connected to broker
12:04:06 sensor read: temp=24.5 hum=62
12:04:11 sensor read: temp=24.3 hum=63
12:04:16 alert: vibration threshold exceeded

How It Works

  • Subscribes to one MQTT topic
  • Every incoming message is appended with a timestamp
  • Auto-scrolls to latest entry
  • Shows up to 100 recent messages

Best For

Device debug output, serial monitor data, event logs, alert messages — any string data type where you want to see a history of messages.

Image Card

Displays an image from a URL published to its MQTT topic. The payload must be a valid URL (http://, https://, or data: URI). Click the image to open it full-size.

Image Card — displays image from URL topic
📷Camera Feed
📷
click to open full size

Expected Payload

https://cam.example.com/snap.jpg

Or a base64 data URI:

data:image/jpeg;base64,/9j/4AAQ...

Best For

IP camera snapshots, QR codes, thermal images, microscope captures — any image published as a URL.

Time-Series Chart

A Recharts line chart that automatically appears for every Gauge widget with a numeric data type. Shows the recent history of values plotted over time.

Time-Series Chart — auto-generated for numeric Gauge widgets
🌡️ Temperature — time series
⚡ Motor RPM — time series
ℹ️ Charts are Gauge-Only

Charts are only generated for Gauge widgets with number or integer data types. Other display types (Stat, Status, LED, Progress, Terminal, Image) do not generate charts.

🎛️ Control Widgets

Control widgets publish MQTT messages when the user interacts with them. Use them to switch relays, set thresholds, trigger actions, or send commands to your devices.

Button

A simple click-to-publish button. Each click sends a fixed payload to the configured topic.

Button control — publishes payload on click
🛑Emergency Stop
🛑 E-STOP → factory/machine/estop
🔔Ring Alarm
🔔 Ring Now → home/alarm/ring
🔄Reboot
🔄 Restart Device → device/command/reboot
FieldDescription
PayloadThe exact string published on click (e.g., STOP, 1, reboot)
Button TextText displayed on the button face (default: "Send")

Toggle

An ON/OFF switch that alternates between two payloads. Visually shows the current state with a sliding knob.

Toggle control — alternates between ON and OFF payloads
💡Room Light
ON → home/light/set
🔒Door Lock
UNLOCKED → home/door/lock
🚿Irrigation
RUNNING → farm/irrigation
FieldDescription
ON PayloadValue sent when toggled ON (e.g., 1, ON, LOCK)
OFF PayloadValue sent when toggled OFF (e.g., 0, OFF, UNLOCK)
ON / OFF LabelText displayed in each state

Slider

A range slider that publishes the current value when adjusted. Configure min, max, step, and unit.

Slider control — drag to publish a value within a range
🌀Fan Speed
75 %
→ home/fan/speed
Motor Speed
50 %
→ factory/machine/speed
⏱️Water Duration
15 min
→ farm/irrigation/duration
FieldDescription
Min / MaxSlider range limits
StepIncrement size (e.g., 5 means 0, 5, 10, 15...)
Default ValueInitial slider position
UnitDisplayed next to the value (%, °C, min)

Number Input

A text field + send button for typing an exact numeric value and publishing it. Supports min/max validation and step constraints. Press Enter or click ▶ to publish.

Number Input — type a value and send
💡Brightness
0 – 255 → home/light/brightness
🎯Temp Setpoint
20 – 200 °C → factory/setpoint
Power Limit
100 – 10000 W → energy/limit
FieldDescription
Min / MaxValid input range (values outside are rejected)
StepIncrement constraint
UnitDisplayed as placeholder/context

Slider vs Number Input

FeatureSliderNumber Input
Input methodDrag to approximate valueType exact value
Best rangeSmall (0–100)Large (0–10000) or precise
Use caseFan speed, volumeSetpoints, thresholds, addresses

RGB Color

A Blynk-style color picker for controlling RGB LEDs, light strips, or any color-based actuator. Includes a glowing preview circle, HTML5 color picker, and individual R / G / B sliders. Similar to the RGB widget in Blynk, but with three publish format options.

RGB Color — pick a color and publish to your device
🎨LED Strip
#6C63FF
R:108   G:99   B:255
💡Desk Lamp
#FF6B6B
R:255   G:107   B:107
🌈Ambient
#4ECDC4
R:78   G:205   B:196

Configuration

FieldDescription
Publish FormatHow the color is published — CSV (255,128,0), JSON ({"r":255,"g":128,"b":0}), or HEX (#FF8000)
Default ColorInitial color on load (default: #6C63FF)
Auto-sendWhen on, every color/slider change publishes immediately. Off = manual "Send Color" button

Publish Formats Comparison

FormatExample PayloadBest For
CSV255,128,0Arduino / ESP32 — easy sscanf() parsing
JSON{"r":255,"g":128,"b":0}Node-RED, Python, complex pipelines
HEX#FF8000Web-based clients, NeoPixel libraries

ESP32 Example (CSV format)

// Subscribe to RGB topic
mqttClient.subscribe("home/led/color");

// In message callback:
void onMessage(String topic, String payload) {
  int r, g, b;
  sscanf(payload.c_str(), "%d,%d,%d", &r, &g, &b);
  analogWrite(RED_PIN, r);
  analogWrite(GREEN_PIN, g);
  analogWrite(BLUE_PIN, b);
}
ℹ️ Auto-send

With auto-send enabled (default), every drag of an R/G/B slider or color picker change publishes instantly — great for interactive LED testing. Disable auto-send for low-bandwidth scenarios where you want to pick a color first and then send once.

📍 Location Widget

Map Pin

Displays real-time GPS positions on an interactive Leaflet map. Each pin subscribes to separate MQTT topics for latitude and longitude. The map widget appears automatically when at least one map pin exists.

Map Widget — real-time GPS tracking with colored pins
🚗
Delivery Van
📡
Weather Station
🛰️
GPS Tracker

Configuration

FieldDescription
Pin NameLabel shown on the map marker and in popups
Latitude TopicMQTT topic publishing latitude (e.g., device/gps/lat)
Longitude TopicMQTT topic publishing longitude (e.g., device/gps/lng)
IconEmoji icon displayed inside the map marker
Marker ColorColor of the pin marker and its glow

Expected MQTT Payloads

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

Payloads must be plain numeric strings in decimal degrees.

ℹ️ Topic-Based GPS

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

MQTT Broker

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

⚠️ WebSocket Required

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

Connection Bar — broker status & controls
Connected — IoT Dash Cloud · emqx.iotdash.app:8084
Disconnect ▶ Simulator ⚙️ 📥 ESP32
Disconnected
Connect ⚙️

Broker Settings

FieldDescriptionDefault
Broker URLFull WebSocket URLIoT Dash Cloud preset
UsernameMQTT auth username
PasswordMQTT auth password
Client IDUnique client identifierAuto-generated
Keep-alivePing interval (seconds)60
Clean SessionStart fresh each connecttrue
Reconnect PeriodReconnect delay (ms)5000
Connect TimeoutConnection timeout (ms)10000

Connection Status

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

Broker Presets

PresetProviderAuthNotes
⚡ IoT Dash CloudEMQX CloudPre-filledBuilt-in, works out of the box
🦟 MosquittoEclipseNonePublic test broker
🐝 HiveMQHiveMQNonePublic test broker
📡 EMQXEMQNonePublic test broker
☁️ HiveMQ CloudHiveMQUsername/PassFree tier
🌐 EMQX CloudEMQUsername/PassFree tier
🔧 CustomYour ownYour configAny WebSocket MQTT broker
💡 Recommended

Use IoT Dash Cloud for the easiest experience. Pre-configured with auth and works with the simulator and ESP32 generator.

Simulator

The built-in simulator publishes random demo data to all your sensor topics without any hardware.

  1. Ensure you're connected to an MQTT broker
  2. Click ▶ Simulate in the connection bar
  3. Watch all widgets update with randomized values within their configured ranges
  4. Click ⏹ Stop to stop

The simulator publishes values within each sensor's configured min/max range, and random GPS coordinates for map pins.

Grid Layout

The dashboard uses a drag-and-drop grid powered by react-grid-layout v2.

Editing Layout

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

Layout auto-saves with 800ms debounce.

Responsive Breakpoints

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

Default Widget Sizes

Widget TypeDefault WidthDefault Height
Gauge, Digital, 7-Segment, Stat, Status, LED, Progress3 columns2 rows
Terminal Log, Image Card6 columns3 rows
Button, Toggle, Slider, Number Input3 columns2 rows
Time-Series Chart6 columns2 rows
Map Widget12 columns (full width)4 rows
Data Table12 columns (full width)3 rows

Data Table

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

Data Table — live MQTT message log
📋 MQTT Data Log
TimeDirectionTopicPayload
14:32:06⬇ INweather/roof/temp24.1
14:32:06⬇ INweather/roof/humidity63
14:32:05⬆ OUThome/light/setON
14:32:04⬇ INfarm/soil/moisture42.5

AI Dashboard Generator

Describe your IoT setup in plain English and the AI creates a complete dashboard with devices, sensors (automatically choosing appropriate widget types), controls, and map pins.

How It Works

  1. Click 🤖 AI Generate in the sidebar
  2. Describe your project (devices, sensors, what they measure, controls needed)
  3. Click Generate — AI analyzes your description and creates a blueprint
  4. Preview the generated devices, sensors, and controls
  5. Click Create Dashboard to apply it

Tips for Better Results

ℹ️ Early Preview

Uses GPT-4o-mini via GitHub Models API (free tier: 150 requests/day). Results may not always be perfect — you can edit any widget after creation.

Theme (Light / Dark)

IoT Dash supports both dark and light themes. Switch using the theme toggle button in the sidebar footer.

How to Switch

  1. Open the sidebar (expand it if collapsed)
  2. At the bottom, click ☀️ Light Mode or 🌙 Dark Mode
  3. The theme switches instantly — all widgets, modals, charts, and maps adapt

Persistence

Your theme preference is saved to localStorage and persists across sessions. The theme is applied before React loads (via an inline script in index.html) so there's no flash of the wrong theme on page load.

CSS Variable System

The theme system uses CSS custom properties on the :root / [data-theme] selectors. All background colors, text colors, borders, shadows, and accent transparencies are driven by these variables:

VariableDark ValueLight ValueUsage
--bg-body#0e0e16#f0f2f5Page background
--bg-surface#16161e#ffffffSidebar, inputs
--bg-card#1e1e2e#ffffffWidget cards, modals
--bg-elevated#2a2a3e#e4e4edElevated elements
--text-primary#e0e0e0#1a1a2eMain text
--accent#6c63ff#6c63ffBrand / accent color
--border-subtle#333#d5d5e0Borders
ℹ️ Default Theme

New users start in dark mode. The sidebar toggle shows ☀️ to switch to light, and 🌙 to switch back to dark. Charts, tooltips, and the Leaflet map automatically adapt to the active theme.

ESP32 Code Generator

Click 📥 ESP32 in the connection bar to download a ready-to-flash Arduino sketch.

What's Included

Flashing Steps

1

Open the .ino file in Arduino IDE 2.x

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 default) or enter custom details

5

Select your ESP32 board and port → click Upload

6

Open Serial Monitor at 115200 baud to see connection status

Requirements

ItemDetails
BoardAny ESP32 (ESP32, ESP32-S3, ESP32-C3)
IDEArduino IDE 2.x
LibraryPubSubClient by Nick O'Leary
ConnectionPlain MQTT over TCP (port 1883) — no TLS
ℹ️ Demo Data Only

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

App Templates

Templates create pre-configured dashboards with mixed widget types in one click:

TemplateSensorsWidget TypesControls
🌤️ Weather StationTemp, Humidity, Pressure, Wind, RainGauge, Progress, Stat, Digital, LED
🏠 Smart HomeRoom Temp, Light, Door, MotionStat, Progress, Status, LEDToggle, Slider, Number Input
🏭 Industrial IoTMachine Temp, Vibration, RPM, Power, Status, Fault, Serial LogGauge, Stat, 7-Segment, Digital, Status, LED, TerminalButton, Slider, Number Input
⚡ Energy MonitorVoltage, Current, Power, Energy, Grid Status7-Segment, Stat, Digital, LEDToggle, Number Input
🌱 Smart AgricultureSoil Moisture, Soil Temp, pH, Humidity, PumpProgress, Gauge, Stat, LEDToggle, Slider

All template widgets can be edited, deleted, or added to after creation.

Device Profiles

Device profiles let you save and reuse a device's complete widget configuration.

Built-in Profiles

ProfileContents
📡 Weather StationTemperature, humidity, pressure, wind sensors
🔌 Smart RelayRelay toggle + power sensor
📍 GPS TrackerMap pin with lat/lng topics
💡 Light DimmerBrightness slider + light level sensor
🌡️ Environment MonitorTemp, humidity, pressure, air quality

Custom Profiles

Limits & Quotas

ResourceLimit
Apps per account5
Devices per app20
Sensors per appNo hard limit (~50 practical)
Controls per appNo hard limit (~50 practical)
Map pins per appNo hard limit (~20 practical)
AI requests150/day (GitHub Models free tier)
Message historyBrowser memory only (cleared on refresh)
Config persistenceFirestore (unlimited, cached in localStorage)
ℹ️ Data Storage

IoT Dash stores your configuration (devices, widgets, layout, broker) in the cloud. Live sensor data (values, chart history, raw messages) is kept in browser memory only and lost on 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 widgetHover over it → click ✏️
Delete a widgetHover over it → click 🗑️
Edit a map pinClick the pin on the map → Edit
Unlock layoutClick 🔒 in the header bar
Drag a widgetGrab the ⠿ handle (layout unlocked)
Resize a widgetDrag the bottom-right corner (layout unlocked)
Open broker settingsClick ⚙️ in the connection bar
Toggle sidebarClick ☰ in the header
Preview widget typeThe sensor/control modal shows a live mini-preview as you configure
Add widget fastPick exact type from + Add Widget dropdown (no need to change type in modal)
Switch themeClick ☀️ / 🌙 in the sidebar footer to toggle light / dark mode

FAQ

Why can't I add widgets? The button is disabled.

You need a device first. Click + Device to create one, then widgets become available.

My widgets show "—" instead of a value.

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 (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 through different protocol listeners.

What's the difference between Gauge and Stat Card?

Gauge shows a visual arc dial (like a speedometer) + generates a time-series chart. Stat Card shows a big number with trend arrow + min/avg/max — no chart. Choose Gauge when the arc visualization and chart history are valuable; choose Stat when trend direction and statistics matter more.

When should I use LED vs Status Card?

LED is compact (small dot) — best for dense dashboards with many indicators. Status Card is large with bold text — visible from across the room, best for critical statuses.

When should I use Slider vs Number Input?

Slider for approximate values in small ranges (volume, fan speed 0–100). Number Input for exact values or large ranges (setpoints, addresses, thresholds 0–10000).

How does the RGB Color widget publish data?

You choose the format when creating the widget: CSV (255,128,0), JSON ({"r":255,"g":128,"b":0}), or HEX (#FF8000). With auto-send enabled, every slider or picker change publishes immediately.

Can I switch between light and dark mode?

Yes! Click the ☀️ / 🌙 toggle in the sidebar footer. Your preference is saved automatically.

Is my data private?

Your dashboard config is stored in Firebase under your account. MQTT messages pass through the broker you choose — public brokers mean anyone can see your topics. Use IoT Dash Cloud or your own private broker for security.

What happens when I delete a device?

All sensors, controls, and map pins belonging to that device are permanently deleted.

Can I export data?

The Data Table shows raw messages during the session but they're not persisted. The ESP32 generator exports your configuration as an Arduino sketch. Data export is not currently supported.

What browsers are supported?

Chrome, Firefox, Edge, Safari — any modern browser with WebSocket support.

How does the AI Generator work?

It sends your description to GPT-4o-mini (via Netlify serverless function) which returns a structured JSON with devices, sensors, controls, and map pins. The app then creates all of them in one shot. Requires GITHUB_TOKEN environment variable in Netlify.