2025年11月03日

【スマートホーム】Node-RED Alexa Home Skill Bridge からの脱却A【結論:無理だった。疲れた】

こんにちは。

タイトルのとおり疲れちゃったので簡単に書きますが、私の考えていた構成ではリプレイス適わずでした。
chatGPT先生にお伺いしながら、

 ・コンテナ版Home Assistant(Dockerコンテナ)の仮想スイッチ
   ↓
 ・MQTT(Dockerコンテナ)
   ↓
 ・Node-REDの[mqtt in]ノード

という流れまでTry&Errorを繰り返し2日間かけて構築し動作も想定どおりに出来たのですが、AlexaとHomeAssistantの仮想スイッチを連携する「Matter Bridge」がコンテナ版Home Assistantではサポートされてないとか。

はぁあああああ??
「Alexaへの発話をトリガーにNode-REDに処理フローをパラメータ付きで到達させる」
という最終目的は最初の最初に伝えてあるし、そのうえでコンテナ版Home Assistantを勧めてきたのは、先生あなたですよ?
ちゃぶ台ひっくり返すんじゃねーよ!(ToT)

chatGPT先生はアレっすね、同一セッション内なのにさっきと違うこと言ってきたり、上述のように前提条件を忘れて無効な手順を教えてきたり・・・。
まあよく聞く話ではありますが、実際に自分が振り回されてみて痛感しましたわ。
「こいつダメじゃん」と・・・。

というわけで、前回「長くなる」とか大風呂敷広げましたが2回目でこのシリーズ終了ですw
ただ、まだ完全に諦めたわけではなく、

 @ もう1台ラズパイを購入してフル版HomeAssistant専用機にする。

 A 今のラズパイをフル版HomeAssistant機にする。
   ・Add-onを利用して既存環境を再構築(Node-RED、Nginx、SMB、etc...)

のどちらかで検討していきたいと思います。
お金掛けたくないんでAでいきたいですが、既存環境をいったんぶっ壊すってのがね・・・
Add-onでどこまで再現できるのかも未知数ですし・・・

それでは、いつの日か当記事タイトルの「B」を書けることを祈りつつ・・・アデュー!


2025-11-06追記:

先日書いた記事のとおり、Node-RED Alexa Home Skill Bridgeは開発者Benさんが対応してくれたことで、Amazonが警告する2025年11月04日の機能停止を回避できることになっていました。
Benさんはご自身のGitHubで「申請はした。あとはAmazon次第」ということも言っていて一抹の不安があったのですが、当日を迎えさらに翌日も迎えてもちゃんと機能していますね。ひと安心です。
というわけで、(Benさんの気が変わらない限り)Node-RED Alexa Home Skill Bridgeはまだまだ使い続けられることになりました。
当記事が目指すゴールもそんなに急いで達成する必要はないので、ゆっくりゆっくりやろうと思います。


2025-11-11追記:

その後もいろいろと調査した結果、AlexaとRaspberryPi4BのブリッジとしてMatter規格に拘らなくてもいいと知って脱力してしまいました。
そもそもなんで私はMatterじゃないとダメって思い込んだのでしょう?
Matterじゃなきゃダメだと思ったから、Node-REDの野良Matterカスタムノードを試しましたし、Home AssistantのMatter Bridgeに頼ろうとしたわけですが、「Alexaにデバイスを認識させるAPI」が存在するらしいですね。
つまりはNode-REDのカスタムノードを自作するってことになるんでしょうか?
本当に私に出来るでしょうか?
いまこの記事を書いてる瞬間は相当腰が重いです。







.
posted by Huwy at 13:58 | Comment(0) | TrackBack(0) | スマートホーム | このブログの読者になる | 更新情報をチェックする

2025年10月26日

【スマートホーム】Node-RED Alexa Home Skill Bridge からの脱却@

こんにちは。

今回は開発者さんが対応してくれたおかげで事なきを得ました。
しかし所詮は有志開発者による野良ソリューションです。
サーバーも開発者さんが準備したものにタダ乗りさせてもらっている状況であり、いつ利用できなくなるかという不安は今後も付き纏います。

そこで、そうした外部サービスに依存せずローカル環境だけで同じ仕組みを再現しようという試み。
長くなりそうなのでシリーズ化します。


■おさらい

まずは Node-RED Alexa Home Skill Bridge の簡単なおさらいから。
イギリスのITエンジニアBen Hardillさんが余暇プロジェクトとして作成したソリューションです。
  1. Alexaカスタムスキル「Node-RED」
  2. Node-REDカスタムノード「node-red-contrib-alexa-home-skill」
  3. Node-RED Alexa Home Skill Bridgeサーバ(ユーザ登録、デバイス定義)
という構成。
これらをすべて結びつけることで、Alexaへの発話をトリガーとしてNode-REDにパラメータ付きで処理フローを到達させることができます。
3.のデバイス定義は仮想のもので、例えば私の場合はスマートライトとして定義しています。
スマートライトのプロパティは細かく、明るさプロパティは0%〜100%までの値を取れるので、Alexaへの発話パターンもNode-REDに渡せるパラメータも100パターン作れることになります。


■前提

今回ローカル置換させる私の環境について挙げておきます。
  • Amazon Echo Show 5 第1世代
    非常に古いモデルですが、後述するMatter対応はファームウエアのアップデートで適用済み(のはず。ただしWi-Fiのみ)。
    上述のAlexaカスタムスキル「Node-RED」をインストール済み。

  • Node-RED v4.1.0
    Raspberry Pi 4B で常時稼働中です。
    上述のNode-REDカスタムノード「node-red-contrib-alexa-home-skill」をインストール済み。

■失敗談

ローカル環境でAlexaとNode-REDを結びつけるにはMatter規格で接続するのが良さそう。
Node-REDのカスタムノードには既にMatter対応を謳うものがいくつか存在しますが、そのどれもAlexaがデバイスとして認識してくれませんでした。
AppleのHomeKitや、GoogleHomeでは成功例があるようですが、AmazonEchoではどうも上手くいかないみたいです。
これを機にスマートスピーカーを変えてしまおうかとも考えました。
でも数万円の出費も薄給サラリーマンには厳しく、無料で出来るならそれに越したことはありません。


■方針

上述のインストール済みスキル・ノードを別の仕組みに置き換えていく作業となります。
現在考えている構成は以下のとおり。
  • Amazon Echo Show 5 第1世代
    そのまま使います。

  • Home Assistant
    オープンソースのスマートホームサーバOSです。
    Matterやその他の規格をカバーします。
    Node-RED Alexa Home Skill Bridge の代替となる肝ですね。
    インストール先はRaspberry Pi 4B となりますが、すでにいろんなアプリケーションが動いているので、共存させるためにDockerコンテナ上に構築します。
    ここで Node-RED Alexa Home Skill Bridge 同様に仮想デバイスを定義し、Matter規格を通じてAlexaに認識させます。

  • Node-RED v4.1.0
    上述のとおり Raspberry Pi 4B で稼働中の構成をそのまま使います。
    Home Assistant との接続はMQTTプロトコルを使う予定。


■今回はここまで

Amazon Echoの世代の古さがネックになるかもしれないと懸念しています。
Amazonの発表によれば Echo Show 5 第1世代 もMatterコントローラとして機能するはずですが、「失敗談」の項でも述べたとおり、AlexaのMatterデバイス登録はかなり厳格なもよう。
今回もHome Assistant上に仮想デバイスを構築してそれをAlexaに登録するわけですが、ちゃんと認識してくれるのか・・・・?






.
posted by Huwy at 08:20 | Comment(0) | TrackBack(0) | スマートホーム | このブログの読者になる | 更新情報をチェックする

2025年10月17日

【スマートホーム】Node-RED Alexa Home Skill Bridge 使えなくなるん?




無題の図形描画.png


こんにちは。

AmazonEcho(Alexa)とラズパイで運用中のNode-REDを繋ぐNode-RED Alexa Home Skill Bridge が使えなくなる??
先日Amazonからこんなメールが届きました。
我が家のスマートホーム構成が崩壊する危機です。

スクリーンショット 2025-10-17 155508.png

Node-RED Alexa Home Skill Bridge はAlexaスキルとNode-REDカスタムノードで構成されていますが、どちらもメンテナンスが全然されていなくてAmazonが要求する仕様を満たさなくなったと。

