Philips Hue x Johnny-Five x 温度センサ(LM35)でオフィスIoTやってみた

  • 4
    Like
  • 0
    Comment

この記事はMonstar Lab, Inc. Advent Calendar 2016 1日目の記事です。
モンスター・ラボ初のAdvent Calendarです!よろしくお願いします。🙋

オフィスにHueがやってきた!!!

先日、どうしてもHueが欲しくて「Hueほしいよォ〜〜」って言ってたら、会社がR&D用に買ってくれました。
IMG_2108.JPG

スクリーンショット 2016-11-25 18.53.34.png

ありがとうございます!!!!
というわけで、さっそくオフィスで使ってみました。

Hueのセットアップ

IPアドレスを調べる

Hueブリッジが同じネットワーク内に繋がっている状態で https://www.meethue.com/api/nupnp にアクセスすると、IPアドレス情報が取得できます。
スクリーンショット 2016-11-25 15.21.03.png

APIデバッグツールを使う

http://<IPアドレス>/debug/clip.html にアクセスするとデバッグツールが使えます。
スクリーンショット 2016-11-25 16.40.11.png

ユーザを作成する

下記のように指定します。

URL: /api
HTTP METHOD: POST
Message Body: {"devicetype": "hogehoge"}

以前は username を指定できたらしいのですが、公式サイト(http://www.developers.meethue.com/documentation/getting-started )に、

Currently it is possible to create your own usernames in the bridge (e.g. “newdeveloper”), however, this option will be removed in future bridge versions, so we need to use the randomly generated username that the bridge creates for you.

と書いてあったので、ランダム値の username を使うしかなさそうです・・・。

作成の際には、ブリッジのリンクボタン(ブリッジ中央のボタン)を押してから POST します。
success したら、 username がレスポンスされます。

動作例(APIデバッグツール)

Hueのステータスを取得

URL: /api/<username>/lights/
HTTP METHOD: GET
Command Response:

{
    "1": {
        "state": {
            "on": false,
            "bri": 254,
            "hue": 14910,
            "sat": 144,
            "effect": "none",
            "xy": [
                0.4596,
                0.4105
            ],
            "ct": 370,
            "alert": "none",
            "colormode": "ct",
            "reachable": true
        },
        "type": "Extended color light",
        "name": "Hue color lamp 1",
        "modelid": "LCT007",
        "manufacturername": "Philips",
        "uniqueid": "00:17:88:01:02:31:58:07-0b",
        "swversion": "5.38.1.14919"
    },
    "2": {
        "state": {
            "on": false,
            "bri": 43,
            "hue": 0,
            "sat": 0,
            "effect": "none",
            "xy": [
                0.6409,
                0.3332
            ],
            "ct": 0,
            "alert": "none",
            "colormode": "xy",
            "reachable": false
        },
        "type": "Extended color light",
        "name": "Hue color lamp 2",
        "modelid": "LCT007",
        "manufacturername": "Philips",
        "uniqueid": "00:17:88:01:02:31:56:f7-0b",
        "swversion": ""
    },
    "3": {
        "state": {
            "on": false,
            "bri": 43,
            "hue": 0,
            "sat": 0,
            "effect": "none",
            "xy": [
                0.6409,
                0.3332
            ],
            "ct": 0,
            "alert": "none",
            "colormode": "xy",
            "reachable": false
        },
        "type": "Extended color light",
        "name": "Hue color lamp 3",
        "modelid": "LCT007",
        "manufacturername": "Philips",
        "uniqueid": "00:17:88:01:02:31:56:c7-0b",
        "swversion": ""
    }
}

1 と書いている数字がHueの識別IDです。

Hueの点灯/消灯

URL: /api/<username>/lights/status/1
HTTP METHOD: PUT
MessageBody: {"on":true} or {"on":false}

Hueの色操作

URL: /api/<username>/lights/status/1
HTTP METHOD: PUT
MessageBody: {"on":true, "sat":254, "bri":254,"hue":10000}

sat は彩度、 bri は輝度、 hue は色相(0~65535の範囲。16bitColor?)

動作例(curl)

ターミナルから curl でも叩けます。

Hueのステータスを取得

curl http://<IP-address>/api/<username>/lights/

Hueの点灯/消灯

curl http://<IP-address>/api/<username>/lights/1/state -X PUT -d '{"on":true}'
curl http://<IP-address>/api/<username>/lights/1/state -X PUT -d '{"on":false}'

Hueの色操作

curl http://<IP-address>/api/<username>/lights/1/state -X PUT -d '{"on":true, "sat":254, "bri":254,"hue":10000}'

余談ですが、CLIでJsonを GET する場合、jqを導入すると幸せになれます。

センサーと連携してみる

温度センサと連携して、オフィスの気温によって照明の色が変わるIoTを作ってみました。

  • ハードウェア: Arduino UNO
  • センサー: 温度センサ LM35
  • フレームワーク: Jonny-Five
thermometer.js
var five = require("johnny-five");
var fetch = require("node-fetch");
var board = new five.Board();
var requestBody;

board.on("ready", function() {
    var temperature = new five.Thermometer({
        controller: "LM35",
        pin: "A0",
        freq: 1000
    });

    temperature.on('data', function() {
        console.log('celsius: ', this.celsius);

        if (this.celsius >= 27) {
            requestBody = '{"on":true, "sat":254, "bri":50,"hue":10000}';
        } else if (this.celsius == 26) {
            requestBody = '{"on":true, "sat":254, "bri":50,"hue":20000}';
        } else if (this.celsius == 25) {
            requestBody = '{"on":true, "sat":254, "bri":50,"hue":30000}';
        } else if (this.celsius <= 24) {
            requestBody = '{"on":true, "sat":254, "bri":50,"hue":40000}';
        }

        fetch('http://<IP-address>/api/<username>/lights/1/state', {
            method: 'PUT',
            body: requestBody
        })
        .then(function(res) {
            return res.json();
        }).then(function(json) {
            console.log(json);
        });
    });
});

23〜24℃では通常の照明色ですが、
IMG_2348.JPG

少し暑くなってくると(25℃〜27℃以上)、照明の色が暖色に変わります。
(実験ではわざと温度センサに触れて温度を上げています。)
IMG_2347.JPG

まとめ

Hueをセンサーと組み合わせて、オフィスの気温を視覚的に把握できるようになりました。
他にも、組み合わせとアイディア次第で応用ができそうです。

  • 湿度を測定して、オフィスエリアの乾燥を検知する(+加湿器を操作する)
  • 至適温度を越えたら、Slackに通知する(+エアコンを操作する)

などなど。
IoTを使ってより良いオフィス環境を手に入れていきましょう!!!!!

明日は @noboru_i 氏が担当します。お楽しみに!

参考サイト