4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node-Redでスマート電力量メーターと通信してみる

Last updated at Posted at 2022-01-09

Raspberry PiにNode-Redを導入すると、簡単にシリアル通信を行えます。
シリアル通信ができるということは、USBにシリアルポートが乗っかっているこんなのも動かせるということです。

Raspberry Piに挿してスマート電力量メーターから家の消費電力を読んだりできたりする奴です。
多くの先達の方々のお知恵とおコードを拝借することで、私のRaspberry Piにもなんとか導入することができました。

今回は、手元にあるHEMS用 Wi-SUNモジュール RL7023(以下、HEMS)をRaspberry Piに挿してNode-Redのシリアル通信を使い、スマート電力量メーターと通信して瞬間電力を取得するところまでやってみます。

なお、次の記事などを参考にさせていただきました。

通信仕様であるECHONET Liteの規格書はこちらです。

アプリケーション通信インターフェース仕様書 > 低圧スマート電力量メータ・HEMSコントローラ間

HEMS機器の安易な取り扱いやデータの読み間違いは意図しない重大な結果につながるので要注意です。

#目次
1.必要なもの
2.シリアル通信をためす
3.フローの説明
4.実行してみる
5.おわりに

#1. 必要なもの

  • HEMS用 Wi-SUNモジュール RL7023
  • Raspberry Pi
  • Node-Red
  • 電力会社に発行してもらったBルートのIDとパスワード

#2. シリアル通信をためす

##serialportノードのインストール

まずは、Node-Redにserialportノードをインストールします。
右上のハンバーガー > パレットの管理 > ノードを追加でnode-red-node-serialportを検索、追加します。

image.png

インストールできたら左側のパレットにserialportノードが追加されています。

image.png

##serialportノードを使ってみる

こんな感じに組み立てます。

image.png

###"SKVER"injectノード

image.png

このノードのプロパティです。

image.png

文字列"SKVER"を作ります。

###"payload & "\r""changeノード

image.png

image.png

上流から来るコマンド文字列にコントロール文字"\r"を付加するノードです。

###"HEMSシリアル OUT"serial outノード

image.png

HEMSにシリアル送信を行うノードです。
固有名をHEMSシリアル OUTに変えてあります。

image.png

鉛筆ボタンを押して新しくプロパティを作ります。

image.png

###"HEMSシリアル IN"serial inノード

image.png

HEMSからシリアル受信を行うノードです。

プロパティは"HEMSシリアル OUT"ノードで設定したものを選択します。

###debugノード

image.png

上流から流れてくるmsg.payload、つまりHEMSの吐き出すレスポンスを受けて、デバッグ欄に表示します。

###実行
ではこのフローを実行してみましょう。

デプロイして、injectノードのボタンを押します。

image.png

Pythonでの結果と同じになりました。

こんな感じで最後までコマンドを並べていきます。

#3. フローの説明

###完成形
image.png

上から順にフローを説明します。
なお、"HEMSシリアル IN"ノードと"HEMSシリアル OUT"ノードは前述のものをそのまま使います。

なお、このフローはPythonプログラムのコードやログを参考にして作ったハリボテのようなものなので、違う環境ではうまく作動しないかもしれません。たとえば、本来ならコマンドの戻り値から取得すべき電力量の桁数を勝手に固定したりしています。

###"ここにプロパティを設定する"injectノード

image.png

image.png

電力会社が発行したBルートのIDとパスワードをここに入力します。

###"ローカル変数 to フロー変数"changeノード

image.png

image.png

上のノードで設定したIDとパスワードを、このタブ内をスコープとするフロー変数に代入します。

###"SKSETPWD C **********"injectノード

image.png

image.png

Bルートのパスワードをセットするコマンド文字列を作ります。
パスワードはフロー変数に代入した文字列を使います。

###"SKSETRBID ********************************"injectノード

image.png

image.png

同じくBルートのIDをセットするコマンド文字列を作ります。

###"SKSCAN 2"injectノード群

image.png

各ノード名のコマンド文字列を作ります。
名前と中身は同じです。

###"SKSREG S2 **"injectノード

image.png

image.png

"SKSCAN 2"ノード群のコマンドのレスポンスに含まれる" Channel:"に続く文字列を使い、コマンド文字列を作ります。

