Ubidots統合 (via Helium)
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
この記事では、SenseCAP T1000 TrackerをHelium LNSを通じてUbidotsに接続する手順を説明します。
必要条件
- Ubidotsのアクティブなアカウント
- SenseCAP T1000 Tracker
- HeliumコンソールのアクティブなアカウントといくつかのDC
- Google Play StoreまたはApp StoreをサポートするBluetooth対応の携帯電話
SenseCAP Mateアプリをインストールしてトラッカーを設定する
以下のQRコードをスキャンしてください。Seeed StudioのSenseCAP Mateアプリ公式ダウンロードページに移動します。
インストール後、携帯電話のBluetoothを有効にしてアプリを起動します。アカウントをまだお持ちでない場合は、アプリを使用するために登録が必要です。
その後、トラッカーのボタンを少なくとも3秒間、またはLEDが点滅するまで押し続けます。次に、デバイスのリストからTracker T1000を選択します。
デバイスをタップします:
設定タブに移動し、次にLoRaタブを選択します。そこで、プラットフォームとしてHeliumを選択し、要件に応じて周波数プランを選択します。また、後の手順で必要になるため、Device EUI、APP EUI、およびAPP Keyを必ずコピーしてください。完了したら、送信ボタンをタップして設定を保存します。
トラッカーをHelium LNSに登録する
Heliumコンソールにログインし、「デバイス」セクションに移動して「デバイスを追加」ボタンをクリックします。
デバイス名、LoRaWANの認証情報など、必要なフィールドを入力します。その後、デバイスを保存ボタンをクリックします。
Heliumでデコーダー関数を作成する
次のステップは、生のバイトデータを人間が読める形式にデコードする関数を設定することです。左側のパネルの関数タブに移動し、新しい関数を追加ボタンをクリックして名前を付けます。
Seeed Studioは、このデバイス専用のデコーダーを以下のリポジトリで提供しています。そのデコーダーをテキストフィールドに貼り付け、変更を保存します。
Ubidotsへの統合を作成する
統合セクションに移動し、統合を追加をクリックしてUbidots統合を検索します。
+統合を追加をクリックします。
Ubidotsトークンを該当フィールドに入力し、続行ボタンをクリックして確認ポップアップメッセージを待ちます。その後、統合に名前を付けて統合を追加ボタンをクリックします。
このステップを実行すると、Ubidotsアカウントに新しいHeliumプラグインが作成されます。
Ubidotsへの統合を接続するフローを作成する
フローセクションに移動し、左上のドロップダウンメニューからデバイス、デコーダー関数、および統合を空白エリアにドラッグ&ドロップします。その後、以下のGIFが示すように点をつなぎます。
この例では、デバイスとデコーダー関数の両方が「sensecap-lorawan-tracker」と呼ばれ、統合は「send data to ubidots」と呼ばれています。
Seeed Studioのデコーダーが返すJSONオブジェクトはUbidotsのスキーマと互換性がないため、必要なデータを抽出した後に変換が必要です。
Heliumプラグインのデコーダーセクションに移動し、そこにあるすべてのコードを削除して、以下のコードに置き換えてください:
# ホットスポット情報を有効にするにはTrueに設定
HOTSPOT_INFO_ENABLE = False
def format_payload(args):
messages = args.get("decoded", {}).get("payload", {}).get("data", {}).get("messages", [])
ubidots_payload = {}
error = assert_error(messages[0][0])
if error is not None:
return error
if HOTSPOT_INFO_ENABLE:
hotspot_info = args.get('hotspots', None)
ubidots_payload['SNR'] = hotspot_info[0].get('snr') if hotspot_info is not None else None
ubidots_payload['RSSI'] = hotspot_info[0].get('rssi') if hotspot_info is not None else None
ubidots_payload["port"] = args.get("port", None)
ubidots_payload['Frame Counter'] = args.get('fcnt', None)
for msg in messages:
for sensor in msg:
message_type = sensor.get("type", None)
value = sensor.get("measurementValue")
if message_type == "Latitude" or message_type == "Longitude":
position = ubidots_payload.setdefault("position", {})
position.update({message_type.lower(): value})
continue
elif message_type == "Timestamp":
ubidots_payload["timestamp"] = value
continue
ubidots_payload[message_type] = value
print(ubidots_payload)
return ubidots_payload
def assert_error(data : dict):
if "error" in data:
return {"ERROR" : { "value" : data["errorCode"], "context" : { "status" : data["error"]}}}
return None
すべてが正しく接続されていれば、Ubidots 上で新しく作成されたデバイスに以下のような画面が表示されるはずです。