Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version 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 Collect Data in a New Channel.

2) Créez un MQTT device en cliquant sur Appareils > MQTT en haut de la page ThingSpeak , puis Ajouter un appareil . Lors de la configuration de l' appareil et de l'ajout de la nouvelle canal à sa liste autorisée, cliquez sur Télécharger les informations d'identification > Texte brut . Pour plus de détails, voir Créer un appareil ThingSpeak MQTT. 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 comme websockets et définissez le port sur 80.

t_transport = "websockets"
t_port = 80

4) Créez une chaîne de caractère de sujet sous la forme indiquée dans Publish to a Channel Feed qui met à jour simultanément le champ 1 et le champ 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

|

Exemples associés

En savoir plus