目的

メールを受信したら、パトランプが回るという仕組みを作りたいと思いraspberry piを購入しました。

これにより、例えば、サーバの監視や、大事なお知らせ等を逃さないですむようにしたいと思います。

raspberry pi + パトランプを検索するといくつかのブログが見つかるのですが、回路をいじったりしないといけず、それはハードルが高いと思い、USBの電源を操作することによりこの仕組を実現しようと思いました。

はじめに

今更ですが、raspberry piで遊んで見たいと思い以下のセットを

Amazonで購入しました。(本体、電源、ケースがセットになったもの)

その他に、microSD(32GB)とUSBキーボードを購入しました。合計8,000円ぐらい。

最終的には、USBに接続した機器のオン/オフ制御を行いたいと思います。

その他に、通常であれば、USBのマウス、HDMIで接続できるモニター、microSDの

読み書きができるものが必要になりますが、

今回は、有線LAN接続して、ノートPCからセットアップするので不要になります。

使用しているPCは、MACになります。

SDカードの準備

raspberry pi 電源を入れただけでは使えません。

SDカードにOS(noobs)を入れておく必要があります。

ネットにつながったPCから、ソフトウェアをダウンロードしてSDカードに入れておきます。

上記のサイトでダウンロードしようとするとものすごく遅いので

以下のミラーサイトからダウンロードしました。(早いといっても1時間ぐらいかかりました。)

http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2019-04-09/

ダウンロードするファイルは、2019-04-08-raspbian-stretch.zip

ダウンロードしたら解凍します。

SDカードにコピーする前に、SDカードをフォーマットします。

以下のサイトより、SDCardFormatterをダウンロードします。(フォーマットに結構時間がかかります。)

https://www.sdcard.org/downloads/formatter/

imgファイルは、そのままSDカードにコピーしても動作しません。

以下のツールを利用して、imgファイルの書き込みを行います。

https://www.balena.io/etcher/

ダウンロードして、起動したらimgファイルを選択して書き込みを行います。 

上記のSDカードに、ヘッドレスでのアクセスの為に細工をします。(macでの手順です)

cd /Volumes/boot

起動時のsshを有効にするため、以下の空ファイルを作成します。

touch ssh

次に、wifiを有効にするための細工をします。
まず、平文でパスワードを記述しないために、以下のサイトで256ビットのハッシュ化されたキーに変換を行います。
http://jorisvr.nl/wpapsk.html

上記で生成したキーとSSIDを以下のように記載した、wpa_supplicant.confを作成します。

vim wpa_supplicant.conf

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="test"
    psk="test"
}

上記の作成が終わったら、SDカード安全にはずしてください。

ヒートシンクの取り付け

今回購入したセットには、CPU用とLANモジュール用の2つのヒートシンクがついていました。

こちらを取り付けます。

取り付け前

取り付け後

起動

上記で作成したSDカードをraspberry piの裏側にあるSDカードスロットに差し込みます。

ケースに取り付けます。SDカード側から下のケース(薄い方)に差し込み

カチッというまで押し込んで取り付けます。

取り付けたら、ネジを4箇所締めます。 

電源オン

電源を入れます。赤いランプが点灯します。

以下のコマンドで、mac側のターミナルからアクセスできます。

(wifiでの接続がうまくいっていることが前提。)

初期パスワードは、”raspberry”になります。

ssh pi@raspberrypi.local

ログインすると以下のような画面になります。

各種設定

raspi-configで必要な設定を行います。

sudo raspi-config

  • 「8 Update」を選択して、ツールを最新にします。
  • 「4 Localisation Options」の「I1 Change Locale」を選択して、ja_JP.UTF-8 UTF-8にする。(スペースで選択が切り替え可能。日本語になっていると効かないので、英数にしてからスペースで選択)
  • 「4 Localisation Options」の「I2 Change Timezone」を選択し、「Asia」、「Tokyo」に変更。

アップデート

各種ソフトウェアをアップデートします。

$ sudo apt update       # パッケージリストの更新
$ sudo apt upgrade      # パッケージの更新
$ sudo apt dist-upgrade # OSのアップグレード
$ sudo rpi-update       # ファームウェアの更新
$ sudo reboot           # 反映のための再起動

