2021-02-08に更新

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

本記事は2020/02/03に作成したものです。
最新の環境ではうまく動作しない可能性がありますのでご注意ください。

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

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

動作確認済み環境

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

slack通知イメージ

5f48d5f13f70e9fabd60272e70e4ef76.png

GPIOとスイッチの接続

暫定運用なのでブレッドボードで作っています
a0cce0bc8eaaa253120c74a8ac82dbfa.png
ecabf0ea125319cbc1848f73759ecb4e.jpg

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に書くやり方は古いですが手軽なので

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

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

ツイッターでシェア
みんなに共有、忘れないようにメモ

arohajiro

しがない元インフラエンジニアです

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント