zigbee2mqttで遊ぶ その4

ボタンをセットアップしたので、ChatGPTの力を借りながら、お風呂るボタンを復活させていく。
とりあえず処理全体をどうするかだが、Node-RED上ではJavascriptが動くのでここですべてを完了させることも
できなくは無さそう。 とはいえ、既存のスクリプトとかが色々とあるので、それは流用したい。

ということで今回の構成はこうした。
Node-RED上のfunctionで、ボタン→お風呂入った、出た というイベントに変換する。

別に用意してある、Jenkins上に General Webhook Plugin を入れる。
(別に入れなくても良いのだが、パラメタの処理が楽だったので入れた)
これで、 JENKINS_URL/general-webhook-plugin/invoke?token=任意のトークン
にPOSTすることで、Jenkinsジョブを起動することができる。
ついでに、リクエストボディにJSONを投げ込めば、それをこのプラグインの設定で、JSONPathを指定して環境変数に取り込んでくれる。
例えば、 BATH_EVENT = $.event とか書いておけば良い。

とりあえず、今日はWebhookでジョブが起動すること、パラメタが渡せていることまでは確認できた。

zigbee2mqttで遊ぶ その3

SNZB-01Pが届いた。
これは… Aqaraのスイッチを選ぶ必要が全くない。 個人的には完全にSonoffの方が上位互換である。
一番気に入ったのは、金属のプレートが同梱されていること。
これを、壁に貼り付けておけば、本体の裏に結構強力な磁石がついているため金属プレートにくっつくこと。

ボタンのサイズ自体はあまり変わらないし、ペアリング時の変なクセもなく素直。
敷いて言えば、電池部を開けるときに、スマホのSIMを開けるときのようなピンが必要なことくらいか。
といっても、ピン自体も付属しているので全く問題ない。
個人的には100点と言いたい感じ。

zigbee2mqttで遊ぶ その2

Zigbee2MQTT と mosquitto と node-red をセットアップしてとりあえずボタンを押したら何かを動かすことができるようにはなった。

さて、肝心のお風呂る機能を作るぞ…の前に、ボタン設置してこようと思ったら…
床に落とした。
そして、壊れた。。 ボタンが引っかかって押せなくなった。
なんてこったい。。

ChatGPTに相談してみたら、Aqaraのスイッチは小さい代わりに弱いです。
頑丈さならSonoff SNZB-01P を選んでください。だって・・・
それを早く言ってくれ。

そして、Sonoffのボタンはどうもあまり出回ってないようで… しばらく進展しなそう。

zigbee2mqttで遊ぶ

昔、Amazon Dashボタンでお風呂時間をログしていた。
しかし、DashボタンはAmazonに殺されてしまい、今ではもうただの不燃ごみ。

では…と、AWS IoT ボタンに乗り換えたが、これもまたサービス終了。

しばらく放置していたが、なんとなくまたログを取りたいなと思って考えてみた。
…考えてみたといってもChatGPTに相談しただけなんだけども。

Dashボタンの頃と同じことをするなら、Zigbeeボタンを使えばいいらしい。
Zigbeeでの通信は、USBドングルを使えば良く、Zigbeeボタンは Aqara のボタンを揃えろ。とのこと。
ソフトウェア的には zigbee2mqtt というブリッジソフトウェアがあるので、これを使えば構築できる。
なるほど。

Sonoff Dongle-P USBドングルとAqaraのボタンで5000円強。
届いたとき、Aqaraのボタンの電池の金具が変形していて明らかにおかしくなっていたので、手で直した。
(CR2032電池の上に来るべき金具が、下に行ってしまっていた。そのせいで蓋がやたら硬かった)

最初は、Raspberry Pi Zero W が余っているのでこれでやろうと思ったが、セットアップしてみると遅い…
さすがにこれは厳しい。何より、armhf は docker も node.js もサポート外という感じなのが辛い。
これでは構築してもいまいちなので、普通にx86のサーバー上で構築した。

zigbeeの機器は、それぞれがメッシュネットワークを構築して、パケットの中継みたいなことをするらしいので
理屈上は距離が届くのではないかという期待を込めている。
(お風呂場の前にRPiでも置きたくないし…湿度すごいので)

ハマりどころとしては、なかなかペアリングがうまく行かなかった。
エラーメッセージを貼ってみると、ChatGPT曰く

