2024-03 日記
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. なので実際のものとは何も関係がありません. それから,写真のように見える画像はCGもしくは念写によるものです.
2024-03-30 (土)
肉を食べた。
https://github.com/binzume/mini-matter これ、なんとかAndroidのホームアプリからWiFi設定できるところまで動いた。
2024-03-20 (水)
春分の日。
春分の日と秋分の日を休日にしたのなんでだろと思って調べたら、昼夜の長さが等しく「自然のあらゆる生命が若々しく盛り上がる時」とか書いてある。実際のところは、春季皇霊祭や秋季皇霊祭というのが昔からあったからっぽい。
2024-03-19 (火)
MatterのPASEの鍵交換に失敗してた理由は connectedhomeip の実装と見比べてみて分かった。
仕様にいくつか罠があったのだけど、まずSPAKE2+は最新版ではなく、2020年のdraft版で実装する必要があった。ほとんど同じだけど、HKDFで生成する鍵の長さがなぜか半分しかない。
あと、仕様ではハッシュ関数に通す値に Matter という文字列が入っているけど CHIP にしないといけなかった。仕様の名前が変わったときに仕様書内の文字列を全部置換したのだろうけど、ここを変えると互換性壊れるので、世の中の実装はそのままCHIPを使い続けているっぽい。。。そしてMatter 1.2の仕様でさりげなくCHIPに戻っていた。
AndroidがStatus Report返さないように見えたのは単にACKフィールド忘れていただけだった。ADBでログを見てるとAndroid Homeアプリも connectedhomeip を使ってそうだった。
ECC周りは https://github.com/kmackay/micro-ecc を使ってみようと思ってたけど、HMACやHKDFが欲しかったのとどうせSSLも使うので今回はESP32のSDKに入ってたmbedtlsの実装を使った。SSLの内部で使うことを意図した実装なので説明少ない。
2024-03-17 (日)
せっかくなので、MatterのPASEを実装してみていたのだけど、すんなりとは動かないな。。。Androidからつなぐと、PAKE3のパケットが返ってこないので、適当に実装したSPAKE2+の鍵交換のどこかが間違ってるのだろうけど。
鍵の検証に失敗したらStatus Report messageを送れと書いてあるけど、Androidは何もレスポンスを返さずに切断してくるような気がする。iOSはホームハブに接続してないとデバイスの設定すらさせてくれなかった。
Matterでデバイスに接続するとき32bitのpinから共有鍵を作るために、P-256曲線でSPAKE2+鍵交換をしているのすごい。
2024-03-14 (木)
確定申告。
2024-03-09 (土)
スペースワンのロケット上がらなかった。。。
* Matterの仕様を眺める
ESP32用のMatterのライブラリを触ってたのだけど、やはりライブラリが大きすぎて、素のESP32だとほかの事が出来ない。そもそもMatterのPASEがまだ良くわかってないので仕様の方も見てみる。
仕様書のダウンロードは無料だけど、メールアドレスと会社名と名前を要求される。登録するとメールで送られてくる。ただ、登録しなくても、仕様自体は検索すればたくさん出てくる。例えば これ とか。
PASEでWiFiの設定するだけでも、通信のためにBLEの上にTCPもどきのBTPを実装して、そのうえでAESで暗号化されたMatterのセッションを実装して、Matter TLVのエンコード・デコードを実装しないといけない。そしてDACはやっぱりECDSAを使うように指定されていた。
ただ、ESP32はハードウェアでAES扱えるし、ECDSAもhttps使うためのTLSライブラリに含まれてるので、実は難しく考えなくても実装できそう?
2024-03-08 (金)
ESP32-C5 Status: https://github.com/espressif/esp-idf/issues/13331
esp-idfのリポジトリ眺めてたら、たぶんESP32使ってる人のほとんどが思ってる問題がissueとして挙げられてた。そしてすぐcloseされていた。
2024-03-06 (水)
* Matterについて少し調べる
自作のデバイスをWiFiに接続するとき、Matterデバイスとして振舞えばスマホで簡単に設定できて便利そうだと思って少し調べてみる。
Matterは色々なものに依存していてドキュメント読んで理解するのは時間かかりそうなので、実装から。
まず、 https://github.com/espressif/esp-matter というESP32でMatterを使うSDKが用意されているのだけど、巨大でビルドするのも面倒。そもそもMatterだけでプログラム用のFlash領域使い切りそうに見えるので、最低限必要なものが何なのか見てみる。
Matterデバイスの挙動は何も知らなかったので、最初に読むのは https://speakerdeck.com/hideakitai/matter-wo-remo-nano-dehazimeyouこれが分かりやすかった。
最低限、BLE上でPASEを実装すればWiFiへの接続ができそう。
Device Attestation Certificateを用意しないといけないっぽいけど、esp-matterを見ると開発用の証明書が用意されている。実装読むとPASEのやりとりのレスポンスを秘密鍵で署名して返さないとだめっぽい。そして、署名がECDSAなので全部実装する場合それだけで面倒。いまどきのIoT機器はTLSで通信するだろうしECDSAとか使えるよねということなのかも。
DACの確認の後、NOCを受け取って、利用できるアクセスポイントの情報などを聞かれて、スマホ側でどこに接続するか選択して、SSIDとパスワードが送られてきそう。
おおよその流れは分かったけど、やりたいことのわりに面倒。
というわけで、自分で実装するのはあきらめておとなしくライブラリ使った方が良さそう。
https://github.com/Yacubane/esp32-arduino-matterplatform.ioから使うにはこのライブラリが一番楽そう。BLEスタックをNimBLEに入れ替えてたりして、省メモリと書いてあるけど、それでも動作中の残りのヒープが100kBくらいしかない。。
2024-03-03 (日)
ESP32とかで作った機器のWiFiの設定が面倒なので、Matterに対応してGoogle Homeアプリとかで管理できるようにすれば良さそうに思ってるのだけど、Matterのプロトコル自体が意外と複雑で悩ましい。
https://github.com/Yacubane/esp32-arduino-matter これ使えば比較的簡単そう?
2024-03-02 (土)
先週買った電子ペーパーモジュールはとりあえずカレンダーにした。
最初は M5Stack ATOM を使っていたのだけど、なるべく薄くて省電力のESP32モジュールにしたかったので Seeed Studio XIAO ESP32C3 を使ってみた。
ESP32-C3なので、CPUがRISC-Vに変更されてる。C3はクロックが少し低いのと1コアしかないけど、特に問題なかった。ちょっとした処理をするだけなら、今までのESP32の中で一番値段と消費電力と処理速度のバランスが良さそう。
買ったとき気づいてなかったけど、XIAO ESP32C3にはバッテリーの充電回路がついていた。試しに適当なリチウムイオン電池をつないだだけで動いた。
あとは、サーバサイドでカレンダー画像を生成して、ESP32側では定期的に更新チェックして表示するだけ。
ケースは3Dプリンタで適当に作ったけど、バッテリーとか色々入れて、なんとか全体の厚さが8mmに収まった。
- クライアント(ESP32) https://github.com/binzume/esp32-epaper
- サーバ(Go) https://github.com/binzume/cal-server