OmaElk:Omarchyプラグイン
安価なELK-BLEDOB / ELK-BLE対応Bluetooth LEDライトを操作するOmarchyプラグイン
- Python
- スター 0
- omarchy
- plugin
- python
- qml
- bluetooth
- linux
- open-source

🌱 きっかけ
数か月前、上司が社内のチャンネルで、DHH氏が作ったネットで話題の新しいOSOmarchyについて触れました。まあ、それが悪い考えでした。私は数年間Ubuntuを使っていましたが、この新しいOSがいかにかっこよく、カスタマイズ性が高いかを読んで、まずは別のHDDで試してみることにしました。ところが結局、PC全体をリセットしてしまいました。それ以来すっかりハマっていて、すべてが思い通りに動くところが大好きです。「We can fix everything(何でも直せる)」という考え方にも賛成です。便利なエージェンティックOSという側面についても、いつか考えを共有したいと思っています。
さて、数か月前に、使い心地を試そうと安価なBluetooth LEDライトを購入しました。ところが、このライトは専用のAndroid・iOSアプリからしか操作できません。私はずっと、そのエコシステムの外で使いたいと思っていました。そこでClaudeと一緒にバイブコーディングを始め、どこまで行けるか試してみました。その結果が、ライトを自由に操作できる本格的なOmarchyプラグインです。
✨ できること
- 🔆 バーウィジェット: Omarchyテーマの色を反映するピクセルアートの電球。ポップアップから色、エフェクト、明るさ、速度を操作できます
- 🎵 音楽連動モード: 色相がスペクトラムに追従(低音は赤、高音は紫)し、明るさは音量に追従します
- 🎨 22種類の内蔵エフェクトに加え、カラーダイアログと画面上のスポイトも搭載
- 🔄 テーマ同期: ライトをOmarchyテーマのアクセントカラーに、手動またはテーマ変更のたびに自動で合わせます
- ⌨️ スクリプト用の
omaelkCLI と、Omarchyランチャー用のメニュー生成機能
🧠 仕組み
さて、これは私の専門分野ではありませんが、Claudeの力も借りてまとめた仕組みの概要をご紹介します!
Bluetoothのスキャンと接続には数秒かかり、さらに接続済みのコントローラーは広告(アドバタイズ)を止めてしまいます。そのため、コマンドごとに接続する方式では、素早い操作が固まったり取りこぼされたりしました。そこで、小さなバックグラウンドデーモンが唯一のBluetooth接続を保持し、各コマンドはそのソケットへの1行の書き込みにしました。
omaelk CLI / バーウィジェット / メニュー ──► Unixソケット ──► デーモン ══ BLE ══► コントローラー
- ⚡ 接続後は、コマンドが約50ミリ秒で実行されます
- 🔒 ロックにより、複数のクライアントが同時に複数のデーモンを起動して接続を奪い合うことはありません
- 🩹 デーモンはBlueZの接続が詰まっても自動で復旧します
- 🔬 コントローラーのプロトコル(GATT特性上の9バイトのフレーム)を直接実装しました
🔐 プライバシーを考慮した設計
音楽モードが聴き取るのはマイクではなく、デフォルト出力のモニターです。約43ミリ秒ごとのフレームをFFTで解析した後は破棄するため、録音・保存・送信は一切行いません。ライトに届くのは3バイトの色データだけです。
📈 軽量
音楽モード中でCPU 1コアの約1.4%、メモリ37MB。アイドル時は0%です。
かっこいいと思いませんか?リソースをほとんど消費しないんです。私は細部へのこだわりを大切にしていて、OmaElkを開発する際にこの点は間違いなく意識していました。
🙏 先人たちの成果の上に
プロトコルの実装は、他の方々によるオープンソースのリバースエンジニアリングの成果を土台にしています(リポジトリにクレジットを記載)。
🧰 使用技術
Claude · Python · bleak · NumPy · QML / Quickshell · BlueZ · PipeWire