Möchte gerne Werte aus MQTT mittels Bottle auf Website anzeigen
Verfasst: Dienstag 26. Mai 2020, 17:56
Hallo zusammen,
ich möchte mich kurz vorstellen. Ich heiße Stefan und beschäftige mich schon lange mit Wetterbeobachtung. Jetzt habe ich eine Wetterstation erstellt die auch läuft(433 Mhz mit mehreren LCD Displays usw.). Jetzt möchte ich die Werte gerne ins Internet bringen und zumindest die Temperatur auf einer Webseite numerisch darstellen um diese z.B. von der Arbeit, Urlaub usw ablesen zu können.
Hierzu lade ich die Temperaturdaten von einem ESP8266 (LUA Bord) in eine MQTT Datenbank, als Broker arbeitet der Raspberry PI 3.
Dies geht auch einwandfrei. Als Skript für den Client als Empfänger habe ich folgendes genommen was auch funktioniert und auf der Konsole die Werte ausgibt.
Auf diesem Kanal kann ich die Messwerte ablesen.
Jetzt habe ich mich zu dem Thema eingelesen und erfahren dass man für die Webseitenerstellung mittels Python Code ein Framework benötigt. Da habe ich mich für Bottle entschieden.
Der Beispielcode aus dem Tutorial läuft auch
Im Webbrowser wird im Localhost "Hello World" angezeigt.
Jetzt möchte ich gerne statt Hello world gerne den Temperaturwert angezeigt haben was wohl nicht ganz so einfach ist.
Meine Idee:
Dieses "Skript" lässt sich zwar kopilieren, die Anzeige im Browser gibt aber einen Fehler 500 aus. Darunter steht, dass in der Funktion hello die Variable msg nicht bekannt ist. Die Vermutung ist, dass msg nicht als globale Variable deklariert ist.
Wenn ich jedoch in der Funktion on_message eine "global msg" eintrage kommt die gleiche Meldung.
Ich muss sagen dass ich im Thema Python noch nicht sehr weit bin, dies aber intensiver lernen möchte. Aktuell bin ich das Lehrbuch von Michael Kofler am durcharbeiten. Zum Thema bottle habe ich auch schon ein online Tutorial durchgearbeitet aber noch nicht alles verstanden.
Evtl. kann mir ja jemand behilflich sein
Gruß Stefan
ich möchte mich kurz vorstellen. Ich heiße Stefan und beschäftige mich schon lange mit Wetterbeobachtung. Jetzt habe ich eine Wetterstation erstellt die auch läuft(433 Mhz mit mehreren LCD Displays usw.). Jetzt möchte ich die Werte gerne ins Internet bringen und zumindest die Temperatur auf einer Webseite numerisch darstellen um diese z.B. von der Arbeit, Urlaub usw ablesen zu können.
Hierzu lade ich die Temperaturdaten von einem ESP8266 (LUA Bord) in eine MQTT Datenbank, als Broker arbeitet der Raspberry PI 3.
Dies geht auch einwandfrei. Als Skript für den Client als Empfänger habe ich folgendes genommen was auch funktioniert und auf der Konsole die Werte ausgibt.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
def on_message(client, userdata, message):
msg = str(message.payload.decode("utf-8"))
print("message received: ", msg)
print("message topic: ", message.topic)
def on_connect(client, userdata, flags, rc):
client.subscribe('/home/data')
BROKER_ADDRESS = "localhost"
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER_ADDRESS)
print("Connected to MQTT Broker: " + BROKER_ADDRESS)
client.loop_forever()
Jetzt habe ich mich zu dem Thema eingelesen und erfahren dass man für die Webseitenerstellung mittels Python Code ein Framework benötigt. Da habe ich mich für Bottle entschieden.
Der Beispielcode aus dem Tutorial läuft auch
Code: Alles auswählen
from bottle import route, run
@route('/hello')
def hello():
return "Hello World!"
run(host='localhost', port=8080, debug=True)
Jetzt möchte ich gerne statt Hello world gerne den Temperaturwert angezeigt haben was wohl nicht ganz so einfach ist.
Meine Idee:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bottle import route, run
import paho.mqtt.client as mqtt
def on_message(client, userdata, message):
msg = str(message.payload.decode("utf-8"))
print("message received: ", msg)
print("message topic: ", message.topic)
def on_connect(client, userdata, flags, rc):
client.subscribe('/home/data')
BROKER_ADDRESS = "localhost"
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER_ADDRESS)
print("Connected to MQTT Broker: " + BROKER_ADDRESS)
@route('/hello')
def hello():
return msg
run(host='localhost', port=8080, debug=True)
client.loop_forever()
Wenn ich jedoch in der Funktion on_message eine "global msg" eintrage kommt die gleiche Meldung.
Ich muss sagen dass ich im Thema Python noch nicht sehr weit bin, dies aber intensiver lernen möchte. Aktuell bin ich das Lehrbuch von Michael Kofler am durcharbeiten. Zum Thema bottle habe ich auch schon ein online Tutorial durchgearbeitet aber noch nicht alles verstanden.
Evtl. kann mir ja jemand behilflich sein
Gruß Stefan