Compare commits
No commits in common. "b7a075c873de0bae703fbeb8dcc8dd87a33d9dd1" and "3f5b4bedeec1d157d10a46cb1f8881861d7bd302" have entirely different histories.
b7a075c873
...
3f5b4bedee
@ -7,7 +7,7 @@ steps:
|
|||||||
image: python
|
image: python
|
||||||
commands:
|
commands:
|
||||||
- apt-get update
|
- apt-get update
|
||||||
- apt-get install -y python-systemd python3-systemd libsystemd-dev
|
- apt-get install python-systemd python3-systemd libsystemd-dev
|
||||||
- pip install pex
|
- pip install pex
|
||||||
- pip install .
|
- pip install .
|
||||||
- pex ./ -m citadel.devices -o devices.pex
|
- pex ./ -m citadel.devices -o devices.pex
|
||||||
|
@ -1,16 +1,10 @@
|
|||||||
import typing
|
import typing
|
||||||
import logging
|
|
||||||
|
|
||||||
from citadel.mqtt import Client
|
from citadel.mqtt import Client
|
||||||
|
|
||||||
class Light:
|
class Light:
|
||||||
|
|
||||||
def __init__(self, _id: str, client: Client, logger: logging.Logger=None, **kwargs):
|
def __init__(self, _id: str, client: Client, **kwargs):
|
||||||
|
|
||||||
if logger is None:
|
|
||||||
logger = logging.getLogger('devices.LightsGroup')
|
|
||||||
self.logger = logger
|
|
||||||
|
|
||||||
self._state = None
|
self._state = None
|
||||||
self._change_callback = None
|
self._change_callback = None
|
||||||
self._available = False
|
self._available = False
|
||||||
@ -35,11 +29,12 @@ class Light:
|
|||||||
self._change_callback = callback
|
self._change_callback = callback
|
||||||
|
|
||||||
def onLWTChange(self, client, userdata, msg):
|
def onLWTChange(self, client, userdata, msg):
|
||||||
available = msg.payload.decode()
|
state = msg.payload.decode()
|
||||||
if available == "Online":
|
if state == "Online":
|
||||||
self._available = True
|
self._available = True
|
||||||
elif available == "Offline":
|
elif state == "Offline":
|
||||||
self._available = False
|
self._available = False
|
||||||
|
self._state = False
|
||||||
else:
|
else:
|
||||||
raise Exception("Unexpected value %s for LWT topic" % state)
|
raise Exception("Unexpected value %s for LWT topic" % state)
|
||||||
|
|
||||||
@ -80,13 +75,8 @@ class Light:
|
|||||||
|
|
||||||
class LightsGroup:
|
class LightsGroup:
|
||||||
|
|
||||||
def __init__(self, _id: str, client: Client, lights: [Light], logger: logging.Logger=None):
|
def __init__(self, _id: str, client: Client, lights: [Light]):
|
||||||
""" Create a virtual mqtt device that handle multiple light """
|
""" 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._id = _id
|
||||||
self._lights = lights
|
self._lights = lights
|
||||||
|
|
||||||
@ -99,8 +89,6 @@ class LightsGroup:
|
|||||||
self._previous_state = all([l.state for l in self._lights])
|
self._previous_state = all([l.state for l in self._lights])
|
||||||
self._previous_available = all([l.available 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)
|
self._client.add_on_connect_callback(self.on_connect)
|
||||||
|
|
||||||
def on_connect(self, *args):
|
def on_connect(self, *args):
|
||||||
@ -120,7 +108,6 @@ class LightsGroup:
|
|||||||
def onLightStateChange(self, light):
|
def onLightStateChange(self, light):
|
||||||
available = all([l.available for l in self._lights])
|
available = all([l.available for l in self._lights])
|
||||||
if available != self._previous_available:
|
if available != self._previous_available:
|
||||||
self.logger.info('New available state %s for %s', available, self.id)
|
|
||||||
self._previous_available = available
|
self._previous_available = available
|
||||||
self._client.publish('stat/devices/light/%s/AVAILABLE' % self.id, 'TRUE' if available else 'FALSE')
|
self._client.publish('stat/devices/light/%s/AVAILABLE' % self.id, 'TRUE' if available else 'FALSE')
|
||||||
|
|
||||||
|
@ -16,24 +16,6 @@ def main(\
|
|||||||
is_systemd: bool = typer.Option(False, help="Is running as systemd unit", envvar="LAUNCHED_BY_SYSTEMD")\
|
is_systemd: bool = typer.Option(False, help="Is running as systemd unit", envvar="LAUNCHED_BY_SYSTEMD")\
|
||||||
):
|
):
|
||||||
|
|
||||||
if is_systemd:
|
|
||||||
logger = logging.getLogger()
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
logger.addHandler(systemd.journal.JournalHandler())
|
|
||||||
else:
|
|
||||||
logger = logging.getLogger()
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
# create console handler and set level to debug
|
|
||||||
ch = logging.StreamHandler()
|
|
||||||
ch.setLevel(logging.DEBUG)
|
|
||||||
# create formatter
|
|
||||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
||||||
# add formatter to ch
|
|
||||||
ch.setFormatter(formatter)
|
|
||||||
# add ch to logger
|
|
||||||
logger.addHandler(ch)
|
|
||||||
|
|
||||||
|
|
||||||
client = Client()
|
client = Client()
|
||||||
client.setup(mqtt_host, mqtt_port, mqtt_user, mqtt_pwd)
|
client.setup(mqtt_host, mqtt_port, mqtt_user, mqtt_pwd)
|
||||||
|
|
||||||
@ -55,6 +37,23 @@ def main(\
|
|||||||
CMND_TOPIC='cmnd/tasmota/light/{id}/POWER2')])
|
CMND_TOPIC='cmnd/tasmota/light/{id}/POWER2')])
|
||||||
|
|
||||||
|
|
||||||
|
if is_systemd:
|
||||||
|
logger = logging.getLogger('')
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
logger.addHandler(systemd.journal.JournalHandler())
|
||||||
|
else:
|
||||||
|
logger = logging.getLogger('')
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
# create console handler and set level to debug
|
||||||
|
ch = logging.StreamHandler()
|
||||||
|
ch.setLevel(logging.DEBUG)
|
||||||
|
# create formatter
|
||||||
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||||
|
# add formatter to ch
|
||||||
|
ch.setFormatter(formatter)
|
||||||
|
# add ch to logger
|
||||||
|
logger.addHandler(ch)
|
||||||
|
|
||||||
client.loop_forever()
|
client.loop_forever()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user