Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la versión original en inglés.

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

|

Ejemplos relacionados

Más acerca de