Mercurial > code > home > repos > light-bridge
changeset 17:1d15dc4d673f
cleanup color convert code path
author | drewp@bigasterisk.com |
---|---|
date | Sun, 28 Jan 2024 21:18:40 -0800 |
parents | ab80e8826441 |
children | 412d37f707c9 |
files | light.py |
diffstat | 1 files changed, 11 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/light.py Sun Jan 28 21:18:11 2024 -0800 +++ b/light.py Sun Jan 28 21:18:40 2024 -0800 @@ -1,11 +1,12 @@ import asyncio -import json import logging from dataclasses import dataclass from typing import Callable from color import Color +from color_convert import DeviceColor, zbConv from mqtt_io import MqttIo +from protocols import Transport, ZigbeeTransport log = logging.getLogger('light') @@ -13,7 +14,8 @@ @dataclass class Light: name: str - address: Transport + transport: Transport + convertColor: Callable[[Color], DeviceColor] requestingColor: Color = Color.fromHex('#000000') requestingDeviceColor: DeviceColor = DeviceColor() @@ -25,12 +27,12 @@ notifyChanged: Callable | None = None def __post_init__(self): - self.requestingDeviceColor = self.deviceColor(self.requestingColor) + self.requestingDeviceColor = self.convertColor(self.requestingColor) def to_dict(self): d = { 'name': self.name, - 'address': self.address.linked(), + 'address': self.transport.linked(), 'requestingColor': self.requestingColor.hex(), 'requestingDeviceColor': self.requestingDeviceColor.summary(), 'emittingColor': self.emittingColor.hex(), @@ -40,23 +42,19 @@ return {'light': d} - def deviceColor(self, c: Color) -> DeviceColor: - # do LUT here - return DeviceColor(r=c.r, g=c.g, b=c.b) - async def setColor(self, c: Color): log.info(f'setColor from {self.requestingColor} to {c}') if c == self.requestingColor: return self.requestingColor = c - self.requestingDeviceColor = self.deviceColor(self.requestingColor) + self.requestingDeviceColor = self.convertColor(self.requestingColor) if self.notifyChanged: self.notifyChanged() # waits for the relevant round-trip - log.info(f'transport send {self.requestingDeviceColor}') - await self.address.send(self.requestingDeviceColor) + log.info(f'transport send {self.requestingDeviceColor.summary()}') + await self.transport.send(self.requestingDeviceColor) self.emittingColor = self.requestingColor if self.notifyChanged: @@ -64,7 +62,7 @@ def makeZbBar(mqtt: MqttIo, name: str, ieee: str) -> Light: - return Light(name=name, address=ZigbeeTransport(mqtt, name, ieee)) + return Light(name=name, convertColor=zbConv, transport=ZigbeeTransport(mqtt, name, ieee)) class Lights: @@ -72,6 +70,7 @@ def __init__(self, mqtt: MqttIo): self.mqtt = mqtt + self.add(makeZbBar(mqtt, 'do-bar', '0xa4c13844948d2da4')) def add(self, d: Light):