Main Content

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Veröffentlichen Sie mit WebSockets in Python auf einem Raspberry Pi

Dieses Beispiel zeigt, wie Sie WebSockets auf Port 80 verwenden, um mithilfe eines Raspberry Pi-Boards, auf dem Python ausgeführt wird, in einem ThingSpeak Kanal zu veröffentlichen. Wenn Sie mehr als einen Sensorwert an ThingSpeak senden möchten, können Sie mehrere Werte in einem Kanal-Feed veröffentlichen. In diesem Beispiel werden alle 20 Sekunden die CPU- und RAM-Nutzungsdaten des Raspberry Pi-Boards erfasst und die Werte in einem Kanal-Feed veröffentlicht. Wenn Sie nur einen Wert aktualisieren möchten, können Sie alternativ einen einzelnen Wert in einem Kanalfeld veröffentlichen.

Aufstellen

1) Erstellen Sie einen neuen Kanal wie in Collect Data in a New Channel gezeigt.

2) Erstellen Sie ein MQTT-Gerät, indem Sie oben auf der ThingSpeak Seite 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 Abschnitt „Code“ 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) Binden 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 MQTT-Geräteanmeldeinformationen.

# 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 in Publish to a Channel Feed 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 System-RAM- und CPU-Leistung 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 auf regelmäßige Updates von Ihrem Gerät.

Siehe auch

|

Verwandte Beispiele

Mehr über