{"database": "sensor", "private": false, "path": "/sensor", "size": 9658368, "tables": [{"name": "freezer_1", "columns": ["timestamp", "recorded_at", "temperature_c", "humidity_pct", "pressure_hpa", "door_status", "light_lux"], "primary_keys": [], "count": 11363, "hidden": false, "fts_table": null, "foreign_keys": {"incoming": [], "outgoing": []}, "private": false}, {"name": "fridge_1", "columns": ["timestamp", "recorded_at", "temperature_c", "humidity_pct", "pressure_hpa", "door_status", "light_lux"], "primary_keys": [], "count": 59813, "hidden": false, "fts_table": null, "foreign_keys": {"incoming": [], "outgoing": []}, "private": false}], "hidden_count": 0, "views": [], "queries": [{"title": "Fridge Current Stats (5 minute average)", "description": "Five-minute averages anchored to the latest fridge reading.", "sql": "WITH latest AS (\n  SELECT MAX(recorded_at) AS max_recorded_at\n  FROM fridge_1\n), windowed AS (\n  SELECT t.*\n  FROM fridge_1 t, latest\n  WHERE t.recorded_at >= datetime(latest.max_recorded_at, '-5 minutes')\n), latest_row AS (\n  SELECT recorded_at, door_status, light_lux\n  FROM fridge_1\n  ORDER BY recorded_at DESC\n  LIMIT 1\n)\nSELECT\n  latest_row.recorded_at AS latest_reading_at,\n  ROUND(AVG(windowed.temperature_c), 2) AS avg_temperature_c,\n  ROUND(AVG(windowed.humidity_pct), 2) AS avg_humidity_pct,\n  ROUND(AVG(windowed.pressure_hpa), 2) AS avg_pressure_hpa,\n  latest_row.door_status AS current_door_status,\n  latest_row.light_lux AS current_light_lux,\n  COUNT(*) AS samples_in_window\nFROM windowed, latest_row;", "name": "fridge_current_stats_5m", "private": false}, {"title": "Freezer Current Stats (5 minute average)", "description": "Five-minute averages anchored to the latest freezer reading.", "sql": "WITH latest AS (\n  SELECT MAX(recorded_at) AS max_recorded_at\n  FROM freezer_1\n), windowed AS (\n  SELECT t.*\n  FROM freezer_1 t, latest\n  WHERE t.recorded_at >= datetime(latest.max_recorded_at, '-5 minutes')\n), latest_row AS (\n  SELECT recorded_at, door_status, light_lux\n  FROM freezer_1\n  ORDER BY recorded_at DESC\n  LIMIT 1\n)\nSELECT\n  latest_row.recorded_at AS latest_reading_at,\n  ROUND(AVG(windowed.temperature_c), 2) AS avg_temperature_c,\n  ROUND(AVG(windowed.humidity_pct), 2) AS avg_humidity_pct,\n  ROUND(AVG(windowed.pressure_hpa), 2) AS avg_pressure_hpa,\n  latest_row.door_status AS current_door_status,\n  latest_row.light_lux AS current_light_lux,\n  COUNT(*) AS samples_in_window\nFROM windowed, latest_row;", "name": "freezer_current_stats_5m", "private": false}, {"title": "Fridge Temperature Over Time", "description": "Full fridge temperature history for charting.", "sql": "SELECT recorded_at, temperature_c\nFROM fridge_1\nORDER BY recorded_at;", "name": "fridge_temperature_over_time", "private": false}, {"title": "Freezer Temperature Over Time", "description": "Full freezer temperature history for charting.", "sql": "SELECT recorded_at, temperature_c\nFROM freezer_1\nORDER BY recorded_at;", "name": "freezer_temperature_over_time", "private": false}, {"title": "Fridge Pressure Over Time", "description": "Full fridge pressure history for charting.", "sql": "SELECT recorded_at, pressure_hpa\nFROM fridge_1\nORDER BY recorded_at;", "name": "fridge_pressure_over_time", "private": false}, {"title": "Freezer Pressure Over Time", "description": "Full freezer pressure history for charting.", "sql": "SELECT recorded_at, pressure_hpa\nFROM freezer_1\nORDER BY recorded_at;", "name": "freezer_pressure_over_time", "private": false}, {"title": "Fridge Door Activity", "description": "Fridge door state transitions over time.", "sql": "WITH changes AS (\n  SELECT\n    recorded_at,\n    door_status,\n    LAG(door_status) OVER (ORDER BY recorded_at) AS previous_status\n  FROM fridge_1\n)\nSELECT recorded_at, door_status\nFROM changes\nWHERE previous_status IS NULL OR door_status <> previous_status\nORDER BY recorded_at;", "name": "fridge_door_activity", "private": false}, {"title": "Freezer Door Activity", "description": "Freezer door state transitions over time.", "sql": "WITH changes AS (\n  SELECT\n    recorded_at,\n    door_status,\n    LAG(door_status) OVER (ORDER BY recorded_at) AS previous_status\n  FROM freezer_1\n)\nSELECT recorded_at, door_status\nFROM changes\nWHERE previous_status IS NULL OR door_status <> previous_status\nORDER BY recorded_at;", "name": "freezer_door_activity", "private": false}, {"title": "Fridge Light On Periods", "description": "Rows where the fridge light sensor indicates the light may be on.", "sql": "SELECT recorded_at, light_lux, door_status, temperature_c\nFROM fridge_1\nWHERE light_lux > 0\nORDER BY recorded_at;", "name": "fridge_light_on_periods", "private": false}, {"title": "Freezer Light On Periods", "description": "Rows where the freezer light sensor indicates the light may be on.", "sql": "SELECT recorded_at, light_lux, door_status, temperature_c\nFROM freezer_1\nWHERE light_lux > 0\nORDER BY recorded_at;", "name": "freezer_light_on_periods", "private": false}, {"title": "Fridge Temperature Rising", "description": "Five-minute windows where fridge average temperature rises for three consecutive periods.", "sql": "WITH buckets AS (\n  SELECT\n    strftime('%Y-%m-%d %H:', recorded_at) || printf('%02d', (CAST(strftime('%M', recorded_at) AS INTEGER) / 5) * 5) AS window_start,\n    AVG(temperature_c) AS avg_temperature_c\n  FROM fridge_1\n  GROUP BY 1\n), trends AS (\n  SELECT\n    window_start,\n    avg_temperature_c,\n    LAG(avg_temperature_c, 1) OVER (ORDER BY window_start) AS prev_avg_temperature_c,\n    LAG(avg_temperature_c, 2) OVER (ORDER BY window_start) AS prev2_avg_temperature_c\n  FROM buckets\n)\nSELECT\n  window_start,\n  ROUND(avg_temperature_c, 2) AS avg_temperature_c,\n  ROUND(avg_temperature_c - prev_avg_temperature_c, 2) AS delta_from_previous_c\nFROM trends\nWHERE prev2_avg_temperature_c IS NOT NULL\n  AND avg_temperature_c > prev_avg_temperature_c\n  AND prev_avg_temperature_c > prev2_avg_temperature_c\nORDER BY window_start DESC;", "name": "fridge_temp_rising", "private": false}, {"title": "Freezer Temperature Rising", "description": "Five-minute windows where freezer average temperature rises for three consecutive periods.", "sql": "WITH buckets AS (\n  SELECT\n    strftime('%Y-%m-%d %H:', recorded_at) || printf('%02d', (CAST(strftime('%M', recorded_at) AS INTEGER) / 5) * 5) AS window_start,\n    AVG(temperature_c) AS avg_temperature_c\n  FROM freezer_1\n  GROUP BY 1\n), trends AS (\n  SELECT\n    window_start,\n    avg_temperature_c,\n    LAG(avg_temperature_c, 1) OVER (ORDER BY window_start) AS prev_avg_temperature_c,\n    LAG(avg_temperature_c, 2) OVER (ORDER BY window_start) AS prev2_avg_temperature_c\n  FROM buckets\n)\nSELECT\n  window_start,\n  ROUND(avg_temperature_c, 2) AS avg_temperature_c,\n  ROUND(avg_temperature_c - prev_avg_temperature_c, 2) AS delta_from_previous_c\nFROM trends\nWHERE prev2_avg_temperature_c IS NOT NULL\n  AND avg_temperature_c > prev_avg_temperature_c\n  AND prev_avg_temperature_c > prev2_avg_temperature_c\nORDER BY window_start DESC;", "name": "freezer_temp_rising", "private": false}, {"title": "Fridge Dashboard Summary", "description": "Single-row fridge summary for a homepage or embedding into a dashboard.", "sql": "WITH latest AS (\n  SELECT MAX(recorded_at) AS max_recorded_at\n  FROM fridge_1\n), windowed AS (\n  SELECT t.*\n  FROM fridge_1 t, latest\n  WHERE t.recorded_at >= datetime(latest.max_recorded_at, '-5 minutes')\n), latest_row AS (\n  SELECT recorded_at, door_status, light_lux\n  FROM fridge_1\n  ORDER BY recorded_at DESC\n  LIMIT 1\n), rising AS (\n  SELECT COUNT(*) AS rising_windows\n  FROM (\n    WITH buckets AS (\n      SELECT\n        strftime('%Y-%m-%d %H:', recorded_at) || printf('%02d', (CAST(strftime('%M', recorded_at) AS INTEGER) / 5) * 5) AS window_start,\n        AVG(temperature_c) AS avg_temperature_c\n      FROM fridge_1\n      GROUP BY 1\n    ), trends AS (\n      SELECT\n        window_start,\n        avg_temperature_c,\n        LAG(avg_temperature_c, 1) OVER (ORDER BY window_start) AS prev_avg_temperature_c,\n        LAG(avg_temperature_c, 2) OVER (ORDER BY window_start) AS prev2_avg_temperature_c\n      FROM buckets\n    )\n    SELECT 1\n    FROM trends\n    WHERE prev2_avg_temperature_c IS NOT NULL\n      AND avg_temperature_c > prev_avg_temperature_c\n      AND prev_avg_temperature_c > prev2_avg_temperature_c\n  )\n)\nSELECT\n  latest_row.recorded_at AS latest_reading_at,\n  ROUND(AVG(windowed.temperature_c), 2) AS avg_temperature_c,\n  ROUND(AVG(windowed.humidity_pct), 2) AS avg_humidity_pct,\n  ROUND(AVG(windowed.pressure_hpa), 2) AS avg_pressure_hpa,\n  latest_row.door_status AS current_door_status,\n  latest_row.light_lux AS current_light_lux,\n  CASE WHEN rising.rising_windows > 0 THEN 'CHECK' ELSE 'OK' END AS fridge_temp_status\nFROM windowed, latest_row, rising;", "name": "fridge_dashboard_summary", "private": false}, {"title": "Freezer Dashboard Summary", "description": "Single-row freezer summary for a homepage or embedding into a dashboard.", "sql": "WITH latest AS (\n  SELECT MAX(recorded_at) AS max_recorded_at\n  FROM freezer_1\n), windowed AS (\n  SELECT t.*\n  FROM freezer_1 t, latest\n  WHERE t.recorded_at >= datetime(latest.max_recorded_at, '-5 minutes')\n), latest_row AS (\n  SELECT recorded_at, door_status, light_lux\n  FROM freezer_1\n  ORDER BY recorded_at DESC\n  LIMIT 1\n), rising AS (\n  SELECT COUNT(*) AS rising_windows\n  FROM (\n    WITH buckets AS (\n      SELECT\n        strftime('%Y-%m-%d %H:', recorded_at) || printf('%02d', (CAST(strftime('%M', recorded_at) AS INTEGER) / 5) * 5) AS window_start,\n        AVG(temperature_c) AS avg_temperature_c\n      FROM freezer_1\n      GROUP BY 1\n    ), trends AS (\n      SELECT\n        window_start,\n        avg_temperature_c,\n        LAG(avg_temperature_c, 1) OVER (ORDER BY window_start) AS prev_avg_temperature_c,\n        LAG(avg_temperature_c, 2) OVER (ORDER BY window_start) AS prev2_avg_temperature_c\n      FROM buckets\n    )\n    SELECT 1\n    FROM trends\n    WHERE prev2_avg_temperature_c IS NOT NULL\n      AND avg_temperature_c > prev_avg_temperature_c\n      AND prev_avg_temperature_c > prev2_avg_temperature_c\n  )\n)\nSELECT\n  latest_row.recorded_at AS latest_reading_at,\n  ROUND(AVG(windowed.temperature_c), 2) AS avg_temperature_c,\n  ROUND(AVG(windowed.humidity_pct), 2) AS avg_humidity_pct,\n  ROUND(AVG(windowed.pressure_hpa), 2) AS avg_pressure_hpa,\n  latest_row.door_status AS current_door_status,\n  latest_row.light_lux AS current_light_lux,\n  CASE WHEN rising.rising_windows > 0 THEN 'CHECK' ELSE 'OK' END AS freezer_temp_status\nFROM windowed, latest_row, rising;", "name": "freezer_dashboard_summary", "private": false}], "allow_execute_sql": true, "query_ms": 5.751730175688863, "license": "Private"}