Energy monitoring and automation for a remote solar/battery site on one small ARMv6 Raspberry Pi — local polling, rules and dashboard, mirrored into Home Assistant over a Tailscale MQTT bridge.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Energy Node extends an existing Home Assistant setup with the energy side of
a remote site — a workshop, barn, garage or second property that has its own
solar, battery and switchable loads, but no reliable place to run a full
home-automation stack.Read the full README ↗Energy monitoring and automation for a remote site. It runs on a Raspberry Pi 1 and works with or without Home Assistant.
Some solar arrays, batteries and switchable loads sit at a workshop, barn, garage or second property. Those sites are often too far away, or sit behind too flaky a link, for the Home Assistant at home to poll their devices directly.
Energy Node puts one small Linux box at that site and makes it a self-contained node. It polls the local devices without any cloud account, runs its own automation rules and serves its own web dashboard. If the internet or the VPN goes down, the node carries on as before.
If you use Home Assistant, a Mosquitto bridge over Tailscale mirrors the node's devices to your main site. There they appear as ordinary MQTT Discovery entities: PV production, battery state of charge, load power, grid import/export. Without Home Assistant, the dashboard works on its own.
Every page of the dashboard, including all settings tabs and the four colour schemes, has a screenshot in the dashboard, page by page. The screenshots come from a local smoke test against a fixture broker, so you can reproduce them without a Pi.
All devices are polled locally, and none of them needs a cloud account.
| Hardware | How | Direction |
|---|---|---|
| Shelly Gen1 and Gen2+ (switches, meters, 3-phase, H&T, ADC) | HTTP /status / /rpc | read + switch |
| APsystems EZ1 microinverters | local REST API | read + power limit, on/off |
| Lumentree inverters with a Trucki stick (T2SG/T2MG/T2HG) | HTTP | read-only |
| Tuya devices | local protocol via tinytuya | read + switch |
| LiFePO4 battery banks | computed from other devices (coulomb counting) | state of charge |
| The node itself | CPU, RAM, disk, throttling, Mosquitto/Tailscale status, pending updates | read |
Each family is one small Python service. Device services covers what each one publishes. A new device family is added as another service; CONTRIBUTING.md explains how.
flowchart LR
subgraph Remote["Remote site: Raspberry Pi 1 (ARMv6)"]
DEV["Shelly · Tuya · APsystems EZ1<br/>Trucki stick · LiFePO4 banks"]
BR["Python bridges<br/>(one systemd service each)"]
MQ{{"Mosquitto<br/>localhost:1883"}}
AUT["Automation service"]
DASH["Go dashboard<br/>:8080 / Caddy :443"]
DEV --> BR --> MQ
MQ <--> AUT
MQ --> DASH
end
MQ <-->|"outstation/# over Tailscale (optional)"| HA
subgraph Main["Main site"]
HA["Home Assistant<br/>+ Mosquitto"]
end
outstation/#, crosses the Tailscale tunnel. That means no port
forwarding and no exposed broker.This is the beginning of the README. Read the rest at the original. Read the full README ↗