###"SKSREG S3 ****"injectノード

image.png

image.png

"SKSCAN 2"ノード群のコマンドのレスポンスに含まれる" Pan ID:"に続く文字列を使い、コマンド文字列を作ります。

###"SKLL64 ****************"injectノード

image.png

image.png

"SKSCAN 2"ノード群のコマンドのレスポンスに含まれる" Addr:"に続く文字列を使い、コマンド文字列を作ります。

###"SKJOIN :::::::"injectノード

image.png

image.png

"SKLL64 ****************"ノードのコマンドのレスポンスに含まれるIPv6アドレス文字列を使い、コマンド文字列を作ります。

###"ipv6Addr"injectノード

image.png

image.png

"SKLL64 ****************"ノードのコマンドのレスポンスに含まれるIPv6アドレス文字列を使い、コマンド文字列を作ります。

###"SKSENDTO"functionノード

image.png

"SKSENDTO"functionノードのプロパティ
//"SKSENDTO 1 "
var buf1 = Buffer.from("SKSENDTO 1 ",'ascii');

//ipv6Addr
var buf2 = Buffer.from(msg.ipv6Addr,'ascii');

//" 0E1A 1 000E "
var buf3 = Buffer.from(" 0E1A 1 000E ",'ascii');

//echonetLiteFrame
var buf4 = new Buffer([16,129,0,1,5,255,1,2,136,1,98,1,231,0]);

//結合
msg ={payload: Buffer.concat([buf1,buf2,buf3,buf4])};

return msg;

"SKSENDTO"コマンドを組み立てます。
このコマンドだけは、文字列+バイナリの組み合わせなので、文字列の部分を一度バイナリに変換してから結合します。

###"HEMSシリアル OUT(binary)"serial outノード

image.png

image.png

SKSENDTOはバイナリとして送信するので、バイナリ用のserial outノードを用意します。
プロパティもバイナリ用にします。

ここで、自動で付与されるプロパティ名が前のものと同じになってしまい、順番でしか区別できなくなってしまいました。

image.png

これが原因なのかは分かりませんが、バイナリで送ったはずが文字列で届いたりその逆になったりすることがあります。そのようなときは、Raspberry Piを再起動すれば直ります。
(追記)最初からシリアル送受信を素直にバイナリで統一すればいいだけですね。

###"戻り値?"switchノード

image.png

image.png

HEMSが返す戻り値に応じて出力先ノードを分岐させます。

###changeノード群

image.png

image.png

image.png

image.png

image.png

image.png

image.png

コマンドを構成するのに必要な目的の文字列を抽出し、フロー関数に代入しているだけです。
なお、うちの環境では、channel以外の文字列は毎回同じです。

###"プロパティがセットされました"changeノード

image.png

フロープロパティのセットを通知する文字列を作ります。

image.png

###"ERXUDP type E7?"switchノード

image.png

image.png

"ERXUDP"に続く所定の位置に戻り値"E7"(瞬間電力に対応する)が含まれている場合に処理を続行します。

###"E7 瞬間電力"changeノード

image.png

image.png

バイナリを文字情報に整形します。

#4. 実行してみる

一番上の"ここにプロパティを設定する"ノードから、一番下の"ipv6Addr"ノードまで、順次injectノードのボタンを押していきます。
ボタンを押すたびに、"OK"や"EVENT"などの文字列が、デバッグサイドバーに流れてくるはずです。

image.png

最後の"ipv6Addr"injectノードを押すと、

image.png

瞬間電力が表示されました。ゴール。

#5. おわりに

Node-Redなので、グラフ化するなりGoogle Homeに電気の使い過ぎを叱らせるなり簡単にできますね。
今回作ったフローは下に置いておきます。

