はじめ
そこで今回は、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の色が自動で変化