Firehose
Firehose publishes realtime installation telemetry from your portfolio to a destination you control — Kafka, AMQP 0.9, MQTT, or HTTP. In Watt you configure this as a pipeline: choose installations as data sources, set a destination, and pick a delivery mode.
Configure it under Developer → Firehose (Watt). Access is via the Early Access Program; without the feature flag the menu is hidden.
The message body is the Envi.Baseenvi.baseDe energiecontroller van Envitron die apparaten uitleest, aanstuurt en data opslaat achter de hoofdaansluiting. realtime JSON document (schema 1.0.0 below). Within one pipeline, every selected installation is published to that pipeline’s destination (one topic, exchange + routing key, MQTT topic, or URL). Other pipelines can target different destinations — even for the same installation.
Installation identity
The JSON body does not carry an installation id. Source installation is on the transport:
| Destination | Installation identity |
|---|---|
| Kafka | Message key = installation UUID |
| AMQP 0.9 | Header / property installation_uuid |
| MQTT | Property installation_uuid |
| HTTP | Request header installation_uuid |
Concepts
| Term | Meaning |
|---|---|
| Pipeline | Delivery configuration: installations + destination + delivery mode. |
| Destination | Where events are published: protocol + connection parameters (broker, exchange/topic/URL, credentials). |
One destination per pipeline today.
Payload (realtime schema 1.0.0)
Messages conform to Envi.Baseenvi.baseDe energiecontroller van Envitron die apparaten uitleest, aanstuurt en data opslaat achter de hoofdaansluiting. realtime schema 1.0.0:
- JSON Schema draft 2020-12,
additionalProperties: false - Only
timeis required at the root;main_meter,battery, andsolarappear when that subsystem is present on the installation
We may add new properties to the current schema without a version bump. Breaking or non-backwards-compatible changes — such as removals or renames — are communicated explicitly; additive fields alone are not.
Example
{
"time": 1763633359.6,
"main_meter": {
"status": "degraded",
"active_power_w": -391240
},
"battery": {
"status": "unavailable",
"active_power_w": -138412,
"active_power_setpoint_w": -300000,
"soc": 28.7,
"charge_limit_w": 400000,
"remaining_charge_time_s": 5963,
"discharge_limit_w": 400000,
"remaining_discharge_time_s": 2137
},
"solar": {
"status": "available",
"active_power_w": -319684,
"active_power_setpoint_w": -503665,
"rated_power_w": 600000
}
}
Schema
Download: realtime-1.0.0.schema.json
timenumberrequiredmain_meterobjectGrid connection information
statusstringrequiredavailabledegradedunavailableactive_power_wintegerActive power measured on the grid connect (POI), return delivery / export is negative
batteryobjectGlobal battery information, remaining charge/discharge available when trading is possible
statusstringrequiredavailabledegradedunavailableactive_power_wintegerActive power of all Batteries, charging is positive, discharging is negative
active_power_setpoint_wintegerActive power setpoint, charging is positive, discharging is negative
baseline_power_winteger | nullPower the battery would produce/consume without active steering. Schedule active: scheduled power. No schedule: 0 (natural idle).
socnumber≥ 0≤ 100Average SOC of all available batteries
charge_limit_winteger≥ 0remaining_charge_time_sinteger≥ 0discharge_limit_winteger≥ 0remaining_discharge_time_sinteger≥ 0solarobjectGlobal information of all PV
statusstringrequiredavailabledegradedunavailableactive_power_wintegerActive power of all PV, production is negative
active_power_setpoint_winteger≤ 0Active power setpoint
rated_power_winteger≥ 0min_power_winteger | nullMost negative signed power bound (= full production capacity). Production is negative.
max_power_winteger | nullLeast negative signed power bound (= production floor). Production is negative.
baseline_power_winteger | nullPower the PV system would produce without active steering. Schedule active: scheduled limit. Real-time steering: last pre-steering power. No steering: current actual production.
Delivery mode
| Mode | How long data can be retained | Behaviour |
|---|---|---|
live (default) | ~60 s | Delivers only recent events. No catch-up after downtime; failed delivery is dropped. |
durable | ~14 days | Retains events so delivery can catch up after downtime; keeps retrying within that window. |
Switching from live to durable does not restore data that already expired under live.
Pause stops delivery; events are not buffered while paused (live in particular will miss data). Delete permanently removes the pipeline and any undelivered durable backlog.
Destinations
| Protocol | Publishes to |
|---|---|
| Kafka | A topic on one or more brokers. |
| AMQP 0.9 | An existing exchange + required routing key (exchange is not declared for you). |
| MQTT | An MQTT topic. |
| HTTP | An HTTP URL (POST / PUT / PATCH). |
Required fields depend on protocol (brokers/host/URL, topic or routing key, credentials). Destinations must be publicly reachable. Credential and TLS options differ per protocol — use what the form exposes; unsupported fields are rejected by the API.
Sharing
Pipelines are organization-scoped: every user on the same organization sees the same pipelines and can create, edit, pause, or delete them. There is no per-user private pipeline list — treat Firehose as a shared integration surface for the organization.
Support
Early Access or integration questions: 050 785 1000 or support@envitron.com.