Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

IoT Device Tooling

The second domain option on the wizard’s first step. Pick this and the modules, solutions, and parameters are filtered through the IoT-device lens — they don’t overlap with vehicle control, home datacenter, or edge AI.

Scope: ESP32-family sensor hubs, gateways, panels, developer probes, bus analyzers, home-automation endpoints, plus the surrounding Home Assistant / raw MQTT / Zigbee2MQTT / Matter / standalone-local ecosystem.

Explicitly excludes vehicle/aircraft control — that goes to Vehicle & Aircraft Control. The safety model for a car (motor cutoff, failsafe) is fundamentally different from the IoT model.

One core principle

The adversary in IoT is silent data loss, not visible crash.

When a quadcopter falls out of the sky, you see it. IoT is different: a sensor that drops three hours of data during a Wi-Fi reboot is invisible — until a month later you pull up a chart and notice a gap.

So this domain’s wizard exposes an axis the vehicle wizard does not have: Data Behavior. Every solution must declare five fields:

FieldWhat it answers
retentionLocal storage depth (RAM ring / Flash ring / external Flash / SD)
cache_on_disconnectWhat to do during outage (drop, replay_on_reconnect, aggregate_stats, timestamp_queue)
dedupHow to suppress chatter (threshold_change, interval_only, both)
rate_limitUpload throttle (none / 1Hz / 0.1Hz / 0.01Hz / event_only)
power_loss_behaviorCrash recovery (volatile / persist_state / persist_queue / persist_both)

Defaults bias toward “don’t lose data” — replay_on_reconnect, persist_state, threshold_change rather than drop, volatile, none. Probe-family solutions (probe_tool) are the exception: local, user-as-consumer, so (none, drop, volatile) is allowed.

Three-axis model

Where Vehicle had three logical chains, IoT instead uses three orthogonal choice axes:

AxisWhat it asksCount
CategoryWhat the device is for27 across 6 families
Network ProfileHow it connects / topology shape17 presets
MCU RoleThe MCU’s job in the topology5 roles

These three axes are wizard steps 2 / 3 / 4 (Vehicle’s same slots are FormFactor / Topology / Architecture). When a Category locks the NetworkProfile or Role uniquely (e.g. picking lorawan_gateway pins both Profile = LoRaWAN and Role = gateway_bridge), the wizard auto-advances two slots — but Back always lets you return and override.

27 Categories across 6 families

FamilyCountMembers
Sensing7sensor_hub / env_sampler / presence_detector / energy_monitor / air_quality_station / water_leak_sensor / soil_moisture_sensor
Actuation4actuator_controller / status_notifier / lock_controller / irrigation_valve_bank
Bridging5mqtt_bridge / ble_scanner_proxy / zigbee_thread_gateway / lorawan_gateway / industrial_bus_bridge
Tooling4bus_analyzer / sigrok_probe / uart_debug_probe / esp_prog_replacement
Presentation3dashboard_panel / alarm_panel / indicator_bar
Specialty4thread_zigbee_endpoint / esp_now_peer / data_logger / industrial_io_bank

The family you pick narrows the NetworkProfile list — picking bus_analyzer, for instance, leaves only the four Wi-Fi profiles (including wifi_captive_local); Zigbee / Thread / LoRaWAN are suppressed entirely.

17 Network Profiles

Grouped by connectivity:

GroupProfiles
Wi-Fiwifi_ha_native (ESPHome native API), wifi_mqtt_star, wifi_esphome_api, wifi_captive_local (pure local AP)
BLEble_gatt_standalone, ble_mesh_distributed, ble_scanner_proxy_uplink
802.15.4zigbee_leaf / zigbee_coordinator / thread_leaf / thread_border_router (C6-only), matter_over_wifi / matter_over_thread
Specialty / long-rangeesp_now_p2p (router-less), lorawan_endnode (SX1276/1262)
Wiredwired_rs485_modbus, wired_can_bus

Each Profile carries a default chain triple (uplink / downlink / HA publishing) that seeds the solution; you can override in the Parameters step.

C6 is the only chip with 802.15.4. Zigbee coordinator / Thread border router / Matter-over-Thread solutions auto-pin the chip to ESP32-C6 — a hardware fact (only C6 has the 802.15.4 radio).

