Thermostat Mode CC — Sequence Diagrams¶
Interview Flow¶
sequenceDiagram
participant ZPC
participant Node
ZPC->>Node: THERMOSTAT_MODE_SUPPORTED_GET
Node-->>ZPC: THERMOSTAT_MODE_SUPPORTED_REPORT (bit_mask)
ZPC->>Node: THERMOSTAT_MODE_GET
Node-->>ZPC: THERMOSTAT_MODE_REPORT (mode)
Note over ZPC: THERMOSTAT_MODE_CHANGED only if mode changed<br/>(per spec: Get requires only Report in response)
Set Mode Flow (via MQTT)¶
sequenceDiagram
participant MQTT Client
participant ZPC
participant Node
MQTT Client->>ZPC: ThermostatModeSet { "mode": "0x01" }
Note over ZPC: Sets desired mode in attribute store
ZPC->>Node: THERMOSTAT_MODE_SET (mode)
Node-->>ZPC: (Supervision ACK / implicit)
ZPC->>Node: THERMOSTAT_MODE_GET
Node-->>ZPC: THERMOSTAT_MODE_REPORT (mode)
ZPC->>MQTT Client: ThermostatModeReport { "mode": "0x01" }
Note over ZPC: Fires THERMOSTAT_MODE_CHANGED (mode changed)<br/>→ Setpoint CC may refresh setpoints for new mode
Get Mode Flow (via MQTT)¶
Per Z-Wave spec, Thermostat Mode Get requires only Thermostat Mode Report in response. No setpoint or capability chain.
sequenceDiagram
participant MQTT Client
participant ZPC
participant Node
MQTT Client->>ZPC: ThermostatModeGet { }
Note over ZPC: Clears reported state, starts resolution
ZPC->>Node: THERMOSTAT_MODE_GET
Node-->>ZPC: THERMOSTAT_MODE_REPORT (mode)
ZPC->>MQTT Client: ThermostatModeReport { "mode": "0x01" }
Note over ZPC: No THERMOSTAT_MODE_CHANGED if mode unchanged<br/>(no setpoint/capability follow-up)
Inter-CC Communication¶
sequenceDiagram
participant ThermostatMode CC
participant component_connector
participant ThermostatSetpoint CC
Note over ThermostatMode CC: Only when reported mode actually changed
ThermostatMode CC->>component_connector: fire_event(THERMOSTAT_MODE_CHANGED, {endpoint_node, mode})
component_connector->>ThermostatSetpoint CC: on_thermostat_mode_changed callback
Note over ThermostatSetpoint CC: Triggers THERMOSTAT_SETPOINT_GET<br/>to refresh setpoints for new mode