Raspberry Pi 5がやってきた・母艦をRaspi5に移動

Raspberry Pi(ラズパイ)

Raspberry Pi 5がやって来たのでRaspi5を母艦にすべく初期の設定後にJetson nanoからInfluxDBを移動させてIPアドレスも変更してそれぞれ固定する。

Raspberry Pi 5 8GBを使った感想は、「ものすごく安定していて速い」の一言。負荷をかけても安定しているしGUIでもサクサク動いて、ラズパイ5でオフィスの作業くらいはできそうな気がします。

センシングデータを集める母艦のコンピューターとしては十分すぎる。

Raspi5に変わってJetson nano 2GBはそろそろ引退です。

専用ヒートシンク付きファンと、専用のUSBアダプターで安定運用可能

Raspberry pi 5 設定

まずはMicroSDにイメージを焼く。次世代のラズパイはMicroSDではなくて大容量なSSDに変わってきそうですね。

Raspberry Pi Imager 1.8.4

ここからRaspberry Pi ImagerをダウンロードしてPCでMicroSDにOSをインストールしていきます。

次の項目でWifiやホスト名など設定可能。

以下の5項目を予め設定しておけます。

  • ホスト名
  • ユーザー・パスワード
  • Wifi SSID・パスワード
  • ロケール
  • SSHを有効化

Raspberry Pi ImagerでSSHログインするとことまでインストール・設定できますので、ラズパイ5を起動したらそのままPCなどでPuttyで接続できるのが便利なところ。(IPアドレスは固定されていない場合、WifiルーターでIPアドレスを調べる必要がある。)

Linux バージョン確認

インストールしたRaspberry pi 5のDebianバージョンをチェックする。

sudo apt install lsb-release
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm

No LSB modulesと出るがは特に必要ないみたい。

rootパスワード設定

ラズパイはrootパスワード設定されていないので設定する。

$ sudo passwd root
New password:
Retype new password:
passwd: password updated successfully

suでrootになれる。

su
Password:
root@Raspi5:/home/go#

Jetson nanoでInflux1のデータをバックアップ・コピー

この項目は旧母艦のJetson nanoでの作業。

InfluxDB1 バックアップ

Back up and restore data in InfluxDB v1.8 | InfluxDB OSS v1 Documentation (influxdata.com)

/home/go/influxにバックアップする。

influxd backup -portable /home/go/influxdb

バックアップできたらRaspberry pi 5にコピーする。

今のところ↓以下のIPアドレスになっている。後ほどRaspberry Pi 5が母艦になるので192.168.31.53に変更する。

  • Jetson nano:192.168.31.53
  • Raspberry pi 5:192.168.31.224

SCPでバックアップデータをJetson nanoからRaspberry pi 5にコピー

Raspberry pi 5からSCPにJetson nanoにアクセスしてコピーする。

scp -r go@192.168.31.53:~/influxdb /home/go

-rはディレクトリごとコピーする。

途中でJetson nanoがWifiを切断して止まった・・・↓コピーしたファイル数を表示させる。

find . -type f | wc -l
66

全然コピーできてない(泣)Jetson nanoはWifiが調子悪いのでもう使う気にならない。

find . -type f | wc -l
355

途中でコピーが終わったファイルを削除と思ったが、SCPをやめてrsyncでやるので削除しなくていい。

Jetson nanoのWifiが調子悪く途切れるので途中からrsyncでコピー

Jetson nanoのWifiが途中でブツブツ切れるのでrsyncで続きからコピー(いままでコピーしたものはそのままで途中からコピーしてくれる。)Raspi5から↓の場合

rsync --ignore-existing 192.168.31.53:/home/go/influxdb /home/go/influx/influxdb

Jetson nanoから↓のコマンド

rsync --ignore-existing //home/go/influxdb/* 192.168.31.224:/home/go/influxdb

t=新しい日付順、r=リバース↓順調にコピーしている。

