Skip to content

BRP084 (/dsiot): set({}) - HA climate.turn_on / switch.turn_on - is a silent no-op, no request is sent to the unit #124

Description

@ETaradayko

Environment

  • pydaikin 2.18.1 (via Home Assistant core 2026.7.2, daikin integration)
  • Daikin split, Thailand market; Model FTKZ25WVM (data_model_code: 26). WLAN adapter firmware 3_12_3 (rev e5a8ebd, reg: th, api_ver: 2_2) per POST /dsiot/multireq/dsiot/edge.adp_i
  • New-firmware local API only: POST http://<unit>/dsiot/multireq works, legacy /aircon/* endpoints return 404 → pydaikin selects DaikinBRP084

Symptom

  • HA climate.turn_on and switch.turn_on (power toggle) report success, but the unit never turns on; the optimistic state reverts on the next poll.
  • climate.set_hvac_mode (e.g. cool) physically starts the unit.
  • Power OFF works via every path.

Evidence the command is never sent

The unit keeps its own operation log in dgc_status: /dsiot/edge/adr_0100.dgc_statusdgc_statuslast_opetime (ISO timestamp).

Method: read last_ope.time → call climate.turn_on (or switch.turn_on) → read again: timestamp unchanged, nothing registered. Call climate.set_hvac_mode cool → timestamp updates and the unit starts. So the unit isn't rejecting a malformed command — no command arrives.

Root cause

Both HA turn-on paths call device.set({}) (homeassistant/components/daikin/climate.py async_turn_on, switch.py DaikinToggleSwitch.async_turn_on). The old-firmware class honors the empty-dict power-on contract — daikin_brp069.py::_update_settings:

# if changing the mode to something other than off assume the unit should be
# powered on OR if the request is empty power on
elif 'mode' in settings or not settings:
    self.values['pow'] = '1'

DaikinBRP084 doesn't: _handle_power_setting returns immediately when 'mode' not in settings; with settings == {} no handler appends anything, requests == [], and set() returns without making any HTTP call (and without update_status()), i.e. silent success (daikin_brp084.py, v2.18.1).

Suggested fix

Treat empty settings as bare power-on in _handle_power_setting — exactly the hunk already present in open PR #122:

if not settings:
    self.add_request(requests, self.get_path("power"), "01")
    return

Text prepared with AI.
If #122 (bundled FTXM71 fixes) needs longer validation, this hunk would work as a minimal standalone fix. Happy to test either on this hardware.

Cross-references

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions