asopi tech
asopi techIndie Developer

Asopitech With · スマートサーモスタット

ecobee 室温とセンサーの記録 with Alopex Skulk & Alopex DB

ecobeeは、暮らしの予定を学んで冷暖房を自動で調整し、快適さと省エネを両立させるスマートサーモスタットです。これをAlopex SkulkとAlopex DBで作り直すと…?

更新: 2026/10/13

どんなサービスか

ecobeeのサーモスタットは、住む人の予定を学び、快適さを保ちながら省エネになるように冷暖房を動かします。上位の機種は、レーダーによる在室センサーと室内の空気質のモニターを内蔵し、部屋に置くSmartSensorと組み合わせられます。今回作り直すのは、室温とセンサーの記録、予定と設定の部分です。

データの置き場所

  • Skulkの時系列:室温、湿度、在室、空気質を、部屋とセンサーのタグを付けてSkulkに追記します。時間ごとの推移は、時間で区切る集計で出します。
  • Alopex DBのSQLテーブル:家、部屋、センサー、予定、温度の設定をSQLテーブルに持ちます。

センサーから値を読み、冷暖房を動かすのは、サーモスタットのソフトウェアです。

配置の形

SkulkとAlopex DBを、サーモスタットのソフトウェアに組み込みます。記録と予定は家の中の機器にあり、インターネットが切れても冷暖房は予定どおりに動きます。家がたくさん集まる側では、同じエンジンをサーバー、クラスタとして動かします。

Alopex SkulkとAlopex DBが合う理由

サーモスタットのデータは、センサーの時系列と、予定と設定のデータの組み合わせです。Skulkは時系列を、Alopex DBは予定と設定を受け持ち、どちらも機器に組み込んだまま動きます。

コードで見る

予定と設定はAlopex DBが持ちます(室温・在室・空気質の時系列はSkulk)。いまの時刻に効く設定温度を引く中心だけを取り出したコードです。

import alopex

# 予定と設定は Alopex DB(室温などの時系列は Skulk が受け持つ)
db = alopex.Database.open("ecobee.alopex")

db.execute_sql("""
    CREATE TABLE IF NOT EXISTS schedules (
        room TEXT,
        part TEXT,
        start_hour INTEGER,
        target INTEGER
    )
""")

for room, part, start_hour, target in [("居間", "朝", 6, 22), ("居間", "昼", 10, 25), ("居間", "夜", 18, 23)]:
    db.execute_sql("INSERT INTO schedules (room, part, start_hour, target) VALUES (?, ?, ?, ?)", [room, part, start_hour, target])

# いまの時刻(例:20時)に効いている設定温度を引く
now_hour = 20
row = db.execute_sql("""
    SELECT part, target
    FROM schedules
    WHERE room = ? AND start_hour <= ?
    ORDER BY start_hour DESC
    LIMIT 1
""", ["居間", now_hour])[0]
print(f'{row["part"]}の設定: {row["target"]}℃')

時刻の条件で、いま効いている設定を1件引けます。室温・在室・空気質の時系列は、Skulkが部屋とセンサーのタグ付きで追記・集計します。

センサーの時系列はSkulk、予定と設定はAlopex DB。機器に組み込めるAlopex SkulkとAlopex DBの組み合わせを、家の機器づくりにおすすめします。

関連リンク