RaspberryPiには通常PCの様な電源スイッチは無いです。
電源ON=PWR USBケーブルを挿入
電源OFF=コマンドからshutdown -h now(poweroff) 後 PWR USBケーブル抜き
再起動=コマンドからshutdown -r now(reboot)
NICのLEDを見て電源状態を判断しhなければなりません。
そこで、
PCライクな電源スイッチを実装するのは難しそうなのでタクトスイッチの押下時間でシャットダウン・リブートの選択。それに応じてのLED点滅 運転時のLED点灯を実装をしてみました。当初はrc.localに記述をしていたが、いまの時代野暮かと。
Pythonを使ってのコマンド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
vi /usr/local/sbin/power-btn.py #!/usr/bin/env python2.7 import RPi.GPIO as GPIO import os import time BCMLED=4 BCMPWSW=17 GPIO.setmode(GPIO.BCM) GPIO.setup(BCMPWSW, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(BCMLED, GPIO.OUT) GPIO.output(BCMLED, GPIO.HIGH) cnt = 0 while cnt < 200: if GPIO.input(BCMPWSW) == GPIO.LOW: cnt += 1 else: if cnt > 0: print "power button will reboot the system..." GPIO.output(BCMLED, GPIO.LOW) time.sleep(0.5) GPIO.output(BCMLED, GPIO.HIGH) time.sleep(2.0) GPIO.output(BCMLED, GPIO.LOW) GPIO.cleanup() os.system("/sbin/reboot") break cnt = 0 time.sleep(0.01) # by 10 ms else: print "power button will shutdown the system..." GPIO.output(BCMLED, GPIO.LOW) time.sleep(0.5) GPIO.output(BCMLED,GPIO.HIGH) time.sleep(0.5) GPIO.output(BCMLED, GPIO.LOW) GPIO.cleanup() os.system("/sbin/shutdown -h now") |
実行権限を付与
chmod +x /usr/local/sbin/power-btn.py
systemdで使うコマンド
pythonでつくったコマンドをそのまま差しただけのコマンド(もっとスマートになるはず)
vi /usr/local/sbin/power-btn.sh
1 2 |
#!/bin/bash python /usr/local/sbin/power-btn.py |
実行権限を付与
chmod +x /usr/local/sbin/power-btn.sh
systemdの定義ファイル作成
vi /etc/systemd/system/power-btn.service
1 2 3 4 5 6 7 8 9 10 |
[Unit] Description = power-btn daemon [Service] ExecStart = /usr/local/sbin/power-btn.sh Restart = always Type = simple [Install] WantedBy = multi-user.target |
実行権限を付与
chmod 0755 /etc/systemd/system/power-btn.service
自動起動設定後起動
1 2 3 4 5 6 7 8 9 10 11 12 |
systemctl enable power-btn.service systemctl start power-btn.service systemctl status power-btn.service ● power-btn.service - power-btn daemon Loaded: loaded (/etc/systemd/system/power-btn.service; enabled) Active: active (running) since 土 2016-12-31 15:59:17 JST; 42min ago Main PID: 489 (power-btn.sh) CGroup: /system.slice/power-btn.service ├489 /bin/bash /usr/local/sbin/power-btn.sh └512 python /usr/local/sbin/power-btn.py 12月 31 15:59:17 raspberrypi systemd[1]: Started power-btn daemon. |
問題点(自分の運用には問題なし)
systemdのrestart stopに対応していない。そのまま運転を続けてしまいます。。。。まぁrc.localからの単純移行なのでよしとします。
コメント