Netatmo ウェザーステーション を IFTTTとPHPで Slack に通知してみた
はじめに
おうちハック Advent Calendar 2015の記事を見て、
素敵すぎる!と興奮した勢いで、
Netatmo ウェザーステーションを買いました。
目標
自分のなかで実現したかったことは、以下です。
- 湿度とCO2が規定値を下回ったり超えたりしたときにアラートを受け取りたい。
- 毎時の部屋の気温、湿度、CO2を受け取りたい。
- どちらも通知はSlack上で受け取りたい。
結論からいうと2つの方法をつかって実現しました。
・IFTTTを使ってSlack投稿
・Netatmo のAPIでデータを取得してSlack投稿
実現方法
1. IFTTTを使ってSlack投稿
湿度とCO2など規定値を下回ったり超えたりしたときの通知は、
IFTTTというサービスを使うと簡単でした。
if -> Netatmo Weather Station
then -> Slack
上記はデフォルトのメッセージで通知してみた結果です。
設定はIFTTTのページに行けば分かると思います。
なんとなーくで設定できました。
2. Netatmo のAPIからデータを取得してSlack投稿
毎時にXXのデータが欲しい!ということは
IFTTTでさくっと出来ないようなので、
・Netatmoで提供されているAPIからデータを取得
・SlackのIncoming WebHooks機能で通知
という方法で実現しました。
準備
(1) Netatmo APIの認証設定をします。
https://dev.netatmo.com/
「Create an application」がそうです。すぐ登録完了できるはず。
(3) Slack のIncoming WebHooksを設定します。
URL
https://チーム名.slack.com/apps/build/custom-integration
このリンクで見つけられなかったら・・・
ここから https://slack.com/apps
たどり着くまでのキーワード
・Build your own
・Custom Integration
・Something just for my team
一からカスタマイズする設定をしてやるんだという心持ちで
ページを見つけて下さい(笑)
ページを見つけられたら後はすぐ登録できます。
実行プログラム
PHPで書きます。楽をしたいので、ライブラリを使いました。
https://github.com/Netatmo/Netatmo-API-PHP
Exampleもついてて素敵。
<?php
define("__ROOT__", dirname(__FILE__));
//ライブラリの読み込み
require_once __ROOT__ . "/src/Clients/NAWSApiClient.php";
//Netatmoの接続情報
$scope = NAScopes::SCOPE_READ_STATION;
$config = array(
"client_id" => "Netatmo APIのClient id",
"client_secret" => "Netatmo APIのClient secret",
"username" => "管理ページログインするときのメールアドレス",
"password" => "管理ページログインするときのパスワード"
);
//WSに接続して情報を取得しメッセージ文を作る
$client = new NAWSApiClient($config);
$data = $client->getData();
$message = "";
foreach ($data["devices"] as $device) {
//場所・気温・湿度・C02
$message .= sprintf(
"%s : %s°C, %s%%, %sppm" . PHP_EOL
, $device["station_name"]
, $device["dashboard_data"]["Temperature"]
, $device["dashboard_data"]["Humidity"]
, $device["dashboard_data"]["CO2"]
);
//屋外モジュールなど
foreach ($device["modules"] as $module) {
//モジュール名・気温・湿度
$message .= sprintf(
"%s : %s°C, %s%% " . PHP_EOL
, $module["module_name"]
, $module["dashboard_data"]["Temperature"]
, $module["dashboard_data"]["Humidity"]
);
}
//Slackへ通知
sendMessageAtSlack($message);
}
//Slackで通知
function sendMessageAtSlack($message) {
$url = "投稿先のURL";
$json = array(
"channel" => "#つき投稿したいチャネル名",
"username" => "投稿者名 なんでもOKっぽい",
"text" => $message,
"icon_emoji" => ":four_leaf_clover:"
);
//POST値は、payload=json型式のパラメータ
$data = http_build_query(array("payload" => json_encode($json)), "", "&");
$header = array(
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: " . strlen($data)
);
$options = array(
"http" => array(
"method" => "POST",
"header" => implode("\r\n", $header),
"content" => $data,
)
);
//SlackへPost送信
file_get_contents($url, FALSE, stream_context_create($options));
}
これをcronで定期実行するだけ。
#平日 8~20時の間毎時実行
0 8-20 * * 1-5 root php /usr/local/share/ws/WsNotification.php > /dev/null 2>&1
結果がこちら。
おわりに
このくらいなら本当に簡単!でした。
IFTTTの設定で出来ることだけでもいい感じに運用できると思います。
Netatmo APIからもらえるデータはもっとたくさんあるので、
カスタマイズした試した方はぜひ教えて下さい。
以上です。
Author And Source
この問題について(Netatmo ウェザーステーション を IFTTTとPHPで Slack に通知してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/kazunoko/items/9615453e31d78f609622著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .