Interrupts
This commit is contained in:
@@ -7,7 +7,7 @@ import urequests
|
|||||||
|
|
||||||
# MQTT-Konfiguration
|
# MQTT-Konfiguration
|
||||||
MQTT_BROKER = "lires.de"
|
MQTT_BROKER = "lires.de"
|
||||||
MQTT_PORT = 1883
|
MQTT_PORT = 1884
|
||||||
MQTT_CLIENT_ID = "esp8266_coffee"
|
MQTT_CLIENT_ID = "esp8266_coffee"
|
||||||
MQTT_TOPIC_STATUS = b"coffee/status"
|
MQTT_TOPIC_STATUS = b"coffee/status"
|
||||||
MQTT_TOPIC_COMMAND = b"coffee/command"
|
MQTT_TOPIC_COMMAND = b"coffee/command"
|
||||||
@@ -26,15 +26,17 @@ Wasser_voll = Pin(13, Pin.IN)
|
|||||||
# --- Ausgänge ---
|
# --- Ausgänge ---
|
||||||
einschalten = Pin(0, Pin.OUT)
|
einschalten = Pin(0, Pin.OUT)
|
||||||
starten = Pin(15, Pin.OUT)
|
starten = Pin(15, Pin.OUT)
|
||||||
|
einschalten.value(1)
|
||||||
|
starten.value(1)
|
||||||
# --- Status ---
|
# --- Status ---
|
||||||
toggle_machine=0
|
toggle_machine=0
|
||||||
gestartet = 0
|
gestartet = 0
|
||||||
|
|
||||||
make_coffee= 0
|
make_coffee= 0
|
||||||
|
counter_negirp=0
|
||||||
kaffee_fertig = 0
|
kaffee_fertig = 0
|
||||||
in_process = 0
|
in_process = 0
|
||||||
|
counter=0
|
||||||
|
|
||||||
|
|
||||||
def mqtt_callback(topic, msg):
|
def mqtt_callback(topic, msg):
|
||||||
@@ -44,11 +46,13 @@ def mqtt_callback(topic, msg):
|
|||||||
print(f'Payload: {msg.decode()}')
|
print(f'Payload: {msg.decode()}')
|
||||||
print('-------------------------')
|
print('-------------------------')
|
||||||
try:
|
try:
|
||||||
|
global toggle_machine, make_coffee, kaffee_fertig, gestartet, in_process
|
||||||
command = json.loads(msg.decode())
|
command = json.loads(msg.decode())
|
||||||
if topic == MQTT_TOPIC_COMMAND:
|
if topic == MQTT_TOPIC_COMMAND:
|
||||||
if command['command']=='toggle_machine':
|
if command['command']=='toggle_machine':
|
||||||
|
|
||||||
toggle_machine=1
|
toggle_machine=1
|
||||||
if gestartet.value() == 1:
|
if gestartet == 1:
|
||||||
command['status']='served'
|
command['status']='served'
|
||||||
|
|
||||||
print(command)
|
print(command)
|
||||||
@@ -93,13 +97,42 @@ except Exception as e:
|
|||||||
|
|
||||||
send_online_status()
|
send_online_status()
|
||||||
|
|
||||||
|
def interrupt_handler(pin):
|
||||||
|
if pin is an:
|
||||||
|
if an.value() == 1:
|
||||||
|
|
||||||
|
an.value(1)
|
||||||
|
else:
|
||||||
|
print("'an' FALLING event")
|
||||||
|
an.value(0)
|
||||||
|
elif pin is bereit:
|
||||||
|
if bereit.value() == 1:
|
||||||
|
print("'bereit' RISING event")
|
||||||
|
else:
|
||||||
|
print("'bereit' FALLING event")
|
||||||
|
bereit.value(0)
|
||||||
|
counter_negirp = counter_negirp + 1
|
||||||
|
elif pin is fehler:
|
||||||
|
if fehler.value() == 1:
|
||||||
|
print("'fehler' RISING event")
|
||||||
|
|
||||||
|
fehler.value(1)
|
||||||
|
else:
|
||||||
|
print("'fehler' FALLING event")
|
||||||
|
|
||||||
|
fehler.value(0)
|
||||||
|
|
||||||
|
# Interrupts für die Eingänge einrichten
|
||||||
|
an.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=interrupt_handler)
|
||||||
|
bereit.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=interrupt_handler)
|
||||||
|
fehler.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=interrupt_handler)
|
||||||
|
|
||||||
# Hauptschleife
|
# Hauptschleife
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
if client:
|
if client:
|
||||||
client.check_msg() # Prüfe auf neue MQTT-Nachrichten
|
client.check_msg() # Prüfe auf neue MQTT-Nachrichten
|
||||||
|
|
||||||
# Status senden
|
# Status senden
|
||||||
status = {
|
status = {
|
||||||
# ---IOs---
|
# ---IOs---
|
||||||
@@ -114,37 +147,44 @@ while True:
|
|||||||
# ---komunikation---
|
# ---komunikation---
|
||||||
"kaffee_machen": make_coffee,
|
"kaffee_machen": make_coffee,
|
||||||
#"vorbereitung": vorbereitung,
|
#"vorbereitung": vorbereitung,
|
||||||
"kaffee_fertig": kaffee_fertig,
|
"kaffee_fertig": kaffee_fertig,
|
||||||
|
|
||||||
}
|
}
|
||||||
client.publish(MQTT_TOPIC_STATUS, json.dumps(status))
|
client.publish(MQTT_TOPIC_STATUS, json.dumps(status))
|
||||||
else:
|
# print(starten.value(), einschalten.value())
|
||||||
|
else:
|
||||||
# Versuche Neuverbindung
|
# Versuche Neuverbindung
|
||||||
try:
|
try:
|
||||||
client = connect_mqtt()
|
client = connect_mqtt()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
time.sleep(3) # Warte 5 Sekunden zwischen den Status-Updates
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('Fehler in Hauptschleife:', e)
|
print('Fehler in Hauptschleife:', e)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
client = None
|
client = None
|
||||||
|
time.sleep(1) # Kurze Pause, um CPU-Last zu reduzieren
|
||||||
|
if counter_negirp >2:
|
||||||
|
bereit.value(0)
|
||||||
|
counter_negirp = 0
|
||||||
|
|
||||||
|
print(toggle_machine, an.value(), bereit.value(), fehler.value())
|
||||||
# Einschalten der Kaffeemaschine per remote
|
# Einschalten der Kaffeemaschine per remote
|
||||||
if toggle_machine.value() == 1 and an.value() == 0 and bereit.value() == 0 and fehler.value() == 0:
|
if toggle_machine == 1 and an.value() == 0 and bereit.value() == 0 and fehler.value() == 0:
|
||||||
einschalten=1
|
einschalten.value(0)
|
||||||
time.sleep(1)
|
|
||||||
einschalten=0
|
|
||||||
gestartet = 1
|
gestartet = 1
|
||||||
|
print("Kaffeemaschine eingeschaltet")
|
||||||
|
toggle_machine = 0
|
||||||
|
|
||||||
#Starten der Kaffeemaschine per remote
|
#Starten der Kaffeemaschine per remote
|
||||||
if make_coffee() == 1 and an() == 1 and bereit() == 1 and fehler() == 0 and gestartet == 1:
|
if make_coffee == 1 and an.value() == 1 and bereit.value() == 1 and fehler.value() == 0 and gestartet == 1:
|
||||||
starten=1
|
starten.value(0)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
starten=0
|
starten.value(1)
|
||||||
make_coffee = 0
|
make_coffee = 0
|
||||||
in_process = 1
|
in_process = 1
|
||||||
|
print("Kaffeemaschine gestartet")
|
||||||
|
|
||||||
|
|
||||||
# Kaffee fertig
|
# Kaffee fertig
|
||||||
@@ -160,5 +200,4 @@ while True:
|
|||||||
else:
|
else:
|
||||||
fehler(0)
|
fehler(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
15
micropython/testmain.py
Normal file
15
micropython/testmain.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
from machine import Pin
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
|
||||||
|
while True:
|
||||||
|
an = Pin(5, Pin.IN)
|
||||||
|
bereit = Pin(4, Pin.IN)
|
||||||
|
fehler = Pin(14, Pin.IN)
|
||||||
|
|
||||||
|
if an.value() == 1:
|
||||||
|
print("An")
|
||||||
|
if bereit.value() == 1:
|
||||||
|
print("Bereit")
|
||||||
|
if fehler.value() == 1:
|
||||||
|
print("Fehler")
|
||||||
Reference in New Issue
Block a user