いやマジ困る!と思っていましたが、結論を言うと開発者Ben Hardillさんがメンテして無事に使い続けることが出来るもよう。
BenさんのGitHubで報告されています。

この週末は代替ソリューションを探すとか、もう人様に頼らずMatterをがっつりお勉強してローカル対応するとか、できればやりたくない対応に迫られるかと気を揉んでいましたがその必要はなさそうです。

Alexaにインストールされたスキル「Node-RED」は自動でアプデが完了しているはずです。
ただし、
 アプデの影響で「いったん無効化→再度有効にしデバイス追加」というひと手間が必要
になるもよう。
たぶん自動アプデ後だと思うんですけど、私の環境でも処理フローがNode-REDまで到達しない状況でした。
上述のひと手間でちゃんと動作するようになりました。

Benさんのご厚意で長いこと無料で使わせてもらってますが、メンテ停止していたことからも分かるとおりご本人はもうあまり興味持ってなさそう。
いつ本当に使えなくなるかも分からない状況には変わりありません。
やろうやろうとしてほぼ手が着けられていないMatterのお勉強やんなきゃなあ・・・。





.

posted by Huwy at 16:20 | Comment(0) | TrackBack(0) | スマートホーム | このブログの読者になる | 更新情報をチェックする

2024年07月21日

【スマートホーム】Node-REDのバージョンアップでちょっと問題発生した話

こんにちは。

AmazonEchoとNode-REDをブリッジしてくれる「Node-RED Alexa Home Skill Bridge」というAlexaスキルがあります。
AmazonEchoから制御をNode-REDに渡すことで、自由自在にプログラムできるようになります。
私はこれを利用してAmzonEchoからの家電操作にひと工夫加えていました。

さて、Node-REDの新しいバージョンがリリースされました(v4.0.2)。
Raspberry PiにインストールしていたNode-REDをバージョンアップさせてみたら・・・
「Node-RED Alexa Home Skill Bridge」のサーバに繋がらなくなってしまいました(T_T)
接続を試みているようですが、ずっと下画像のまんまです。

スクリーンショット 2024-07-21 191025.png

難しいことは分かりませんが、Node-REDのバージョンアップに伴いNode.jsのバージョンも20 LTSに上げたのが原因のようです。
Node.jsのバージョンを18にダウングレードしたら無事に接続できました。

「Node-RED Alexa Home Skill Bridge」は有志による野良Alexaスキルであり、野良Node-REDノードです。
ローンチはもう8年前であり4年前を最後に更新もされていませんが、Node.js20に対応できていないからといって開発者の方に文句を言うわけにもいきません。
現在でもサーバを稼働させ続けてくれてるわけですし、むしろこれまでこのスキルのお陰でスマートライフを満喫できたことを感謝すべきでしょう。
もし将来のNode-REDがNode.js18を足切りするようなことがあればこのスキルはもう使えないということになりそうです。

ソースはGitHubで公開されているので、いっちょNode.js20対応やってみる???
すいません言ってみただけです。







.




posted by Huwy at 20:14 | Comment(0) | TrackBack(0) | スマートホーム | このブログの読者になる | 更新情報をチェックする

2023年11月10日

【スマートホーム】Switchbotボット(指ロボット)をリプレイス

こんにちは。

半年以上ぶりの更新となりました。
今回は、スマートホーム向けのさまざまなIoTデバイスを発売しているSwitchbot社の「ボット(指ロボット)」を置き換えた話題です。
通常の利用であれば、わざわざブログに書き起こすこともないくらい単純な置き換え作業です。
ですが私は指ロボットをシングルボードコンピュータ「Raspberry Pi」からコマンドを実行して利用しているため、少し躓くことになりました。



salastore_kk07b7nxv4r.jpg



■壊れ・・・てはいない → いや壊れた

置き換えに至った経緯は単純です。経年劣化です。
バッテリーは十分な電圧なのに、指ロボットの指の動きが極めて緩慢になってしまいました。
指の挙動はSwitchbot公式モバイルアプリである程度調整できるのですが、その設定もガン無視されます。
きっとモーターがもうダメなんでしょうね。 約4年ほどで寿命を迎えたようです。
2023/11/15追記:
ついに緩慢な動きさえ出来なくなり、モーターが悲鳴を上げるだけになりました。
分解してみると、モーターから伸びるシャフトを接続する指部品の穴が割れていました。
これではモーターのパワーが指部品に伝わるはずがありません。
強力な接着剤やパテで直したりすることも考えましたが、諦めて廃棄することにしました。


