python、mosquitto、Home Assistantでスマートメーターから消費電力データを取得してグラフを表示しよう、という企画です。
概要はこちらの記事をご覧ください。
この記事では、Rock 4C+にmosquittoとHome Assistantを導入します。
Rock 4C+のセットアップ
ベースとして、Rock 4C+にDebian12をクリーンインストールしました。
以降、Debian12にradxaユーザでSSH接続している前提で書きます。
サスペンドしないようにする
Debian12の仕様なのかRock 4C+用イメージの仕様なのか分かりませんが、デフォルトでは一定時間無操作の場合にサスペンドしてしまい常時起動してくれないので、サスペンドしないようにします。
/etc/gdm3/greeter.dconf-defaults を編集します。
ファイルの末尾に[org/gnome/settings-daemon/plugins/power]ブロックがあります。
そこに、
sleep-inactive-ac-timeout=0
を追加します。
また、Rock 4C+にはバッテリーがないので意味がないかもしれませんが、
sleep-inactive-battery-timeout=0
も追加しました。
これにより、無操作でもサスペンドしないようになります。
$ sudo vi /etc/gdm3/greeter.dconf-defaults
# Automatic suspend
# =================
[org/gnome/settings-daemon/plugins/power]
# - Time inactive in seconds before suspending with AC power
# 1200=20 minutes, 0=never
# sleep-inactive-ac-timeout=1200
sleep-inactive-ac-timeout=0
# - What to do after sleep-inactive-ac-timeout
# 'blank', 'suspend', 'shutdown', 'hibernate', 'interactive' or 'nothing'
# sleep-inactive-ac-type='suspend'
# - As above but when on battery
# sleep-inactive-battery-timeout=1200
sleep-inactive-battery-timeout=0
# sleep-inactive-battery-type='suspend'
Dockerインストール
mosquittoとHome Assistantはコンテナとして導入するので、まずはDockerをインストールします。
リポジトリのセットアップ
必要パッケージのインストール
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
Docker の公式 GPG 鍵を追加
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
安定版(stable)リポジトリを設定
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker Engine のインストール
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
radxaユーザをdockerグループに所属させます。
$ sudo usermod -aG docker $USER
グループ設定の反映のために一度ログアウトしてログインしなおします。
Docker ComposeでmosquittoとHome Assistantの導入
スクリプトやコンテナを格納するディレクトリを作成します。
$ mkdir smartmeter
今回は以下のようなディレクトリ構成になります。
/home/radxa/ …radxaユーザのホーム
├─ha_config/ …Home Assistant用ディレクトリ(Dockerが作成)
├─mosquitto/ …mosquitto用ディレクトリ(Dockerが作成)
├─docker-compose.yml …Docker Composeの定義ファイル
└─main.py …スマートメーター情報取得スクリプト
Docker Compose定義ファイルを作成します。
$ cd smartmeter
$ vi docker-compose.yml
version: '3'
services:
# MQTT Broker
mosquitto:
image: eclipse-mosquitto
container_name: mosquitto
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
restart: unless-stopped
# Home Assistant
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- ./ha_config:/config
- /etc/localtime:/etc/localtime:ro
ports:
- "8123:8123"
restart: unless-stopped
mosquittoの設定ファイルを作成します。
家庭内でしか使わないので認証なし(allow_anonymous true)としています。
$ mkdir -p mosquitto/config
$ vi mosquitto/config/mosquitto.conf
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous true
Docker Composeを実行してmosquittoとHome Assistantのコンテナを作成します。
$ docker compose up -d
4分ほどで作成完了しました。
この時点で http://(Rock4C+のIPアドレス):8123 にアクセスするとHome Assistantのページが表示されるようになります。(設定は後で実施します。)


コメント