ホーム » コンピュータ » Raspberry-Pi

Raspberry-Pi」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

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

若干のプログラム修正で動くようになった。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト

メタ情報