HEMSフロー(折りたたみ)
[
    {
        "id": "49beefd0eaaf4a6a",
        "type": "tab",
        "label": "HEMS",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "4004cb5a58699790",
        "type": "group",
        "z": "49beefd0eaaf4a6a",
        "name": "送信",
        "style": {
            "label": true
        },
        "nodes": [
            "2676c4e4fe9a5cda",
            "088e6715e70f860b",
            "4298251172f4c4c3",
            "568a2a591ea46393",
            "f98f4db8cd3fa410",
            "04ba53300916f691",
            "fb0ec04ac6017b63",
            "b5b896577e1dfb6e",
            "bd3b1ed9c465bd25",
            "a3676484db745daf",
            "1b2d3525c7d2b087",
            "586161e167f95ec3",
            "121e6c6caf8f860d",
            "a907cc6497817aba",
            "f71e06ec28f4697e",
            "540cf633b17078cf",
            "cbd2a4b12cf35653",
            "f537dfd40e07e6bd"
        ],
        "x": 14,
        "y": 139,
        "w": 712,
        "h": 622
    },
    {
        "id": "c4ce45e52323bd56",
        "type": "group",
        "z": "49beefd0eaaf4a6a",
        "name": "受信",
        "style": {
            "label": true
        },
        "nodes": [
            "ddf19b92b483e25e",
            "ab5a9c17d4c8836b",
            "503cce7c41dea089",
            "d2e6294be1e3a289",
            "654ef31eb665b02f",
            "6c3fa15c620fc0f9",
            "929eac3f8def68a5",
            "c808eac7e16ce186",
            "b3e040a515863bd0",
            "346d61d741e5286d",
            "96f4a4f19d93331a",
            "cf825221ed020904",
            "39362c73fd180a16"
        ],
        "x": 14,
        "y": 779,
        "w": 712,
        "h": 422
    },
    {
        "id": "2676c4e4fe9a5cda",
        "type": "serial out",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "HEMSシリアル OUT",
        "serial": "92c4fb6c.c8bcd8",
        "x": 600,
        "y": 180,
        "wires": []
    },
    {
        "id": "088e6715e70f860b",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKVER",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "SKVER",
        "payloadType": "str",
        "x": 110,
        "y": 180,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "4298251172f4c4c3",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "payload & \"\\r\"",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload & \"\\r\"",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 450,
        "y": 420,
        "wires": [
            [
                "2676c4e4fe9a5cda",
                "f71e06ec28f4697e"
            ]
        ]
    },
    {
        "id": "568a2a591ea46393",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKSETPWD C **********",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "\"SKSETPWD C \" & $flowContext(\"pwd\")",
        "payloadType": "jsonata",
        "x": 160,
        "y": 220,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "f98f4db8cd3fa410",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKSETRBID ********************************",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "\"SKSETRBID \" & $flowContext(\"rbid\")",
        "payloadType": "jsonata",
        "x": 210,
        "y": 260,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "04ba53300916f691",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "SKSCAN 2 FFFFFFFF 4",
        "payloadType": "str",
        "x": 180,
        "y": 360,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "fb0ec04ac6017b63",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "SKSCAN 2 FFFFFFFF 5",
        "payloadType": "str",
        "x": 180,
        "y": 400,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "b5b896577e1dfb6e",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "SKSCAN 2 FFFFFFFF 6",
        "payloadType": "str",
        "x": 180,
        "y": 440,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "bd3b1ed9c465bd25",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKSREG S2 **",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "\"SKSREG S2 \" & $flowContext(\"channel\")",
        "payloadType": "jsonata",
        "x": 140,
        "y": 500,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "a3676484db745daf",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKSREG S3 ****",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "\"SKSREG S3 \" & $flowContext(\"panid\")",
        "payloadType": "jsonata",
        "x": 140,
        "y": 540,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "1b2d3525c7d2b087",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKLL64 ****************",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "\"SKLL64 \" & $flowContext(\"addr\")",
        "payloadType": "jsonata",
        "x": 160,
        "y": 580,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "586161e167f95ec3",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKJOIN ****:****:****:****:****:****:****:****",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "\"SKJOIN \" & $flowContext(\"ipv6addr\")",
        "payloadType": "jsonata",
        "x": 210,
        "y": 620,
        "wires": [
            [
                "4298251172f4c4c3"
            ]
        ]
    },
    {
        "id": "121e6c6caf8f860d",
        "type": "comment",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "以下3個のどれかで\"EVENT 20\"が出ればよい。(時間がかかる)",
        "info": "",
        "x": 270,
        "y": 320,
        "wires": []
    },
    {
        "id": "a907cc6497817aba",
        "type": "serial out",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "HEMSシリアル OUT(binary)",
        "serial": "5205cde260160cea",
        "x": 475,
        "y": 660,
        "wires": [],
        "l": false
    },
    {
        "id": "f71e06ec28f4697e",
        "type": "debug",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 630,
        "y": 220,
        "wires": []
    },
    {
        "id": "540cf633b17078cf",
        "type": "debug",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 630,
        "y": 720,
        "wires": []
    },
    {
        "id": "cbd2a4b12cf35653",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "ipv6Addr",
        "props": [
            {
                "p": "ipv6Addr",
                "v": "$flowContext(\"ipv6addr\")",
                "vt": "jsonata"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 120,
        "y": 660,
        "wires": [
            [
                "f537dfd40e07e6bd"
            ]
        ]
    },
    {
        "id": "f537dfd40e07e6bd",
        "type": "function",
        "z": "49beefd0eaaf4a6a",
        "g": "4004cb5a58699790",
        "name": "SKSENDTO",
        "func": "//\"SKSENDTO 1 \"\nvar buf1 = Buffer.from(\"SKSENDTO 1 \",'ascii');\n\n//ipv6Addr\nvar buf2 = Buffer.from(msg.ipv6Addr,'ascii');\n\n//\" 0E1A 1 000E \"\nvar buf3 = Buffer.from(\" 0E1A 1 000E \",'ascii');\n\n//echonetLiteFrame\nvar buf4 = new Buffer([16,129,0,1,5,255,1,2,136,1,98,1,231,0]);\n\n//結合\nmsg ={payload: Buffer.concat([buf1,buf2,buf3,buf4])};\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 310,
        "y": 660,
        "wires": [
            [
                "a907cc6497817aba",
                "540cf633b17078cf"
            ]
        ]
    },
    {
        "id": "3bd5c618626c1fdf",
        "type": "inject",
        "z": "49beefd0eaaf4a6a",
        "name": "ここにプロパティを設定する",
        "props": [
            {
                "p": "rbid",
                "v": "IDBルートのID",
                "vt": "str"
            },
            {
                "p": "pwd",
                "v": "Bルートのパスワード",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 180,
        "y": 100,
        "wires": [
            [
                "b8a00d9096f95b6c"
            ]
        ]
    },
    {
        "id": "2668e4f95c526673",
        "type": "debug",
        "z": "49beefd0eaaf4a6a",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 630,
        "y": 100,
        "wires": []
    },
    {
        "id": "b8a00d9096f95b6c",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "name": "ローカル変数 to フロー変数",
        "rules": [
            {
                "t": "set",
                "p": "rbid",
                "pt": "flow",
                "to": "rbid",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "pwd",
                "pt": "flow",
                "to": "pwd",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 440,
        "y": 100,
        "wires": [
            [
                "2668e4f95c526673"
            ]
        ]
    },
    {
        "id": "088f905780f0c11b",
        "type": "comment",
        "z": "49beefd0eaaf4a6a",
        "name": "上のinjectノードから順に押す",
        "info": "",
        "x": 140,
        "y": 40,
        "wires": []
    },
    {
        "id": "ddf19b92b483e25e",
        "type": "serial in",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "HEMSシリアル IN",
        "serial": "92c4fb6c.c8bcd8",
        "x": 130,
        "y": 820,
        "wires": [
            [
                "ab5a9c17d4c8836b",
                "929eac3f8def68a5"
            ]
        ]
    },
    {
        "id": "ab5a9c17d4c8836b",
        "type": "debug",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 820,
        "wires": []
    },
    {
        "id": "503cce7c41dea089",
        "type": "debug",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 1160,
        "wires": []
    },
    {
        "id": "d2e6294be1e3a289",
        "type": "switch",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "ERXUDP type E7?",
        "property": "type",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "E7",
                "vt": "str"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 230,
        "y": 1160,
        "wires": [
            [
                "6c3fa15c620fc0f9"
            ],
            []
        ],
        "outputLabels": [
            "E7",
            ""
        ]
    },
    {
        "id": "654ef31eb665b02f",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "ERXUDP",
        "rules": [
            {
                "t": "set",
                "p": "type",
                "pt": "msg",
                "to": "$substring(payload,145,2)",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$substring(payload,149)",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "byte",
                "pt": "msg",
                "to": "$substring(payload,147,2)",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 320,
        "y": 880,
        "wires": [
            [
                "d2e6294be1e3a289"
            ]
        ]
    },
    {
        "id": "6c3fa15c620fc0f9",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "E7 瞬間電力",
        "rules": [
            {
                "t": "set",
                "p": "watt",
                "pt": "msg",
                "to": "$parseInteger($string(\"0x\"&payload),'0')",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "\"E7 瞬間電力 \"& watt &\" [W]\"",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 430,
        "y": 1160,
        "wires": [
            [
                "503cce7c41dea089"
            ]
        ]
    },
    {
        "id": "929eac3f8def68a5",
        "type": "switch",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "戻り値?",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "ERXUDP",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "  Channel:",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "  Pan ID:",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "  Addr:",
                "vt": "str"
            },
            {
                "t": "regex",
                "v": "^....:....:....:....:....:....:....:....\\r\\n$",
                "vt": "str",
                "case": false
            },
            {
                "t": "else"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 6,
        "x": 140,
        "y": 940,
        "wires": [
            [
                "654ef31eb665b02f"
            ],
            [
                "346d61d741e5286d"
            ],
            [
                "b3e040a515863bd0"
            ],
            [
                "96f4a4f19d93331a"
            ],
            [
                "c808eac7e16ce186"
            ],
            []
        ]
    },
    {
        "id": "c808eac7e16ce186",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "ipv6addr",
        "rules": [
            {
                "t": "set",
                "p": "ipv6addr",
                "pt": "flow",
                "to": "$substringBefore(msg.payload,\"\\r\\n\")",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 500,
        "y": 1040,
        "wires": [
            [
                "39362c73fd180a16"
            ]
        ]
    },
    {
        "id": "b3e040a515863bd0",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "  Pan ID:",
        "rules": [
            {
                "t": "set",
                "p": "panid",
                "pt": "flow",
                "to": "$substring(payload,9,4)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 500,
        "y": 960,
        "wires": [
            [
                "39362c73fd180a16"
            ]
        ]
    },
    {
        "id": "346d61d741e5286d",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "  Channel:",
        "rules": [
            {
                "t": "set",
                "p": "channel",
                "pt": "flow",
                "to": "$substring(payload,10,2)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 500,
        "y": 920,
        "wires": [
            [
                "39362c73fd180a16"
            ]
        ]
    },
    {
        "id": "96f4a4f19d93331a",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "  Addr:",
        "rules": [
            {
                "t": "set",
                "p": "addr",
                "pt": "flow",
                "to": "$substring(payload,7,16)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 490,
        "y": 1000,
        "wires": [
            [
                "39362c73fd180a16"
            ]
        ]
    },
    {
        "id": "cf825221ed020904",
        "type": "debug",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 1100,
        "wires": []
    },
    {
        "id": "39362c73fd180a16",
        "type": "change",
        "z": "49beefd0eaaf4a6a",
        "g": "c4ce45e52323bd56",
        "name": "\"プロパティがセットされました\"",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "\"プロパティがセットされました \" & msg.payload",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 380,
        "y": 1100,
        "wires": [
            [
                "cf825221ed020904"
            ]
        ]
    },
    {
        "id": "92c4fb6c.c8bcd8",
        "type": "serial-port",
        "serialport": "/dev/ttyUSB0",
        "serialbaud": "115200",
        "databits": "8",
        "parity": "none",
        "stopbits": "1",
        "waitfor": "",
        "dtr": "none",
        "rts": "none",
        "cts": "none",
        "dsr": "none",
        "newline": "\\n",
        "bin": "false",
        "out": "char",
        "addchar": "",
        "responsetimeout": "1000"
    },
    {
        "id": "5205cde260160cea",
        "type": "serial-port",
        "serialport": "/dev/ttyUSB0",
        "serialbaud": "115200",
        "databits": "8",
        "parity": "none",
        "stopbits": "1",
        "waitfor": "",
        "dtr": "none",
        "rts": "none",
        "cts": "none",
        "dsr": "none",
        "newline": "100",
        "bin": "bin",
        "out": "time",
        "addchar": "",
        "responsetimeout": "10000"
    }
]
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?