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 pdimport requestsimport time # Project Icebreaker · Paginated Analytics Engine Ingest# ⬇ Replace these two values with your Supabase project URL and anon keySUPABASE_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 = 0chunk_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
- 01ESTABLISH 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).
- 02IDENTIFY EXCURSIONS
Use the Jupyter snippet to detect samples > baseline × 1.15 sustained for ≥ 60s. These are your candidate Warning events.
- 03CORRELATE STAGING
Pair excursions with voltage dips and current spikes. A true compressor breach shows current ↑ and voltage ↓ simultaneously.
- 04EXPORT FOR REVIEW
Generate a CSV bounded to the anomaly window ± 5 min for downstream notebook analysis or hand-off to engineering.