Mercurial > code > home > repos > light-bridge
diff protocols.py @ 21:b8201490c731
more light types
author | drewp@bigasterisk.com |
---|---|
date | Mon, 29 Jan 2024 12:27:08 -0800 |
parents | 24a574108365 |
children | 7d9a056e29fe |
line wrap: on
line diff
--- a/protocols.py Mon Jan 29 11:52:43 2024 -0800 +++ b/protocols.py Mon Jan 29 12:27:08 2024 -0800 @@ -6,6 +6,7 @@ log = logging.getLogger('prot') + class Transport: def linked(self): @@ -15,25 +16,54 @@ raise TypeError -def zigbeeHexMessage(dc: DeviceColor) -> dict: - msg: dict = {"transition": 0, "brightness": int(255 * dc.brightness)} - c = "#%02x%02x%02x" % (int(dc.r * 255), int(dc.g * 255), int(dc.b * 255)) - msg["color"] = {"hex": c} - return msg +def to8(x: float): + return int(x * 255) + + +def zbColorMessage(dc: DeviceColor) -> dict: + return { + "transition": 0, + "brightness": to8(dc.brightness), + "color": { + "hex": "#%02x%02x%02x" % (to8(dc.r), to8(dc.g), to8(dc.b)) + }, + } + +def zbBrightnessMessage(dc: DeviceColor) -> dict: + return { + "transition": 0, + "brightness": to8(dc.brightness), + } + + +def zbWhiteSpectrumMessage(dc: DeviceColor) -> dict: + return { + "transition": 0, + "brightness": to8(dc.brightness), + # temperature todo + } + +def zbRelayMessage(dc: DeviceColor) -> dict: + return {'state': 'ON' if dc.brightness else 'OFF'} + +def z2mSet(name): + return f'zigbee/{name}/set' class ZigbeeTransport(Transport): - def __init__(self, mqtt: MqttIo, name: str, ieee: str): + def __init__(self, mqtt: MqttIo, name: str, ieee: str, topic=z2mSet, msg=zbColorMessage): self.mqtt = mqtt self.name = name self.ieee = ieee + self.topic=topic + self.msg = msg def linked(self): return {'url': f'https://bigasterisk.com/zigbee/console/#/device/{self.ieee}/info', 'label': self.name} async def send(self, dc: DeviceColor): - await self.mqtt.publish(f'zigbee/{self.name}/set', json.dumps(zigbeeHexMessage(dc))) + await self.mqtt.publish(self.topic(self.name), json.dumps(self.msg(dc))) class SonoffRelayTransport(Transport):