Archived
1
0

Updated main.py to be more failsafe. Now using umqtt.robust too.

This commit is contained in:
Shaun Setlock
2022-12-06 21:17:34 -05:00
parent e14a2d0a9e
commit 5f182f8732

140
main.py
View File

@@ -4,7 +4,7 @@ import time
import json import json
import machine import machine
from machine import Pin from machine import Pin
from umqtt.simple import MQTTClient from umqtt.robust import MQTTClient
import dht import dht
import urequests import urequests
import wifi_config import wifi_config
@@ -115,7 +115,10 @@ def main():
wlan = network.WLAN(network.STA_IF) wlan = network.WLAN(network.STA_IF)
# Create MQTT Client # Create MQTT Client
mqtt_client = MQTTClient(mqtt_config.MQTT_CLIENT_ID, mqtt_config.MQTT_HOST_NAME) mqtt_client = MQTTClient(
client_id = mqtt_config.MQTT_CLIENT_ID,
server = mqtt_config.MQTT_HOST_NAME,
)
# Create DHT22 # Create DHT22
sensor = dht.DHT22(Pin(DHT_22_GPIO_PIN)) sensor = dht.DHT22(Pin(DHT_22_GPIO_PIN))
@@ -132,73 +135,98 @@ def main():
if DEBUG: if DEBUG:
print(f'\nStarting loop #{count}... \nWiFI Status is {wlan.status()}.') print(f'\nStarting loop #{count}... \nWiFI Status is {wlan.status()}.')
# Create Local Flags for Control
wifi_ready = False
mqtt_ready = False
dht22_ready = False
# DHT22 and CPU Reading.
try:
# CPU Reading.
cpu_temp = read_cpu_temp()
# DHT22 Reading.
dht22_reading = read_dht_22(sensor)
#debug_str = "None"
if dht22_reading is not None:
temp,hum = dht22_reading
temp = temp * 9/5. + 32.0
dht22_ready = True
except:
continue
# WiFi Connection. # WiFi Connection.
if wlan.status() != 3: try:
ifconfig = wlan_up(wlan) if wlan.status() != 3:
if ifconfig is None: ifconfig = wlan_up(wlan)
if DEBUG: if ifconfig is None:
print("Trouble to connecting WiFi: {}".format(e)) if DEBUG:
led_error_code(led, 3) print("Trouble to connecting WiFi: {}".format(e))
time.sleep(10) led_error_code(led, 3)
continue time.sleep(10)
continue
else:
wifi_ready = True
if DEBUG:
print("Connected to WiFi: {}".format(ifconfig))
else: else:
wifi_ready = True
ifconfig = wlan.ifconfig()
if DEBUG: if DEBUG:
print("Connected to WiFi: {}".format(ifconfig)) print(f"Skipping WiFi Activation since WiFi Status is {wlan.status()} \n{ifconfig}.")
else: except:
ifconfig = wlan.ifconfig() continue
if DEBUG:
print(f"Skipping WiFi Activation since WiFi Status is {wlan.status()} \n{ifconfig}.")
# MQTT Conneciton. # MQTT Conneciton.
try: try:
mqtt_client.connect() try:
if DEBUG: mqtt_client.connect(clean_session = False)
print(f'MQTT Connected.') mqtt_ready = True
if DEBUG:
print(f'MQTT Connected.')
except Exception as e: except Exception as e:
if DEBUG: if DEBUG:
print("Trouble to connecting to MQTT: {}".format(e)) print("Trouble to connecting to MQTT: {}".format(e))
led_error_code(led, 2) led_error_code(led, 2)
time.sleep(5) time.sleep(5)
continue # Start back at the top of the While Loop continue # Start back at the top of the While Loop
except:
continue
# DHT22 Reading. # Ready to Publish?
dht22_reading = read_dht_22(sensor) try:
#debug_str = "None" if wifi_ready and mqtt_ready and dht22_ready:
if dht22_reading is not None: # Timestamp
temp,hum = dht22_reading time_now = time.localtime()
temp = temp * 9/5. + 32.0 timestamp = "{}/{}/{} {}:{}:{}".format(time_now[1],time_now[2],time_now[0],time_now[3],time_now[4],time_now[5])
# CPU Reading. # Build JSON Payloads
cpu_temp = read_cpu_temp() dht_data = {
'Location':mqtt_config.MQTT_ZONE_ID,
'Temperature':temp,
'Relative Humidity':hum,
}
dht_payload = json.dumps(dht_data)
# Timestamp hw_data = {
time_now = time.localtime() 'Timestamp':timestamp,
timestamp = "{}/{}/{} {}:{}:{}".format(time_now[1],time_now[2],time_now[0],time_now[3],time_now[4],time_now[5]) 'CPU Temperature':cpu_temp,
'Device':mqtt_config.MQTT_HW_ID,
'WiFi Information':ifconfig,
}
hw_payload = json.dumps(hw_data)
# Build JSON Payloads # Publish
dht_data = { mqtt_client.publish("home/{}".format(mqtt_config.MQTT_ZONE_ID),dht_payload, retain=True)
'Location':mqtt_config.MQTT_ZONE_ID, mqtt_client.publish("hw/{}".format(mqtt_config.MQTT_HW_ID),hw_payload, retain=True)
'Temperature':temp,
'Relative Humidity':hum,
}
dht_payload = json.dumps(dht_data)
hw_data = { mqtt_client.disconnect()
'Timestamp':timestamp, if DEBUG:
'CPU Temperature':cpu_temp, print(f'MQTT Disconnected.')
'Device':mqtt_config.MQTT_HW_ID,
'WiFi Information':ifconfig,
}
hw_payload = json.dumps(hw_data)
# Publish except:
mqtt_client.publish("home/{}".format(mqtt_config.MQTT_ZONE_ID),dht_payload, retain=True) continue
mqtt_client.publish("hw/{}".format(mqtt_config.MQTT_HW_ID),hw_payload, retain=True)
mqtt_client.disconnect()
if DEBUG:
print(f'MQTT Disconnected.')
# Sleep for a bit. # Sleep for a bit.
if DEBUG: if DEBUG: