# Libraries
import time
from time import sleep
from machine import I2C, Pin, ADC
from i2c_lcd import I2cLcd
import dht
import math
from umqtt.simple import MQTTClient
import ujson
import network
# MQTT Server Parameters
MQTT_CLIENT_ID = "Wokwi-GUEST!"
MQTT_BROKER = "broker.emqx.io" ### WARNING ###
MQTT_USER = "Wokwi-GUEST!" ### WARNING ###
MQTT_PASSWORD = "" ### WARNING ###
MQTT_TOPIC = "iot/telemetry"
MQTT_TOPIC1 = "iot/request"
MQTT_TOPIC2 = "iot/control"
# WiFi connection
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# MQTT server connection
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("Connected!")
# Settings of hardware
AddressOfLcd = 0x27
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000)
lcd = I2cLcd(i2c, AddressOfLcd, 4, 20)
red_led = Pin(26, Pin.OUT)
yellow_led = Pin(25, Pin.OUT)
green_led = Pin(14, Pin.OUT)
blue_led = Pin(27, Pin.OUT)
black_button = Pin(12, Pin.IN)
print("hardware is ready")
print("Program Start")
while True:
if black_button.value() == 1: ### SEND STATUS COMMAND AND READ STATUS MESSAGE ###
send_status = ujson.dumps({
"status"
})
client.publish(MQTT_TOPIC2, send_status)
print("sent status")
sleep(2)
def Loads_status(MQTT_TOPIC, read_status):
if read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "OFF", "blue_load": "OFF", "green_load": "OFF"}':
red_led.off()
yellow_led.off()
green_led.off()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "OFF", "blue_load": "OFF", "green_load": "OFF"}':
red_led.on()
yellow_led.off()
green_led.off()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "ON", "blue_load": "OFF", "green_load": "OFF"}':
red_led.off()
yellow_led.on()
green_led.off()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "ON", "blue_load": "OFF", "green_load": "OFF"}':
red_led.on()
yellow_led.on()
green_led.off()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "OFF", "blue_load": "OFF", "green_load": "ON"}':
red_led.off()
yellow_led.off()
green_led.on()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "OFF", "blue_load": "OFF", "green_load": "ON"}':
red_led.on()
yellow_led.off()
green_led.on()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "ON", "blue_load": "OFF", "green_load": "ON"}':
red_led.off()
yellow_led.on()
green_led.on()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "ON", "blue_load": "OFF", "green_load": "ON"}':
red_led.on()
yellow_led.on()
green_led.on()
blue_led.off()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:OFF")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "OFF", "blue_load": "ON", "green_load": "OFF"}':
red_led.off()
yellow_led.off()
green_led.off()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "OFF", "blue_load": "ON", "green_load": "OFF"}':
red_led.on()
yellow_led.off()
green_led.off()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "ON", "blue_load": "ON", "green_load": "OFF"}':
red_led.off()
yellow_led.on()
green_led.off()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "ON", "blue_load": "ON", "green_load": "OFF"}':
red_led.on()
yellow_led.on()
green_led.off()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:OFF, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "OFF", "blue_load": "ON", "green_load": "ON"}':
red_led.off()
yellow_led.off()
green_led.on()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "OFF", "blue_load": "ON", "green_load": "ON"}':
red_led.on()
yellow_led.off()
green_led.on()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:OFF")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "OFF", "yellow_load": "ON", "blue_load": "ON", "green_load": "ON"}':
red_led.off()
yellow_led.on()
green_led.on()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:OFF, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:ON")
print(read_status)
elif read_status.decode() == '{"Asoukidis_A./Status_report: red_load": "ON", "yellow_load": "ON", "blue_load": "ON", "green_load": "ON"}':
red_led.on()
yellow_led.on()
green_led.on()
blue_led.on()
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr("STATUS: R:ON, Y:ON")
lcd.move_to(0,3)
lcd.putstr(" G:ON, B:ON")
print(read_status)
client.set_callback(Loads_status)
client.subscribe(MQTT_TOPIC)
def Total_Power(MQTT_TOPIC,total): ### READ TOTAL POWER FROM TOPIC: iot/telemetry ###
TP = 0
if total.decode() == "Asoukidis_A./Total_Power_kW": X,
Q=total.decode(['ascii'])
if Q == '{"Asoukidis_A./Total_Power_kW": 0}':
TP = 0
print("TP=0")
elif Q == '{"Asoukidis_A./Total_Power_kW": 2}':
TP = 2
print("TP=2")
elif Q == '{"Asoukidis_A./Total_Power_kW": 4}':
TP = 4
print("TP=4")
elif Q == '{"Asoukidis_A./Total_Power_kW": 6}':
TP = 6
print("TP=6")
elif Q == '{"Asoukidis_A./Total_Power_kW": 8}':
TP = 8
print("TP=8")
lcd.move_to(0,0)
lcd.putstr(" ASOUKIDIS ANDREAS ")
lcd.move_to(0,1)
lcd.putstr(" TOTAL POWER: "+ str(TP) +" kW ")
lcd.move_to(0,2)
lcd.putstr(" ")
lcd.move_to(0,3)
lcd.putstr(" ")
client.set_callback(Total_Power)
client.subscribe(MQTT_TOPIC)