はじめに
最近はやりのものに触れてみたい。ってことでやってみた。
天気予報APIから降水確率を取ってきて30%以下なら赤く、
それ以上なら青に点滅するPHPプログラムを書いてみた。
(元ネタはWEB + DB)
これで傘を忘れるなんてことはなくなるよねっ
Philips Hue
プログラマブル電球。
詳細はここでは割愛。
コマンドラインからも操作できるけど各種SDKも豊富にそろってた。
http://www.developers.meethue.com/tools-and-sdks
PHPのSDKも3つ存在。
中でも一番人気のやつをコンポーザーでインストールして使用。
- github https://github.com/sqmk/Phue
- Packagist https://packagist.org/packages/sqmk/phue
天気予報API
いっぱいあるけど降水確率をレスポンスに含むものはあんまりないらしい。
http://blog.wszz.org/archives/377
降水確率によってHueの色を変える的なことをやりたいので、
http://www.drk7.jp/weather/
のJapan Weather Forecast xmlを取得してくる
ソースコード
weather.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
$url = "http://www.drk7.jp/weather/xml/13.xml"; //13は東京
$xml = file_get_contents($url, true);
$parsedXml = new \SimpleXMLElement($xml);
$rain = "";
$hueHost = "ブリッジのIP";
$hueUsername = "登録したユーザーネーム";
foreach ($parsedXml->pref->area as $area) {
if ($area->attributes()["id"] != "東京地方") continue;
$hour = date("H");
$periodAry = get_object_vars($area->info->rainfallchance)["period"];
switch (true) {
case $hour < "06": // 00 ~ 06
$rain = $periodAry[0];
break;
case $hour < "12": // 06 ~ 12
$rain = $periodAry[1];
break;
case $hour < "18": // 12 ~ 18
$rain = $periodAry[2];
break;
default: //18 ~ 24
$rain = $periodAry[3];
break;
}
}
$client = new \Phue\Client($hueHost, $hueUsername);
$light = $client->getLights()[4];
$brightness = 50; //輝度 0 ~ 255
$saturation = 255; //彩度 0 ~ 255
$effect = "none"; //none or colorloop
$alert = "lselect"; //select, lselect, none
if ($rain < 30) { // 降水確率30%以下
$hue = 65000; //赤 色相 0 ~ 65535
// Send command
$client->sendCommand(
(new \Phue\Command\SetLightState($light))
->brightness($brightness)
->hue($hue)
->saturation($saturation)
->effect($effect)
->alert($alert)
);
} else {
$hue = 47000; //青
// Send command
$client->sendCommand(
(new \Phue\Command\SetLightState($light))
->brightness($brightness)
->hue($hue)
->saturation($saturation)
->effect($effect)
->alert($alert)
);
}
まとめ
あとはこいつをCronとかで回してやればOK。
プログラムで電球の色が変わるのが思いの外楽しい。おすすめ。
おわり