No Cloud Required: Talking Directly to My SunPower Hardware
TL;DR: I discovered an official API for my SunPower hardware. I can use Python (or whatever) to talk to my system.
BACKGROUND
I bought a Sunpower solar/battery system in January 2023. After securing permits, installation began later that year. Despite some hiccups, such as having to reboot and reset everything when the battery is exhausted, the system works well enough. We survive power outages by flipping breakers to run the refrigerator and nothing else. When the house is quiet and only the refrigerator is drawing power, the site load drops to around 0.1 kW.
β‘Record: 80 hours without power on February 2024
SunPower filed for Chapter 11 bankruptcy on August 6, 2024. SunStrong Management, which bought out SunPower's share in SunStrong Capital, took over the monitoring app. They wanted $200/year for the app! Excessive but not too surprising: Supporting their goofy, bespoke app for a tiny customer base can't be cheap. I wasn't completely surprised when the latest release, 1.1.8 (10981), broke chart rendering. No idea how this version made it out of QA.

THE SUNFLOWER CLUE
While researching a replacement, I came across a third party app called Sunflower.

To my complete surprise, Sunflower could connect directly to the monitoring gateway. All I had to do was put the PVS6 on my Internet of Shit network (a dedicated wireless segment for untrustworthy devices), disable client device isolation, and assign it a static IP. But how the heck was Sunflower talking to it when my own attempts failed?
% curl '10.10.10.134/cgi-bin/dl_cgi?Command=DeviceList'
{ "status":403, "error" : "Unauthorized", "path":"" }
AN EXCITING DISCOVERY
After Kagi-ing around, I was floored to discover that SunStrong has published official documentation for the local API including how authentication works. The username is always ssm_owner and the password is the last five characters of the serial number.
WHAT I BUILT
Here's a Python script to explore PVS6 data: pvs6_query.py
It expects two environment variables:
PVS_IPe.g. 10.10.10.134PVS_SERIAL
Output:
PVS6 Local Monitor
Device : 10.10.10.134
Auth : ssm_owner:***** (19-char serial)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Gateway / Firmware
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Model PVS6
Serial <redacted>
SW version 2025.10, Build 61846
FW version 1.0.0
Build 61846
β Authenticated (session: REDACTED)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Live Power (updates every ~15 s)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Timestamp 2026-04-01 11:19:32 PDT
Solar PV output +6,688 W
Site load -5,801 W (negative = consuming)
Grid -5,794 W (negative = exporting β)
Battery -7 W (β charging + discharging)
Lifetime solar generated 37,650.1 kWh
Lifetime net grid 3,978.7 kWh
Lifetime site load 2,480.6 kWh
Lifetime battery net -1,498.2 kWh
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Battery (ESS / SunVault)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Operating mode TARIFF_OPTIMIZER
Measurement time 2026-04-01 11:10:00 PDT
State of charge (SOC) 100.0%
Customer SOC 100.0% (what the app shows)
State of health (SOH) 100.0%
Minimum customer SOC 50.0% (reserve floor)
Battery power now -7 W
Charge limit +178 W
Discharge limit +10,117 W
Battery voltage 54.23 V
AC voltage L1 120.05 V
AC voltage L2 120.05 V
Inverter temp 35.9 Β°C
Cell temp (max) 29.9 Β°C
Cell temp (min) 2.1 Β°C
Cell voltage (max) 3.41 V
Cell voltage (min) 3.38 V
Lifetime charged 2,246.5 kWh
Lifetime discharged 3,744.6 kWh
Product model SPWR-Equinox-model
Serial(s) <redacted>
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
System Info (varserver)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
hwrev 6.02
sw_rev 2025.10.20.61846
boardtype B0K LIB 1.0 PSoC5
model PVS6
serialnum <redacted>
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The 37,650 kWh of lifetime solar generation represents about three years of production from our system in Monterey, California.
TARIFF_OPTIMIZER is a neat trick: Using the Sunstrong app I can feed power back to PG&E starting at 4PM M-F.
My very silly web UI on mobile:

SO WHAT
Any SunPower/SunStrong customer with a PVS6 and a local network can do this!
Not sure what's next. I don't run Home Assistant but I do have some plans including:
- Monitoring (to make sure the battery is actually charging)
- Alerting (poke me on Slack if something is broken)
- Charts/Graphs
REFERENCES