zigbee2mqttで遊ぶ その5

お風呂時間をGoogle Calendarに保存することにした。
これは、Rescue Time というアプリケーションがやってるのを真似した。

そして、Mastodonへの投稿も復活させた。
あとは、Slackへの投稿だけではあるけれども、これはちょっとまだできていない
何にしても、あとはしばらく運用してみて不具合を潰したいなと思っている

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 に移行した。

preloader+hashtool -> shim に移行した

ChatGPTに頼りまくった。
ちょっとだけわかったことをまとめてみる。

UEFIから最初に起動できるバイナリは、UEFIで信頼できる鍵だけ。
なので、通常はMicrosoftに署名してもらう必要がある。
(署名に使う鍵を登録することもできるが、ミスって既存の鍵を消しちゃったらPCが文鎮化するらしい。しかも、コマンド見てるとオプションつけ忘れるとアウトみたいなデンジャーさを感じる)

現状、Microsoftが署名してくれているのはPreloaderか、shimの二択。
systemd-bootとかgrubに署名してくれればいいんだけど、残念ながらそうはいかず…
(バージョンアップごとに署名してもらわないといけないので、更新が頻繁なものは向かないぽい)
ArchWikiを見ると Preloaderが先に書いてあるけれども、今からやるならshimのほうが絶対いい。Preloader+hashtoolの機能はshimにもあるので普通に入れ替えて良い。

で、shimに乗り換えると何が良いかというと、MOK (Machine Owner’s Key)が使える。
UEFIで起動するときはUEFIから信頼された署名がないといけないが、shimがカーネルを起動するときには、自分で署名したカーネルを信頼する。ということができる。
(SSL証明書でいうところの、CAにオレオレCAを追加したイメージ)
これで、カーネルが更新された際にHashToolが起動して、手動でカーネルイメージをEnrollするという作業がなくなる。

ディスクの暗号化周りも行っているが、この変更は特に私には影響がなかったようで、
本当に入れ替えだけで済んだ。

緑内障の疑いの件

眼科二回目。

視野角検査を受けてきた。 中央を見ながら周辺に丸い光が出るので、見えたらボタン押してね。みたいな検査だった。

結果、左目の一部が怪しい(スコアが悪い)

話を聞いてみると、結局のところこれは遺伝で決まっていてなる人はなる。
しいて言えば、カフェイン取りすぎとたばこは良くないとのこと

そして、スコアが悪いのは実は機械慣れしてないというのもあるので、経過観察をしましょう。
半年後にまたきてください。となった。

GLM 14thいってきた

今回から渋谷ヒカリエ。

何がいいって、外で人だかりができてないので大変良かった。
入口がぐるっと回ったところにあるという罠はあったが。

とにもかくにも広くなった。本当に広くなった。
通路が今までの2,3倍になったのではないか?
その分、出展者数は意外と増えておらず、もうちょっと詰めてもいいのかもという気もした。

自撮りエリアができたのは本当に最高、それでなくても建物もおされなので良き。
今回も楽しかったなぁ

ChatGPT契約した

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

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

AIすごいなと思った

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

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

raar行った 3

今回のは本当に大ヒットだった。 すごい。
世界が変わった感じがする。

初詣

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

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

初詣

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