Asopitech With · 温湿度計
SwitchBot 温湿度グラフ with Alopex Skulk
SwitchBot 温湿度計は、部屋の温度と湿度を測り、スマホのアプリでグラフにして記録を見せる温湿度計です。これをAlopex Skulkで作り直すと…?
更新: 2026/10/13
どんなサービスか
SwitchBot 温湿度計は、温度と湿度を測り、Bluetoothでスマホのアプリに届けます。アプリは、温度、相対湿度、絶対湿度、露点温度、飽和水蒸気圧を記録してグラフで見せ、記録をCSVで書き出せます。ハブと組み合わせると、記録をクラウドにも保存します。今回作り直すのは、この記録とグラフの部分です。
データの置き場所
- Skulkの時系列:温度、相対湿度、絶対湿度、露点温度、飽和水蒸気圧を、部屋と機器のタグを付けてSkulkに追記します。
- 時間で区切る集計:時間ごと、日ごとの平均と最大を、時間で区切る集計で出し、グラフに渡します。
- 保持期間:期限を過ぎた区間は、Skulkが自動で落とします。
温湿度計から値を読んで書き込むのは、アプリのコードです。
配置の形
Skulkを、スマホのアプリとハブのソフトウェアに組み込みます。記録はまず手元にたまり、家がたくさん集まる側では、同じエンジンのSkulkをサーバー、クラスタとして動かして受けます。
Alopex Skulkが合う理由
温湿度の記録は、周期的に届く数値の時系列です。Skulkは、取り込み、時間の集計、保持期間の管理を、アプリの中に組み込んだまま行います。貯めたデータはParquetで、スプレッドシートや分析のツールからそのまま読めます。
コードで見る
温湿度をLine ProtocolでSkulkに取り込み、読み出す中心だけを取り出したコードです(Rust)。
use alopex_skulk::ingest::line_protocol::LineProtocolDecoder;
use alopex_skulk::ingest::{IngestLimits, Ingestor};
use alopex_skulk::model::FieldValue;
use alopex_skulk::store::recovery::{RecoveryConfig, RecoveryStore};
fn main() -> alopex_skulk::Result<()> {
std::fs::create_dir_all("switchbot-data").unwrap();
let store = RecoveryStore::open("switchbot-data", RecoveryConfig::default())?;
let limits = IngestLimits::default();
let mut ingestor = Ingestor::new(store, limits);
// 温度・湿度を Line Protocol で取り込む(measurement,tag field[,field] timestamp[ns])
let base: i64 = 7_200_000_000_000;
let now = base + 300_000_000_000;
for (i, (t, h)) in [(20.5, 55.0), (21.0, 58.0), (21.8, 60.0)].iter().enumerate() {
let ts = base + (i as i64) * 60_000_000_000;
let line = format!("room,sensor=bedroom temperature={t},humidity={h} {ts}");
let batch = LineProtocolDecoder::new(limits).decode(line.as_bytes(), now)?;
assert_eq!(ingestor.ingest(batch, now)?.accepted_count(), 1);
}
ingestor.sink_mut().flush_all()?;
// 取り込んだ温度を読み出す
for row in &ingestor.sink().read_measurement("room")? {
if let Some(FieldValue::Float(t)) = row.row().field("temperature") {
println!("t={} temperature={t}", row.row().timestamp());
}
}
Ok(())
}取り込みは ingest() が返った時点でWALに永続し、flush_all() でParquet化します。時間ごと・日ごとの平均は時間で区切る集計で、古い区間は保持期間で自動的に落とせます。
アプリに組み込むだけで温湿度のグラフを出せるAlopex Skulkで、部屋の記録を作ってみよう。