使用したもの


フロー全体図

フローはこちらから
[{"id":"1c948b9849f3fe6c","type":"debug","z":"5409fb978207031b","name":"Temperature","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Temperature","targetType":"msg","statusVal":"","statusType":"auto","x":1110,"y":60,"wires":[]},{"id":"8aed9d5c7d069897","type":"debug","z":"5409fb978207031b","name":"Humidity","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Humidity","targetType":"msg","statusVal":"","statusType":"auto","x":1100,"y":100,"wires":[]},{"id":"3fa93a574d0d4bc8","type":"debug","z":"5409fb978207031b","name":"Illumination","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Illumination","targetType":"msg","statusVal":"","statusType":"auto","x":1110,"y":140,"wires":[]},{"id":"0875308e8e6f56aa","type":"debug","z":"5409fb978207031b","name":"Acceleration_Status","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Acceleration_Status","targetType":"msg","statusVal":"","statusType":"auto","x":1140,"y":180,"wires":[]},{"id":"6e24670b36ec1e0c","type":"debug","z":"5409fb978207031b","name":"Acceleration_X","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Acceleration_X","targetType":"msg","statusVal":"","statusType":"auto","x":1120,"y":220,"wires":[]},{"id":"ad214bfc6dbb6937","type":"debug","z":"5409fb978207031b","name":"Acceleration_Y","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Acceleration_Y","targetType":"msg","statusVal":"","statusType":"auto","x":1120,"y":260,"wires":[]},{"id":"88ba41da3beac37b","type":"debug","z":"5409fb978207031b","name":"Acceleration_Z","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Acceleration_Z","targetType":"msg","statusVal":"","statusType":"auto","x":1120,"y":300,"wires":[]},{"id":"a9715adb3896cd26","type":"debug","z":"5409fb978207031b","name":"Contact","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.Contact","targetType":"msg","statusVal":"","statusType":"auto","x":1100,"y":340,"wires":[]},{"id":"6967dc2d6c08dedb","type":"serial in","z":"5409fb978207031b","name":"STM550J","serial":"","x":140,"y":60,"wires":[["1dc242df91ae0766"]]},{"id":"1dc242df91ae0766","type":"function","z":"5409fb978207031b","name":"Decoding","func":"//送られてきたバッファを16進数の文字列に変換してコピーする\nvar Copy = msg.payload.toString(\"hex\");\n//IDの部分を抜き出す\nvar ID = Copy.substr(14,8);\n//データの部分を抜き出す\nvar Data = Copy.substr(14+8,18);\n//作業場として仮で作っておく\nvar DataBit = \"\";\nvar DataCopy;\nvar DataLength = Data.length;\nfor(var i =0;i < DataLength;i++){\n //先頭から1文字ずつ切り取る\n DataCopy = Data.substr(i,1);\n //切り取った文字列を16進数の数値に変換する\n DataCopy = parseInt(DataCopy,16);\n //変換した16進数の数値を4桁の2進数の文字列に変換して結合する\n DataBit += DataCopy.toString(2).padStart(4,\"0\");\n\n}\n//msg.payloadに格納する\nmsg.payload = {\n ID : ID,\n Data : Data,\n DataLength : Data.length,\n DataBit : DataBit\n};\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":60,"wires":[["eb18fee8696fcd13"]]},{"id":"eb18fee8696fcd13","type":"switch","z":"5409fb978207031b","name":"switch 1","property":"payload.ID","propertyType":"msg","rules":[{"t":"eq","v":"","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":420,"y":60,"wires":[["889f244d484d05a9"]],"info":"使っているSTM550JのID下8桁をすべて小文字で入力する"},{"id":"889f244d484d05a9","type":"switch","z":"5409fb978207031b","name":"switch 2","property":"payload.DataLength","propertyType":"msg","rules":[{"t":"eq","v":"18","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":560,"y":60,"wires":[["8b58a14a29bb1a2d"]]},{"id":"8b58a14a29bb1a2d","type":"function","z":"5409fb978207031b","name":"Data_Storage","func":"//データの2進数での値をコピーする\nvar DataBit = msg.payload.DataBit;\n//変数宣言をしておく\nvar Temperature;\nvar Humidity;\nvar Illumination;\nvar Acceleration_Status;\nvar Acceleration_X;\nvar Acceleration_Y;\nvar Acceleration_Z;\nvar Contact;\n//データシートをもとにデータを切り取る\nTemperature = DataBit.substr(0,10);\nHumidity = DataBit.substr(10,8);\nIllumination = DataBit.substr(18,17);\nAcceleration_Status = DataBit.substr(35,2);\nAcceleration_X = DataBit.substr(37,10);\nAcceleration_Y = DataBit.substr(47,10);\nAcceleration_Z = DataBit.substr(57,10);\nContact = DataBit.substr(67,1);\n//msg.payloadに格納する\nmsg.payload = {\n Temperature : Temperature,\n Humidity : Humidity,\n Illumination : Illumination,\n Acceleration_Status :Acceleration_Status,\n Acceleration_X : Acceleration_X,\n Acceleration_Y : Acceleration_Y,\n Acceleration_Z : Acceleration_Z,\n Contact : Contact\n};\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":60,"wires":[["023eeea911ea8294"]]},{"id":"023eeea911ea8294","type":"function","z":"5409fb978207031b","name":"Data_Convert","func":"//Temperatureの値をコピーする\nvar T = msg.payload.Temperature;\n//Humidityの値をコピーする\nvar H = msg.payload.Humidity;\n//Illuminationの値をコピーする\nvar I = msg.payload.Illumination;\n//Acceleration_Statusの値をコピーする\nvar AS = msg.payload.Acceleration_Status;\n//Acceleration_Xの値をコピーする\nvar AX = msg.payload.Acceleration_X;\n//Acceleration_Yの値をコピーする\nvar AY = msg.payload.Acceleration_Y;\n//Acceleration_Xの値をコピーする\nvar AZ = msg.payload.Acceleration_Z;\n//Contactの値をコピーする\nvar C = msg.payload.Contact;\n\n//データの値を二進数の文字列から十進数の数値に変換する\nT = parseInt(T, 2);\nH = parseInt(H, 2);\nI = parseInt(I, 2);\nAS = parseInt(AS, 2);\nAX = parseInt(AX, 2);\nAY = parseInt(AY, 2);\nAZ = parseInt(AZ, 2);\nC = parseInt(C, 2);\n\n//Tの値の処理\n//値が低すぎる場合の処理\nif (T == 1021) {\n T = \"Out of range negative\";\n}\n//値が高すぎる場合の処理\nelse if (T == 1022) {\n T = \"Out of range pisitive\";\n}\n//エラーが発生した場合の処理\nelse if (T == 1023) {\n T = \"Error\";\n}\n//データが正常に読み取れた場合の処理\nelse {\n //データシートを基に計算を行う\n T = T / 10 - 40;\n //少数第二位で四捨五入する\n T = Math.round(T * 10) / 10;\n}\nmsg.payload.Temperature = T;\n\n//Hの値の処理\n//データが正常に読み取れた場合の処理\nif (H <= 200) {\n //データシートを基に計算を行う\n H = H / 2;\n}\n//サポートされていない場合の処理\nelse if (H == 255) {\n H = \"not Supported\";\n}\n//無効になっている場合の処理\nelse if (H == 254) {\n H = \"Invalid\";\n}\n//エラーが発生した場合の処理\nelse {\n H = \"Error\";\n}\nmsg.payload.Humidity = H;\n\n//Iの値の処理\n//エラーが発生した場合の処理\nif (I == 131071) {\n I = \"Error\";\n}\n//データが正常に読み取れた場合はそのまま\nmsg.payload.Illumination = I;\n\n//ASの値の処理\n//Periodic Updateを返す\nif (AS == 0) {\n AS = \"Periodic Update\";\n}\n//Threshould 1 exceededを返す\nelse if (AS == 1) {\n AS = \"Threshould 1 exceeded\";\n}\n//Threshould 2 exceededを返す\nelse {\n AS = \"Threshould 2 exceeded\";\n}\nmsg.payload.Acceleration_Status = AS;\n\n//AXの値の処理\n//値が低すぎる場合の処理\nif (AX == 1021) {\n AX = \"Out of range negative\";\n}\n//値が高すぎる場合の処理\nelse if (AX == 1022) {\n AX = \"Out of range positive\";\n}\n//エラーが発生した場合の処理\nelse if (AX == 1023) {\n AX = \"Error\";\n}\n//データが正常に読み取れた場合の処理\nelse {\n AX = AX / 200;\n AX = Math.round(AX * 1000) / 1000;\n AX -= 2.5;\n}\nmsg.payload.Acceleration_X = AX;\n\n//AYの値の処理\n//値が低すぎる場合の処理\nif (AY == 1021) {\n AY = \"Out of range negative\";\n}\n//値が高すぎる場合の処理\nelse if (AY == 1022) {\n AY = \"Out of range positive\";\n}\n//エラーが発生した場合の処理\nelse if (AY == 1023) {\n AY = \"Error\";\n}\n//データが正常に読み取れた場合の処理\nelse {\n AY = AY / 200;\n AY = Math.round(AY * 1000) / 1000;\n AY -= 2.5;\n}\nmsg.payload.Acceleration_Y = AY;\n\n//AZの値の処理\n//値が低すぎる場合の処理\nif (AZ == 1021) {\n AZ = \"Out of range negative\";\n}\n//値が高すぎる場合の処理\nelse if (AZ == 1022) {\n AZ = \"Out of range positive\";\n}\n//エラーが発生した場合の処理\nelse if (AZ == 1023) {\n AZ = \"Error\";\n}\n//データが正常に読み取れた場合の処理\nelse {\n AZ = AZ / 200;\n AZ = Math.round(AZ * 1000) / 1000;\n AZ -= 2.5;\n}\nmsg.payload.Acceleration_Z = AZ;\n\n//Cの値の処理\n//Openを返す\nif (C == 0) {\n C = \"Open\";\n}\n//Closeを返す\nelse {\n C = \"Close\";\n}\nmsg.payload.Contact = C;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":900,"y":60,"wires":[["1c948b9849f3fe6c","8aed9d5c7d069897","3fa93a574d0d4bc8","0875308e8e6f56aa","6e24670b36ec1e0c","ad214bfc6dbb6937","88ba41da3beac37b","a9715adb3896cd26"]]}]
Code language: JSON / JSON with Comments (json)
使い方
switch 1に使用するSTM550JのIDの下8桁を入力する。その後読み取りたい項目のdebugノードを有効にする。
ノードの詳しい解説は別ページに記載する。

STM550Jからドングル経由で送られてきたデータをNode-Redで解析する
使用したデータシート
今回使用したデータシート
D2-14-41.pdf
https://tools.enocean...