Mercurial > code > home > repos > light-bridge
changeset 28:fb2e91f230f4
new wled mode and more lights
author | drewp@bigasterisk.com |
---|---|
date | Mon, 02 Sep 2024 20:00:53 -0700 |
parents | 32cfefe3155b |
children | 35affd4d37d4 |
files | light.py protocols.py proxy.yaml |
diffstat | 3 files changed, 35 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/light.py Sat Mar 23 15:25:02 2024 -0700 +++ b/light.py Mon Sep 02 20:00:53 2024 -0700 @@ -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, WledTransport, ZigbeeTransport, espColorMessage, zbBrightnessMessage, zbRelayMessage, zbWhiteSpectrumMessage +from protocols import ShellyGen1WebTransport, SonoffRelayTransport, TasmotaWebTransport, Transport, WledControl, WledTransport, ZigbeeTransport, espColorMessage, zbBrightnessMessage, zbRelayMessage, zbWhiteSpectrumMessage log = logging.getLogger('lite') @@ -105,8 +105,10 @@ def makeWledSingleBulb(name: str, hostname: str) -> Light: - return Light(name=name, convertColor=twoWhitesConv, transport=WledTransport(hostname)) + return Light(name=name, convertColor=twoWhitesConv, transport=WledTransport(hostname, WledControl.wholeStringColor)) +def makeWledStringBrightness(name: str, hostname: str) -> Light: + return Light(name=name, convertColor=brightnessConv, transport=WledTransport(hostname, WledControl.brightness)) class Lights: _d: dict[str, Light] = {} @@ -120,7 +122,11 @@ 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(makeWledSingleBulb('tr-ball', 'light-tr-ball')) + self.add(makeWledStringBrightness('hr-string', 'light-hr-string')) + self.add(makeWledStringBrightness('tr-string', 'light-tr-string')) self.add(makeShellyRGW2('ki-ceiling', 'shellyrgbw2-e868e7f34c35')) self.add(makeShellyRGW2('ki-counter', 'shellyrgbw2-e868e7f34cb2')) @@ -131,6 +137,7 @@ self.add(makeZbIkeaWhiteTemp(mqtt, 'py', '0x000b57fffeaf42cd')) self.add(makeZbIkeaWhiteTemp(mqtt, 'rr-lamp', '0x000b57fffe32e5a5')) self.add(makeZbIkeaWhiteTemp(mqtt, 'ft-ceiling', '0xd0cf5efffe28abcf')) + self.add(makeZbIkeaWhiteTemp(mqtt, 'di-ceiling', '0x000b57fffe8c0ad4')) self.add(makeZbBrightness(mqtt, 'go-high', '0x847127fffebb3efa'))
--- a/protocols.py Sat Mar 23 15:25:02 2024 -0700 +++ b/protocols.py Mon Sep 02 20:00:53 2024 -0700 @@ -1,6 +1,9 @@ +import json import logging -import json +from enum import Enum + import aiohttp + from color_convert import DeviceColor from mqtt_io import MqttIo @@ -116,19 +119,32 @@ # {"POWER":"ON","Dimmer":21,"Color":"3636363600","HSBColor":"0,0,21","White":21,"CT":153,"Channel":[21,21,21,21,0]} +class WledControl(Enum): + wholeStringColor = 'wholeStringColor' + brightness = 'brightness' + + class WledTransport(_WebTransport): + def __init__(self, hostname: str, control: WledControl): + super().__init__(hostname) + self.control = control + 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]], [], []] - }] - } + if self.control == WledControl.wholeStringColor: + # 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]], [], []] + }] + } + elif self.control == WledControl.brightness: + msg = {"bri": to8(dc.brightness)} + else: + raise NotImplementedError 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):
--- a/proxy.yaml Sat Mar 23 15:25:02 2024 -0700 +++ b/proxy.yaml Mon Sep 02 20:00:53 2024 -0700 @@ -7,7 +7,7 @@ error_log /dev/stderr; pid /dev/null; events { - worker_connections 64; + worker_connections 256; } http { log_format main '[$time_local] code=$status bytes_sent=$bytes_sent req="$request"';