Pubblica utilizzando WebSocket in Python su un Raspberry Pi
Questo esempio mostra come utilizzare WebSocket sulla porta 80 per pubblicare su un canale ThingSpeak utilizzando una scheda Raspberry Pi che esegue Python. Se desideri inviare a ThingSpeak più di un valore del sensore, puoi pubblicare più valori su un feed del canale. In questo esempio, i dati sull'utilizzo della CPU e della RAM della scheda Raspberry Pi vengono raccolti ogni 20 secondi e i valori vengono pubblicati su un feed di canale. In alternativa, se devi aggiornare un solo valore, puoi pubblicare un singolo valore in un campo canale.
Impostare
1) Crea un nuovo canale come mostrato in Raccogli dati in un nuovo canale.
2) Creare un dispositivo MQTT facendo clic su Dispositivi > MQTT nella parte superiore della pagina ThingSpeak, quindi su Aggiungi dispositivo. Durante la configurazione del dispositivo e l'aggiunta del nuovo canale all'elenco autorizzato, fare clic su Scarica credenziali > Testo normale. Per i dettagli, vedere Crea un dispositivo MQTT ThingSpeak. Utilizzare le credenziali salvate nella sezione Codice qui sotto.
3) Scarica la libreria client Paho MQTT per Python. Per installare le librerie è possibile utilizzare la riga di comando. Se stai utilizzando Python 2, usa questo codice:
sudo pip install paho-mqtt sudo pip install psutil
Se utilizzi Python 3, usa questo codice:
sudo pip3 install paho-mqtt sudo pip3 install psutil
Codice
1) Includi le librerie paho.mqtt.publish as publish, psutil e string nel tuo codice Python.
import paho.mqtt.publish as publish import psutil import string
2) Definire le variabili per comunicare con ThingSpeak. Modifica l'ID del canale e le credenziali 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) Definire il tipo di connessione come websockets e impostare la porta su 80.
t_transport = "websockets" t_port = 80
4) Crea una stringa di argomento nel formato mostrato in Pubblica su un feed di canale che aggiorna simultaneamente il campo 1 e il campo 2 del canale specificato.
# Create the topic string. topic = "channels/" + channel_ID + "/publish"
5) Eseguire un ciclo che calcola le prestazioni della RAM e della CPU del sistema ogni 20 secondi e pubblica i valori calcolati. Pubblicare simultaneamente sui campi 1 e 2 del canale specificato utilizzando WebSocket.
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)
Esegui il programma e guarda il canale per ricevere aggiornamenti regolari dal tuo dispositivo.
Vedi anche
Publish to a Channel Feed | Publish to a Channel Field Feed