5 MCU roles

Vehicle has 7 roles (because of paired TX/RX links); IoT compresses to 5 since there’s less cross-board coordination:

RoleWhat it doesTypical power
sensor_leafSample → dedup → uplink → sleep. One-way telemetry.Battery (Li / AA / coin / solar)
aggregator_hubFan-in from many sensors (local I²C/SPI/BLE), single uplink, caches on disconnect.Mains / PoE
gateway_bridgeProtocol translation: Zigbee↔MQTT, BLE↔Wi-Fi, RS485↔MQTT, LoRaWAN↔TCP. Stateless.Mains / PoE
probe_toolDeveloper-facing instrument, USB-powered, local-only data path.usb_only
panel_hmiUser-facing display/input (LCD / OLED / keypad / alarm).Mains / PoE

The shape of the 27 solutions

Full catalog is in iot-device-tooling-dag-v2.md §6 (private repo, reference only). A representative slice showing how Category + Network Profile + Role compose into a solution:

SolutionCategoryNetworkProfileRoleOne-liner
sensor_hub_solutionsensor_hubwifi_ha_nativeaggregator_hubI²C/SPI multi-sensor aggregator, ESPHome native
presence_mmwave_solutionpresence_detectorwifi_ha_nativesensor_leafmmWave presence (LD2410 class)
energy_ct_clamp_solutionenergy_monitorwifi_mqtt_starsensor_leafCT-clamp meter, Flash cache + aggregate stats
water_leak_solutionwater_leak_sensorble_gatt_standalonesensor_leafBLE leak alarm, IP67 outdoor, AA battery
soil_moisture_solutionsoil_moisture_sensorlorawan_endnodesensor_leafSolar + LoRaWAN, 0.01Hz reporting
mqtt_gateway_bridge_solutionmqtt_bridgewifi_mqtt_stargateway_bridgeMQTT gateway, RAM ring cache + replay
zigbee_thread_gateway_solutionzigbee_thread_gatewayzigbee_coordinatorgateway_bridgeZigbee coordinator (C6)
sigrok_logic_analyzer_solutionsigrok_probewifi_captive_localprobe_toolSUMP / OLS protocol, USB-powered
alarm_keypad_solutionalarm_panelwifi_ha_nativepanel_hmiHA alarm_control_panel entity + keypad
esp_now_sensor_solutionesp_now_peeresp_now_p2psensor_leafCoin-cell + ESP-NOW, no router

What the wizard looks like in this domain

StepWhatNotes
1Domain = IoT Device Toolingshared
2Category27 entries, picked via 6 families
3Network Profile17 entries, usually 3–8 after Category filter
4MCU Role5 entries, filtered by Profile
5Devicechip (D0WD / C6 / S3); skipped if Profile already pinned C6
6Moduleskipped when only one module is compatible
7Solutionusually narrowed to 1–3 candidates by this point
8Varianthardware sub-config of a solution (4ch/8ch relay, LCD/OLED/e-ink, etc.)
9Parametersall enums, no free-text (I²C address, Modbus slave ID, LoRaWAN DevEUI, etc.)
10Review + Buildshared

Vehicle’s wizard runs 7 steps; IoT runs 10. The extras are Category (2), NetworkProfile (3), and Variant (8). All three support auto-skip + Back-to-override: when an earlier choice uniquely determines a step, the wizard advances by two slots, but the Back button always returns to the skipped step, and a top banner reads “we picked X for you — change it?”.

What this domain does not cover

  • Vehicle / aircraft / drone control — go to Vehicle & Aircraft Control. The anti-pattern to avoid is “use IoT’s actuator_controller to drive a car” — the data-behavior model is wrong for that (IoT fears data loss; vehicles fear a failsafe that didn’t trip).
  • OTA key management / secure-boot key rotation — lives in a separate security document. The wizard emits firmware skeletons, not signing chains.
  • RF compliance (FCC / CE / SRRC) — handled per region. The wizard gives you a power profile (mains_jack / battery_li / solar_harvest etc.), not antenna certification.
  • Microcopy / i18n stringscopy.ts owns those, not the domain definition.

See also