PIn änderung und Code auf Esp begonnen

This commit is contained in:
yaba-source
2025-04-29 10:01:57 +00:00
parent e838cba37f
commit 7d07c2cdb0
4 changed files with 149 additions and 35 deletions

Binary file not shown.

View File

@@ -7,7 +7,7 @@ gc.collect()
# (SSID: Passwort) # (SSID: Passwort)
known_networks = { known_networks = {
"Vodafone-9454": "AchXHta93YCTgC3M", "Vodafone-9454": "AchXHta93YCTgC3M",
"no": "", "WGLAn": "2Bierund1Pizza!",
"placeholder1": "placeholder1", "placeholder1": "placeholder1",
"placeholder2": "placeholder2" "placeholder2": "placeholder2"
} }

View File

@@ -1,44 +1,149 @@
import urequests #this is not an issue, because micropython has its own urequests module already from umqtt.simple import MQTTClient
from machine import Pin
import json import json
import socket import time
# one time dns resolve, damit der arme ESP und nicht wegkocht. # MQTT-Konfiguration
def resolve_ip(hostname): MQTT_BROKER = "broker.hivemq.com" # 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)
def mqtt_callback(topic, msg):
print('Empfangen:', topic, msg)
try: try:
print(f"🌐 Resolvieren von '{hostname}' ...") command = json.loads(msg.decode())
addr_info = socket.getaddrinfo(hostname, 80) if topic == MQTT_TOPIC_COMMAND:
ip = addr_info[0][4][0] if 'einschalten' in command:
print(f"🔎 IP-Adresse gefunden: {ip}") einschalten.value(command['einschalten'])
return ip if 'starten' in command:
starten.value(command['starten'])
except Exception as e: except Exception as e:
print("Fehler beim Resolvieren:", e) print('Fehler bei Kommando-Verarbeitung:', e)
return None
# beispiel-fetch von der hauptadresse (muss evtl in ne roop und nen thread) def connect_mqtt():
def fetch_json(ip, host, path): client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, port=MQTT_PORT)
url = f"http://{ip}{path}" 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: try:
print(f"Sende Anfrage an {url} mit Host '{host}' ...") if client:
headers = {"Host": host} client.check_msg() # Prüfe auf neue MQTT-Nachrichten
response = urequests.get(url, headers=headers)
if response.status_code == 200: # Status senden
print("✅ Antwort erhalten:") status = {
print(response.text) # ---IOs---
data = json.loads(response.text) "an": an.value(),
print("📦 JSON geladen:", data) "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": kaffe_machen.value(),
"vorbereitung": vorbereitung.value(),
"kaffee_fertig": kaffee_fertig.value(),
}
client.publish(MQTT_TOPIC_STATUS, json.dumps(status))
else: else:
print(f"❌ Fehler: Status-Code {response.status_code}") # Versuche Neuverbindung
try:
client = connect_mqtt()
except:
pass
response.close() time.sleep(1)
except Exception as e: except Exception as e:
print("⚠️ Fehler bei der Anfrage (äußerer Block):", e) print('Fehler in Hauptschleife:', e)
time.sleep(5)
client = None
#Einschalten der Kaffeemaschine
if (kaffe_machen.value() == 1)
{
einschalten = 1
delay(1000);
einschalten=0
}
#Starten der Kaffeemaschine
if (kaffe_machen.value() == 1 && bereit == 1&&fehler==0)
{
starten = 1
delay(1000)
starten=0
gestartet =1
}
else
{
starten = 0
gestartet = 0
}
#Vorbereitung der Kaffeemaschine
if (bereit == 0&&an==1&&fehler==0)
{
vorbereitung.value()=1
}
else
{
vorbereitung.value()=0
}
#Kaffeemaschine fertig
if (bereit == 1&&an==1&&fehler==0&& gestartet==1)
{
kaffee_fertig.value()=1
gestartet = 0
}
else
{
kaffee_fertig.value()=0
}
#Fehlerbehandlung
if(fehler==1)
{
fehler.value()=1
}
else
{
fehler.value()=0
}
if (bohnen_voll == 1)
{
bohnen_voll.value()=1
}
if (Wasser_voll == 1)
{
Wasser_voll.value()=1
}
# --- Hauptteil ---
host = "lires.de"
path = "/unsecure/esp/"
ip = resolve_ip(host)
if ip:
fetch_json(ip, host, path)

View File

@@ -49,6 +49,15 @@ def main():
main() main()
while True:
{
}