Intern

Node-REDで天気API連携!Hueライトの色が自動で変わる仕組みを作ってみた

はじめ

そこで今回は、Node-REDを使って天気APIと連携し、気温に応じてPhilips Hueライトの色を自動で変えるシステムを構築してみました!injectノードを使って、一定間隔で天気APIを呼び出すことで、常に最新の気温に合わせてライトの色が変わり続ける仕組みです。

構成イメージ

  • Node-RED(Raspberry Pi 4上で稼働)
  • OpenWeatherMap API(気温データを取得)
  • Philips Hueライト(API経由で色を制御)

フロー

  • injectノード:30分ごとに実行(止めない限り常に動作)
  • http requestノード:天気APIへGETリクエスト(URLを設定)
  • functionノード:気温に応じてライトの色を設定
  • Hueライトノード:設定された色でライトを更新

APIで都市を自由に切り替え可能!

使用しているOpenWeatherMapのAPIのURLは、以下のような形式です:

bashコピーする編集するhttps://api.openweathermap.org/data/2.5/weather?q=Tokyo&appid=YOUR_API_KEY&units=metric

このq=Tokyoの部分を変えることで、世界中の都市の気温を取得できます

例:

  • 東京 → q=Tokyo
  • 大阪 → q=Osaka
  • ニューヨーク → q=New York
  • ロンドン → q=London

つまり、Node-REDフローの設定を変えずに都市名だけ差し替えれば、海外の気温に合わせてライトを変化させることも可能です。

functionノードの中身(気温で色変更)

<code>let temp = msg.payload.main.temp;

if (temp < 10) {
    msg.payload = { on: true, bri: 200, hue: 46920 }; // 寒い → 青系
} else if (temp < 20) {
    msg.payload = { on: true, bri: 200, hue: 25500 }; // 涼しい → 緑
} else {
    msg.payload = { on: true, bri: 200, hue: 0 };     // 暑い → 赤系
}

return msg;
</code>Code language: JavaScript (javascript)

injectノードの設定

  • タイプ:interval
  • 実行間隔:30分
  • 自動起動:チェックON

Node-REDを起動し続ける限り、ライトも定期的に更新され続けます。
ボタンでの点滅制御は今度実装してみようと思います。

まとめ

  • OpenWeatherMapの都市名パラメータで場所変更が可能
  • 気温に応じてHueの色が自動で変化