asopi tech
asopi techIndie Developer

Asopitech With · スマートホームのハブ

SmartThings with Alopex DB & Alopex Skulk

SmartThingsは、照明やセンサー、家電をひとつのアプリでつなぐスマートホームのサービスです。これをAlopex DBとAlopex Skulkで作り直すと…?

更新: 2026/10/12

どんなサービスか

SmartThingsのようなスマートホームのサービスは、照明、センサー、スマートプラグ、カメラ、サーモスタット、家電を、ひとつのアプリでつなぎ、操作し、自動化します。ハブが家の中の機器をつなぎ、人の動きを検知して照明をつけるような自動化を動かします。扱うデータは、機器と部屋の構成、自動化のルール、機器の状態とセンサーの値の時系列です。

データの置き場所

  • ハブのAlopex DB:家、部屋、機器、シーン、自動化のルールをテーブルに持ちます。ルールの条件は、JSONの列に入れます。
  • ハブのSkulk:温度、電力、人の動きのようなセンサーの値を、機器と部屋のタグを付けてSkulkに追記します。直近の平均の室温は、時間の集計で出ます。
  • クラウドのAlopex DBのクラスタ:家ごとの機器の構成と、利用の集計をクラウドに集めます。

自動化のルールを評価して機器を動かすのは、ハブのアプリのコードです。

配置の形

ハブには、Alopex DBとSkulkを組み込みます。インターネットが切れても、家の中の自動化とセンサーの記録は止まりません。クラウドでは、たくさんの家のデータをAlopex DBのクラスタで受けます。ノードの参加と離脱はクラスタ全体で合意し、読み取りはデータを受け持つノードへ振り分けます。ハブとクラウドは、同じSQLで同じ形のデータを扱います。

Alopex DBとAlopex Skulkが合う理由

スマートホームのデータは、家の中で生まれ、家の中ですぐに使われ、クラウドで集められます。Alopex DBとSkulkは、ハブに組み込む小さな形から、クラウドのAlopex DBのクラスタまで、同じデータの形でつなぎます。

コードで見る

家・部屋・機器・自動化はAlopex DBが持ちます(センサーの時系列はSkulk)。部屋ごとの機器を集計する中心だけを取り出したコードです。

import alopex

# 家・部屋・機器・自動化は Alopex DB(センサーの時系列は Skulk)
db = alopex.Database.open("smartthings.alopex")

db.execute_sql("CREATE TABLE IF NOT EXISTS rooms (id INTEGER PRIMARY KEY, name TEXT)")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS devices (
        id INTEGER PRIMARY KEY,
        room_id INTEGER,
        kind TEXT,
        state TEXT
    )
""")

for rid, name in [(1, "居間"), (2, "玄関")]:
    db.execute_sql("INSERT INTO rooms (id, name) VALUES (?, ?)", [rid, name])
for did, room_id, kind, state in [(1, 1, "light", "on"), (2, 1, "sensor", "idle"), (3, 2, "lock", "locked")]:
    db.execute_sql("INSERT INTO devices (id, room_id, kind, state) VALUES (?, ?, ?, ?)", [did, room_id, kind, state])

# 部屋ごとの機器の数を集計する
for row in db.execute_sql("""
    SELECT r.name, COUNT(d.id) AS devices
    FROM rooms AS r
    JOIN devices AS d ON d.room_id = r.id
    GROUP BY r.id, r.name
    ORDER BY devices DESC
"""):
    print(row["name"], row["devices"])

構成はSQLで集計・絞り込みできます。センサーの値の時系列はSkulkがタグ付きで追記し、ハブとクラウドのクラスタが同じSQLでつながります。

ハブに組み込むAlopex DBとAlopex Skulk、クラウドのAlopex DBのクラスタは、同じSQLでスマートホームをつなげます。ハブ一台分から試してみよう。

関連リンク