■新規購入そして置き換え・・・あれ?

ちょうどAmazonでSwitchbot社製品がセールとなっていましたが、メルカリで未使用品がもっと安く手に入りました。
先述のとおり私は指ロボットを公式アプリではなくRaspberry Piから実行する環境を構築しています。
指ロボットに対するコマンドラインのうち、Bluetooth MACアドレス部分だけを書き換えれば済む・・・そう思っていました。
ええ、エラーが出て動きません。え〜〜〜・・・・・


■MACアドレスだけじゃなかった

何しろ4年ぶり。当時Raspberry Piから実行できるようになるまでにどんな手順を踏んだかなんて覚えちゃいません。
いろいろ試行錯誤しているうちになんとか動かせるようになりました。
ポイントはコマンドパラメータに与えるハンドル値でした。
Raspberry Pi(Linux)からBluetoothで指ロボットに指示を出すコマンドは以下のとおりです。

# gatttool -i <hci#> -b <BLE MACアドレス> -t random --char-write-req -a <EndGrpハンドル> -n <動作モード>

今回躓いたのは、<EndGrpハンドル>の部分。
<BLE MACアドレス>だけでなく、<EndGrpハンドル>の値を変更する必要がありました。


■手順

いろいろ試行錯誤したのでもしかしたら以下の手順のうち必要ないものもあるかもしれません。
リセットして確認する気もないので、一応やったこと全部書いていきます。

 1. Raspberry Piに指ロボットを信頼させる。
 # sudo bluetoothctl
 [bluetooth]# connect <BLE MACアドレス>
 [bluetooth]# trust <BLE MACアドレス>
 [bluetooth]# exit
 # 
 2. EndGrpハンドル値を確認する。
 # gatttool -i <hci#> -b <BLE MACアドレス> -t random --primary
 attr handle = 0x0001, end grp handle = 0x0009 uuid: 00001800-0000-1000-8000-xxxxxxxxxxx
 attr handle = 0x000a, end grp handle = 0x000d uuid: 00001801-0000-1000-8000-xxxxxxxxxxx
 attr handle = 0x000e, end grp handle = 0x0013 uuid: cba20d00-224d-11e6-9fb8-xxxxxxxxxxx
 3. 上述の指ロボットに指示を出すコマンドの可変部分に適用する。
<hci#>
Raspberry Pi側のBluetoothモジュールの識別子です。私の環境では "hci0"と指定しています。

<BLE MACアドレス>
指ロボットのBluetooth MACアドレス。公式モバイルアプリに接続するとアプリから確認できます。

<EndGrpハンドル>
上述の手順で調べたハンドル値です。

<動作モード>
指ロボットの動作をコードで指定します。押す(570100), TurnON(570103), TurnOFF(570104) 

■最後に

劣化した旧指ロボットのファームウェアバージョンはv6.3、 新規購入した指ロボットはv6.6でした。
動かなくて困っているうちにこんな相違点を見つけてしまったものですから、もう従来のgatttoolコマンド自体が受け付けられない可能性を勝手に考えてしまい迷走してしまいました。
なにしろ最近のIoT業界はMatterという規格を標準化しようとしています。
きっと新しいファームウェアが当たっている指ロボットは、Matterのお作法に従ったコマンドしか受け付けないのだ・・・そう思い込んでしまいました。

そうではないということに気付いたのはコマンドのエラーメッセージに「Invalid handle」、ハンドル値が不正だよと表示されていたからです。
素直にハンドル値を探れば良かっただけでした。ちゃんとエラーメッセージ見ようぜ私よ。

余談ですが上記のような無駄な苦労することなく、MACアドレスを指定するだけで指ロボットを動かせるPythonスクリプトがネット上に出回っています。(っていうかSwitchbot公式です)
それを使ってもよかったのですが、旧指ロボット購入時に試してパフォーマンスが悪かったので今回も敬遠しました。







.


posted by Huwy at 14:58 | Comment(0) | TrackBack(0) | スマートホーム | このブログの読者になる | 更新情報をチェックする