Mercurial > code > home > repos > light-bridge
diff light.py @ 20:24a574108365
more protocols; bugs in setColor
author | drewp@bigasterisk.com |
---|---|
date | Mon, 29 Jan 2024 11:52:43 -0800 |
parents | 1d15dc4d673f |
children | b8201490c731 |
line wrap: on
line diff
--- a/light.py Mon Jan 29 11:50:28 2024 -0800 +++ b/light.py Mon Jan 29 11:52:43 2024 -0800 @@ -4,11 +4,11 @@ from typing import Callable from color import Color -from color_convert import DeviceColor, zbConv +from color_convert import DeviceColor, oneWhiteConv, relayConv, twoWhitesConv, zbConv from mqtt_io import MqttIo -from protocols import Transport, ZigbeeTransport +from protocols import ShellyGen1WebTransport, SonoffRelayTransport, TasmotaWebTransport, Transport, ZigbeeTransport -log = logging.getLogger('light') +log = logging.getLogger('lite') @dataclass @@ -43,18 +43,21 @@ return {'light': d} 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.convertColor(self.requestingColor) + dc = self.convertColor(self.requestingColor) + + log.info(f'setColor from {self.requestingColor} to {c} = {dc.summary()=}') + if dc != self.requestingDeviceColor: + self.requestingDeviceColor = dc - if self.notifyChanged: - self.notifyChanged() + if self.notifyChanged: + self.notifyChanged() - # waits for the relevant round-trip - log.info(f'transport send {self.requestingDeviceColor.summary()}') - await self.transport.send(self.requestingDeviceColor) + # waits for the relevant round-trip + log.info(f'transport send {self.requestingDeviceColor.summary()}') + await self.transport.send(self.requestingDeviceColor) self.emittingColor = self.requestingColor if self.notifyChanged: @@ -65,6 +68,18 @@ return Light(name=name, convertColor=zbConv, transport=ZigbeeTransport(mqtt, name, ieee)) +def makeTasmota(name: str, hostname: str) -> Light: + return Light(name=name, convertColor=twoWhitesConv, transport=TasmotaWebTransport(hostname)) + + +def makeShellyRGW2(name: str, hostname: str) -> Light: + return Light(name=name, convertColor=oneWhiteConv, transport=ShellyGen1WebTransport(hostname)) + + +def makeSonoffRelay(mqtt: MqttIo, name: str, topic: str) -> Light: + return Light(name=name, convertColor=relayConv, transport=SonoffRelayTransport(mqtt, topic)) + + class Lights: _d: dict[str, Light] = {} @@ -72,6 +87,34 @@ self.mqtt = mqtt self.add(makeZbBar(mqtt, 'do-bar', '0xa4c13844948d2da4')) + self.add(makeTasmota('do-lamp', 'tasmota-9E2AB7-2743')) + self.add(makeShellyRGW2('ki-ceiling', 'shellyrgbw2-e868e7f34c35')) + self.add(makeShellyRGW2('ki-counter', 'shellyrgbw2-e868e7f34cb2')) + # br-floor online=online | metric=1 (graph) lqi=93 bright=12 + # br-wall online=online | metric=1 (graph) lqi=30 bright=0 + + # en online=online | metric=1 (graph) lqi=36 bright=216 + # ft-ceil online=online | metric=1 (graph) lqi=96 bright=252 + # go-high online=online | metric=1 (graph) lqi=93 bright=253 + # li-toys online=online | metric=1 (graph) lqi=96 bright=28 + # py online=online | metric=1 (graph) lqi=93 bright=216 + # rr-lamp online=offline | metric=0 (graph) lqi=... bright=... + # sh-top online=online | metric=1 (graph) lqi=93 bright=254 + # ws-hanging online=online | metric=1 (graph) lqi=39 bright=... + # light-li-high-shelf uptimesec=2232334 wifi=-65 dim=100 color=0000002FD0 + # light-sh uptimesec=... wifi=... dim=... color=... + # light-tr-wall uptimesec=5082251 wifi=-38 dim=34 color=5700000000 + + # wled-ft-hanging offline #FFA000 bright=128 + # string-tr online #8CFF82 bright=128 + # light-tr-ball online #808A03 bright=12 + # string-hr online #C9FFDC bright=131 + + self.add(makeSonoffRelay(mqtt, 'li-lamp0', 'sonoff_0')) + self.add(makeSonoffRelay(mqtt, 'li-lamp1', 'sonoff_1')) + self.add(makeSonoffRelay(mqtt, 'li-lamp2', 'sonoff_2')) + self.add(makeSonoffRelay(mqtt, 'li-lamp3', 'sonoff_3')) + self.add(makeSonoffRelay(mqtt, 'li-lamp4', 'sonoff_4')) def add(self, d: Light): d.notifyChanged = self.notifyChanged