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 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

|

Ejemplos relacionados

Más acerca de