LoginSignup
7
6

More than 5 years have passed since last update.

Philips Hue + PHPで天気予報

Last updated at Posted at 2015-01-17

はじめに

最近はやりのものに触れてみたい。ってことでやってみた。
天気予報APIから降水確率を取ってきて30%以下なら赤く、
それ以上なら青に点滅するPHPプログラムを書いてみた。
(元ネタはWEB + DB)
これで傘を忘れるなんてことはなくなるよねっ

Philips Hue

プログラマブル電球。
詳細はここでは割愛。
コマンドラインからも操作できるけど各種SDKも豊富にそろってた。
http://www.developers.meethue.com/tools-and-sdks

PHPのSDKも3つ存在。
中でも一番人気のやつをコンポーザーでインストールして使用。

天気予報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。
プログラムで電球の色が変わるのが思いの外楽しい。おすすめ。

おわり

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6