Veröffentlichen mit WebSockets in Python auf einem Raspberry Pi
Dieses Beispiel zeigt, wie Sie WebSockets auf Port 80 verwenden, um mithilfe einer Raspberry Pi-Platine, auf der Python ausgeführt wird, auf einem ThingSpeak-Kanal zu veröffentlichen. Wenn Sie mehr als einen Sensorwert haben, den Sie an ThingSpeak senden möchten, können Sie mehrere Werte in einem Kanal-Feed veröffentlichen. In diesem Beispiel werden die CPU- und RAM-Nutzungsdaten der Raspberry Pi-Platine alle 20 Sekunden erfasst und die Werte in einem Kanal-Feed veröffentlicht. Wenn Sie nur einen Wert aktualisieren müssen, können Sie alternativ einen einzelnen Wert in einem Kanalfeld veröffentlichen.
Aufstellen
1) Erstellen Sie einen neuen Kanal, wie unter Daten in einem neuen Kanal sammeln gezeigt.
2) Erstellen Sie ein MQTT-Gerät, indem Sie oben auf der Seite ThingSpeak auf Geräte > MQTT und dann auf Gerät hinzufügen klicken. Klicken Sie beim Einrichten des Geräts und Hinzufügen des neuen Kanals zur autorisierten Liste auf Anmeldeinformationen herunterladen > Nur Text. Einzelheiten finden Sie unter Erstellen Sie ein ThingSpeak MQTT-Gerät. Verwenden Sie die gespeicherten Anmeldeinformationen im Codeabschnitt unten.
3) Laden Sie die Paho MQTT-Clientbibliothek für Python herunter. Sie können die Bibliotheken über die Befehlszeile installieren. Wenn Sie Python 2 verwenden, verwenden Sie diesen Code:
sudo pip install paho-mqtt sudo pip install psutil
Wenn Sie Python 3 verwenden, verwenden Sie diesen Code:
sudo pip3 install paho-mqtt sudo pip3 install psutil
Code
1) Fügen Sie die Bibliotheken paho.mqtt.publish as publish, psutil und string in Ihren Python-Code ein.
import paho.mqtt.publish as publish import psutil import string
2) Definieren Sie die Variablen für die Kommunikation mit ThingSpeak. Bearbeiten Sie die Kanal-ID und die Anmeldeinformationen des MQTT-Geräts.
# The ThingSpeak Channel ID. # Replace <YOUR-CHANNEL-ID> with your channel ID. channel_ID = "<YOUR-CHANNEL-ID>" # The hostname of the ThingSpeak MQTT broker. mqtt_host = "mqtt3.thingspeak.com" # Your MQTT credentials for the device mqtt_client_ID = "<YOUR-CLIENT-ID>" mqtt_username = "<YOUR-USERNAME>" mqtt_password = "<YOUR-MQTT-PASSWORD>"
3) Definieren Sie den Verbindungstyp als websockets und stellen Sie den Port auf 80 ein.
t_transport = "websockets" t_port = 80
4) Erstellen Sie eine Themenzeichenfolge in der unter In einem Kanal-Feed veröffentlichen gezeigten Form, die Feld 1 und Feld 2 des angegebenen Kanals gleichzeitig aktualisiert.
# Create the topic string. topic = "channels/" + channel_ID + "/publish"
5) Führen Sie eine Schleife aus, die alle 20 Sekunden die RAM- und CPU-Leistung des Systems berechnet und die berechneten Werte veröffentlicht. Veröffentlichen Sie mithilfe von WebSockets gleichzeitig in den Feldern 1 und 2 des angegebenen Kanals.
while (True):
# get the system performance data over 20 seconds.
cpu_percent = psutil.cpu_percent(interval=20)
ram_percent = psutil.virtual_memory().percent
# build the payload string.
payload = "field1=" + str(cpu_percent) + "&field2=" + str(ram_percent)
# attempt to publish this data to the topic.
try:
print ("Writing Payload = ", payload," to host: ", mqtt_host, " clientID= ", mqtt_client_ID, " User ", mqtt_username, " PWD ", mqtt_password)
publish.single(topic, payload, hostname=mqtt_host, transport=t_transport, port=t_port, client_id=mqtt_client_ID, auth={'username':mqtt_username,'password':mqtt_password})
except (keyboardInterrupt)
break
except Exception as e:
print (e)
Führen Sie das Programm aus und beobachten Sie den Kanal für regelmäßige Updates von Ihrem Gerät.
Siehe auch
Publish to a Channel Feed | Publish to a Channel Field Feed