ls -tlr
-rw------- 1 go go  1752900 Jan  5 16:40 20240105T031411Z.s3154.tar.gz
-rw------- 1 go go   639707 Jan  5 16:40 20240105T031411Z.s3155.tar.gz
-rw------- 1 go go   526697 Jan  5 16:40 20240105T031411Z.s3163.tar.gz
-rw------- 1 go go   215969 Jan  5 16:40 20240105T031411Z.s3164.tar.gz
-rw------- 1 go go  4938210 Jan  5 16:41 20240105T031411Z.s3168.tar.gz
-rw------- 1 go go    52867 Jan  5 16:41 20240105T031411Z.s3170.tar.gz

順調にコピー完了した、けど33GBもある・・・

sudo du -sb /var/lib/influxdb
33076331932     /var/lib/influxdb

Raspi5 Influxdb2系 インストール

InfluxDB1でデータをリストアしてInfluxDB1を削除したら、InfluxDB2をインストールする。

と思ったが、Influxdb2ではうまく今までのデータを取り扱えなかったために、InfluxDB1系を続行して使うことにした。

それと、InfluxDB Cloudも無料枠があるので試してみましたが、データは30日間しか保存されないので使えない。やはりこのまま自宅サーバーでInfluxDBを運用するしかない。

この項目はラズパイ5でのInfluxdb2のインストール手順で、実際にはInfluxdb2はアンインストールして使ってない。メモとしてとっておきます。

ダウンロード

そのままaptでインストールすると、InfluxDB1.6.7をインストールしてしまうのでちょっと変更してからインストールする。

$ sudo apt show influxdb
Package: influxdb
Version: 1.6.7~rc0-1+b13

InfluxDB2のインストール方法は以下を参照。

InfluxData Downloads

Debian ARM64-bitのほうがいいのかな?どちらを選んでも↑この表示なので同じなのだろう。

(Raspberry Pi Imager 1.8.4でインストールしたRaspberry Pi OS(64-bit)で操作しています。)

mkdir influx
cd influx
wget -q https://repos.influxdata.com/influxdata-archive_compat.key

echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null

echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

sudo apt-get update && sudo apt-get install influxdb2

インストールできた。

$ sudo apt show influxdb2
Package: influxdb2
Version: 2.7.4-1
Priority: optional
Section: default
Maintainer: support@influxdb.com
Installed-Size: 99.3 MB
Depends: curl
Recommends: influxdb2-cli
Conflicts: influxdb
Homepage: https://influxdata.com
License: MIT
Vendor: InfluxData
Download-Size: 43.9 MB
APT-Manual-Installed: yes
APT-Sources: https://repos.influxdata.com/debian stable/main arm64 Packages
Description: Distributed time-series database.

N: There are 9 additional records. Please use the '-a' switch to see them.

InfluxDB バージョン

InfluxDBのバージョン

influxd version
InfluxDB v2.7.4 (git: 19e5c0e1b7) build_date: 2023-11-08T17:07:27Z

クライアント↓

influx version
Influx CLI dev (git: none) build_date: 2023-04-28T14:24:22Z

InfluxDB スタート・ステータス・ストップ

sudo systemctl start influxdb

sudo service influxdb status
● influxdb.service - InfluxDB is an open-source, distributed, time series datab>
     Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; preset: ena>
     Active: active (running) since Fri 2024-01-05 15:25:13 JST; 6s ago
       Docs: https://docs.influxdata.com/influxdb/
    Process: 2485 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh >
   Main PID: 2486 (influxd)
      Tasks: 9 (limit: 9255)
        CPU: 497ms
     CGroup: /system.slice/influxdb.service
             └─2486 /usr/bin/influxd

sudo systemctl stop influxdb

influxdb upgrade

データをInfluxDB2で使えるようにUpgradeします。

sudo influxd upgrade
#設定を間違えたら↓これで削除
sudo rm -r /root/.influxdbv2
  • Username:InfluxDB 2.xは決められる。InfluxDB 1.xのユーザー管理概念に対応、rootにした。
  • Organization:InfluxDB 2.xでは、組織(Organization)によって管理される。組織はInfluxDB 1.xのデータベースにあたります。
  • Bucket:InfluxDB 2.xでは、各組織は複数のバケット(Bucket)を持つことができます。バケットはInfluxDB 1.xの測定(Measurement)に対応。
  • Retention Period:InfluxDB 2.xでは、各バケットは保持期間(Retention Period)を持つことができ。これはInfluxDB 1.xの保持ポリシー(Retention Policy)に対応。
  Username:          root
  Organization:      sensor
  Bucket:            cpu
  Retention Period:  infinite


