Skip to content
Sourceful Energy

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#

ModelWhat it does
Zap P1Reads a meter's RJ12 P1 port
Zap HANReads a meter's RJ45 HAN port (M-Bus), powered by USB-C
Zap Ultra MiniReads a meter's RJ12 P1 port, online over Ethernet or Wi-Fi, with an RS485 terminal
Zap ETHReads a meter's RJ12 P1 port, online over Ethernet or Wi-Fi
Zap Ultra X2Reads 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#

ConnectionUsed for
P1A smart meter with an RJ12 P1 port
HANA smart meter with an RJ45 HAN port
Modbus TCPInverters, batteries and meters on the network
Modbus RTU (RS-485)The same devices over a serial line
MQTTDevices 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:

JSON
{
  "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