今回、raspi2のSSL更新を簡潔にするために、OSのクリーンインストールをしたため、その後のハードよりの設定でだいぶ苦労しました。OSが違うと、いろいろ大変なようです。念のため、備忘録つくりました。他にも、いろいろひっかるところはありましたが、とりあえず、GPIO周りがとくに大変だったので、関連操作まとめました。
1 Python スクリプト (ssr_control.py)
保存場所: /home/pi/ssr_control.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# SSR制御スクリプト
# 指定曜日・時間のみSSRをONにし、それ以外はOFF
# 対象GPIO: 17 (BCM)
import RPi.GPIO as GPIO
import datetime
import time
# GPIO 設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
try:
while True:
now = datetime.datetime.now()
weekday = now.weekday() # 月曜=0, 日曜=6
# 水曜(2)と土曜(5)の6時〜7時にON、それ以外はOFF
if (weekday == 2 or weekday == 5) and 6 <= now.hour < 7:
GPIO.output(17, GPIO.HIGH) # SSR ON
else:
GPIO.output(17, GPIO.LOW) # SSR OFF
time.sleep(30) # 30秒ごとにチェック
finally:
GPIO.cleanup()
ポイント:
時間は 6 <= now.hour < 7 で 1時間だけ ON。
曜日は weekday() の値を確認(0=月曜, 6=日曜)。
30秒ごとにチェックするループ。
保存場所: /home/pi/ssr_control.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# SSR制御スクリプト
# 指定曜日・時間のみSSRをONにし、それ以外はOFF
# 対象GPIO: 17 (BCM)
import RPi.GPIO as GPIO
import datetime
import time
# GPIO 設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
try:
while True:
now = datetime.datetime.now()
weekday = now.weekday() # 月曜=0, 日曜=6
# 水曜(2)と土曜(5)の6時〜7時にON、それ以外はOFF
if (weekday == 2 or weekday == 5) and 6 <= now.hour < 7:
GPIO.output(17, GPIO.HIGH) # SSR ON
else:
GPIO.output(17, GPIO.LOW) # SSR OFF
time.sleep(30) # 30秒ごとにチェック
finally:
GPIO.cleanup()
ポイント:
時間は 6 <= now.hour < 7 で 1時間だけ ON。
曜日は weekday() の値を確認(0=月曜, 6=日曜)。
30秒ごとにチェックするループ。
2 systemd サービス設定 (ssr_control.service)
保存場所: /etc/systemd/system/ssr_control.service
[Unit]
Description=SSR Control
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi
ExecStart=/home/pi/bottle-env/bin/python /home/pi/ssr_control.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
ポイント:
User=pi にして仮想環境(bottle-env)の Python を使用。
WorkingDirectory はスクリプトのあるディレクトリ。
失敗時に自動再起動。
保存場所: /etc/systemd/system/ssr_control.service
[Unit]
Description=SSR Control
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi
ExecStart=/home/pi/bottle-env/bin/python /home/pi/ssr_control.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
ポイント:
User=pi にして仮想環境(bottle-env)の Python を使用。
WorkingDirectory はスクリプトのあるディレクトリ。
失敗時に自動再起動。
3 systemd の操作コマンド
# サービスを再読み込み(設定変更後は必須)
sudo systemctl daemon-reload
# サービスを有効化(起動時に自動開始)
sudo systemctl enable ssr_control.service
# サービス起動
sudo systemctl start ssr_control.service
# 状態確認
sudo systemctl status ssr_control.service
# サービス停止
sudo systemctl stop ssr_control.service
# ログ確認
journalctl -u ssr_control.service -b
※ バックアップ・復旧のコツ
/home/pi/ssr_control.py と /etc/systemd/system/ssr_control.service を両方コピーして保存。
Python 仮想環境 (bottle-env) も丸ごとバックアップしておくと、ライブラリの問題で復旧に悩まなくて済む。
OSアップデート後は、GPIOライブラリや Python バージョンを確認してから systemd サービスを再有効化。
0 件のコメント:
コメントを投稿