Hardware Connection
IceBreaker supports both the legacy Shelly Plug S (Gen 1) and the modern Shelly Plus / Gen 3 plugs. Pick an asset to see the right integration path.
Target asset
Integration flow adapts to the selected asset's hardware generation.
Gen 2/3 Plus — Native Edge Scripting
Modern Shelly Plus & Gen 3 plugs run JavaScript directly on-device. Telemetry is posted to IceBreaker's signed ingest bridge over HTTPS — no anon key on-device, no polling, no extra infrastructure.
Open the local Web UI
Browse to the plug's IP on your LAN, sign in, then open Scripts → Create new script.
Paste & Run
Paste the script below, hit Save, then Run. Toggle “Run on startup” so the device auto-reconnects after a power cycle.
Watch it stream
Open the Live Monitor — readings appear within ~1s via the Supabase Realtime channel.
Shelly Gen 2/3 ingest script
POSTs to /api/public/hooks/ingest-telemetry with a signed X-Ingest-Secret header — the publishable anon key never leaves the server.
SQL — schema & Realtime activation
-- IceBreaker schema + Realtime activation
create table public.assets (
id text primary key,
name text not null,
location text,
device_generation text not null default 'gen2_plus'
check (device_generation in ('gen1_classic', 'gen2_plus')),
created_at timestamptz not null default now()
);
grant select on public.assets to anon;
grant select, insert, update, delete on public.assets to authenticated;
grant all on public.assets to service_role;
alter table public.assets enable row level security;
create policy "Anyone can read assets"
on public.assets for select to anon, authenticated using (true);
create policy "Authenticated can manage assets"
on public.assets for all to authenticated using (true) with check (true);
create table public.telemetry_logs (
id bigint generated always as identity primary key,
asset_id text not null references public.assets(id) on delete cascade,
created_at timestamptz not null default now(),
active_power numeric,
voltage numeric,
current numeric
);
create index telemetry_logs_asset_created_idx
on public.telemetry_logs (asset_id, created_at desc);
grant select, insert on public.telemetry_logs to anon;
grant select, insert, update, delete on public.telemetry_logs to authenticated;
grant all on public.telemetry_logs to service_role;
alter table public.telemetry_logs enable row level security;
create policy "Anyone can read telemetry"
on public.telemetry_logs for select to anon, authenticated using (true);
create policy "Anyone can insert telemetry"
on public.telemetry_logs for insert to anon, authenticated with check (true);
-- Activate Realtime streaming (single channel used by both Gen 1 + Gen 2/3)
alter table public.telemetry_logs replica identity full;
alter publication supabase_realtime add table public.telemetry_logs;
-- Migration to add hardware generation to an existing install
alter table public.assets
add column if not exists device_generation text
not null default 'gen2_plus'
check (device_generation in ('gen1_classic', 'gen2_plus'));
Already applied to your backend; included here for reference.