? Proceeding will copy all V1 data to "/root/.influxdbv2"
  Space available: 75 GB
  Space required:  33 GB

Influxdb2と1とでは概念がだいぶ変わって1を使っていて引き続き使う場合は少し勉強しないといけない。

ブラウザからアクセス

http://192.168.31.224:8086

今までのクエリーはなくなって、データベースも手動で操作できないレベルで全く変わってしまった。

面倒だからInfluxDB1系を使う

Raspi5 InfluxDB 1系をインストール

Influxdb2系をインストールして使おうとしたが、InfluxDB1系のクエリーをそのままつかえず、リストアしたらデータベースの中身がおかしくなってしまったので、諦めてInfluxDB1系を使うことにする。

ここからはJetson nanoは引退でRaspberry Pi 5だけの作業になります。

InfluxDB1 インストール

まずはInfluxDB2をインストールしてしまった場合は削除して普通にaptからInfluxDB1系をインストール

sudo apt remove influxdb2
sudo apt --fix-broken install
sudo apt autoremove

sudo apt install influxdb

バージョン確認。

influxd version
InfluxDB v1.8.10 (git: 1.8 688e697c51fd)

ちゃんと動作していることを確認。

sudo systemctl start influxdb

sudo service influxdb status
● influxdb.service - InfluxDB is an open-source, distributed, time series datab>
     Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; preset: ena>
     Active: active (running) since Sat 2024-01-06 10:51:14 JST; 15s ago
       Docs: https://docs.influxdata.com/influxdb/
    Process: 5598 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh >
   Main PID: 5599 (influxd)
      Tasks: 15 (limit: 9255)
        CPU: 206ms
     CGroup: /system.slice/influxdb.service
             └─5599 /usr/bin/influxd -config /etc/influxdb/influxdb.conf

Jan 06 10:51:13 Raspi5 influxd-systemd-start.sh[5599]: ts=2024-01-06T01:51:13.9>
Jan 06 10:51:13 Raspi5 influxd-systemd-start.sh[5599]: ts=2024-01-06T01:51:13.9>

バックアップデータ リストア

データがすでにある場合は↓データを削除してからリストアする。

