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
Publish to a Channel Feed | Publish to a Channel Field Feed
Exemples associés
- Publier et s'abonner à un canal à l'aide du client Desktop MQTT
- Publier et s'abonner à une canal ThingSpeak à l'aide de MQTT sécurisé
- Publier sur un canal ThingSpeak à l'aide d'un client de périphérique de particules via MQTT