Skip to content

feat: add Dreo 712S support, light platform, protocol extensions, example config - #2

Open
liamjvs wants to merge 1 commit into
davidc:mainfrom
liamjvs:add-712s-model
Open

feat: add Dreo 712S support, light platform, protocol extensions, example config#2
liamjvs wants to merge 1 commit into
davidc:mainfrom
liamjvs:add-712s-model

Conversation

@liamjvs

@liamjvs liamjvs commented Jul 28, 2026

Copy link
Copy Markdown

The 712S (ESP32-C3) is a fan + main CCT light + locally-driven ambient RGB unit. Its module is already an ESP32-C3, so unlike the HTF018S it needs no hardware swap - just a stock-compatible partition table.

Write up is here.

Component changes:

  • New light platform (components/dreo/light) for datapoint-backed lights: switch/brightness/color_temperature datapoints, configurable mired range, and the stock "higher = cooler" colour-temp inversion. Guards against echoing MCU-sourced updates back to the MCU.
  • Protocol: parse string datapoints (type 0x03), accept 1/2/4-byte integers rather than 4-byte only, and treat 0x0E as the remote/panel button event it actually is (previously ignored as undecipherable). Adds the 0x09 version query and 0x03 wifi-status frames some models expect during sync.
  • New hub options, all defaulting to existing behaviour: startup_heartbeat_ interval, max_init_retries, query_version_on_sync, wifi_status_on_sync, periodic_wifi_status, button_event_repeat_guard, local_datapoints, and an on_button_event trigger. Adds diagnostic accessors (last rx/tx frame, status, seen datapoints) for probing new models.
  • Fan: speed_mappings for models whose stock levels are not 1..n, and configurable direction values for models using something other than 0/1.
  • Malformed datapoints now skip that entry instead of abandoning the rest of the frame, and zero-length payloads no longer read past the buffer.

The 712S example, model notes and partition table live in docs/dreo-712s/. Adds a .gitignore, which the repo did not previously have.

Compile-tested with ESPHome 2026.7.3: both the new 712S example and the existing HTF018S example build clean against these component changes.

The 712S (ESP32-C3) is a fan + main CCT light + locally-driven ambient RGB
unit. Its module is already an ESP32-C3, so unlike the HTF018S it needs no
hardware swap - just a stock-compatible partition table.

Component changes:

- New light platform (components/dreo/light) for datapoint-backed lights:
  switch/brightness/color_temperature datapoints, configurable mired range,
  and the stock "higher = cooler" colour-temp inversion. Guards against
  echoing MCU-sourced updates back to the MCU.
- Protocol: parse string datapoints (type 0x03), accept 1/2/4-byte integers
  rather than 4-byte only, and treat 0x0E as the remote/panel button event it
  actually is (previously ignored as undecipherable). Adds the 0x09 version
  query and 0x03 wifi-status frames some models expect during sync.
- New hub options, all defaulting to existing behaviour: startup_heartbeat_
  interval, max_init_retries, query_version_on_sync, wifi_status_on_sync,
  periodic_wifi_status, button_event_repeat_guard, local_datapoints, and an
  on_button_event trigger. Adds diagnostic accessors (last rx/tx frame, status,
  seen datapoints) for probing new models.
- Fan: speed_mappings for models whose stock levels are not 1..n, and
  configurable direction values for models using something other than 0/1.
- Malformed datapoints now skip that entry instead of abandoning the rest of
  the frame, and zero-length payloads no longer read past the buffer.

The 712S example, model notes and partition table live in docs/dreo-712s/.
Adds a .gitignore, which the repo did not previously have.

Compile-tested with ESPHome 2026.7.3: both the new 712S example and the
existing HTF018S example build clean against these component changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant