このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
Raspberry Pi 上の Python で WebSocket を使用したパブリッシュ
この例では、Python® を実行する Raspberry Pi™ ボードを使用して、ThingSpeak™ チャネルに、ポート 80 で WebSocket を使用してパブリッシュする方法を説明します。ThingSpeak に送信するセンサーの値が複数ある場合には、複数の値をチャネル フィードにパブリッシュするよう選択できます。この例では、Raspberry Pi ボードの CPU および RAM の使用量が 20 秒ごとに収集され、値がチャネル フィードにパブリッシュされます。また、更新する値が 1 つのみの場合は、単一の値をチャネル フィールドにパブリッシュできます。
新しいチャネルでデータの収集での説明に従って新しいチャネルを作成します。
Python 用の Paho MQTT クライアント ライブラリをダウンロードします。
paho.mqtt.publish as publish
、psutil
、string
、random
、print_function
の各ライブラリを Python コードにインクルードします。from __future__ import print_function import paho.mqtt.publish as publish import psutil import string import random
ThingSpeak と通信するための変数を定義します。チャネル ID、Write API キー、および MQTT API キーを編集します。
string.alphanum='1234567890avcdefghijklmnopqrstuvwxyzxABCDEFGHIJKLMNOPQRSTUVWXYZ' # The ThingSpeak Channel ID. # Replace <YOUR-CHANNEL-ID> with your channel ID. channelID = "<YOUR-CHANNEL-ID>" # The Write API Key for the channel. # Replace <YOUR-CHANNEL-WRITEAPIKEY> with your write API key. writeAPIKey = "<YOUR-CHANNEL-WRITEAPIKEY>" # The Hostname of the ThingSpeak MQTT broker. mqttHost = "mqtt.thingspeak.com" # You can use any Username. mqttUsername = "TSMQTTRpiDemo" # Your MQTT API Key from Account > My Profile. mqttAPIKey ="XXXXXXXXXXXXXXXX"
接続タイプを
websockets
として定義し、ポートを80
に設定します。tTransport = "websockets" tPort = 80
Publish to a Channel Feedに示した形式で、指定したチャネルの Field 1 および Field 2 を同時に更新するトピックの文字列を作成します。
# Create the topic string. topic = "channels/" + channelID + "/publish/" + writeAPIKey
システムの RAM と CPU のパフォーマンスを 20 秒ごとに計算し、これらの値をパブリッシュするループを実行します。WebSocket を使用して、指定したチャネルの Field 1 と 2 へ同時にパブリッシュします。
while(1): clientID='' # Create a random clientID. for x in range(1,16): clientID+=random.choice(string.alphanum) # get the system performance data over 20 seconds. cpuPercent = psutil.cpu_percent(interval=20) ramPercent = psutil.virtual_memory().percent # build the payload string. payload = "field1=" + str(cpuPercent) + "&field2=" + str(ramPercent) # attempt to publish this data to the topic. try: publish.single(topic, payload, hostname=mqttHost, transport=tTransport, port=tPort,auth={'username':mqttUsername,'password':mqttAPIKey}) print (" Published CPU =",cpuPercent," RAM =", ramPercent," to host: " , mqttHost , " clientID= " , clientID) except (KeyboardInterrupt): break except: print ("There was an error while publishing the data.")
参考
Publish to a Channel Field Feed