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 una fuente de 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 solo valor en un campo de canal.
Configuración
1) Cree un nuevo canal como se muestra en Recopilar datos en un nuevo canal.
2) Cree un dispositivo MQTT haciendo clic en Dispositivos > MQTT en la parte superior de la página de ThingSpeak, luego Añadir dispositivo. Al configurar el dispositivo y agregar el nuevo canal a su lista autorizada, haga clic en Descargar Credenciales > Texto sin formato. Para más detalles, consulte Crear un dispositivo ThingSpeak MQTT. Utilice las credenciales guardadas en la sección Código a continuación.
3) Descarga el Paho MQTT biblioteca cliente para Python. Puede usar la línea de comando para instalar las bibliotecas. Si está usando Python 2, use 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) Incluir 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 establezca el puerto en 80
.
t_transport = "websockets" t_port = 80
4) Cree una cadena de tema en el formulario que se muestra en Publicar en un feed de canal que actualiza 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 el rendimiento de la CPU y la RAM del sistema cada 20 segundos y publique los valores calculados. Publique 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 usando el cliente MQTT de escritorio
- Publique y suscríbase a un canal de ThingSpeak mediante MQTT seguro
- Publicar en un canal de ThingSpeak usando un cliente de dispositivo de partículas a través de MQTT