BETA

【Raspberry Pi】解錠・施錠をSlackへ通知する仕組みを作る

投稿日:2020-02-06
最終更新:2020-02-07

これは部屋の施錠状態をメンバーへ周知するために作ったものです。
解錠や施錠を行った時にタクトスイッチを押すことで、Slackへその旨を通知します。
以前はAmaz◯nダッシュボタンでやっていたのですが、サービス廃止に伴いラズパイとタクトスイッチで作り直しました。

slackの「Incoming Webhook」の設定は済んでいることを前提にしています
※現在は非推奨になっている「カスタムインテグレーション」で作成した「Incoming Webhook」で動作確認しています。

動作確認済み環境

  • Raspberry Pi 3 Model B+
  • Raspbian 9.4 stretch (日本語環境)

slack通知イメージ

回路と実機

暫定運用なのでブレッドボードで作っています

slackwebインストール

回路ができたらコードの作成をします
まずはSlack通知に使うモジュールをpipでインストールします

$ pip3 install slackweb  

ボタン押されたらslackへ通知するコード

Slack通知に使うコードを作成します

/home/pi/lock2slack.py

#!/usr/bin/env python3  
import RPi.GPIO as GPIO  
from time import sleep  
import slackweb  

UNLOCK = 20  
LOCK = 21  
slack = slackweb.Slack(url="https://hooks.slack.com/services/xxxx/xxxx/xxxx") #Incoming Webhookのurlをここへ記述します  
MSG_UNLOCK = "研修室解錠しましたにゃ"  
MSG_LOCK = "研修室施錠しましたにゃ"  
SLACK_NAME = "RaspberryPiボタンさん"  

GPIO.setwarnings(False)  
GPIO.cleanup()  
GPIO.setmode(GPIO.BCM)  
GPIO.setup(UNLOCK, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
GPIO.setup(LOCK, GPIO.IN, pull_up_down=GPIO.PUD_UP)  

def sw_unlock(ch):  
    slack.notify(text=MSG_UNLOCK, username=SLACK_NAME)  

def sw_lock(ch):  
    slack.notify(text=MSG_LOCK, username=SLACK_NAME)  

GPIO.add_event_detect(UNLOCK, GPIO.RISING, callback=sw_unlock, bouncetime=500)  
GPIO.add_event_detect(LOCK, GPIO.RISING, callback=sw_lock, bouncetime=500)  

while True:  
    sleep(0.1)  

lock2slack.pyに実行権限を追加する

$ chmod +x /home/pi/lock2slack.py   

rc.localを使ってOS起動時にコードを実行させる

$ sudo vi /etc/rc.local  

rc.localの中身

rc.localに書くやり方は古いですが手軽なので...sysytemdでやるのはまた

#!/bin/bash -e  
sudo -u pi /usr/bin/python3 /home/pi/lock2slack.py &  
exit 0  

あとは、OSを再起動させて動作確認ができたら完了です

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

しがないインフラエンジニア屋さんです。いままでローカルのメモ的なテキストでしかアウトプットしてなかったので、ちょっとずつここに記していくよ(不定期更新)

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう