mqqt test v4 (with web)

This commit is contained in:
derlole
2025-04-25 10:39:07 +00:00
parent fbe64760e0
commit 476524b6c1
3 changed files with 88 additions and 5 deletions

View File

@@ -0,0 +1,54 @@
import urequests
import json
import socket
import network
import time
import ubinascii
from umqtt.simple import MQTTClient
import machine
host = "lires.de"
# one time dns resolve, damit der arme ESP und nicht wegkocht.
def resolve_ip(hostname):
try:
print(f"🌐 Resolvieren von '{hostname}' ...")
addr_info = socket.getaddrinfo(hostname, 80)
ip = addr_info[0][4][0]
print(f"🔎 IP-Adresse gefunden: {ip}")
return ip
except Exception as e:
print("❌ Fehler beim Resolvieren:", e)
return None
ip = resolve_ip(host)
if ip is None:
print("❌ Fehler: IP-Adresse konnte nicht aufgelöst werden.")
raise SystemExit(1)
MQTT_BROKER = ip
MQTT_TOPIC = b'iot/testdata'
#callback
def mqtt_callback(topic, msg):
print("Neue Nachricht:", msg.decode())
#send data to the server on the given url
def main():
client_id = ubinascii.hexlify(machine.unique_id())
client = MQTTClient(client_id, MQTT_BROKER)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(MQTT_TOPIC)
print("Warte auf Nachrichten...")
try:
while True:
client.wait_msg() # blockiert, bis Nachricht ankommt
finally:
client.disconnect()
main()

View File

@@ -1,10 +1,30 @@
from flask import Blueprint, render_template, request, jsonify from flask import Blueprint, render_template, request, jsonify
import routes.shared as shared import routes.shared as shared
from flask import Flask, jsonify, request
import paho.mqtt.client as mqtt
esp = Blueprint('eps', __name__, url_prefix='/unsecure/esp') esp = Blueprint('eps', __name__, url_prefix='/unsecure/esp')
MQTT_BROKER = "localhost" # oder IP/Domain
MQTT_PORT = 1883
MQTT_TOPIC = "iot/machine"
@esp.route('/') @esp.route('/')
def fetch_command(): def fetch_command():
pCd = shared.pending_command pCd = shared.pending_command
shared.reset_command() shared.reset_command()
return jsonify(pCd) return jsonify(pCd)
@esp.route('/toggle-machine', methods=['POST'])
def toggle_machine():
pCd = shared.pending_command
pCd['command'] = 'machineToggle'
pCd['command-URL'] = 'NO_URL'
pCd['command-expected'] = 'machineStatusResponse'
pCd['command-expected-URL'] = 'http://lires.de/unsecure/esp/machine-status'
client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.publish(MQTT_TOPIC, pCd)
client.disconnect()
return jsonify({"status": pCd})

View File

@@ -23,16 +23,16 @@
<div class="info">ESP-Conn Infos</div> <div class="info">ESP-Conn Infos</div>
<div class="action-button"> MAKE ME A COFFEE...</div> <div class="action-button"> MAKE ME A COFFEE...</div>
<div class="button-grid"> <div class="button-grid">
<div class="grid-button"> <div class="grid-button" onclick="toggleMachine()">
<div class="top-left-text">Maschiene</div> <div class="top-left-text">Maschine</div>
<div class="center-number">AUS</div> <div class="center-number" id="machine-status">AUS</div>
</div> </div>
<div class="grid-button"> <div class="grid-button">
<div class="top-left-text">Maschiene</div> <div class="top-left-text">Maschiene</div>
<div class="center-number">Nicht Bereit</div> <div class="center-number">Nicht Bereit</div>
</div> </div>
<div class="grid-button"> <div class="grid-button">
<div class="top-left-text">irgendwas kommt hier nocht</div> <div class="top-left-text">irgendwas kommt hier noch</div>
<div class="center-number">XXX</div> <div class="center-number">XXX</div>
</div> </div>
<div class="grid-button"> <div class="grid-button">
@@ -75,6 +75,15 @@
</section> </section>
</main> </main>
<script>
function toggleMachine() {
fetch('/unsecure/esp/toggle-machine', { method: 'POST' })
.then(res => res.json())
.then(data => {
document.getElementById("machine-status").innerText = data.status;
});
}
</script>
</body> </body>
</html> </html>