from umqtt.simple import MQTTClient from machine import Pin import json import time # MQTT-Konfiguration MQTT_BROKER = "lires.de" # oder Ihr eigener MQTT Broker MQTT_PORT = 1883 MQTT_CLIENT_ID = "esp8266_coffee" MQTT_TOPIC_STATUS = b"coffee/status" MQTT_TOPIC_COMMAND = b"coffee/command" # --- Eingänge --- an = Pin(5, Pin.IN) bereit = Pin(4, Pin.IN) fehler = Pin(14, Pin.IN) bohnen_voll = Pin(12, Pin.IN) Wasser_voll = Pin(13, Pin.IN) # --- Ausgänge --- einschalten = Pin(0, Pin.OUT) starten = Pin(15, Pin.OUT) # --- Status --- kaffee_machen =0 vorbereitung = 0 kaffee_fertig = 0 def mqtt_callback(topic, msg): print('Empfangen:', topic, msg) try: command = json.loads(msg.decode()) if topic == MQTT_TOPIC_COMMAND: if 'einschalten' in command: einschalten(command['einschalten']) if 'starten' in command: starten(command['starten']) except Exception as e: print('Fehler bei Kommando-Verarbeitung:', e) def connect_mqtt(): client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, port=MQTT_PORT) client.set_callback(mqtt_callback) client.connect() print('MQTT verbunden') client.subscribe(MQTT_TOPIC_COMMAND) return client # MQTT-Verbindung herstellen try: client = connect_mqtt() except Exception as e: print('MQTT Verbindungsfehler:', e) client = None # Hauptschleife while True: try: if client: client.check_msg() # Prüfe auf neue MQTT-Nachrichten # Status senden status = { # ---IOs--- "an": an.value(), "bereit": bereit.value(), "fehler": fehler.value(), "bohnen_voll": bohnen_voll.value(), "Wasser_voll": Wasser_voll.value(), "einschalten": einschalten.value(), "starten": starten.value(), # ---komunikation--- "kaffee_machen": kaffee_machen, "vorbereitung": vorbereitung, "kaffee_fertig": kaffee_fertig, } client.publish(MQTT_TOPIC_STATUS, json.dumps(status)) else: # Versuche Neuverbindung try: client = connect_mqtt() except: pass time.sleep(1) except Exception as e: print('Fehler in Hauptschleife:', e) time.sleep(5) client = None # Einschalten der Kaffeemaschine if kaffee_machen == 1: einschalten(1) time.sleep(1) einschalten(0) # Starten der Kaffeemaschine if kaffee_machen == 1 and an() == 1 and bereit() == 1 and fehler() == 0: starten(1) time.sleep(1) starten(0) gestartet = 1 else: starten(0) gestartet = 0 #Vorbereitung der Kaffeemaschine if bereit == 0 and an==1 and fehler==0 : vorbereitung=1 # Vorbereitung der Kaffeemaschine if bereit() == 0 and an() == 1 and fehler() == 0: vorbereitung = 1 # Kaffeemaschine fertig if bereit() == 1 and an() == 1 and fehler() == 0 and gestartet == 1: kaffee_fertig=1 gestartet = 0 else: kaffee_fertig=0 # Fehlerbehandlung if fehler() == 1: fehler(1) else: fehler(0) if bohnen_voll() == 1: bohnen_voll(1) if Wasser_voll() == 1: Wasser_voll(1)