transformation added 3
This commit is contained in:
@@ -55,9 +55,13 @@ def _transform_thermostat_simulator_to_abstract(payload: dict[str, Any]) -> dict
|
|||||||
def _transform_light_zigbee2mqtt_to_vendor(payload: dict[str, Any]) -> dict[str, Any]:
|
def _transform_light_zigbee2mqtt_to_vendor(payload: dict[str, Any]) -> dict[str, Any]:
|
||||||
"""Transform abstract light payload to zigbee2mqtt format.
|
"""Transform abstract light payload to zigbee2mqtt format.
|
||||||
|
|
||||||
zigbee2mqtt uses 'state' instead of 'power':
|
Transformations:
|
||||||
|
- power: 'on'/'off' -> state: 'ON'/'OFF'
|
||||||
|
- brightness: 0-100 -> brightness: 0-254
|
||||||
|
|
||||||
|
Example:
|
||||||
- Abstract: {'power': 'on', 'brightness': 100}
|
- Abstract: {'power': 'on', 'brightness': 100}
|
||||||
- zigbee2mqtt: {'state': 'ON', 'brightness': 100}
|
- zigbee2mqtt: {'state': 'ON', 'brightness': 254}
|
||||||
"""
|
"""
|
||||||
vendor_payload = payload.copy()
|
vendor_payload = payload.copy()
|
||||||
|
|
||||||
@@ -66,14 +70,25 @@ def _transform_light_zigbee2mqtt_to_vendor(payload: dict[str, Any]) -> dict[str,
|
|||||||
power_value = vendor_payload.pop("power")
|
power_value = vendor_payload.pop("power")
|
||||||
vendor_payload["state"] = power_value.upper() if isinstance(power_value, str) else power_value
|
vendor_payload["state"] = power_value.upper() if isinstance(power_value, str) else power_value
|
||||||
|
|
||||||
|
# Transform brightness: 0-100 (%) -> 0-254 (zigbee2mqtt range)
|
||||||
|
if "brightness" in vendor_payload:
|
||||||
|
abstract_brightness = vendor_payload["brightness"]
|
||||||
|
if isinstance(abstract_brightness, (int, float)):
|
||||||
|
# Convert percentage (0-100) to zigbee2mqtt range (0-254)
|
||||||
|
vendor_payload["brightness"] = round(abstract_brightness * 254 / 100)
|
||||||
|
|
||||||
return vendor_payload
|
return vendor_payload
|
||||||
|
|
||||||
|
|
||||||
def _transform_light_zigbee2mqtt_to_abstract(payload: dict[str, Any]) -> dict[str, Any]:
|
def _transform_light_zigbee2mqtt_to_abstract(payload: dict[str, Any]) -> dict[str, Any]:
|
||||||
"""Transform zigbee2mqtt light payload to abstract format.
|
"""Transform zigbee2mqtt light payload to abstract format.
|
||||||
|
|
||||||
zigbee2mqtt uses 'state' instead of 'power':
|
Transformations:
|
||||||
- zigbee2mqtt: {'state': 'ON', 'brightness': 100}
|
- state: 'ON'/'OFF' -> power: 'on'/'off'
|
||||||
|
- brightness: 0-254 -> brightness: 0-100
|
||||||
|
|
||||||
|
Example:
|
||||||
|
- zigbee2mqtt: {'state': 'ON', 'brightness': 254}
|
||||||
- Abstract: {'power': 'on', 'brightness': 100}
|
- Abstract: {'power': 'on', 'brightness': 100}
|
||||||
"""
|
"""
|
||||||
abstract_payload = payload.copy()
|
abstract_payload = payload.copy()
|
||||||
@@ -83,6 +98,13 @@ def _transform_light_zigbee2mqtt_to_abstract(payload: dict[str, Any]) -> dict[st
|
|||||||
state_value = abstract_payload.pop("state")
|
state_value = abstract_payload.pop("state")
|
||||||
abstract_payload["power"] = state_value.lower() if isinstance(state_value, str) else state_value
|
abstract_payload["power"] = state_value.lower() if isinstance(state_value, str) else state_value
|
||||||
|
|
||||||
|
# Transform brightness: 0-254 (zigbee2mqtt range) -> 0-100 (%)
|
||||||
|
if "brightness" in abstract_payload:
|
||||||
|
vendor_brightness = abstract_payload["brightness"]
|
||||||
|
if isinstance(vendor_brightness, (int, float)):
|
||||||
|
# Convert zigbee2mqtt range (0-254) to percentage (0-100)
|
||||||
|
abstract_payload["brightness"] = round(vendor_brightness * 100 / 254)
|
||||||
|
|
||||||
return abstract_payload
|
return abstract_payload
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user