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
Publish to a Channel Feed | Publish to a Channel Field Feed