Skip to content

Dynamic Wind port setting - API field identified (portParamData[8]) #141

Description

@svenia-marla

Feature: Dynamic Wind port setting (API field identified)

Dynamic Wind ("Dynamischer Wind" in the German app) is a per-port setting on UIS controllers that makes a fan repeatedly cycle between its min and max levels to simulate natural wind. It is currently not exposed by the integration in any version.

I reverse-engineered the field via A/B snapshot diff (capture getDevSetting + getdevModeSettingList, toggle Dynamic Wind in the app, capture again, diff):

Field location

  • Endpoint: /api/dev/getDevSetting (also mirrored in getdevModeSettingListdevSetting)
  • Field: portParamData — returned as a JSON-encoded string, e.g. "[0, 2, 1, 2, 19, 136, 2, 1, 1]"
  • Index 8 (last element) is the Dynamic Wind flag: 1 = on, 0 = off
  • The other 8 elements were stable across toggles; only index 8 changes

Note: the previously suspected secFuc* fields (secFucStatus, secFucDevEffect, secFucParams) are unrelated — they stayed 0 on all ports while Dynamic Wind was active.

Write path (verified working)

AdvancedSettingsKey.PORT_PARAM_DATA already exists in const.py, so the existing update_device_settings() read-modify-write path handles it without client changes. Verified on a live controller (both directions, with read-back):

  1. getDevSetting → parse portParamData string to list
  2. flip index 8
  3. re-serialize to a JSON string (must stay a string — sending a raw list breaks the urlencoded updateAdvSetting call)
  4. pass via update_device_settings(controller_id, port, dev_name, {AdvancedSettingsKey.PORT_PARAM_DATA: value})

Result: app reflects the toggle immediately; updateAdvSetting returns success; read-back confirms the new value.

Suggested implementation

A switch entity per port (e.g. switch.<device>_port_<n>_dynamic_wind) reading index 8 of the parsed portParamData and writing through the existing advanced-settings path.

Tested on: UIS Controller 69 Pro, integration v2.2.0, 3 controllers / 9 ports. Happy to provide raw snapshot diffs or test a branch.

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