Mercurial > code > home > repos > light-bridge
changeset 26:33b3eb24506e
wled (single bulb) support. more lights
author | drewp@bigasterisk.com |
---|---|
date | Sat, 03 Feb 2024 20:56:27 -0800 |
parents | cee43f550577 |
children | 32cfefe3155b |
files | light.py protocols.py |
diffstat | 2 files changed, 24 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/light.py Fri Feb 02 20:52:09 2024 -0800 +++ b/light.py Sat Feb 03 20:56:27 2024 -0800 @@ -6,7 +6,7 @@ from color import Color from color_convert import DeviceColor, brightnessConv, ikeaWhiteConv, oneWhiteConv, relayConv, twoWhitesConv, zbConv from mqtt_io import MqttIo -from protocols import ShellyGen1WebTransport, SonoffRelayTransport, TasmotaWebTransport, Transport, ZigbeeTransport, espColorMessage, zbBrightnessMessage, zbRelayMessage, zbWhiteSpectrumMessage +from protocols import ShellyGen1WebTransport, SonoffRelayTransport, TasmotaWebTransport, Transport, WledTransport, ZigbeeTransport, espColorMessage, zbBrightnessMessage, zbRelayMessage, zbWhiteSpectrumMessage log = logging.getLogger('lite') @@ -104,6 +104,10 @@ transport=ZigbeeTransport(mqtt, name, '', topic=lambda *arg: topicPrefix + '/command', msg=espColorMessage)) +def makeWledSingleBulb(name: str, hostname: str) -> Light: + return Light(name=name, convertColor=twoWhitesConv, transport=WledTransport(hostname)) + + class Lights: _d: dict[str, Light] = {} @@ -116,6 +120,8 @@ self.add(makeTasmota('do-lamp', 'tasmota-9E2AB7-2743')) self.add(makeTasmota('li-high-shelf', 'light-li-ceil')) self.add(makeTasmota('tr-door', 'light-tr-door')) + self.add(makeWledSingleBulb('ft-hanging', 'light-ft-ceil')) + self.add(makeShellyRGW2('ki-ceiling', 'shellyrgbw2-e868e7f34c35')) self.add(makeShellyRGW2('ki-counter', 'shellyrgbw2-e868e7f34cb2')) @@ -124,6 +130,7 @@ self.add(makeZbIkeaWhiteTemp(mqtt, 'en', '0x000b57fffe988959')) self.add(makeZbIkeaWhiteTemp(mqtt, 'py', '0x000b57fffeaf42cd')) self.add(makeZbIkeaWhiteTemp(mqtt, 'rr-lamp', '0x000b57fffe32e5a5')) + self.add(makeZbIkeaWhiteTemp(mqtt, 'ft-ceiling', '0xd0cf5efffe28abcf')) self.add(makeZbBrightness(mqtt, 'go-high', '0x847127fffebb3efa'))
--- a/protocols.py Fri Feb 02 20:52:09 2024 -0800 +++ b/protocols.py Sat Feb 03 20:56:27 2024 -0800 @@ -51,7 +51,7 @@ def espColorMessage(dc: DeviceColor) -> dict: return { - "state":'ON', + "state": 'ON', "color": { "r": to8(dc.r), "g": to8(dc.g), @@ -116,6 +116,21 @@ # {"POWER":"ON","Dimmer":21,"Color":"3636363600","HSBColor":"0,0,21","White":21,"CT":153,"Channel":[21,21,21,21,0]} +class WledTransport(_WebTransport): + + async def send(self, dc: DeviceColor): + # see https://kno.wled.ge/interfaces/json-api/ + msg = { + 'seg': [{ + "cct": 128, # 0 warm; 255 cool + "col": [[to8(x) for x in [dc.r, dc.g, dc.b, dc.cw]], [], []] + }] + } + async with self._session.post(f'http://{self.hostname}/json/state', headers={'content-type': 'application/json'}, data=json.dumps(msg)) as resp: + await resp.text() + # {"POWER":"ON","Dimmer":21,"Color":"3636363600","HSBColor":"0,0,21","White":21,"CT":153,"Channel":[21,21,21,21,0]} + + class ShellyGen1WebTransport(_WebTransport): async def send(self, dc: DeviceColor):