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を作成
- Parametersを作成
- Classification Systemsの作成
- Facility Templateを作成
- FacilityにFacility Templateを割り当てる
- Connectionsの追加
- ConnectionsのHostを設定
- ConnectionsのRoomsを設定
- ConnectionsのURL
- Tandemのデータを送るNode-REDのフロー
- Node-REDフローの解説
- Node-REDフローの実行
- Configure ConnectionsからDataのMapping
- Parametersの確認
- Facility Templateの確認
- FacilityのFacilityTemplateをUpdate
- まとめ
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
が、しかし、うまくいきませんでした。
まとめ
事前に試したときはうまくいったのですが、今回はうまくいきませんでした。もう一度、最初からやって、検証したいとおもいます。今日はここまで