asopi tech
asopi techIndie Developer

Asopitech With · スマート照明

Philips Hue Bridge 照明とシーン with Alopex DB

Philips Hueは、アプリや音声で家の照明を操作し、シーンで明るさと色をまとめて切り替えるスマート照明です。これをAlopex DBで作り直すと…?

更新: 2026/10/13

どんなサービスか

Philips HueのBridgeは、Hueの照明と防犯のシステムの中心です。照明、カメラ、センサーをつなぎ、ZigbeeとBluetoothで機器とやりとりします。Alexa、Google Home、Apple Home、IFTTTなどとも連携します。今回作り直すのは、ブリッジが持つ照明とシーンの部分です。

データの置き場所

  • Alopex DBのSQLテーブル:照明、部屋、シーン、センサーをSQLテーブルに持ちます。シーンは、照明ごとの明るさと色の行です。
  • SQL:部屋の照明をまとめて切り替える処理は、部屋とシーンを結合するSQLで書きます。
  • KV:照明の今の状態は、照明のIDをキーにしたKVで素早く読み書きします。

照明に命令を送るのは、ブリッジのソフトウェアです。

配置の形

Alopex DBを、ブリッジのソフトウェアに組み込みます。照明とシーンのデータは家の中のブリッジにあるので、インターネットが切れても照明は動きます。

Alopex DBが合う理由

スマート照明のデータは、照明、部屋、シーンの関係です。Alopex DBは、その関係をSQLテーブルで持ち、ブリッジに組み込んだまま問い合わせます。家がたくさん集まるクラウドの側では、同じエンジンをサーバー、クラスタとして動かせます。

コードで見る

照明・部屋・シーンをテーブルに持ち、部屋にシーンを当てる処理を、部屋とシーンを結合するSQLで書きます。中心だけを取り出したコードです。

import alopex

db = alopex.Database.open("hue.alopex")

# 照明・部屋・シーン(照明ごとの明るさと色)を持つ
db.execute_sql("CREATE TABLE IF NOT EXISTS lights (id INTEGER PRIMARY KEY, room TEXT, name TEXT)")
db.execute_sql("CREATE TABLE IF NOT EXISTS scenes (id INTEGER PRIMARY KEY, name TEXT)")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS scene_lights (
        scene_id INTEGER,
        light_id INTEGER,
        brightness INTEGER,
        color TEXT
    )
""")

for lid, room, name in [(1, "居間", "天井"), (2, "居間", "スタンド"), (3, "寝室", "枕元")]:
    db.execute_sql("INSERT INTO lights (id, room, name) VALUES (?, ?, ?)", [lid, room, name])
db.execute_sql("INSERT INTO scenes (id, name) VALUES (?, ?)", [1, "映画"])
for light_id, brightness, color in [(1, 10, "warm"), (2, 30, "warm")]:
    db.execute_sql("INSERT INTO scene_lights (scene_id, light_id, brightness, color) VALUES (?, ?, ?, ?)", [1, light_id, brightness, color])

# 「居間」に「映画」シーンを当てる=部屋の照明ごとの設定をSQLで引く
rows = db.execute_sql("""
    SELECT l.name, sl.brightness, sl.color
    FROM scene_lights AS sl
    JOIN lights AS l ON l.id = sl.light_id
    WHERE sl.scene_id = ? AND l.room = ?
    ORDER BY l.id
""", [1, "居間"])

for row in rows:
    print(row["name"], row["brightness"], row["color"])

部屋とシーンを結合すれば、まとめて切り替える設定が一度に引けます。この結果を、ブリッジが照明への命令に変えます。

照明とシーンの関係をSQLで扱えるAlopex DBを、ハブのソフトウェアに組み込んでみよう。

関連リンク