目的
Raspberry Piでsmnptrapを受信し音と光で伝えてくれるパトランプを作成する
今回はハードウェア周りに触れてみます
工程
- スピーカの選定
- ライトの選定
- GPIO制御
全体図
1. スピーカの選定
近所の電器屋で一番安く手に入ったELECOMのUSBスピーカを利用しました
ステレオである必要はないため、もう一方のスピーカへ出ているケーブルを切断し
モノラル化したものを利用しました。
2. ライトの選定
こちらはコンセントに挿しておくと、夜間自動点灯する インテリアライトを改造して使いました
中身の基板を流用したかったため表面実装部品等は全て取り去り LEDを無理やり実装の上、ホットボンドで固定しました。
Raspberry Pi GPIOの電流制限に引っかからないように
IOポート一つに付きLEDを1個駆動します。(計2個)
3. GPIO制御
snmptrapd.conf の設定にて、下記Pythonスクリプトをキックしています。
Step1で編集した設定に追記でアラート受信時に音を鳴らし光るスクリプトを実行するように設定変更
#### When Recieve Trap
#default : write to syslog
#traphandle default /usr/bin/logger /tmp/test.log ## for test logging
traphandle default /prj/Patlam-pi/bin/trap_receive.py
#### Settings
doNotRetainNotificationLogs yes
doNotLogTraps no
doNotFork no
# authCommunity TYPES COMMUNITY [SOURCE [OID | -v VIEW ]]
authCommunity log,execute,net private
authCommunity log,execute,net public
disableAuthorization no
テスト
$ sudo snmptrap -v 2c -c public [Raspberry PiのIPアドレス] '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "Hello World"
処理の中心部分のみ記載しました、詳細はgithubへどうぞ
https://github.com/tktk19/Patlam-pi/blob/master/bin/trap_receive.py
class Alart():
def __init__(self):
# GPIOの設定
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
def __sound(self):
# サウンド再生コマンドをバックグラウンドで実行します
sound_file = os.path.join(patlam_pi.app.config['SOUNDDATA'], "ALARM.WAV")
cmd = "/usr/bin/aplay " + sound_file + " &"
os.system(cmd)
def __light(self):
__led_blink_count = patlam_pi.get_setting('LEDBlink')
i = 0
while i < int(__led_blink_count):
# LED2つを0.5秒間隔でUI設定回数分点滅させます
GPIO.output(23, True)
GPIO.output(24, True)
time.sleep(0.5)
GPIO.output(23, False)
GPIO.output(24, False)
time.sleep(0.5)
i+=1
def fire(self):
self.__sound()
self.__light()
if __name__ == '__main__':
alart = Alart()
alart.fire()
ソース
作成したプログラム及び、Raspberry Piの配線図、Raspbianへ実施した設定は下記を参照下さい。
https://github.com/tktk19/Patlam-pi
SpecialThanks
UI/CSS 嫁 感謝!