USBを制御する

ここからは、私の目的であるUSBの制御の為の手順になります。

メールを受信したら、パトランプを鳴らすといったものを作成したいと思います。

hub-ctrlをインストールする

sudo apt-get install libusb-dev
wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static
sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrl

USBについては、4portついています。以下の例は、port2のON/OFF制御です。

b bus
d device
P port番号
p 0: オフ, 1: オン
sudo lsusb # このコマンドで、Busと Deviceの番号が確認できます。
Bus 001 Device 009: ID 05ac:12a8 Apple, Inc. iPhone5/5C/5S/6
Bus 001 Device 004: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
sudo hub-ctrl -v # 下の4ポートある001:002が上記のBus 001と Device 002
Hub #0 at 001:003
 INFO: individual power switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect
   Port 2: 0000.0000
   Port 3: 0000.0100 power
Hub #1 at 001:002
 INFO: individual power switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect
   Port 2: 0000.0100 power
   Port 3: 0000.0100 power
   Port 4: 0000.0100 power
Hub #2 at 001:001
 INFO: ganged switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect

以下のコマンドで、USBの電源供給がOn/Offされるのを確認できます。

# すべてのポートをOFFにする
sudo hub-ctrl -b 1 -d 2 -P 2 -p 0

# すべてのポートをONにする
sudo hub-ctrl -b 1 -d 2 -P 2 -p 1

 

USBのOn/Off切り替えスクリプトの作成

USBの電源をオンにして、10秒たったら切れるようにします。

以下のようなスクリプトを作成します。
これは、Busとdeviceを取得して、USBをonにして10秒たったらoffにするスクリプトです。
(gmailの処理用スクリプトを別途作成して、こちらを実行します。)

#!/bin/sh

usage() {
    echo "Usage: $0 (on|off)"
    exit 2;
}

if [ $# -ne 1 ]; then
    usage
fi

fanctrl() {
    power=$1
    device=0424:2514 #ここは、lsusbで確認した値にする
    args=$(lsusb -d $device | grep -Po '\d+' | paste -sd ' ' | cut -d ' ' -f 1,2 | xargs printf "-b %s -d %s")
    sudo /usr/local/bin/hub-ctrl $args -P 2 -p $power
    sleep 10
    sudo /usr/local/bin/hub-ctrl $args -P 2 -p 0
}

case $1 in
    on  ) fanctrl 1;;
    off ) fanctrl 0;;
    *   ) usage
          exit 2;;
esac

gmailを受信したらUSBの電源をOnにする

以下のようなスクリプトを作成します。
あらかじめgmailのアカウントを作成して、特定のメールの場合に、ラベルがつくようにしておく必要があります。(ここでは、ラベル: alert)

 

  • 10秒間隔で、alertラベルのついた新着メールがあるかチェックします。
  • 前回実行時のカウントより増えている場合は、USBの電源をOn(sleep10でOff)にするスクリプトを実行します。
#!/bin/bash

PREVCOUNT=0

while sleep 10 ;
do
    COUNT=`curl -u (gmailのアカウント@より前):(パスワード) -silent https://mail.google.com/mail/feed/atom/alert/ \
        | perl -ne 'if(/fullcount>(\d+)<\/fullcount/){ print $1}'` if [ $COUNT != $PREVCOUNT ]; then curl -u (gmailのアカウント@より前):(パスワード) -silent https://mail.google.com/mail/feed/atom/alert/ \ | perl -ne 'if(/fullcount>(\d+)<\/fullcount/){ if($1){ system("/bin/sh /home/pi/Tools/patramp.sh on"); } }' ;
      echo "exe"
    fi
    PREVCOUNT=$COUNT
done

後は、このスクリプトをログアウトしても実行されるようにします。

nohup sh check.sh &

これで、メールを受信したら、USBポートをONにして、10秒後にOFFにする環境ができたので
そのポートに、USBで接続できるパトランプを設置して完了です。

USBの仕組みのパトランプは検索をしても以下の商品しかありませんでした。

この記事をシェアする