Fix available state
This commit is contained in:
parent
903bbe0b01
commit
0967e0bfa2
@ -1,10 +1,16 @@
|
||||
import typing
|
||||
import logging
|
||||
|
||||
from citadel.mqtt import Client
|
||||
|
||||
class Light:
|
||||
|
||||
def __init__(self, _id: str, client: Client, **kwargs):
|
||||
def __init__(self, _id: str, client: Client, logger: logging.Logger=None, **kwargs):
|
||||
|
||||
if logger is None:
|
||||
logger = logging.getLogger('devices.LightsGroup')
|
||||
self.logger = logger
|
||||
|
||||
self._state = None
|
||||
self._change_callback = None
|
||||
self._available = False
|
||||
@ -29,12 +35,11 @@ class Light:
|
||||
self._change_callback = callback
|
||||
|
||||
def onLWTChange(self, client, userdata, msg):
|
||||
state = msg.payload.decode()
|
||||
if state == "Online":
|
||||
available = msg.payload.decode()
|
||||
if available == "Online":
|
||||
self._available = True
|
||||
elif state == "Offline":
|
||||
elif available == "Offline":
|
||||
self._available = False
|
||||
self._state = False
|
||||
else:
|
||||
raise Exception("Unexpected value %s for LWT topic" % state)
|
||||
|
||||
@ -75,8 +80,13 @@ class Light:
|
||||
|
||||
class LightsGroup:
|
||||
|
||||
def __init__(self, _id: str, client: Client, lights: [Light]):
|
||||
def __init__(self, _id: str, client: Client, lights: [Light], logger: logging.Logger=None):
|
||||
""" Create a virtual mqtt device that handle multiple light """
|
||||
|
||||
if logger is None:
|
||||
logger = logging.getLogger('devices.LightsGroup')
|
||||
self.logger = logger
|
||||
|
||||
self._id = _id
|
||||
self._lights = lights
|
||||
|
||||
@ -89,6 +99,8 @@ class LightsGroup:
|
||||
self._previous_state = all([l.state for l in self._lights])
|
||||
self._previous_available = all([l.available for l in self._lights])
|
||||
|
||||
self.logger.info("Available %s" % self._previous_available)
|
||||
|
||||
self._client.add_on_connect_callback(self.on_connect)
|
||||
|
||||
def on_connect(self, *args):
|
||||
@ -108,6 +120,7 @@ class LightsGroup:
|
||||
def onLightStateChange(self, light):
|
||||
available = all([l.available for l in self._lights])
|
||||
if available != self._previous_available:
|
||||
self.logger.info('New available state %s for %s', available, self.id)
|
||||
self._previous_available = available
|
||||
self._client.publish('stat/devices/light/%s/AVAILABLE' % self.id, 'TRUE' if available else 'FALSE')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user