Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la version originale en anglais.

Publier à l'aide de WebSockets en Python sur un Raspberry Pi

Cet exemple montre comment utiliser WebSockets sur le port 80 pour publier sur un canal ThingSpeak à l'aide d'une carte Raspberry Pi qui exécute Python. Si vous souhaitez envoyer plusieurs valeurs de capteur à ThingSpeak, vous pouvez publier plusieurs valeurs dans le flux du canal. Dans cet exemple, les données d'utilisation du CPU et de la RAM de la carte Raspberry Pi sont collectées toutes les 20 secondes, et les valeurs sont publiées sur un flux du canal. Sinon, si vous n'avez qu'une seule valeur à mettre à jour, vous pouvez publier une seule valeur dans un champ de canal.

Installation

1) Créez un nouveau canal comme indiqué dans Collecter des données dans un nouveau canal.

2) Créez un périphérique MQTT en cliquant sur Devices > MQTT en haut de la page ThingSpeak, puis sur Add Device. Lors de la configuration de l'appareil et de l'ajout du nouveau canal à sa liste autorisée, cliquez sur Download Credentials > Plain Text. Pour plus de détails, voir Créer un périphérique MQTT ThingSpeak. Utilisez les informations d'identification enregistrées dans la section Code ci-dessous.

3) Téléchargez la bibliothèque client Paho MQTT pour Python. Vous pouvez utiliser la ligne de commande pour installer les bibliothèques. Si vous utilisez Python 2, utilisez ce code :

sudo pip install paho-mqtt
sudo pip install psutil

Si vous utilisez Python 3, utilisez ce code :

sudo pip3 install paho-mqtt
sudo pip3 install psutil

Code

1) Incluez les bibliothèques paho.mqtt.publish as publish, psutil et string dans votre code Python.

import paho.mqtt.publish as publish
import psutil
import string

2) Définir les variables pour communiquer avec ThingSpeak. Modifiez l'ID de canal et les informations d'identification du MQTT device.

# 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) Définissez le type de connexion sur websockets et définissez le port sur 80.

t_transport = "websockets"
t_port = 80

4) Créez une chaîne de sujet sous la forme indiquée dans Publier sur un flux de canal qui met à jour simultanément les champs 1 et 2 du canal spécifié.

# Create the topic string.
topic = "channels/" + channel_ID + "/publish"

5) Exécutez une boucle qui calcule les performances de la RAM et du CPU du système toutes les 20 secondes et publie les valeurs calculées. Publiez simultanément dans les champs 1 et 2 du canal spécifié à l'aide de WebSockets.

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) 

Exécutez le programme et regardez le canal pour des mises à jour régulières depuis votre appareil.

Voir aussi

|

Rubriques