Autodesk TandemへNode-REDからセンサーデータを送る方法

BIMのデータに電力やIoTセンサーの情報をリアルタイムに表示したいと考え、Autodesk社に問い合わせしたところ、Tandemというサービスを教えてもらい、前回の記事でfreeアカウントを作成し試してみました。

 Autodesk Tandemでデジタルツインを試してみる Vol.1

その後もTandemについて調べていたところ、 Autodesk TandemとSwitchBotで自宅のデジタルツインを作る という記事を発見しました。

あまりにも自分が求めているドンピシャの内容だったので、Xでこの記事の作者、Kei Watanabe さんにお声がけをしたところ、なんと、事務所に遊びにきていただき、さらに、弊社事務所のRevitデータもつくっていただいたので、Kei Watanabeさんの記事のとおりにやりながら、Node-REDからTandemへセンサーデータを送る方法を検証してみました。

Kei Watanabeさんの記事の通りですが、私がやったことをご紹介します。

やり方については下記の動画を参照ください。

Facilityを作成

まずはTandemのFacilityタブからCreate New Facilityをクリックします。

NameにHatsudaiと入れて右下のCreate and Continueをクリック。

Import Modelにて、Labelにhatsudaioffice、事務所のRevitファイルをFileにアップロード、Import elements from phase or viewではPhaseを選び、 New constructionにしてImportをクリック。

Importを押すと、画面は真っ白になりますが、そのままつづけます。

Parametersを作成

Manageタブから左のParametersを選択

Add Parameterをクリック。

NameはHumidityとして後は上のとおりに入力してOKをおします。なお、Unitはhumidと検索すると選択できます。

Classification Systemsの作成

ManageタブからClassesを選択。Masterformatをクリックすると検索できるので、Simple Categories(built-in)を選び、Downloadボタンを押します。

Downloadしたエクセルファイルを開き、上の 19.IoTから3行を入力してSaveします。

Add Classification Systemを押すとWindowがあらわれるので先ほどのエクセルファイルをアップロード

こんな感じでAdd。

Excelで追加された内容が取り込まれました。

Facility Templateを作成

ManageタブからFacility Templatesをクリックして、Add Facility Templateを押します。

NameにTEST-Facility-Templateにして、Classificationは先ほど作成したTEST-Classification-SystemにしてAddを押します。

Manageタブ、FacilityTemplateから先ほど追加したHumidity Sensor #1を選択して、Assign Paramtersをクリック。

Humidityが表示されるのでチェックマークをいれてDone.

Updateを入れて更新します。

FacilityにFacility Templateを割り当てる

Facilitesタブから先ほど作成したFacility(Hatsudai)のEditをクリック

Templateに先ほど作成したTEST-Facility-Templateを選択し右下のUpdateを押します。

Connectionsの追加

メインメニューからFacility(今回はHatsudai)を開いた状態で、左にあるConnectionsをクリックします。

Create a new connectionをクリックするとウインドウが開きます。

Connection nameにHumidity、Classificationから先ほど追加したHumidity Sensor #1を選択してAddを押します。

Humidityが追加されたのでCreateをクリック。

ConnectionsにHumidityが追加されました。

ConnectionsのHostを設定

先ほど追加したHumidityをクリックして右側に表示されるPropertiesの中のAssign to hostをクリック

Select a host elementと表示され、3Dの中のどのオブジェクトをセンサーにするか選択します。

しかし、今回はセンサー用のオブジェクトを用意していなかったので、壁を選択しAssignします。

すると、このように先ほどAssignした壁(Basic Wall)がセンサーとつながりました。

右側のPropertiesはこのように表示されました。

ConnectionsのRoomsを設定

今回追加したセンサーは1つですが、複数センサーを設置した際、部屋単位でまとめて表示できるようにRoomsを設定します。

右のPropertiesの中にRelationshipsがあり、その中のRoomsの右側にある歯車をクリックします。

すでにOffice100にAssignされていました。

ConnectionsのURL

外部センサーのデータをTandemに送る場合は、ConnectionsのHumidityのURLに対してPOSTでJSONを送ります。

リンクマークをクリックするとそのためのURLを取得できます。

これは ThingsBoard みたいな感じですね。

このURLを使ってNode-REDからデータを送信します。

Tandemのデータを送るNode-REDのフロー

Node-RED側はこのようなフローを作成します。(フローは下記)

[{"id":"393c8b718b6c92fa","type":"http request","z":"a1","name":"","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":410,"y":260,"wires":[["2118a4f996128cfa"]]},{"id":"dce1584bfba6c148","type":"inject","z":"a1","name":"Timestamp","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":100,"wires":[["26acfb5a4573fba5"]]},{"id":"2118a4f996128cfa","type":"debug","z":"a1","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":340,"wires":[]},{"id":"26acfb5a4573fba5","type":"template","z":"a1","name":"JSON","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"[\n    {\n        \"humidity\" : 40,\n        \"timestamp\" : {{payload}}\n    }\n]","output":"str","x":310,"y":180,"wires":[["393c8b718b6c92fa"]]}]

Node-REDフローの解説

まずはInjectノードでTimestampを送信します。

Templateノードにはテストとしてこのように表記しました。

http requestノードはメソッドをPOSTにしてURLには先ほどのConnectionsのURLをコピペ。

あとはDebugノードをつなげました。

Node-REDフローの実行

これでInjectノードを押して実行するとDebugには下のように表示されます。

{
	"title":"Not Found",
	"detail": "Stream Payload Received - Proceed to map/configure Parameters to initialize event storage"
}

Tandem側でDataをMappingしていないと、このレスポンスが表示されます。

Configure ConnectionsからDataのMapping

Connectionsから+Createの横のメニューをクリック、ConfigureConnectionsをクリックしようとしましたが、クリックできません。この記事を書く前のテストではうまくいったのですが、なぜでしょう?

こちらがうまくいったプロジェクトでのConnectionsの表示。

うまくいかない方をみてみると、No numeric parameters found in corrently applied templateと表示されており、Templateに問題があるようです。

現在使用しているFacilityTemplateはこのとおり。

Parametersの確認

前回、うまく動いたのはTempというパラメーターなので内容を確認します。

今回はHumidtyですが、Parameterとしては問題なさそうです。

Facility Templateの確認

今回作成したTEST-Facility-Templateを確認します。

HumiditySensorをみると、ParameterにAssignされていませんでした。

HumidityにチェックをいれてDone.

さらに、Updateボタンを押します。

この状態でConnectionsを確認しますが、エラーは治っていません。

FacilityのFacilityTemplateをUpdate

FacilityのFacilityTemplateをUpdateしてみます。

FacilityからEdit

これでUpdate

が、しかし、うまくいきませんでした。

まとめ

事前に試したときはうまくいったのですが、今回はうまくいきませんでした。もう一度、最初からやって、検証したいとおもいます。今日はここまで