Docs · Zap
The Zap
What the Zap is. A gateway that reads the meter and the energy devices on site, sends the data to Sourceful and carries out control commands from the cloud.
The Zap is Sourceful's energy gateway. It reads the electricity meter and the energy devices on site, sends what it reads to the Sourceful cloud, and carries out the control commands the cloud sends back.
What the Zap does#
- Reads. It reads every device added to it, with one second between passes, and makes one payload per DER in data model v2.
- Reports. Telemetry, gateway status and events go to the Sourceful cloud (Novacore) over MQTT.
- Carries out control. Power setpoints for batteries, solar and EV chargers come from the cloud over the same MQTT session. The Zap writes them to the device. What to do is decided in the cloud, not on the Zap.
- Answers locally. It serves a REST API on the local network, and the same routes over Bluetooth: the Zap Local API.
One Zap handles several devices at once, over different connections. It reads one P1 or HAN meter.
Models#
| Model | What it does |
|---|---|
| Zap P1 | Reads a meter's RJ12 P1 port |
| Zap HAN | Reads a meter's RJ45 HAN port (M-Bus), powered by USB-C |
| Zap Ultra Mini | Reads a meter's RJ12 P1 port, online over Ethernet or Wi-Fi, with an RS485 terminal |
| Zap ETH | Reads a meter's RJ12 P1 port, online over Ethernet or Wi-Fi |
| Zap Ultra X2 | Reads a meter's RJ12 P1 port, online over Ethernet or Wi-Fi, with two module slots |
All models are built on ESP32-C3 or ESP32-S3 and run the same firmware. The firmware is closed-source.
To set one up on site, follow the getting-started guides.
Connections#
| Connection | Used for |
|---|---|
| P1 | A smart meter with an RJ12 P1 port |
| HAN | A smart meter with an RJ45 HAN port |
| Modbus TCP | Inverters, batteries and meters on the network |
| Modbus RTU (RS-485) | The same devices over a serial line |
| MQTT | Devices with a broker of their own: Ferroamp, Ferroamp V2X, Ambibox |
Which devices a Zap can read, and over which connection, is in GET /api/devices/supported. A device is read only unless its profile supports control.
What a reading looks like#
A Zap publishes one flat JSON object per DER per reading, in data model v2. A meter reading:
{
"type": "meter",
"make": "eastron",
"timestamp": 1767225600000,
"read_time_ms": 18,
"W_ac": 1500,
"Hz": 50.02,
"l1_V_ac": 230.5,
"l1_A_ac": 6.5,
"l1_W_ac": 500,
"l2_V_ac": 231,
"l2_A_ac": 6.5,
"l2_W_ac": 500,
"l3_V_ac": 229.8,
"l3_A_ac": 6.5,
"l3_W_ac": 500,
"apparent_VA_ac": null,
"reactive_var_ac": null,
"total_import_Wh_ac": 15600000,
"total_export_Wh_ac": 8200000
}Notes:
- Every field of the DER type is present. A value the device did not report is
null, never 0 - Field names carry the unit and the side:
W_ac,l1_V_ac,total_import_Wh_ac
Related Documentation#
- Data Models - Telemetry data model v2: fields, units and signs
- Zap Local API - Local endpoint documentation