家族の予定は基本的に共有カレンダーで管理しているが「みんなが見れる用」として食卓近くに卓上アナログカレンダーが置いてあり、何年もの間、二重管理になっていた。ずっと気になってはいつつも、まぁ運用できてるし、単にカレンダー表示するだけでもまぁまぁ面倒なのでそのままだったが、この度 Raspberry Pi でサイネージを作ることにした。
構成はシンプルで、15インチの 1080p モニタと、余っていた Raspberry Pi 3 B (WiFi付き)
できること
- Google Calendar の表示 (ほぼ Google Calendar互換の表示をする。複数日とかも)
- 天気予報 (気象庁のXMLから取得している)
- 時計 (西暦・和暦・日付曜日時間)
10分ごとに内容を更新する。
モニタ解像度
Raspberry Pi のほとんどは 1080p までしかスムーズに出力できないので、あまり高精細なディスプレイを買ってはいけない。1920x1280 のモバイイルディスプレイをいくつか持っているけど、モニタとの相性もあるのか、まともに表示させることができなかった。素直になってください。1080pのモニタを買えばいいです。(2日ぐらい無駄にした)
15インチのモニタは微妙にデカいけど、カレンダーをフルで表示させるならこのぐらい大きくてもいいかなという印象。捨てるときのこと考えるとあんまり大きいもの買いたくないのよね……
モニタの固定
「モバイルモニタ」カテゴリのものは固定方法が考えられてない。VESAマウント? そんなものはない。ただのスレートです。
ということで3Dプリンタでスタンドを作り、棚板にビス止めすることにした。安定。
ウェブアプリ
認証情報を保持してカレンダーの画面を出すウェブサーバを立てている。これは Raspberry Pi 上ではなく、QNAP 上の Container Station で docker image を動かしている。QNAP はうちだとIP アドレス固定で使っているので管理しやすい。
ディスプレイが繋がっているサイネージ用の Raspberry Pi はブラウザでURLを開くだけ。
スマフォとかから管理画面を開いて強制リロードのシグナルを送ったりできるようにしてある。ウェブアプリ側を更新したときに呼ぶ用。
開発
ほぼほぼ Claude Code にやらせた。ウェブアプリ、ちょいちょいクソコードは書くものの、特にクライアントサイドを書かせるのは割とすんなりやってくれる。
サーバサイドはなんか結構ガイドしないとちゃんとやってくれない。
夜中は消灯
cron で 02:00 に画面を消灯、06:00 に点灯という制御を入れてある。
最近の Raspberry Pi OS (bookworm) は labwc というWayland コンポジタ実装が使われているが、あんまりこれの情報がないのでめんどくさい。
XDG_RUNTIME_DIR=/run/user/1000 # 02:00 にオフ 0 2 * * * /usr/bin/wlr-randr --output HDMI-A-1 --off # 06:00 にオン 0 6 * * * /usr/bin/wlr-randr --output HDMI-A-1 --on --mode 1920x1080
この手のものはいかに運用を楽にするかというのが問題。「うまく動かない」場合にメンテできるのが自分しかいないからだ。