sudo rm -r /var/lib/influxdb/*

InfluxDB 1のやり方でRaspberry pi 5にコピーしたデータをリストアする。

sudo systemctl start influxdb
influxd restore -portable /home/go/influxdb

33GBあったのですが、10分くらいで終わり。

リストア完了したらInfluxDB1を削除(Influxdb2にする場合)

sudo systemctl stop influxdb
sudo apt remove influxdb

データを丸められない?(うまくいかなかった)

過去のデータは詳細には要らないので1時間ごとに間引きしたいけど、どうもうまくいかなかった。

新たに作った空のデータベースsensorsにsensor(既存のDB)のair,cpu,ph,power,voltのmeasurementをそれぞれ1時間ごとに丸めて間引きsensorsのmeasurementとして挿入するクエリー

CREATE DATABASE "sensors"
CREATE CONTINUOUS QUERY "cq_1h_air" ON "sensors" BEGIN SELECT mean(*) INTO "air" FROM "sensor"."autogen"."air" GROUP BY time(1h), * END
CREATE CONTINUOUS QUERY "cq_1h_cpu" ON "sensors" BEGIN SELECT mean(*) INTO "cpu" FROM "sensor"."autogen"."cpu" GROUP BY time(1h), * END
CREATE CONTINUOUS QUERY "cq_1h_ph" ON "sensors" BEGIN SELECT mean(*) INTO "ph" FROM "sensor"."autogen"."ph" GROUP BY time(1h), * END
CREATE CONTINUOUS QUERY "cq_1h_power" ON "sensors" BEGIN SELECT mean(*) INTO "power" FROM "sensor"."autogen"."power" GROUP BY time(1h), * END
CREATE CONTINUOUS QUERY "cq_1h_volt" ON "sensors" BEGIN SELECT mean(*) INTO "volt" FROM "sensor"."autogen"."volt" GROUP BY time(1h), * END

データベースが表示されない。うまくいってない?

Influx CLIインストール

CLIが無いとInfluxDB2系からInflux1系のデータを操作できない?

influx – InfluxDB command line interface | InfluxDB OSS v2 Documentation (influxdata.com)

wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.7.3-linux-arm64.tar.gz
tar xvzf influxdb2-client-2.7.3-linux-arm64.tar.gz
sudo cp influx /usr/local/bin/

Grafanaインストール

センシングしたデータをきれいにグラフにしてくれるツールです。

インストール

Install Grafana on Debian or Ubuntu | Grafana documentation
Install guide for Grafana on Debian or Ubuntu

ちょっとaptを変更

sudo apt-get install -y apt-transport-https software-properties-common wget
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

あとは普通にインストールする。

sudo apt-get update
sudo apt-get install grafana
sudo apt-get install grafana-enterprise

Grafanaサーバー 起動

Start the Grafana server | Grafana documentation
How to start the Grafana server
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server

● grafana-server.service - Grafana instance
     Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; pres>
     Active: active (running) since Sat 2024-01-06 16:33:34 JST; 3s ago
       Docs: http://docs.grafana.org
   Main PID: 8676 (grafana)
      Tasks: 8 (limit: 9255)
        CPU: 719ms
     CGroup: /system.slice/grafana-server.service
             └─8676 /usr/share/grafana/bin/grafana server --config=/etc/grafana>

Jan 06 16:33:37 Raspi5 grafana[8676]: logger=migrator t=2024-01-06T16:33:37.454>

ブラウザでアクセス

初期時のIPアドレス

http://192.168.31.224:3000/

途中でIPアドレス変えた場合は、Connections > Data sources >該当のDBを選んでHTTPのURLの部分を変更する。

常時起動しておく。

sudo systemctl enable grafana-server.service

Telegraf

Raspberry PiなどのLinuxのCPUやメモリ・ストレージの状態を主にInfluxDBに保存してくれるツール。

sudo apt-get update && sudo apt-get install telegraf

設定ファイル↓「[[outputs.influxdb]] 」この部分の先頭の「#」を削除する。

sudo vim /etc/telegraf/telegraf.conf
[[outputs.influxdb]] #この部分をコメントアウト外す

エラー↓telegraf.confの[[outputs.influxdb]]の部分をコメントアウト外さないとOutputsがなくてエラーになる。

sudo service telegraf start
Job for telegraf.service failed because the control process exited with error code.
See "systemctl status telegraf.service" and "journalctl -xeu telegraf.service" for details.

Telegraphを停止する方法。

sudo systemctl disable telegraf

PythonでRaspi5のCPU温度取得

CPU温度を取得してInfluxDBに投げる。

Pythonバージョン

python -V
Python 3.11.2

Raspi5の温度取得

温度チェック

cat /sys/class/thermal/thermal_zone0/temp
44100

ファンスピード

Raspi5専用のヒートシンク付きファンを接続したのでcooling_device0の項目がある。

ls /sys/class/thermal/cooling_device0/
cur_state  max_state  power  subsystem  type  uevent

ls /sys/class/thermal/cooling_device0/power
autosuspend_delay_ms  runtime_active_time  runtime_suspended_time
control               runtime_status

ls /sys/class/thermal/cooling_device0/subsystem
cooling_device0  thermal_zone0

pwm-fan

こちらは↓変更しないほうが良い。Raspi5のほうで自動で変更するみたい。

cat /sys/class/thermal/cooling_device0/cur_state
0
cat /sys/class/thermal/cooling_device0/max_state
4

冬だからファンはほとんど回らない。再起動時などファンが回ると『ブオーン』とけっこうな音が出る。

PythonのInfluxDBライブラリ インストール

sudo apt install pip #デフォルトでインストールしてあった。

sudo pip install influxdb
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.

仮想環境を作らないといけないみたい。

python -m venv /home/go/script/venv
source /home/go/script/venv/bin/activate #仮想環境をアクティブにする。

仮想環境だと仮なのでやっぱりシステム全体にインストールできるようにする。

EXTERNALLY-MANAGEDを削除するか、–break-system-packagesをつけてインストールする。

sudo mv /usr/lib/python3.11/EXTERNALLY-MANAGED /usr/lib/python3.11/EXTERNALLY-MANAGED.back

その後、pipでインストールする。

pip install influxdb

CPUの温度取得してInfluxDBに投げる

Raspi3時代から使ってたPythonスクリプトをそのまま適当にHostだけ変えて使う。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time 
import subprocess
import sys

from influxdb import InfluxDBClient
client = InfluxDBClient(host='192.168.31.53', port=8086, username='root', password='Pass', database='sensor')
measurement = 'cpu'
tags = {'host': 'Raspi5'}


def GetTmp(Cmd):
	result = subprocess.Popen(Cmd, shell=True,  stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
	Rstdout ,Rstderr = result.communicate()
	return Rstdout

def GetCpuFreq():#arm
	Cmd = 'vcgencmd measure_clock arm'
	CpuFreq = GetTmp(Cmd).split('=')
	return int(CpuFreq[1])

def GetCpuTemp():#cpu temp
	Cmd = 'vcgencmd measure_temp'
	CpuTemp = GetTmp(Cmd).split()
	CpuTemp_zero=CpuTemp[0].replace("temp=",'').replace("'C",'')
	return CpuTemp_zero

def GetCpuVolts():#cpu V
	Cmd = 'vcgencmd measure_volts'
	CpuVolts = GetTmp(Cmd).split('=')
	CpuVoltsone =CpuVolts[1].replace("V\n",'')
	return CpuVoltsone

def GetVoltsThro():#電圧の状態
	Cmd = 'vcgencmd get_throttled'
	VoltsThro = GetTmp(Cmd).split('=')
	VT = VoltsThro[1].replace("\n",'')
	throarr = {'0xd0000':0,'0x0':1, '0x50000':2, '0x50005':3, '0x80000':4, '0x80008':5}
	#0:0xd0000 ????
	#1:0x0 正常
	#2:0x50000 過去に低電圧状態になった。今は正常
	#3:0x50005 低電圧!
	#4:0x80000 熱でクロックダウン
	#5:0x80008 今現在熱でクロックダウン
	if VT in throarr:
		val = throarr[VT]
		return val

if __name__=='__main__':
	
	CpuTemp	 = GetCpuTemp()
	CpuVolts = GetCpuVolts()
	VoltsThro = GetVoltsThro()
	#print CpuVolts
	CpuFreq	 = int(GetCpuFreq()/1000000)
	FieldArr = {'arm': float(CpuFreq) , 'cpu_temp': float(CpuTemp) , 'cpu_volt': float(CpuVolts)}
	if VoltsThro is not None:
		FieldArr['throttled'] = VoltsThro

	json_body = [
		{
			'measurement': measurement,
			'tags': tags,
			'fields': FieldArr
		}
	]
	print(json_body)
	client.write_points(json_body)

あとは定期的に実行しておく。

crontab -e
*/3 * * * * /usr/bin/python /home/go/script/cpu.py

センシング表示完了

Raspberry Pi 5のセンシング

InfluxDB+Grafana+Telegraf+自作のCPU温度で以下のようなグラフができた。

自宅 温湿度・大気などのセンシングデータ

Xiaomiのセンサーなどだいぶ処分したので↓センサー少なめ。

電力はUSBドングルが壊れたのか?なぜかデータを取得できなくなった。そのうち調査してみます。

以上、Raspberry Pi 5を母艦にして初期の設定でした。

なんだかんだで最後には結局Raspberry Piが生き残った。使いやすいんですヨ♪

最後にIPアドレスを自分の家は母艦用のIP192.168.31.53に変更して完了。

IPアドレスの変更はWifiルーターで固定IPを変更する。Jetson nanoが192.168.31.53を使用してたのでなかなか固定IPを変更できずWifiルーターの電源オフ・電源オンして変更した。

今後はRaspberry Pi 5にInfluxDBにセンシングデータが投げられてくる。

コメント