0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Hueを使って照明の色で天気予報を認識する

Last updated at Posted at 2020-02-03

1. 億劫なこと

毎日、テレビやスマホで天気予報を確認して服装の選択や傘の有無を考えるのがめんどくさい。

2. やりたいこと

当日の天気予報をAPIで取得し、天気・温度に応じて室内照明(Hue)の色を点灯させたい。
想定する手順は以下の通り。

  1. 気象情報APIによって、当日の情報(天候と気温)を取得する
  2. 取得した天気の情報を元に、照明の色を変化させる

3. 環境

  • node version : v8.11.3
  • Philips Hue Go + ブリッジ

4. 実装

4.1 準備

モジュールのインストール。

    $ npm install request

4.2 気象情報APIの利用

今回は無料のAPIを使いたかったため、openweathermapを利用した。
HPから利用登録してAPPIDを入手。

天気の情報は以下のAPIによってGETできる。

    http://api.openweathermap.org/data/2.5/weather?zip=[郵便番号],JP&units=metric&APPID=[APPID]

コードは以下の感じ(郵便番号とAPPIDは任意に設定)。

weather.js
    // ▼▼天気情報を取得(openweathermapのAPI)▼▼
    var request = require('request');
       
    // API情報(zip_codeとwAPPIDは任意)
    var wbaseurl = "http://api.openweathermap.org/data/2.5/weather";
    var zip_code = "100-0005,JP";   //東京駅の郵便番号
    var wAPPID = [任意のID];
    var openweather_api = wbaseurl + "?zip=" + zip_code + "&units=metric&APPID=" + wAPPID;
    var options_openweather = {uri: openweather_api, method: 'GET'};

    function openweather_get() {
        request(options_openweather, function (error, response, body) { 
            var temp_json = JSON.parse(body).main.temp;
            console.log("本日の気温:" + temp_json + "度");
            var weather_json = JSON.parse(body).weather[0].main;
            console.log("本日の天気:" + weather_json);
        });
        return
    }
    openweather_get()

4.3 Hueの制御

  1. HueのAPIについて
    Hueの登録とAPIは公式ページを参考にして登録を行った。

  2. HueのAPI制御
    次に、HueのAPIを制御するために以下のようなコードを書いた(ipaddressとusernameは任意に設定)。

hue.js
    // ▼▼Hueの制御▼▼
    var request = require('request');

    // HueのAPI情報(ipaddressとusernameは任意)
    var hue_uri = "http://[ipaddress]/api/[username]/lights/1/state";

    // Hueを「白」に光らせる
    var hue_headers = {"Content-type": "application/json"};
    var white = {"on":true, "bri":144, "hue": 22612, "xy":[0.3146,0.3303], "effect": "none", "sat":171};
    var options_W = {uri: hue_uri, method: 'PUT', headers: hue_headers, json: white};
    function white_hue() {
        request(options_W, function (error, response, body) { console.log(body);})
        return
    }
    white_hue()

色は「白」以外にも、条件に応じて様々なパターンを作成した。

4.4 条件の設定

4.4.1 温度情報に応じて色を変化

温度ごとの条件は以下のように設定した。

   30度以上 → 赤色に点灯
   20度以上で30度未満 → 緑色に点灯
   10度以上で20度未満 → 水色に点灯
   10度未満 → 青色に点灯

4.4.2 天気情報に応じて色を変化

APIで取得できる天気の条件は以下。

晴:"Clear", 曇:"Clouds", 雪:"Snow", 雨:Rain, 雷雨:"Thunderstorm", 霧雨:"Drizzle"

これを元に、天気ごとの条件を設定した。

   晴れ or 曇り → 白色に点灯
   それ以外(雨や雪) → 紫色に点灯

4.5 実行

天気情報APIの取得コードとHueの制御コードを、条件設定に合わせて一部改修して実装した。

写真は温度が寒く、天候が晴れの時の様子。

clear.png

温度と天候の照明色は、30秒ごとに交互に点滅するようにした。
正常な動作を確認できたのでサーバーに実装し、毎日の外出時刻に合わせて点灯するように設置した。

5. まとめ

照明の色を見るだけで朝の支度ができるようになった。
理想は勝手に服や傘が準備されていることなのだが(笑)
でも、夕方の雨予報などはわからない、、、もっと良い使い方を検討してみたい。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?