Mercurial > code > home > repos > light-bridge
view light.py @ 2:c6fd04e07db0
refactor light.py
author | drewp@bigasterisk.com |
---|---|
date | Sun, 28 Jan 2024 15:44:10 -0800 |
parents | |
children | e8e4fd6d5619 |
line wrap: on
line source
import asyncio import logging from dataclasses import dataclass log = logging.getLogger('light') class Color(str): def to_js(self): return self @dataclass class Light: name: str address: str online: bool colorRequest: Color colorMessage: dict colorCurrent: Color latencyMs: float def to_js(self): return { 'light': { 'name': self.name, 'address': self.address, 'online': self.online, 'colorRequest': self.colorRequest.to_js(), 'colorMessage': self.colorMessage, 'colorCurrent': self.colorCurrent.to_js(), 'latencyMs': self.latencyMs, } } class Lights: _d: dict[str, Light] = {} def add(self, d: Light): self._d[d.name] = d def byName(self, name: str) -> Light: return self._d[name] async def changes(self): # yields None on any data change while True: yield None await asyncio.sleep(1) def to_js(self): return {'lights': [d.to_js() for d in sorted(self._d.values(), key=lambda r: r.name)]}