環境
- Windows11 Desktop
- Wireshark v4.0.3
- iPhone 12 mini
- +Styleのアプリ
- +Styleのスマート電球
- Wifiルータ
- 上記全てのデバイスが有線/無線でこのルータに接続
- インターネットWANもこのルータに接続
いきさつ
過去に、
参考文献1
参考文献2
などを参考に Alexa と自宅VPNサーバを兼ねている RaspberryPi 3B+ を連携して、
キーボードの入力から Alexa の定型アクションを実行できるようにしていた。
Alexa が Nodered で使えなくなる
それが最近(2023/02/06)になって、急に Nodered の Alexa-remote2 のアカウント認証が通らなくなった。
認証画面にてメールアドレスやパスワードを入力すると、以下のようなサイトに移動してしまう。
alexa.amazon.co.jp がなくなったらしい?
調べても同じ問題に直面している人がいなかったから、
参考文献2での Nodered のコード変更がまだアップデートなどに対応していないせいかと思い、
Amazon.com のアメリカサーバに新しくアカウントを作ったが、上手くいかなかった。
Nodered から Alexa 内の定型アクションが実行できないと、 Alexa を通してしか実行できないコマンドが使えなくなってしまう。非常に不便。
とりあえずの解決策は取れたが、それは次の投稿で。
まずは投稿する癖をつけよう。
続けて次の投稿をしようと思ったら、投稿頻度が高すぎるとQiitaに怒られたので、
このまま続きを書く。
もともと Nodered と Alexa でやっていたこと
元々キーボード入力で実現したかった定型アクションは、電球の切り替え。
PC用デスクと寝室が一体の部屋で暮らしているため、
PCを触るときには天井の電球をオンに、
布団でスマホを触るときは間接照明をオンにしたい。
この切り替えをするために毎回「アレクサ」と呼びかけるのが面倒だった。
だから Raspi にワイヤレステンキーを接続して、その入力に応じて Nodered から Alexa の定型アクションを行う、という手順を取っていた。
しかし Nodered と Alexa の連携が取れなくなったので、
Nodered から直接スマート電球のオンオフをコントロールすることにした。
今回の作業
自室で使用しているスマート電球は
SwitchBot製
Tplink製(正確にはスマートプラグが電球に接続していて、スマートプラグのオンオフで電球を操作する)
+Style製
※この合成獣状態が良くないとは思うのだが、これのおかげで勉強するいいきっかけになったのでヨシ。
上記3つのうち、 Nodered から直接叩けるものは SwitchBot と Tplink。
+Styleに関してはスマホアプリはあるものの、nodered 上では操作できなかった。
SwitchBot と Tplink に関して開発してくれた方に感謝。
SwitchBot
SwitchBotは
を参考に node-red-contrib-switchbot-api で以前行っていた。
SwitchBot の スマートリモコンが必要で、アプリから認証ファイルとかを出力する必要があったはず。
明記できなくて申し訳ない。
Tplink
Tplinkは node-red-contrib-tplink が最も良さげに見えるのだが、上手くいかなかった。
node-red-contrib-tplink-tapo-connect-api の方で上手くいった。
ただ、 node-red-contrib-tplink-tapo-connect-api は各ノード毎にメールアドレスとかを書く必要があるのが面倒だったので、
command ノードにmsg.payloadを設定する function ノードを付けることで、コピペで複製しやすくした。
それと、43un700b というモニターを使っていて、RJ45を使うとコマンドラインからモニターのpbpを制御できたりするから、そのノードも組み合わさって、(例: bash /home/shiganai/43un700/off.sh)
以下のような switch ノードで単純につなぐものが出来上がった。
+Style製の電球に関してはスマホアプリを解析することで
以下のように乗っ取れないかと試行しているところ。
メインの電球ではなかったので問題は大きくないが、勉強になるので頑張っている。
アプリを乗っ取るのにtcpやtslの勉強が必要で、おそらく乗っ取れない。
アプリ乗っ取りの試行錯誤はまだ決着がついていないので、次回に回す。
追記:
- (23/02/06)アプリの乗っ取りは出来なかった。