この記事は1175文字3で読めます

かんたんですが、備忘的に残しておきます。

#Table of Contents

#Raspberry PIのWifiドングルが定期的に使えなくなる。

今使っているRaspberry PIがめちゃくちゃ古くて、Wi-Fiに対応してない機種なので、USBのWi-Fiドングルを指して使っているのですが、こいつがしばらく起動しているとRaspberry PIから認識されなくなってしまう問題が発生しております。このラズパイは植物の水やり監視システム赤外線カメラを使った監視システムでも活躍している子です。

TP-Link Wi-Fi 無線LAN 子機 11n/11g/b デュアルモード対応モデル 英語パッケージ TL-WN725N(EU)

とりあえずワークアラウンドとしてRaspberry PIの再起動を定期的に実施してやり、Wi-Fiドングルを再認識させることにします。

#crontabを使えば楽勝

再起動自体はなんてことはなく、ただroot権限でcronを実行すればよいだけでした。

pi@dev.raspberrypi $ sudo crontab -e

root権限でcrontabを開き、 /sbin/rebootを実行するだけです。

00 16 * * * /sbin/reboot

#再起動時に起動したよ的なSlackをあげる

念の為、再起動したRaspberry PIから通知がほしいのでSlack通知を設定します。Slack通知はDenoでGraphQLを叩きながらSlackに投稿するでも活用しており、ラズパイの運用には欠かせない仕組みです。

また、Slack通知時SSHで今後Raspberry PIにログインするときに困らないように割り当てられたIPアドレスも一緒に通知します。

起動時に任意のコマンドを実行するにはrc.localが便利です。

pi@dev.raspberrypi $ vi /etc/rc.local
sudo -u pi /usr/bin/python3 /home/pi/motion/notify_reboot.py &

exit 0

piユーザーにPythonのpip設定を済ませているため、piユーザーで任意のPythonコードを呼び出す形です。

必ず最後exit 0を実行する必要があります。そうしないと起動シーケンスが失敗したことになってしまいます。

import requests, json
import netifaces

ip_address = netifaces.ifaddresses('wlan0')[netifaces.AF_INET][0]['addr']

WEB_HOOK_URL = "https://hooks.slack.com/services/xxxxx"
requests.post(WEB_HOOK_URL, data = json.dumps({
    "text": "*!!!Reboot!!!* \n\nNew IP:" + ip_address,
    'username': "motion_detect",
    'icon_emoji': ":robot_face:",
    'link_names': 1,
}))

Pythonコードは超カンタンで、wlan0のIPアドレスをnetifacesを使って取得してIncoming webhookで送信するだけです。 netifacesのinstallをpipであらかじめ実施しておきます。

pi@dev.raspberrypi $ pip3 install netifaces==0.11.0

#結果

Slackに再起動通知とIPアドレスが投稿された画面

こんな感じで定期的に(1日1回)再起動が実施されIPアドレスの通知もSlackにしてくれます。

tubone24にラーメンを食べさせよう!

ぽちっとな↓

Buy me a ramen