ntpsec を chrony に移行
Ubuntu 25.10 への移行の記事をみていたら、ntp サーバ ntpsec が chrony になるとのことなので、先んじて chrony に移行しておく。chrony の設定記事を探すと、/etc/chrony/chrony.conf に設定を記載する話になっているけど、Debian だと設定ファイルを細かく分けて、デフォルト設定ファイルは触らないで、個人設定は別に記載するのが流儀。
$ sudo apt install chrony ### ntpsec がアンインストールされる。 $ sudo vi /etc/chrony/sources.d/local-ntp-server.sources # 自宅ネットワーク環境にあわせて server を追加 server ntp.ttn.ne.jp iburst ipv4 server ntp.nict.jp iburst ipv4 prefer pool jp.pool.ntp.org iburst ipv4 $ sudo vi /etc/chrony/conf.d/allow.conf # 自宅ネットワークからntpを参照できるように allow 127.0.0.1 allow 192.168.11.0/24 $ sudo systemctl restart chrony $ chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ ntp-nts-2.ps5.canonical.> 2 6 17 22 +5775us[+5775us] +/- 124ms ^- ntp-nts-3.ps5.canonical.> 2 6 17 23 +5795us[+5795us] +/- 124ms ^* ntp-nts-2.ps6.canonical.> 2 6 17 24 -8694us[-9701us] +/- 88ms ^+ ntp-nts-3.ps6.canonical.> 2 6 17 23 +6458us[+6458us] +/- 104ms ^- 103.131.151.30 3 6 17 24 -8991us[-8991us] +/- 35ms ^- ntp-nts-1.ps6.canonical.> 2 6 17 24 -21ms[ -21ms] +/- 103ms ^- ntp-k1.nict.jp 1 6 17 23 -7807us[-7807us] +/- 13ms ^- ntp.ttn.ne.jp 2 6 17 24 -7393us[-7393us] +/- 40ms
これにあわせて、自宅内の raspberry-pi の端末の確認をしていたら、サーバ1台の ntp しか参照していない。せめて 直の上位のプロバイダの ntp.ttn.ne.jp も参照してほしい。確認すると、DHCP で接続したサーバだけに問い合わせるようになっている。/etc/default/ntpsec を修正して DHCP サーバではなく /etc/ntpsec/ntp.conf を見るように設定する。
((( /etc/default/ntpsec ))) IGNORE_DHCP="yes"
((( 追記 2026/04/26 )))
chronyc sources を実行した結果を Gemini にかけたら、国内の nict.jp が優先されていないとのアドバイス。
server ntp.nict.jp iburst ipv4 prefer
~~~~~~ 追記
raspbianのaptでのgpgキーのエラー
設定を間違えたのか、apt の update, upgrade で GPG キーのエラーが出るようになった。
GPGキー の再設定
GPG キーファイルの扱う debian-archive-keyring (raspbianでは raspbian-archige-keyring) を強制再インストールして、更新された /etc/apt/trusted.gpg を参照するように /etc/apt/sources.list.d/* のファイルの deb 行に書き込む
((( 標準パッケージの GPG keyring を強制再インストール )))
$ sudo apt reinstall --allow-unauthenticated raspbian-archive-keyring
$ sudo apt update ; sudo apt upgrade
((( パッケージの GPG 参照ファイルを設定 )))
$ sudo vi /etc/apt/sources.list.d/*.list
deb [signed-by=/etc/apt/trusted.gpg] ...略...
~~~~~~~~~~~~~~~~~~~~
Raspbian を bullseyeからbookwormへ
新しい bookworm の sources.list を追加して、sudo apt dist-upgrade する。まずは、一番パワーのある ARMv7 rev.4 の Pi について実行。
((( /etc/apt/sources.list.d/12-bookworm.txt ))) deb http://raspbian.raspberrypi.org/raspbian/ bookworm main contrib non-free rpi
Raspberry-Pi にヒートシンク
自宅のエアコンのない室内温度を計るために動かしている Raspberry-Pi だけど先日暑かったからなのか、反応が無くなり再起動をかけることとなった。熱対策も必要だろうということで、ヒートシンクを買って貼ってみた。

貼る前は、エアコンの利く部屋に置いてある Raspberry-Pi と同じように、
| VCGENCMD | vcgencmd/temp OK – 53.2[℃] 0 |
といった感じだったけど、貼り付けたものは、
| VCGENCMD | vcgencmd/temp OK – 47.8[℃] 0 |
といった感じで、5℃~6℃のダウンとなった。まっ、十分な効果かな。もう1個買って、もう1つの方も対策してもいいかな。
homebridgeはnodejs-22でまだ不安定なのか?
node.js 22 が LTS 対応で出ているようだし、homebridge を動かしている raspberry-pi にインストールしたら、起動してくれない。仕方がないので再び node.js 20 にダウングレード。
CCS811空気品質センサーに温湿度補正の実行
CCS811を使った空気品質センサーを使っているけど、夜になると次第に異常な値になっていく。
原因はよく掴めないままだけど、CCS811の機能の中に温湿度で補正をかける処理がある。補正といってもちょっとした程度かと思っているけど、時間経過とともに大きく変化していることから、1時間おきに温湿度補正をかけるようにプログラムを追加してみた。
色々と処理を触ってみるけど、時間が経つと大きな値が取れる状態になってしまう。倍率みたいな設定項目あるのかな…
Kindle Fire HD
ママが、電子書籍で読む機会が増えた…ということで、Kindle Fire HD を購入した。早速セットアップ。自宅ネットワークに登録し、アカウントの設定やら Netflix アカウントの登録やらを終える。
Alexa
んで、Alexa も使えるし「Alexa, 今日の天気は?」を試してる。まあ、我が家はすでに Homebridge が動いていて「Hey Siri」、「OK Google」で、温湿度確認やらTVのON/OFFやら色々なことができる状態。でも、homebridge オタ状態なので「Alexa, テレビをつけて!」もやりたくなってくる。
homebridge-alexa
ググると、当然のように「Alexa経由で家の外からRaspberry Pi(Homebridge)に指示」というページが見つかる。このページに記載されているように、(1) homebridge-alexa をインストール、(2) 中継用のクラウドのアカウント作成、(3) Kindle 側に homebridge スキルのインストールを行う。

Switchbot Plug の制御
電気毛布が必要な時期、外出時の電源を切り忘れるのを防ぐために、昨年導入していた Switchbot Plug 。
スマホの SwitchBot アプリのタイマー機能で朝に強制オフの制御していたけど、寝る時にスイッチを入れるのは、自分が不在の時だとムダだし、homebridge や cron で制御するのも面白そう。
switchbot-utility のインストール
ということで、Raspberry-Pi に、switchbot-utility をインストール。
((( 事前にSwitchbot アプリは設定済み ))) $ sudo pip3 install switchbot-utility $ cd /usr/local/lib/python3.9/dist-packages/switchbot_utility
制御するには、Switchbot アプリのトークンと秘密鍵が必要なので、アプリを起動して「プロフィール」、「設定」の画面を開いて、「アプリバージョン」の表示を 10 回連打すると、「開発者向けオプション」を表示できる。この画面を開いてトークンとクライアントシークレットをコピーし、上記の switchbot_utility のフォルダ内に、settings.json のファイル名で保存。

Python で以下のスクリプトを実行すると、switchbot-utility で扱えるデバイスの一覧 deviceList.txt が作られる。
((( settings.json )))
// Switchbot アプリで取得したトークンとシークレットを、
// switchbot_utilitiy のフォルダに settings.json で保存しておく
{
"token": "xxxxx....",
"secret": "yyyyy...."
}
((( devicelist.py )))
// Python で以下のスクリプトを実行すると、deviceList.txt が作られる。
// 以下を devicelist.py で保存し、python3 devicelist.py で実行!
from switchbot_utility.switchbot import Switchbot
switchbot = Switchbot()
switchbot.devicelist()
((( deviceList.txt )))
441793xxxxxx, 電気毛布, Plug, 000000000000
C5B496xxxxxx, エアコン, Bot, 000000000000
実際に、Switchbot Plug を動かすために、下記のscriptでスイッチを制御できるようにしてみた。
#!/usr/bin/python3
# -*- mode: python; coding: utf-8; tab-width: 4 ; -*-
# SwitchBot をON/OFFする
import sys
import time
import os
from switchbot_utility.switchbot_plug import SwitchbotPlug
# ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~
# 制御するSwitchBot に合わせて、上記~~~ を書き換える。
sb_dir = '/usr/local/lib/python3.9/dist-packages/switchbot_utility'
# Switch Bot Plug MAC ADDR
# deviceList.txt 調べた MACアドレスを記入
sb_plug_macaddr = '441793xxxxxx'
# コマンドライン引数プロセス名
script_file_name = sys.argv.pop( 0 )
# コマンドライン引数 -d <デバイスID>
while len( sys.argv ) >= 2 and sys.argv[0] == '-d' :
sys.argv.pop( 0 )
sb_plug_macaddr = sys.argv.pop( 0 )
# setting.jsonを読み込むため
os.chdir( sb_dir )
# SwitchBot Plug に接続
sb_plug = SwitchbotPlug( sb_plug_macaddr )
# ~~~~~~~~~~~~~ この部分に制御対象用のコンストラクタを書けばいい
if len( sys.argv ) == 0 :
# 引数なしは、状態を表示
print( sb_plug.get_power() )
elif len( sys.argv ) == 1 :
# status | on | off | toggle or turn
arg = sys.argv.pop()
if arg == 'status' :
# exitでスイッチ状態を返す
sys.exit( 0 if sb_plug.get_power() == 'on' else 1 )
elif arg == 'on' :
sb_plug.turn_on() # ON
elif arg == 'off' :
sb_plug.turn_off() # OFF
elif arg == 'toggle' or arg == 'turn' :
# スイッチを反転
pw = sb_plug.get_power()
if pw == 'on' :
sb_plug.turn_off()
elif pw == 'off' :
sb_plug.turn_on()
このプログラムを、homebridge-cmdswitch2 の設定に加える。
{
"platform": "cmdSwitch2",
"name": "cmdSwitch2",
"switches": [
{
"name": "電気毛布",
"on_cmd": "/usr/local/bin/switchbot-plug.py on",
"off_cmd": "/usr/local/bin/switchbot-plug.py off",
"state_cmd": "/usr/local/bin/switchbot-plug.py status"
}
]
}
ということで、「OK Google, 電気毛布を点ける」でON、朝は起床時間にあわせたタイマーでOFF完成。
Raspberry Pi のUSB電源ケーブルを交換
MZ80C筐体の Raspberry-Pi に温湿度センサーBME280をつけてトイレに置いてあるけど、ボードを Raspberry-Pi 3 model A+に替えたら、電圧不足の記録が残ってて週に1度のペースでフリーズしてる。USBの電源アダプターも2A以上だせる物に替えても効果なし。ただ、USB電源ケーブルの長さが足りなくて、古いUSB延長ケーブルを挟んでいるんだけど、これが怪しいのかな。長い太目のUSB電源ケーブルに交換し、延長ケーブルを取り外す。効き目あるかな。
交換して半日たったけど “vcgencmd get_throttled” を見ても、電圧低下の警告が出ていない。効果ありかな。
(追記)2日間運用して、電圧低下の警告が1度も発生していない。これで安心
Rapberry-Pi の更新で GPIO が動かない
64bit OS の arm64 で動かしている Raspberry-Pi で、rpi-update を実行したら、kernel が Linux 6.1.61-v8+ となり、自作スクリプトのいくつかが動かなくなった。原因は wiringPi や GPIO など絡んだ処理の中では、/proc/cpuinfo にアクセスして “Hardware” を取得しその値に合わせてアクセスするポートなどを切り替えているみたい。しかしながら、linux-6.x になったら /proc/cpuinfo で Hardware 情報が取れなくなったため、wiringPi, GPIO関連のプログラムが動かなくなった。
BME280 温湿度センサーを GPIO 経由から ioctl() から I2C を制御する処理に書き換え
$ ./bme280 Oops: Unable to determine board revision from /proc/cpuinfo -> No "Hardware" line -> You'd best google the error to find out why.
参考にしていたプログラムが wiringPi 経由で I2C 接続の温湿度センサー bme280 を使っていたけど、仕方がないのでプログラムを修正し、ioctl() 経由に修正。
bit 演算が多用されていて、unsigned char と char の宣言を手抜きしたら、異常値が出るようになった。char型の部分を unsigned char に修正したら、大きな値にずれる異常値はなくなった。でも、その後も時々小さな値となる異常値が発生した。どうも nagios やら munin で監視していると時々同じタイミングで bme280 の値取得の処理が起動されるようで、I2C デバイスの競合が発生していると思われた。このため、I2C デバイス /dev/i2c-* を開く際に flock() による、排他処理も追加した。
OLED ディスプレィ SSD1306 の処理を Adafruit_CircuitPython_SSD1306 に変更
Adafruit_Python_SSD1306 を使って表示させていた処理が動かなくなる。内部で WiringPi などを使っているのか “RuntimeError: Could not determine platform…” といったメッセージが出て動かなくなる。これも GPIO あたりのトラブル。調べていると Adafruit_CircuitPython_SSD1306 なら動きそう。
$ sudo pip3 install adafruit-circuitpython-ssd1306
若干のプログラム修正で動くようになった。


