ovum-mira-modbus
A modern Python device library for communicating with Ovum Mira heat pump systems over Modbus TCP.
This is not an official library and not sponsored by Ovum.
Overview
Ovum Mira heat pump systems expose Modbus communication across multiple Modbus units:
- System Unit (110, "HSM"): Heating manager registers:
- System outdoor temperature
- Heating Circuit 1 (HK1): target setpoint, actual flow temperature, room temperature
- Hot Water (DHW / Warmwasser): reservoir target setpoint, top actual temperature, bottom actual temperature
- Buffer Storage (Pufferspeicher): target setpoint, actual buffer temperature
- Heat Pump Unit (111-118, "WPM"): Heat pump specific registers:
- Operating status (
HEATING,HOT_WATER,COOLING,DEFROSTING, etc.) - Electrical power consumption (kW)
- Thermal power production (kW)
- Heat pump demand percentage (%)
- Operating status (
Installation
pip install ovum-mira-modbus
To include the CLI query tool and actual Modbus backend:
pip install "ovum-mira-modbus[cli]"
Development
Use bin/install.sh to get a local development setup.
Quickstart
Example usage
from modbus_connection import (
ModbusConnection,
ModbusError,
ModbusTcpParams,
)
from modbus_connection.tmodbus import TmodbusConnection
from ovum_mira_modbus import (
OvumMira,
OvumLicense,
)
async def main():
connection = TmodbusConnection(ModbusTcpParams(host="192.168.1.100", port=502))
await connection.connect()
# specify the license level (default: 1) according to your local device
device = OvumMira(license=OvumLicense(2), wpm_unit=111)
await device.async_update()
print(f"Outdoor Temperature: {device.hsm.outdoor_temperature} °C")
print(f"Heat Pump Status: {device.heat_pump.status.name}")
print(f"Power Consumption: {device.heat_pump.power_consumption} kW")
print(f"Heat Production: {device.heat_pump.power_production} kW")
print(
f"HK1 Flow / Target: {device.heating1.temperature} / {device.heating1.target_temperature} °C"
)
print(
f"DHW Top / Target: {device.hot_water.reservoir_temperature_top} / {device.hot_water.target_temperature} °C"
)
# set hot water target temperature to 60 °C
await device.hot_water.async_write_datapoint("temperature_target", 60)
# set heating circuit photovoltaic target temperature to 25.5 °C
await device.heating1.async_write_datapoint("room_temperature_target", 25.5)
CLI Tools
bin/query.sh
Use this script to print all known components and their values, filtered by license level, or only one specific value:
bin/query.sh IP_OR_HOST [-u HEATPUMP_UNIT] [-p PORT] [-l LICENSE_LEVEL] [--probe] [-a ATTRIBUTE]
Examples
bin/query.sh 192.168.1.100 --probebin/query.sh 192.168.1.100bin/query.sh 192.168.1.100 --level=2 -a heating1.cooling_room_temperature_target
bin/write.sh
Use this script to write a value to component:
bin/write.sh IP_OR_HOST [-u HEATPUMP_UNIT] [-p PORT] [-l LEVEL] component.attribute
Examples
bin/write.sh 192.168.1.100 heating1.cooling_room_temperature_target 22.5
Architecture
OvumMira: Top-level device class coordinating communication across both Modbus units.subsystems.Hsm: Hydraulic unit (indoor system)subsystems.HeatingCircuit: Target setpoint, actual flow temperature, and measured room temperature.subsystems.HotWater: Tank setpoint, top sensor, and bottom sensor.subsystems.BufferStorage: Buffer setpoint and actual temperature.subsystems.HeatPump: Heat pump status enum, power consumption, heat production, and demand.
AI
This repository was initially generated pointing AI at the blog post describing new features in Home Assistant's Modbus implementation. The results were full of hallucinations and needed a lot of work.
Most structuring and implementation hints were taken from https://github.com/Tom-Bom-badil/trovis-modbus/.
Further development, adaptations, fixes, etc. were done without any AI.
License
Apache License 2.0. See LICENSE for details.
Release files for ovum-mira-modbus 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ovum_mira_modbus-0.0.5.tar.gz | 20.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ovum_mira_modbus-0.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.2 kB
Release files / ovum_mira_modbus-0.0.5.tar.gz
| Download URL | ovum_mira_modbus-0.0.5.tar.gz |
|---|---|
| Size | 20.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3e27854810ff148fd9dae4255fe2afcd35633c29b359e6b5ad3b636b4a84c35a
|
|
BLAKE2b-256 checksum How to use checksums |
f4585cc7ba74610907a3e5641428fbea4b3f65784ef166d3967604c40f153a91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / ovum_mira_modbus-0.0.5-py3-none-any.whl
| Download URL | ovum_mira_modbus-0.0.5-py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a52e9d7dbd9954b7b82b86fc393f8f151776d856ede3b83f9bf48d61a71cf430
|
|
BLAKE2b-256 checksum How to use checksums |
fb28763ef82907360a7f7f0bc9aeb58ba00eb85e7ab025fd94dc8bd0f9fb777b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency log