]> 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 9d65617059e42066de4e63fbd16b901073ebff9e..7af1fd5c9920bb5a906a8bf68f1581e26eb9d601 100755 (executable)
@@ -1,11 +1,11 @@
-#!/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
@@ -141,23 +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/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, 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():
@@ -165,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)