02 · Architecture

How the system fits together

Venus OS models devices on its local D-Bus. Bridges and companion applications use MQTT, HTTP or WebSockets according to their own integration contracts. The repository map is not a live deployment inventory.

The five layers

1 · Hardware & sensing

ESP32s, Tasmota plugs, CT clamps, Emporia Vue submeters, EV chargers and water tanks/pumps provide readings through firmware or configured Home Assistant entities. esphome-jbd-bms-mqttdbus-esphome-grid-sensordbus-evdbus-pump

2 · D-Bus services

Translators running on the GX: MQTT→D-Bus for the audited battery and Tasmota PV bridges, and Home Assistant→D-Bus for Emporia, EV, charger and pump measurements. Third-party hardware appears as Victron device services. dbus-mqtt-batterydbus-tasmota-pvdbus-emporia-vue

3 · Control & policy

inverter-control calculates setpoints and applies its configured validity, limit and watchdog policies before D-Bus writes. It consumes EV data published by the Home Assistant bridges. The archived venus-os-governance project does not gate this deployed path, and no dbus-event-log service was running on the audited GX. These repositories must not be treated as an installed authorization or audit layer. inverter-controlvenus-os-governancedbus-event-logdbus-ev

4 · MQTT distribution

State leaves the GX over MQTT topics. fastapi-mqtt-gateway adds REST/WebSocket access for clients that can't speak MQTT natively. fastapi-mqtt-gateway

5 · Consumption

Dashboards (Go binary on-GX, Python/Docker, Vue SPA, Tauri desktop), Home Assistant, observability stacks and optional forecasting tools. Verify each configured caller before assuming forecasts affect controller decisions. inverter-dashboard-gosolar-forecast-langgraphvenus-os-observabilityinverter-monitoring

Thermostat integration

inverter-climate spans the D-Bus and control layers. A native supervised service on Venus OS reads local system energy, publishes room temperature, and exchanges thermostat state and commands with Home Assistant. HA owns the existing Google Nest connection and authentication.

The stock GUI v2 Switch pane and VRM Remote Console can show its optional temperature slider and Heat/Off selector through the Switchable Output API on the same temperature device. Observation is the default; manual controls and automatic preheating are enabled separately. HA requests run outside the D-Bus loop and the separate ESS controller.

The native path needs no companion gateway or GUI patch, while Nest still relies on HA and its cloud integration. For a gas furnace, the configured heating-power estimate describes electrical demand; it does not measure heat or gas and is not published as another AC load. See the installation and control guide.

Why two buses instead of one

D-Bus is how Venus OS models batteries, PV inverters and grid meters as com.victronenergy.* services. The ESS controller reads and writes that local bus.

Companion dashboards, Home Assistant, Grafana and forecasters use MQTT, HTTP or WebSockets according to their integration contracts. Thermostat commands from inverter-climate reach Home Assistant over its REST API, while the GX-facing temperature device and GUI controls use D-Bus. Validate freshness and command acknowledgements at each boundary.

Control path vs telemetry path

Control path (amber)Telemetry path (cyan)
ProtocolD-Bus for ESS; HA REST for thermostatsMQTT / REST / WebSocket
WritersConfigured controller and native Venus servicesPer-service publishers and gateways
AuditVerify actual logging; event-log is an optional integrationConfigured metrics and logs
TimingESS cadence and D-Bus latency; HA/cloud latency and observed confirmation for thermostatsSource-specific freshness limits
Failure modeESS validity, hold and watchdog policy; thermostat availability and journaled uncertain outcomesMark unavailable inputs; stale telemetry can affect control

Cross-cutting concerns

  • Forecasting: optional forecast consumers need a configured, tested control contract; repository availability alone does not close a control loop.
  • AI access: mcp-venus-os provides its own validation and write-confirmation rules. Verify its deployment and transport separately from the controller.
  • EV data path: dbus-ev publishes vehicle telemetry from Mercedes or Home Assistant and can own the Mercedes charger service. The standalone charger repository is archived. Follow the migration guide, retain a single charger owner, and preserve unavailable-value handling during source outages.
  • Testing: broker and simulated D-Bus integration tests complement installer checks and device observation. Firmware compatibility and cold-boot recovery need target-device validation.

Next: writing your own service →