6月 15, 2022

Node-redによるMeross plugの制御

IFTTTなどを用いずに、node-red-contrib-merossを使用してNode-redでMeross Smart Plugを直接制御する。


Smart Plugと通信するために"key"が必要なため、 meross-login を使って"key"を取得する。


Dockerでの環境構築

meross-loginはNode-redのv14以上が必要なため、自身の環境を崩したくない場合は、Dockerのコンテナ上で作業する。
自身の環境で実行可能な場合は、Dockerの作業はスキップしてOK。
$ mkdir node-temp
$ cd node-temp
$ vim docker-compose.yaml

docker-compose.yamlに下記を記載
version: '3'

services:
  app:
    image: node:latest
    container_name: node
    volumes:
      - ./src:/src
    working_dir: "/src"

dockerを起動
$ docker-compose up -d

docker内のシェルにログイン
$ sudo docker-compose exec app bash


meross-loginの設定変更

meross-loginはUSとEUしか対応していないため、/src/utils/apiRegion.jsに下記を追記してJP(日本国内)でも動作するようにする。
  [
    'JP',
    {
      code: 'JP',
      base: 'https://iotx-ap.meross.com',
    },
  ],
※記載しているアドレスは私の環境上です。もし動かない場合は、merossの純正アプリが送信しているトラフィックを監視して送信先のアドレスを"base"に記載してください。


"key"の取得

meross-loginを下記のコマンドで実行し"key"を取得する。
"login ID" "login password"には、meross純正アプリへのログインに使用するIDとpasswordを記載する。
$ cd /src/meross-login
$ node meross login --region JP "login ID" "login password"

実行結果から"key"の値"0be*******"を確認しメモしておく。
api resp: {
  apiStatus: 0,
  sysStatus: 0,
  info: '',
  timeStamp: 1654827223,
  data: {
    userid: '*******',
    email: 'login ID',
    key: '0be*******',
    token: '****',
    domain: 'https://iotx-ap.meross.com',
    mqttDomain: 'mqtt-ap.meross.com',
    mfaLockExpire: 0
  }
}
login ok! save to user.json... all done! 


node-redの設定

パレットの管理で、node-redにnode-red-contrib-meross を追加する。
node-red-contrib-meross の"Sample Flow"に記載されている下記のコードをコピーし、

[{"id":"88f87bae.10d938","type":"inject","z":"ec2c2ba0.1671a8","name":"Get State","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":160,"wires":[["f7696f8c.ae16c"]]},{"id":"f7696f8c.ae16c","type":"smartplug-control","z":"ec2c2ba0.1671a8","confignode":"d9dc372f.d15f08","name":"Smart Plug","ip":"10.10.10.10","x":370,"y":120,"wires":[["759b6fbe.d2d68"]]},{"id":"5b5e94ca.a0c614","type":"inject","z":"ec2c2ba0.1671a8","name":"Turn On","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":180,"y":80,"wires":[["f7696f8c.ae16c"]]},{"id":"60c5c941.c24568","type":"inject","z":"ec2c2ba0.1671a8","name":"Turn Off","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":180,"y":120,"wires":[["f7696f8c.ae16c"]]},{"id":"759b6fbe.d2d68","type":"debug","z":"ec2c2ba0.1671a8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":570,"y":120,"wires":[]},{"id":"d9dc372f.d15f08","type":"meross-config","name":"Meross Config","key":"abcdef01234567890abcdef01234567890"}]
node-redのフローに読み込む。

読み込んだサンプルフローの"Smart Plug"をダブルクリックし、ノードを設定する。

ノード上のプロパティ内のMeross項目に、新規で設定を追加する。

meross-loginで取得した"key"をプロパティの"Key"項目に記載し、保存すれば完了。
あとは、"Turn ON"、"Turn OFF"、"Get Status"を押せば、meross smart plugがそれに応じて動作するはずです。

0 comments:

コメントを投稿