ANALYTICS PLAYBOOK_

LIVING DIAGNOSTIC PLAYBOOK · DATA EXTRACTION CENTER

ASSET & TIMEFRAME CONTROLS

RANGE START · 2026-08-22T18:16:59.789ZRANGE END   · 2026-08-23T18:16:59.789Z

EXPORT ENGINE

COLUMNS: timestamp · active_power · voltage · current · operational_state

JUPYTER NOTEBOOK INGEST ENGINE

import pandas as pd
import requests
import time
 
# Project Icebreaker · Paginated Analytics Engine Ingest
# ⬇ Replace these two values with your Supabase project URL and anon key
SUPABASE_URL = "https://your-project.supabase.co"
SUPABASE_KEY = "your-anon-key"
 
url = f"{SUPABASE_URL}/rest/v1/telemetry_logs"
 
headers = {
"apikey": SUPABASE_KEY,
"Authorization": f"Bearer {SUPABASE_KEY}",
}
 
all_data = []
offset = 0
chunk_size = 1000
 
print("📥 Initializing paginated extraction from cloud layer...")
 
while True:
params = {
"asset_id": "eq.MBS-KIT-CHILLER-01",
"timestamp": "gte.2026-08-22T18:16:59.789Z",
"timestamp": "lte.2026-08-23T18:16:59.789Z",
"select": "timestamp,active_power,voltage,current,operational_state",
"order": "timestamp.asc",
"limit": str(chunk_size),
"offset": str(offset),
}
 
res = requests.get(url, headers=headers, params=params)
data = res.json()
 
# Break out if empty list or invalid format returned
if not isinstance(data, list) or len(data) == 0:
break
 
all_data.extend(data)
print(f" Aggregated records {offset} to {offset + len(data)}...")
 
# If the database returns less than our requested chunk, we have hit the end
if len(data) < chunk_size:
break
 
offset += chunk_size
time.sleep(0.05) # Lightweight safety buffer to guard against API rate throttling
 
df = pd.DataFrame(all_data)
print(f"✅ Extraction complete. Imported {len(df)} fully labeled telemetry rows into DataFrame 'df'.")
 

RANGE SUMMARY · LIVE

NO ROWS IN RANGE

DATA SET BROWSER · LATEST EXAMPLES

OPERATIONAL STATES
ANOMALY EVENTS
NO ANOMALIES LOGGED FOR THIS ASSET
SELECT A STATE OR ANOMALY TO PLOT THE LATEST EXAMPLE
AWAITING SELECTION

DIAGNOSTIC PLAYBOOK

  1. 01
    ESTABLISH BASELINE

    Pull a 7-day window with the Export Engine. Compute median active_power during stable operation — this is your cruise baseline (~122W for chiller inverter).

  2. 02
    IDENTIFY EXCURSIONS

    Use the Jupyter snippet to detect samples > baseline × 1.15 sustained for ≥ 60s. These are your candidate Warning events.

  3. 03
    CORRELATE STAGING

    Pair excursions with voltage dips and current spikes. A true compressor breach shows current ↑ and voltage ↓ simultaneously.

  4. 04
    EXPORT FOR REVIEW

    Generate a CSV bounded to the anomaly window ± 5 min for downstream notebook analysis or hand-off to engineering.