① ペアリング手順(重要)

手順

  1. Zigbee2MQTTで Permit join ON
  2. ボタンのリセット穴(ピン)を長押し 5秒以上
  3. LEDが点滅したらすぐ離す
  4. その後 2〜3回 短押し(これ重要)

👉 この「短押し追撃」で安定して join します

だそうで。 怪しいなと思いながら試したら、本当にjoinした。 短押し追撃をしないとjoinが失敗する。
ChatGPTすげーな・・・

Joinが成功すると、MQTTにイベントが流れ出すのであとはそれをListenして好きに処理すればいいだけ。
多分 n8n とかを通して楽する感じになるかなと。
(相談してみたら、 node-red のがいいよと言われて結局従った)

Thinkpad X13 Gen2 が起動しなくなった

再起動したら、Boot menuに入ってしまい、どの項目を選んでも起動しなくなった。
BIOSセットアップに入ろうと思ったら、またBoot menuが表示され、 System Deployment Modeと表示された。

これは、おそらくUEFIに内蔵されたMSの証明書の有効期限が切れたので、UEFIセットアップすら起動しなくなったに違いない。

このPCは、ずっとLinuxで使っているので、証明書の更新はされていないはず。

…ということで、NVMe SSDを入れ替えて、Windows 11をセットアップし、Windows Updateをすべて更新した。ライセンスはBIOSに書いてあるタイプなので助かった。 まあ、アクティベーションが必要になるまでの間にWindows Updateだけなら終わるだろうけど。
Windows Updateの中に、Lenovo Firmware というのがあったのでコレがおそらく問題のかなと。

Windows Updateをあてて、再起動してみると BIOSセットアップにも入れるようになっていた。
で、SSDを元に戻して、念のためBIOSセットアップに入って Save and Exit したら、何事もなかったかのようにLinuxが起動してきた。

PCの寿命に対して証明書の寿命が足りないというか、証明書の更新プロセスがWindows Onlyなのはひどいというか…

JenkinsサーバーをDocker化した

めちゃくちゃ大変だった。
大変だったのは主に以下

依存パッケージの洗い出し

ホストに適当にパッケージを入れて運用していたので、それを洗い出すのが大変だった。
ジョブを実行してはコケ、パッケージを入れて… という感じ。
途中からは docker exec -it -u root container bash とやって、パッケージ追加してOKかどうかを見てから次に進む。ということをした。
ついでに、言語処理系はすべてmiseに寄せることにした。

avahi

avahi のsocketとD-BUSをコンテナにbindして、avahi-utils 入れて nsswitch.conf を書き換えれば mDNSをコンテナでも解決できる

SSH トンネル

ControlMaster と、 initがなくてゾンビが回収されなかった問題、 BUILD_ID=dontKillMe 問題

python

venv を使って書いていたが、なんか妙なディレクトリができたり、 bin/activate が実行できないとか言われたりで微妙だったので、全面的に uv に移行した。

ChatGPT契約した

個人で ChatGPT の有料プランに入ってみることにした。

なんか、自分のコーチとして使えそうな気がしたので…
ただ、今のところ、写真の加工とかをやってもらってる。 これだけでもだいぶすごい。とてもいい

AIすごいなと思った

実は会社でClaudeのアカウントをもらっていたことが判明し、早速使ってみた。

これは、なかなかいい。
それ以前にも、AIがあることを前提に仕事のやり方を考えないといけないよね。という話もあって、色々と変わっていかないと行けないんだろうなぁと思った。

初詣

近所の神社に行った。
普段は人がいる感じがしないのに正月は行列ができてる。

和服の着付けができるようになってちょっとよかった

初詣

テレビすてた。 回収所まで持っていくのたいへんだった。

Ozz 新宿行った

いつも迷子になって遠回りするので、めっちゃ遠いと思って足が遠のいてた。
実は、駅からはそんなに遠くなくて、割と近所だということがわかった。

今日は馴染みの店員さんがいたので、本当に本当に話が早かった。
おかげで、それは着れるかもしれない、これは絶対無理。ってバッサリとやってくれて、めちゃくちゃ助かった。
あと、セール中だったらしく… 1着お迎えするつもりが2着お迎えしてしまった。
この値段で1着買えるなら、もう普段着もこっちに切り替えていいのかも。。

