python、mosquitto、Home Assistantでスマートメーターから消費電力データを取得してグラフを表示しよう、という企画です。
概要はこちらの記事をご覧ください。
この記事では、ブートと同時にRock 4C+本体のディスプレイにHome Assistantの画面が表示されるようにします。
VNC接続を有効化
Rock 4C+にはキーボード、マウスを接続しておらず、PCからデスクトップをリモート操作できたほうが都合が良いのでVNC接続を有効化します。キーボード、マウスを接続して直接操作する場合はこの項目は飛ばしてかまいません。
必要なパッケージをインストールします。
$ sudo apt update
$ sudo apt install x11vnc net-tools -y
サービスの設定ファイルを作成します。
$ sudo vi /etc/systemd/system/x11vnc.service
内容は以下のとおり。
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target display-manager.service
[Service]
Type=simple
User=radxa
Group=radxa
# -auth guess で現在のディスプレイ認証情報を自動検索させます
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/radxa/.vnc/passwd -rfbport 5900 -shared
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
サービスを有効化・起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable x11vnc.service
$ sudo systemctl start x11vnc.service
サービスの状態を確認します。エラーがないことを確認してください
$ sudo systemctl status x11vnc.service
RealVNCなどVNCクライアントから接続して、デスクトップが表示されることを確認します。
Debian自動ログイン設定
Rock 4C+を起動したらログインスクリーンをスキップしてradxaユーザで自動ログインし、デスクトップが表示されるようにします。
今回はradxaユーザで自動ログインするように設定していますが、ガチガチに権限を縛ったブラウザ表示専用ユーザみたいなものを用意して使うとより安全だと思います。
$ sudo vi /etc/gdm3/daemon.conf
[daemon]ブロックに以下の行を追加します。
AutomaticLoginEnable = true
AutomaticLogin = radxa
[daemon]
# Uncomment the line below to force the login screen to use Xorg
#WaylandEnable=false
# Enabling automatic login
# AutomaticLoginEnable = true
# AutomaticLogin = user1
AutomaticLoginEnable = true
AutomaticLogin = radxa
再起動して、radxaユーザで自動ログインされデスクトップが表示されることを確認します。
$ sudo reboot
ブラウザ(chromium)の自動起動設定
次に、ログインしたら自動でブラウザが開き、Home AssistantのWebページが表示されるようにします。
設定ファイルを作成します。
chromiumはキオスクモードにしたりエラーダイアログを抑止したりするオプションを付けています。また、Home Assistantが起動する前にchromiumが起動してしまうとページを表示できず止まってしまうので、30秒スリープを入れています。
$ vi /home/radxa/.config/autostart/kiosk.desktop
[Desktop Entry]
Type=Application
Name=Kiosk
Exec=sh -c "sleep 30 && chromium --kiosk --noerrdialogs --disable-infobars --check-for-update-interval=31536000 http://localhost:8123"
X-GNOME-Autostart-enabled=true
再起動して、
radxaユーザで自動ログイン→デスクトップ表示→chromium起動→Home AssistantのWebページが開く
の一連の動作がおこなわれることを確認します。
ディスプレイの自動消灯
夜中誰も見ていないときに画面が光っていてももったいないし、設置場所によっては眩しいかもしれないので、夜間はディスプレイを消灯するようにします。
本当は「部屋が暗くなったら消灯」「明るくなったら点灯」みたいな動作が出来ればよいのですが、今回の構成では明るさセンサーは無いので時刻で制御します。
デフォルトではcronがインストールされていないので追加します。
$ sudo apt install cron
ディスプレイを点灯・消灯するcron定義を追加します。
$ crontab -e
# 毎日 22:00 に画面オフ
0 22 * * * export DISPLAY=:0 && xset dpms force off
# 毎日 06:00 に画面オン
0 6 * * * export DISPLAY=:0 && xset dpms force on
動作確認は、設定時刻になるのを待つか、crontabに書く時刻を変えて実施しましょう。(今から3分後に消灯、5分後に点灯、みたいな設定にして待つ)
まとめ
これで完了です。
・pythonスクリプトからMQTTブローカーを介してHome Assistantに電力データを渡し表示する
・電力データ取得pythonスクリプトはサービス化しエラー時は自動でサービス再起動する
・ブートと同時にRock 4C+本体のディスプレイにHome Assistant画面を表示する
を実現することができました。


コメント