Fully-local solar and energy monitoring for your balcony solar power station using the Raspberry Pi Pico W (or Pico 2 W). No cloud, no vendor app, no smart-home. Talks directly to your inverter over Bluetooth and to your smart-meter over its IR-interface.
Supported and tested are the Hoymiles HMS-800-2WB ("HiFlow Pro") microinverter and (optionally) a ISKRA MT631 smart-meter. Others may work too.
![]()
|
|
An e-Paper dashboard that connects to the microinverter over Bluetooth and shows:
- current production
- a power curve across the day
- a multi-day production-history bar graph
- depending on availability of a smart-meter either:
- active net grid power and self-consumed energy
- energy produced today, over the inverter's lifetime, and per-panel production
When WiFi is configured, SuperSunshine also serves the same readings as a web
dashboard on your local network, reachable at supersunshine.local, with the raw
data available as JSON at supersunshine.local/data.
Smart-meter readings can be obtained either over a TTL read head attached directly, or by running a Black Hole board (below) on the same network.
Note about self-consumed energy. The value is the lifetime energy production of the microinverter minus the exported energy of the smart-meter. This assumes that all exported energy was produced by the monitored microinverter, otherwise the values won't make much sense.
Reads your smart meter through an optical TTL read head,
and decodes the live consumption, import and export values.
It serves the latest snapshot as a web dashboard on your local network,
reachable at blackhole.local, with the raw data available as JSON at
blackhole.local/data.
Run it alone as a standalone smart-meter readout, or alongside SuperSunshine to supplement the solar display.
For SuperSunshine:
-
A Raspberry Pi Pico W (or Pico 2 W).
-
A Waveshare 2.9" e-Paper display (IL3820 controller). Wire it to the Pico over SPI as follows (defaults, adjustable):
Display pin Pico GPIO CLK / SCK GPIO 10 DIN / MOSI GPIO 11 CS GPIO 9 DC GPIO 8 RST GPIO 12 VCC 3V3 GND GND
For Black Hole:
-
A Raspberry Pi Pico W (or Pico 2 W).
-
An optical TTL smart-meter read head that outputs 3.3 V serial. Wire it to the Pico as follows (defaults, adjustable):
Read head Pico Data out / RX GPIO 5 Data in / TX GPIO 4 VCC 3V3 GND GND
Both boards are powered over USB and connect to your WiFi for network features.
Pins are adjustable; see Configuration.
You need the Raspberry Pi Pico toolchain (CMake, the GNU Arm embedded toolchain,
and the usual build tools). See the
pico-sdk quick-start
for the prerequisites for your OS. The Pico SDK itself is downloaded
automatically during the build unless you point PICO_SDK_PATH at a local copy.
git submodule update --init # fetch the display library
cmake -B build \
-DSUPERSUNSHINE_DEVICE_SERIAL=XXXXXXXXXXXX \
-DSUPERSUNSHINE_DEVICE_PIN=123456 \
-DWIFI_SSID="your-network" \
-DWIFI_PASSWORD="your-password"
cmake --build buildTo build for the Pico 2 W, add -DPICO_BOARD=pico2_w.
This produces two flashable images:
build/apps/super_sunshine/SuperSunshine.uf2build/apps/black_hole/BlackHole.uf2
Hold the Pico's BOOTSEL button while plugging it into USB; it appears as a USB
drive. Copy the matching .uf2 file onto it and the board reboots into the
firmware.
To watch the diagnostic output, open the board's USB serial console (for example
with screen, minicom, or the Arduino/VS Code serial monitor).
Settings are passed on the cmake command line.
Re-run the cmake -B build ... step with the options you need, then rebuild.
| Option | Default | Meaning |
|---|---|---|
-DWIFI_SSID |
<empty> |
Your WiFi network name. |
-DWIFI_PASSWORD |
<empty> |
Your WiFi password. |
-DLANGUAGE |
en |
UI and web-page language for both apps. en or de. |
With WiFi configured, SuperSunshine syncs the clock over the internet daily, and both boards expose their readings (web dashboard and JSON) on your local network. WiFi is optional for SuperSunshine: leaving the SSID empty disables the network features and falls back to the inverter's own clock for timestamps. Black Hole needs WiFi to publish its dashboard.
| Option | Default | Meaning |
|---|---|---|
-DSUPERSUNSHINE_DEVICE_SERIAL |
<empty> |
The 12-character serial tail of your inverter's RMI-<serial> Bluetooth name. Required. |
-DSUPERSUNSHINE_DEVICE_PIN |
<empty> |
The Bluetooth PIN set in the S-Miles app. Leave unset if your inverter has no PIN. |
-DSUPERSUNSHINE_METER_SOURCE |
BLACKHOLE |
BLACKHOLE: Pull the reading from a Black Hole board on the network over HTTP. Needs WiFi configured on both boards.UART: Read an SML optical read head wired straight to SuperSunshine's own UART.NONE: No meter; show the per-panel power. |
-DSUPERSUNSHINE_TIMEZONE |
CET-1CEST,M3.5.0,M10.5.0/3 |
Your local timezone as a POSIX TZ string, including its DST rule, used to display local wall-clock time. The default is Central European Time. |
Configuration for pin assignment, hostnames, intervals and timeouts lives in
config/SuperSunshineConfig.h.in and config/BlackHoleConfig.h respectively.
Edit those files and rebuild.
By default the build targets the Pico W (pico_w). Use -DPICO_BOARD=pico2_w for
the Pico 2 W, or -DPICO_BOARD=<board> for another supported board.
The Hoymiles HiFlow Pro Bluetooth protocol was reverse-engineered by TheTiEr in hiflow-ble. SuperSunshine's inverter communication is built directly on that work. Huge thanks for documenting and sharing it.


