Standalone ESP32-C3 Bluetooth Mesh gateway for local Steinel NightmatIQ Plus control, diagnostics, firmware updates, and Home Assistant integration.
Steinel NightmatIQ Plus <-> Bluetooth Mesh <-> ESP32-C3 gateway -> Home Assistant
Community ESPHome firmware that turns an ESP32-C3 Super Mini into a dedicated local Steinel NightmatIQ Plus gateway. It imports the existing Steinel network configuration, communicates directly over Bluetooth Mesh, provides a password-protected browser interface, and exposes control, sensor, identity, and diagnostic entities to Home Assistant.
Author and maintainer: Bartosz Supcziński — bartek@env.pl
NightmatIQ Plus communicates through Bluetooth Mesh, while Home Assistant uses an IP network. The ESP32-C3 bridges these two environments: it joins the existing Mesh installation, exchanges commands and status messages directly with the sensor, and publishes them through ESPHome. Steinel Cloud is used during setup to import the network configuration; routine operation is local.

The built-in page provides setup, control, diagnostics and browser-based firmware updates.

The standard ESPHome integration exposes NightmatIQ directly as a single Home Assistant device.

An optional frontend module combines sensor state, illuminance, operating mode and twilight threshold in one compact dialog.

Auto, Always On and Always Off operating modes.1 to 1500 lx.The standard ESPHome API publishes:
Home Assistant displays all published entities under one device named Steinel NightmatIQ Plus.
The USB interface normally appears as an Espressif USB JTAG/serial device (303a:1001) and as /dev/ttyACM* on Linux.
The firmware is designed for the ESP32-C3 and ESP-IDF. Bluetooth 5 extended features are disabled because Bluetooth Mesh uses the BLE 4.2 advertising path. The configuration is intentionally sized for the limited RAM of the ESP32-C3.
admin with password 12345678; change it on the device page immediately after joining Wi-Fi.12345678.secrets.yaml, private keys, packet captures or Steinel backups.| Path | Purpose |
|---|---|
esphome/nightmatiq-c3.yaml |
Main ESPHome firmware configuration |
esphome/components/nightmatiq_mesh/ |
Bluetooth Mesh, Steinel Cloud and local web component |
scripts/ |
Installation, validation, USB and OTA helpers |
home-assistant/ |
Optional Home Assistant package and compact control dialog |
docs/images/ |
Public README images |
The recommended first installation does not require compiling ESPHome:
steinel-nightmatiq-esp32-c3-gateway-vX.Y.Z-factory.bin from GitHub Releases.-factory.bin file.The file is processed locally by ESPHome Web. The -factory.bin image is for a new board or USB recovery; later browser updates use the -ota.bin image.
The supplied installer creates an isolated, reproducible environment using unmodified ESPHome 2026.7.3. No patch is applied to the installed ESPHome package.
Clone or download this repository, enter its directory and install the pinned toolchain:
sudo bash scripts/01_install_esphome.sh
bash scripts/03_validate_all.sh
This runs repository checks and validates the ESPHome configuration.
Connect the ESP32-C3 and use its stable /dev/serial/by-id/ path when available:
sudo bash scripts/09_upload_usb.sh /dev/serial/by-id/usb-Espressif_USB_JTAG_serial_debug_unit_*-if00
If the board has no by-id link, use the detected ACM port:
sudo bash scripts/09_upload_usb.sh /dev/ttyACM0
The same compiled image can be installed on every supported ESP32-C3 board. The first USB installation also prepares the device for subsequent browser updates, so the boot button is normally not required again.
nightmatiq-gateway-XXXXXX using password 12345678..local.The Wi-Fi configuration is stored by the device and survives firmware updates.
admin with factory password 12345678.The NightmatIQ node address and IV Index can normally be selected automatically from the backup. Credentials remain only in the browser form for the setup requests.
The gateway checks the latest stable GitHub release when its page opens; CHECK FOR UPDATES repeats the check manually. If a newer version is available, DOWNLOAD AND INSTALL downloads it over HTTPS, verifies its size and SHA-256 digest, installs it and restarts the gateway. A failed update leaves the current firmware active.
Manual installation remains available under Manual firmware file. Use only the release file ending in -ota.bin; -factory.bin is intended exclusively for the first USB installation. No separate OTA password is used or shown to the user.
Factory reset removes Wi-Fi, administrator and NightmatIQ Mesh settings, then restores the factory account and configuration access point without changing the installed firmware version.
From the command line, enter the administrator password when requested:
bash scripts/05_upload_ota.sh DEVICE_IP_OR_HOSTNAME
Home Assistant usually discovers the device automatically through ESPHome. If it does not:
All control and diagnostic entities are attached directly to that device.
The standard ESPHome integration provides all entities and controls. The files in home-assistant/ add the compact area tile and control dialog shown above.
steinel-nightmatiq-package.yaml to the Home Assistant packages directory.steinel-nightmatiq-popup.js to /config/www/./local/steinel-nightmatiq-popup.js?v=100 as a JavaScript module in dashboard resources.The files use the default entity IDs created by a first installation. If Home Assistant appended _2 or another suffix, update the four IDs at the top of the JavaScript file and the corresponding IDs in the package YAML.
The module customizes the generated area tile and Home Assistant’s more-info dialog. Because that area strategy is part of the Home Assistant frontend, a future frontend release may require an update to the optional module.
During network import, each gateway derives a Mesh address policy from the selected installation and its own hardware identity. The same firmware can therefore be configured for different ESP32-C3 boards and NightmatIQ installations.
The MAC suffix in the device name is enabled by default, so multiple gateways receive unique hostnames and access-point names. Configure a unique administrator password on each gateway.
If the configured Wi-Fi network is unavailable for 60 seconds, the gateway starts its password-protected access point again. Connect using factory access-point password 12345678 and update the Wi-Fi configuration through the captive portal. The local page remains protected by the administrator password selected on the device.
The same Steinel NightmatIQ Plus functionality is also available as an optional integration in the AR01V3 RF/IR, ESP-RC01 & Steinel NightmatIQ Plus Gateway. Choose that project when NightmatIQ should be added to an existing multifunction AR01V3 gateway; choose this repository for a small, dedicated ESP32-C3 installation.
Copyright (C) 2026 Bartosz Supcziński.
This project is licensed under the GNU General Public License version 3 only (GPL-3.0-only). See LICENSE.
envpl.steinel_nightmatiq_gateway.When reporting a problem, include the firmware version, ESPHome version, reset reason and relevant logs. Remove passwords, keys, authorization headers, private backups and network identifiers before sharing diagnostics.
This is an independent community project and is not an official Steinel, ESPHome, or Home Assistant product.