Docs
Install, configure, survive.
Everything you need to run a gateway on a Raspberry Pi and keep it running. Source for both containers lives at github.com/Encrypted-Energy/gateway.
Install.
Three steps. Ten minutes including the image pull.
https://github.com/Encrypted-Energy/umbrel-community-app-storeEncrypted Energy will appear in the store. Click Install. The image pull takes about two minutes on a Pi 5 with a typical connection.
Configure.
The gateway needs exactly two values. They live on your gateway's page on encryptedenergy.com.
Hardware.
The right Pi is the cheap part. The right BLE antenna is the part most people underestimate. GPS is required: every forwarded packet carries a coordinate, and packets without one get dropped.
- Sena UD100 (about $45). Class 1, +20 dBm TX, external SMA antenna. The safe pick.
- Nordic nRF52840 USB dongle (about $10). Modern, programmable, no power amplifier. Best for tinkerers.
- GlobalSat BU-353N (about $35). Quectel L89 GPS chip with a Prolific PL2303 USB-to-serial bridge, so it lands on /dev/ttyUSB0 and works with the worker's default config out of the box.
- u-blox-based USB GPS modules work too, but they land on /dev/ttyACM0 and need EE_GPS_DEVICE=/dev/ttyACM0 in the worker environment.
Troubleshoot.
What each dashboard state means and how to recover.
sudo docker logs --tail 50 encryptedenergy-ee-gateway_worker_1
API reference.
For people who want to write their own worker, integrate from another platform, or audit what the official worker is sending. Two endpoints, one bearer token, JSON in, JSON out.
Authorization: Bearer ee_live_acb94316b93a6dd637bfb8e59645c25a474af69cd0a19707 Content-Type: application/json Accept: application/json
{
"last_packet_at": "2026-06-08T22:31:00Z",
"last_known_position_at": "2026-06-08T22:30:55Z"
}
Returns 200 with the gateway's
current state, or 401 if the
token's invalid or revoked.
{
"packets": [
{
"payload_b64": "BLE-payload-as-base64",
"rssi": -53,
"timestamp": 1717900000,
"latitude": 47.6062,
"longitude": -122.3321
}
]
}
Returns:
- 200: all packets accepted upstream. Drop them from your queue.
- 401: token invalid or revoked. Stop sending until you have a new one.
- 422: upstream rejected the packet shape (4xx). Drop it; retrying won't help.
- 502: upstream unreachable or returned 5xx. Leave the packet pending; retry on the next pass.