Raspberry Pi のタクトスイッチを押すことで Slack に定型文を投稿できるようにしたい。タクトスイッチは4つぐらい設置してそれぞれに定型文を割り当てたい。これに挑戦してみることにした。
今回は4つのタクトスイッチを使い、それぞれ別の定型文を Slack に投稿できるようにしたいが、単純なメッセージ送信だけでなく、時刻や指定時間後のように時間を指定したメッセージ送信を行いたい。
環境:Raspberry Pi 3 Model B、Raspbian Stretch
(1)配線は『ラズベリー・パイで遊ぼう!』(p257)と全く同じ。
タクトスイッチはブレッドボードに刺す向きを注意しよう。
タクトスイッチは向きに注意|文系の伊藤さんと電気の話
https://ameblo.jp/bun-ito/entry-12259611903.html
(2)以下のページで Slack の Incoming Webhook 用 Webhook URL を取得する。
https://slack.com/services/new/incoming-webhook
(3)時間を指定した投稿用のシェルスクリプトを作成する。といっても以下のようなシンプルなものだ。slack-post.sh とでも名前を付けておこう。
(2018-12-03 追記: [チャンネル名] 等の [ と ] はコードから除いてください。)
bot アイコンは以下のページが参考になる。
Emoji cheat sheet for GitHub, Basecamp and other services
https://www.webpagefx.com/tools/emoji-cheat-sheet/
(4)時間指定投稿用に at コマンドのインストールもしておく。
$ sudo apt-get install at
三浦さんちのブログ: Raspberry PiのLinux、Raspbian atコマンドで学んだshとbashの問題
http://smiura3000.blogspot.jp/2016/04/raspberry-pilinuxraspbian-atshbash.html
(5)同じディレクトリに、投稿用の以下のようなシェルスクリプトを作成する。TactSwitchToSlack.sh とでも名前を付けておこう。
タクトスイッチの割り当ては以下。時間指定の場合だけ、3の外部のシェルスクリプトを呼び出すようにした(同一シェルスクリプト内に書く方法が分からなくて・・・)。
タクトスイッチの割り当て
・GPIO 18:Slack へ定型文を投稿1
・GPIO 23:Slack へ定型文を投稿2
・GPIO 24:40 分後に Slack へ3の定型文を投稿
・GIPO 25:17:30 にSlack へ3の定型文を投稿
起動時に 30 秒間 sleep させているのは、そうしないと時々連続投稿が始まって暴走状態になるから。理由はよく分からない。
最後の sleep 0.2 は 0.1 だと連続投稿になってしまうことが多かったから。
at で指定するシェルスクリプトは絶対パスで記述する。
【at】Linuxで指定した時刻にジョブを実行する | UX MILK
http://uxmilk.jp/53442
Linuxコマンド【 sleep 】指定した時間だけ処理を遅延 – Linux入門 – Webkaru
https://webkaru.net/linux/sleep-command/
(6)3と5のシェルスクリプトに実行権限を与える。
$ sudo chmod 735 slack-post.sh
$ sudo chmod 735 TactSwitchToSlack.sh
(7)実行してみよう。
$ ./TactSwitchToSlack.sh
タクトスイッチを押すと Slack に投稿されるはずだ。Ctrl + c で終了できるが、時間指定の投稿に関しては at のキューに登録されているので、指定時間になったら投稿される。
(8)Raspberry Pi 起動時にシェルスクリプトを開始したいので、/etc/rc.local
というファイルを編集する。
exit 0 より前に以下を追加しよう。以下のように絶対パスで記入しないとうまく動かなかった。
./home/pi/TactSwitchToSlack.sh
参考:
Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説
http://hendigi.karaage.xyz/2016/11/auto-boot/