Skip to content
Snippets Groups Projects
Commit 62c53f72 authored by Pinguin's avatar Pinguin :penguin:
Browse files

Merge branch 'rewrite-async' into 'master'

Rewrite code using resilient async library

See merge request Teckids/hacknfun/kalle-firmware!3
parents 4aa7148b 0870e261
No related branches found
No related tags found
1 merge request!3Rewrite code using resilient async library
from umqtt.simple import MQTTClient import asyncio
import json import json
import time import time
import sys
import network
import wled from mqtt_as import MQTTClient
import config from mqtt_as import config as mqtt_config
import config
import wled
# Connect wifi
print("Wifi connecting...")
wled.set_color(0, 0, 0, 255, 0) wled.set_color(0, 0, 0, 255, 0)
nic = network.WLAN(network.STA_IF)
nic.active(True)
try:
nic.connect(config.wifi_ssid, config.wifi_pw)
except OSError:
time.sleep(1)
print("Wifi broken")
wled.set_color(0, 255, 0, 0, 0)
sys.exit()
for i in range(10): async def wifi_change(state):
if nic.isconnected(): if state:
break # Wifi is connected
wled.set_color(0, 255, 0, 0, 0)
print("Wifi connected")
else: else:
time.sleep(1) # Wifi is not connected
print("Done connecting!") wled.set_color(0, 0, 0, 255, 0)
print("Wifi disconnected")
# Connect MQTT async def conn_ok(mqtt):
mqtt = MQTTClient( # MQTT connected
config.mqtt_client_id, wled.set_color(0, 0, 255, 0, 0)
config.mqtt_server, print("MQTT connected")
config.mqtt_port,
config.mqtt_user,
config.mqtt_password,
)
try: await asyncio.sleep(3)
print("Lets connect MQTT")
mqtt.connect(clean_session=False)
print("Connected!")
except OSError as e:
print(f"Not connected, error: {e}")
wled.set_color(0, 255, 0, 0, 0)
sys.exit()
wled.set_color(0, 0, 255, 0, 0)
time.sleep(3)
wled.set_color(0, 0, 0, 0, 0)
await mqtt.subscribe(f"kalle/effects")
for i in range(8):
await mqtt.subscribe(f"kalle/led/{i}/color")
# Create function to react to json messages def react(topic, msg, retained):
def react(topic, message): msg = json.loads(msg)
msg = json.loads(message)
print(msg) print(msg)
if "kalle/led" in topic.decode("UTF-8") and len(msg) < 3: if "kalle/led" in topic.decode("UTF-8") and len(msg) < 3:
print(len(msg)) print(len(msg))
...@@ -83,15 +62,25 @@ def react(topic, message): ...@@ -83,15 +62,25 @@ def react(topic, message):
print(f"Party for 10s (time {time.time()})") print(f"Party for 10s (time {time.time()})")
wled.party(10) wled.party(10)
async def main(mqtt):
await mqtt.connect()
mqtt.set_callback(react) while True:
mqtt.subscribe(f"kalle/effects") # TODO implement publishing logic here
for i in range(8): await asyncio.sleep(5)
mqtt.subscribe(f"kalle/led/{i}/color")
print("Waiting for messages") mqtt_config["ssid"] = config.wifi_ssid
while True: mqtt_config["wifi_pw"] = config.wifi_pw
try: mqtt_config["client_id"] = config.mqtt_client_id
mqtt.wait_msg() mqtt_config["server"] = config.mqtt_server
except Exception as e: mqtt_config["user"] = config.mqtt_user
print(f"Error: {e}") mqtt_config["password"] = config.mqtt_password
mqtt_config["subs_cb"] = react
mqtt_config["connect_coro"] = conn_ok
mqtt_config["wifi_coro"] = wifi_change
mqtt = MQTTClient(mqtt_config)
try:
asyncio.run(main(mqtt))
finally:
mqtt.close()
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment