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の組み合わせを、家の機器づくりにおすすめします。