Publicar usando WebSockets en Python en una Raspberry Pi
Este ejemplo muestra cómo usar WebSockets en el puerto 80 para publicar en un canal ThingSpeak usando una placa Raspberry Pi que ejecuta Python. Si tiene más de un valor de sensor que desea enviar a ThingSpeak, puede publicar varios valores en el feed de un canal. En este ejemplo, los datos de uso de CPU y RAM de la placa Raspberry Pi se recopilan cada 20 segundos y los valores se publican en un canal. Alternativamente, si solo tiene un valor para actualizar, puede publicar un valor único en un campo de canal.
Configuración
1) Cree un nuevo canal como se muestra en Collect Data in a New Channel.
2) Cree un dispositivo MQTT haciendo clic en Dispositivos > MQTT en la parte superior de la página de ThingSpeak, luego en Agregar dispositivo. Al configurar el dispositivo y agregar el nuevo canal a su lista autorizada, haga clic en Descargar Credenciales > Texto sin formato. Para obtener más información, consulte Crear un dispositivo ThingSpeak MQTT. Utilice las credenciales guardadas en la sección Código a continuación.
3) Descargue la biblioteca cliente Paho MQTT para Python. Puede utilizar la línea de comando para instalar las bibliotecas. Si está utilizando Python 2, utilice este código:
sudo pip install paho-mqtt sudo pip install psutil
Si usa Python 3, use este código:
sudo pip3 install paho-mqtt sudo pip3 install psutil
Código
1) Incluya las bibliotecas paho.mqtt.publish as publish
, psutil
y string
en su código Python.
import paho.mqtt.publish as publish import psutil import string
2) Definir las variables para comunicarse con ThingSpeak. Edite el ID del canal y las credenciales del dispositivo MQTT.
# 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) Defina el tipo de conexión como websockets
y configure el puerto en 80
.
t_transport = "websockets" t_port = 80
4) Cree una cadena de tema en el formulario que se muestra en Publish to a Channel Feed que actualice el campo 1 y el campo 2 del canal especificado simultáneamente.
# Create the topic string. topic = "channels/" + channel_ID + "/publish"
5) Ejecute un bucle que calcule la RAM del sistema y el rendimiento de la CPU cada 20 segundos y publique los valores calculados. Publicar en los campos 1 y 2 del canal especificado simultáneamente usando 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)
Ejecute el programa y mire el canal para obtener actualizaciones periódicas desde su dispositivo.
Consulte también
Publish to a Channel Feed | Publish to a Channel Field Feed
Ejemplos relacionados
- Publicar y suscribirse a un canal utilizando el cliente MQTT de escritorio
- Publique y suscríbase a un canal de ThingSpeak utilizando Secure MQTT
- Publicar en un canal ThingSpeak utilizando un cliente de dispositivo de partículas a través de MQTT