]> mj.ucw.cz Git - home-hw.git/blobdiff - rainbow/iris/burrow-iris.py
Iris: Two adjustments for new aiomqtt
[home-hw.git] / rainbow / iris / burrow-iris.py
index 1a29a7020f17c02d40d24138a8c9be488172d598..7af1fd5c9920bb5a906a8bf68f1581e26eb9d601 100755 (executable)
@@ -1,15 +1,14 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Iris -- the Burrow's goddess of rainbow
 # Controls LEDs on the Rainbow according to the state of the house
 # (c) 2022 Martin Mareš <mj@ucw.cz>
 
 import argparse
 import asyncio
-import asyncio_mqtt
+import aiomqtt
 from datetime import datetime, timedelta
 import logging
 from logging.handlers import SysLogHandler
-import signal
 import ssl
 import sys
 
@@ -113,18 +112,27 @@ def catarium_led():
 
 
 def temperature_led():
-    for sensor in ['loft', 'ursarium', 'garage', 'terarium']:
+    for sensor in ['loft', 'ursarium', 'garage']:   # FIXME: terarium
         if st.get_sensor(f"temp/{sensor}", timeout=3600) is None:
             return (1, 0, 0)
 
     return None
 
 
+def ac_led():
+    ac = st.get_sensor('air/ac-on')
+    if ac == 1:
+        return (0, 1, 0)
+    else:
+        return None
+
+
 def recalc_leds():
     st.set_led(11, None)
     st.set_led(10, boiler_led())
     st.set_led(9, catarium_led())
-    st.set_led(8, temperature_led())
+    # st.set_led(8, temperature_led())
+    st.set_led(8, ac_led())
 
 
 async def mqtt_process_msg(topic, val):
@@ -133,22 +141,24 @@ async def mqtt_process_msg(topic, val):
 
 
 async def mqtt_loop():
-    sctx = ssl.SSLContext(ssl.PROTOCOL_TLS)
+    sctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
     sctx.verify_mode = ssl.CERT_REQUIRED
     sctx.load_cert_chain('/etc/burrow-mqtt/client.crt', '/etc/burrow-mqtt/client.key')
     sctx.load_verify_locations(cafile='/etc/burrow-mqtt/ca.crt')
 
-    will = asyncio_mqtt.Will(topic='status/iris', payload='dead', qos=1, retain=True)
+    will = aiomqtt.Will(topic='status/iris', payload='dead', qos=1, retain=True)
 
-    async with asyncio_mqtt.Client(client_id='iris', hostname="burrow-mqtt", port=8883, tls_context=sctx, will=will) as mqtt:
-        global st
-        st = State(mqtt)
-        async with mqtt.unfiltered_messages() as messages:
-            await mqtt.subscribe("burrow/heating/#")
-            await mqtt.subscribe("burrow/temp/#")
-            await mqtt.publish("status/iris", "ok", retain=True)
-            async for msg in messages:
-                await mqtt_process_msg(msg.topic, msg.payload.decode())
+    mqtt = aiomqtt.Client(client_id='iris', hostname="burrow-mqtt", port=8883, tls_context=sctx, will=will)
+    await mqtt.connect()
+    global st
+    st = State(mqtt)
+    async with mqtt.messages() as messages:
+        await mqtt.subscribe("burrow/air/ac-on")
+        await mqtt.subscribe("burrow/heating/#")
+        await mqtt.subscribe("burrow/temp/#")
+        await mqtt.publish("status/iris", "ok", retain=True)
+        async for msg in messages:
+            await mqtt_process_msg(msg.topic.value, msg.payload.decode())
 
 
 async def mqtt_watcher():
@@ -156,7 +166,7 @@ async def mqtt_watcher():
         try:
             logger.info("Starting MQTT")
             await mqtt_loop()
-        except asyncio_mqtt.MqttError as error:
+        except aiomqtt.MqttError as error:
             logger.error(f"MQTT error: {error}")
         await asyncio.sleep(10)
 
@@ -199,7 +209,7 @@ if args.debug:
 else:
     formatter = logging.Formatter(fmt="%(message)s")        # systemd will handle the rest
     log_handler = SysLogHandler('/dev/log', facility=SysLogHandler.LOG_LOCAL1)
-    log_handler.ident = 'burrow-telegram: '
+    log_handler.ident = 'burrow-iris: '
     logger.setLevel(logging.INFO)
 log_handler.setFormatter(formatter)
 logger.addHandler(log_handler)