コンテンツへスキップ

1

ラズパイからSlackへの通信をSlack APIのSlack Incoming WebHooksでやります。

目次

  • Slackとは
  • slackへの通知
  • やってみた

slackとは

slackとは、スチュワート・バターフィールドによって開発されたチームコミュニケーションツールです。基本的にはITっぽいLINEみたいなもので、大学やIT系の集団がよく使っており、コードを送ったりするときに便利です。 公式Slack 機能 、公式slack サインイン

APIについて

slackにはいろいろと便利機能が有るらしく、今回の通知機能もslackが提供していすサービス「Incoming WebHooks」「Outgoing WebHooks」を使用します。 公式Slack API

APIとは、

ソフトウェアからOSの機能を利用するための仕様、またはインターフェースのこと。一般的にAPIといった場合は、OSの機能を利用するための関数を指す。APIの概念が登場するまでは、OSの機能を利用するためのプログラムをそのつど開発していたが、APIの登場によりそれらの関数を呼び出すだけでOSの機能を利用できるようになった。最近では、Webサービスの機能を外部から利用するためのインターフェースもAPIと呼ばれる。

from API(エー ピー アイ)とは - コトバンク

APIを使うと、OS(windowsなど。人間やアプリケーションとハードウェアの中間で頑張っている)の機能を呼び出せるという事だと思います。

slackへの通知

今回は簡単のためにSlack Incoming WebHooksを使用します(前提として、slackにすでにサインインしているものとします)。Incoming WebHooksはslackが提供しているAPIの一つで、外部からslackへ送信する機能です。slack側から送信することはできないようです。

通知をするまでの手順です。

  • Slackアプリを作成
  • Incoming WebHooksを有効化し、各種設定をする
  • テスト

Slack Incoming Webhookの設定

ここからSlackn App Directory,検索バーからincoming webhooksを検索して選びます。投稿先のチャンネルを選び、追加します。私はあらかじめSlackでtestチャンネルを作っておきました。プライベートチャンネルも選べます。また、この画面下の方でアイコン画像の設定もできます。

なんやかんや設定して、保存します。

slackwebのインストール

ラズパイにslakwebをインストールします。pipとはPythonのパッケージをインストールするのを簡単にするツールです。apt-getと同じ感覚で使えます。Pythonパッケージに関するツールなので、今回のコードはPythonで書いていきます。ラズパイに以下のように入力すればインストール完了です。

$sudo pip install slackweb
デバック

一応slackwebはインストールできたものの、You should consider upgrading via the 'pip install --upgrade pip' command.というメッセージが出ているので指示に従いました。pip はpythonのapt-get見たいなものです。するとまたもエラー。

$pip install --upgrade pip
Collecting pip
 Downloading https://files.pythonhosted.org/packages/d8/f3/413bab4ff08e1fc4828dfc59996d721917df8e8583ea85385d51125dceff/pip-19.0.3-py2.py3-none-any.whl (1.4MB)
   100% |████████████████████████████████| 1.4MB 207kB/s
Installing collected packages: pip
Successfully installed pip-8.1.1
You are using pip version 8.1.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
inomata@inomata-desktop:~$ pip install --upgrade pip
Traceback (most recent call last):
 File "/usr/bin/pip", line 9, in <module>
   from pip import main
ImportError: cannot import name main

どうやら参考サイトによると、aptで入れたpipと今入れようとしたpipに互換性がないために怒られてしまっている模様。

$python -m pip uninstall pip
 Successfully uninstalled pip-19.0.3

これ、uninstallするのって19のほうなんですね。このあと

$ sudo apt install python-pip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
python-pip はすでに最新バージョン (8.1.1-2ubuntu0.4) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

こんな感じ。まあ問題はない。

この章の参考

やってみた

まずは動作テストです。コードはpythonで書きます。ラズパイにはPythonが標準でインストールされています。incomingSlackwebhools_test.pyを作成し、emacs(好きなエディタ)で開きます。

$touch incomingSlackWebhooks_test.py
$emacs incomingSlackWebhooks_test.py 
import slackweb
slack = slackweb.Slack(url="incoming設定ページでコピーしたURL")
slack.notify(text= "hello world")

slackで指定したチャンネルに「hello world」と届いていればOKです。

画像

incomingの方はすぐですね。同様にすればセンサーの値を取得して変数に与えたりできます。今で元にメスのジャンパーピンがないのでできませんが、何もしないと面白くないので以下のような日にちを伝えるプログラムdateForSlack.pyを作成しました。

# -*- coding: utf-8 -*-

import slackweb
import datetime

slack = slackweb.Slack(url = "incoming設定ページでコピーしたURL")
date = datetime.date.today()
slack.notify(text = "今日は"+str(date))
print("今日は"+str(date))

datetimeというのは実行したときの日付を取得するモジュールです。型変換して文字列にして出力しています。出力結果は以下のようになります。

$cd dateForSlack.pyがあるところ
$python dateForSlack.py

この章の参考

raspberry pi のpythonライブラリはpipよりart-getで入れるのが断然早い -からあげ

IPアドレスを調べるときの参考 ifconfigが非推奨に!? ifconfigコマンドを使わずにRaspberry PiのIPアドレスを調べる方法 -猿まね電子工作

ラズパイを繋いだときに、ホストアドレスからランダムに指定されるのがデフォルトのはず。固定アドレスにする時 Raspbian(jessie)の固定IPアドレス設定方法 -俺の技術メモ

雑談

参考のリンクを書く場所で迷っています。文章の邪魔をしないようにしつつ文章のすぐ近くに配置すれば情報元の対応がわかりやすいですが、一方でこの投稿でほしい情報がすべて手に入るのであれば対応がわかる必要がないから最後にまとめて書くのが親切かもしれない。いろいろなパターンでやってみるつもりです。