そして、BOZのコート初出し。アームホールがキツいけれども、これはちょっと痩せたらまた変わる気がする。
部屋で着たときはこれは… だめかもと思ったけれども、着てしまえば意外と大丈夫。
大きな動きをすると怖いけど…(破れそうという意味で)
程々に暖かくて大変よかった。見た目と暖かさのバランスのギリギリ見た目寄りみたいなところ。

デコパレいってきた

前に行ったときに、もしかしたら入荷するかもしれないブラウスとコートが入荷した。って聞いたので大慌てで向かった。

いらっしゃいました。もちろんブラウスもコートもお迎え。ちょうど冬の季節でいきなり着れる。なんて素晴らしいのでしょう…

ブラウスの色が本当に美しくて最高だし、コートも…素敵。

これであとは、春ものがあれば、年中(夏以外)ずっとBOZのお洋服を着れるー

痩せよう。

Obsidian + Syncthing でスマホでもメモれるように

色々と検討したものの、最終的(?)にこれに固まる気がする。

とりあえず、前提条件として、クライアントは3種類ある。

  • PC (Windows)
  • ノートPC (Arch Linux / KDE6)
  • Android

候補として考えたのは以下。

  • pCloud (買い切りで買っているので。 Remotely Save経由)
  • iCloud
  • Google Drive (Google drive sync)
  • git (GitHub)
  • LiveSync (self hosted LiveSync)
  • SyncThing

この時点で、 iCloud は厳しい。Androidではサポートされず、Windowsも怪しいようだ。
pCloudは、WindowsとLinuxだけなら、VaultのディレクトリをpCloudクライアントで同期させればいいので楽だったが… スマホを考えるとRemotely Saveが必要になってしまう。これを使うと同期が地味に遅いというかラグがある感じがしていて、あまり使いたくない(今は無料だが、有償になるという予告も出ているし…)

Google Driveは、試していないがアリではありそう。ただ、iPhoneがいる場合はどうにもならない。
今回は、なんとなくパスしている。Google Driveにアクセスするために、GCPにアプリ作ってAPIキー取得して…が面倒だったというのもある。

gitを使うのは割と賢い気がするが、Vaultの内容をどこか外に置きたくないなぁ…
という気持ちがあるのでNG。 (なにかまかり間違ってBANされると影響が大きい)

LiveSyncは、ちょっと興味があった。が、セットアップが面倒だなぁという感じがして敬遠してしまった。

で、最後。 SyncThingを採用した。 これはこれでセットアップが面倒だが、少なくとも私のクライアント3種類には、すべて対応していて、同期も早かった。
ただ、常時起動しているサーバーがご家庭内にいる。みたいなことを前提にしているので、誰でもこれでいいとは思えない(Oracle Cloud上のAlways Freeインスタンスで起動すればいい気がするが)
ちなみに、リレーとか、グローバル探索はOFFにしていて、城内LANでのみ同期されるようにしているが、メモを書くのは一人なので特に問題にはならないだろう。

これにさらに、pCloudへのバックアップを追加して一旦は運用してみようかと思う。
(pCloudに上がらないと、この日記帳が更新されないし)

デザフェス62行ってきた

今回も、参加してる人の服を見物しにいった感じ…
あと、お洋服を着て外出したいみたいな。

ざっと見て回った感じ、皮のカバン、ちょっと気になった。がお財布的に厳しいので手がでず…
皮系のブースはすごい気になるけどもなかなか手を出せる時間ではなく…

いつもお世話になっているφさんのブースで、またバングルをオーダーして、満足して帰りましたとさ。
作家さんと直接話をしてこんな感じのが欲しいです!ってお願いできるの、贅沢すぎるー!

ちょっと思ったのは、腕のアクセサリは着けられるようになった。
指輪もまぁ… 気に入ったのはつけれる。小指だけは。(これはサイズの問題もある気がする)
首のアクセサリはなんかまだちょっと慣れない感じがする。

すごい昔から、アクセサリをつけるということをやってこなかったので、この歳になってそれをはじめからやり直している気がする。 確か高校生の頃に一時的に腕時計をしていた記憶があるけれども、それ以外でアクセサリ的なものをつけてこなかった。
なんというか、青春時代にやるであろうことをやってなかったので、今再履修している感じがする。