Node-REDからBACnetでCoolMasterの設定温度を変更する方法

前回に引き続き、Node-REDからBACnetでCoolMasterの設定温度を変更する方法を紹介。

YABEからCoolMasterの設定温度を変更したWireSharkパケット

項目内容
送信元IP192.168.1.14(Node-REDやBACnetクライアント)
宛先IP192.168.1.100(BACnetデバイス)
送信元/宛先ポート63848 → 47808(UDPポート。47808がBACnet/IPのデフォルト)
BVLC FunctionOriginal-Unicast-NPDU(単一デバイス宛)
APDU TypeConfirmed Request(応答が必要)
Invoke ID27(リクエストとレスポンスの照合用)
Service ChoiceWriteProperty(15)
対象オブジェクトanalog-value, Instance=256
書き込み先present-value(85)
書き込み値real型, 値=25
Priority16(BACnet Priority Arrayで最も低い優先度)

こちらはNPDUの値。

項目内容
送信元IP192.168.1.14(Node-REDやBACnetクライアント)
宛先IP192.168.1.100(BACnetデバイス)
送信元ポート63848(動的割り当て)
宛先ポート47808(BACnet/IPの標準ポート)
BVLC FunctionOriginal-Unicast-NPDU(0x0a)
APDU TypeConfirmed-REQ(0、応答が必要な要求)
Service ChoiceWriteProperty(15)
ターゲットオブジェクトanalog-value, 256
プロパティpresent-value(85)
書き込み値25(Real型)
Application Tag4(Real型)
Priority16(デフォルト優先度)

これはAPDUの値です。

Node-REDからBACnetでCoolMasterの設定温度を変更する

このようにValueに設定したい温度を入力すると設定できます。

設定温度をValueで渡すにはこのようにします。

[{"id":"873493c9214835f0","type":"BACnet-Write","z":"11b5d970f1ab28c1","name":"","objectType":"2","instance":"d6dff7e9f9703782","valueTag":"4","valueValue":"24","propertyId":"85","priority":"16","device":"54de1b76e537f00b","server":"cd9b93738b4a729c","multipleWrite":false,"x":460,"y":1280,"wires":[["4709806a326ccec7"]]},{"id":"4dfad23d1b17b1ab","type":"inject","z":"11b5d970f1ab28c1","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":280,"y":1200,"wires":[["873493c9214835f0"]]},{"id":"4709806a326ccec7","type":"debug","z":"11b5d970f1ab28c1","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":580,"y":1380,"wires":[]},{"id":"455052713aafe0ef","type":"function","z":"11b5d970f1ab28c1","name":"Format Payload","func":"msg.payload = {\n values: [\n {\n type: 4,\n value: msg.payload\n }\n ]\n};\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":1360,"wires":[["873493c9214835f0"]]},{"id":"5400c9442eb17fef","type":"inject","z":"11b5d970f1ab28c1","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"25","payloadType":"num","x":110,"y":1300,"wires":[["455052713aafe0ef"]]},{"id":"2751e5c7f387705a","type":"inject","z":"11b5d970f1ab28c1","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"26","payloadType":"num","x":110,"y":1400,"wires":[["455052713aafe0ef"]]},{"id":"d6dff7e9f9703782","type":"BACnet-Instance","name":"SetTemp","instanceAddress":"256"},{"id":"54de1b76e537f00b","type":"BACnet-Device","name":"CoolMaster","deviceAddress":"192.168.1.100"},{"id":"cd9b93738b4a729c","type":"BACnet-Client","name":"PC(Node-RED)","adpuTimeout":"6000","port":"47808","interface":"","broadcastAddress":"192.168.1.14"}]

functionノードの中のtypeを4にしてmsg.payloadで設定温度を数値で送れば大丈夫です。

まとめ

以上、Node-REDからBACnetでCoolMasterの設定温度を変更する方法を紹介しました。