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):