Skip to content

Releases: Markus98/ouman-eh-800-api

v1.0.0

Choose a tag to compare

@Markus98 Markus98 released this 22 Jun 15:12
Immutable release. Only release title and notes can be modified.

This is the v1.0.0 milestone. The library is now a dependency of Home Assistant core. There is no API redesign in this release, v1.0.0 simply marks the start of stable semver.

Breaking:

  • 15 temperature setpoints changed from IntControlOumanEndpoint to FloatControlOumanEndpoint
    • Temperature drop and big temperature drop — L1/L2, room-sensor and
      no-sensor variants (8)
    • Water-out minimum / maximum temperature — L1/L2 (4)
    • Constant temp setpoint — L1 (1)
    • Room temperature setpoint user — L1/L2 (2)

Fixed:

  • Decimal writes (0.1 resolution) are no longer rejected on settings the device stores with one decimal place (home-assistant/core#174309).

Docs:

  • Removed the disclaimer about unverified L2 and room-sensor endpoints, these have now been verified against hardware (#1).

Full Changelog: v0.5.0...v1.0.0

v0.5.0

Choose a tag to compare

@Markus98 Markus98 released this 29 Apr 10:47

A minor release that tightens endpoint typing.

Breaking:

  • ControllableEndpoint now extends OumanEndpoint, so it can be used as a parameter type wherever OumanEndpoint is expected. Concrete writable endpoint classes are unaffected.

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@Markus98 Markus98 released this 28 Apr 07:46

This release expands device coverage with 5-point heating curves,
relay-control overrides, and a batch of newly-discovered L1/L2 endpoints.
It also includes breaking changes: the registry layout has been
restructured and the per-endpoint convenience methods on the client
are gone.

At a glance

Breaking:

  • L1Endpoints / L1EndpointsWithRoomSensor / L2Endpoints /
    L2EndpointsWithRoomSensor removed; replaced by per-feature fragment
    registries composed via client.get_active_registries().
  • All client convenience methods (set_l1_*, set_l2_*, set_home_away,
    set_trend_sample_interval, get_l1_values, get_l2_values,
    get_system_values) removed in favour of set_endpoint_value and
    get_values.
  • Two non-existent endpoints removed (S_0_0 sentinel, L2 potentiometer).
  • L1 room-sensor temperature-drop endpoints now resolve to the correct
    sensor IDs; numeric scale changes (typical 6/16 °C → 1.5/5 °C).

New:

  • 5-point heating curves for L1 and L2.
  • Relay-control overrides for the 5 controllable relay modes, plus the
    RelayControl and PumpSummerStopControl enums.
  • A batch of additional L1/L2 read-only endpoints (curve-derived supply
    water, delayed outdoor effect, fine-adjustment effect, room-sensor
    variants, constant-temp setpoint).

Fixed:

  • Room-sensor detection no longer false-positives on 'off,error' states.
  • set_endpoint_value on enum endpoints with an empty
    response_endpoint_ids now raises a clear error instead of NameError.

Breaking changes

Registry classes restructured

L1Endpoints, L1EndpointsWithRoomSensor, L2Endpoints, and
L2EndpointsWithRoomSensor are gone. They've been split into smaller
fragment registries that each model one feature dimension; the device's
current configuration determines which fragments are active.

Old New
L1Endpoints L1BaseEndpoints + L1ThreePointCurve (or L1FivePointCurve) + L1NoRoomSensor (or L1RoomSensor)
L1EndpointsWithRoomSensor L1BaseEndpoints + the 3-pt or 5-pt curve + L1RoomSensor
L2Endpoints / L2EndpointsWithRoomSensor analogous L2 fragments

The simplest migration is to call await client.get_active_registries(),
which probes the device and returns the right OumanRegistrySet
automatically:

registry_set = await client.get_active_registries()
values = await client.get_values(registry_set)

Manual composition still works: OumanRegistrySet([SystemEndpoints, L1BaseEndpoints, L1ThreePointCurve, L1NoRoomSensor]).

Convenience methods removed

set_l1_*, set_l2_*, set_home_away, set_trend_sample_interval,
get_l1_values, get_l2_values, and get_system_values are all gone.
Use the generic get_values(registry_set) and
set_endpoint_value(endpoint, value) instead. Every previous one-liner
has a direct equivalent:

# Before
await client.set_l1_operation_mode(OperationMode.AUTOMATIC)
# After
await client.set_endpoint_value(L1BaseEndpoints.OPERATION_MODE, OperationMode.AUTOMATIC)

Two endpoints removed

  • L1Endpoints.HEATING_SHUTDOWN_STATUS (S_0_0): was a generic device
    placeholder, not a heating shutdown indicator.
  • L2EndpointsWithRoomSensor.ROOM_SENSOR_POTENTIOMETER (S_307_85): the
    TMR/SP potentiometer feature is L1-only per the device manual.

L1EndpointsWithRoomSensor.TEMPERATURE_DROP and BIG_TEMPERATURE_DROP now point at the right sensor IDs

When a room sensor is installed, the device exposes the drop on a different
ID (S_87/S_88) than the one used without a sensor (S_89/S_90). The library
previously returned the no-sensor IDs in both cases. The Python name is
unchanged (l1_temperature_drop / l1_big_temperature_drop).

New features

Many new endpoints

  • L1 base: CURVE_SUPPLY_WATER_TEMPERATURE, FINE_ADJUSTMENT_EFFECT,
    CONSTANT_TEMP_SETPOINT
  • L2 base: VALVE_POSITION, CURVE_SUPPLY_WATER_TEMPERATURE,
    DELAYED_OUTDOOR_TEMPERATURE_EFFECT
  • L1RoomSensor: ROOM_TEMPERATURE_SETPOINT_USER, DELAYED_ROOM_TEMPERATURE
  • L2RoomSensor: TEMPERATURE_DROP, BIG_TEMPERATURE_DROP,
    ROOM_TEMPERATURE_SETPOINT_USER, DELAYED_ROOM_TEMPERATURE,
    ROOM_TEMPERATURE_FINE_TUNING, ROOM_TEMPERATURE,
    ROOM_TEMPERATURE_SETPOINT
  • 5-point curve setpoints (5 each for L1 and L2)
  • Relay control overrides for 5 relay modes (pump summer stop, temperature,
    temperature difference, L1 valve position, time program)

New control enums

RelayControl (Auto / ON / OFF) and PumpSummerStopControl (Auto / Stop /
Run) for the relay-override fragments.

Fixes

  • Room-sensor installed detection correctly handles 'off,error' and
    'on,error' states. The previous check matched anything except the
    literal 'off', so a configured-then-disabled channel with a retained
    error flag was reported as installed.
  • Latent NameError in set_endpoint_value for enum endpoints with an
    empty response_endpoint_ids now raises a clear OumanClientError.

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@Markus98 Markus98 released this 21 Jan 20:11

v0.3.0

Breaking Changes

  • Integer control convenience methods (e.g., set_l1_valve_position_setpoint, set_trend_sample_interval) now return float
    instead of int to match the underlying _set_int_endpoint return type

Affected Methods

System:

  • set_trend_sample_interval

L1 Circuit:

  • set_l1_valve_position_setpoint
  • set_l1_curve_minus_20_temp
  • set_l1_curve_0_temp
  • set_l1_curve_20_temp
  • set_l1_temperature_drop
  • set_l1_big_temperature_drop
  • set_l1_water_out_minimum_temperature
  • set_l1_water_out_maximum_temperature

L2 Circuit:

  • set_l2_valve_position_setpoint
  • set_l2_curve_minus_20_temp
  • set_l2_curve_0_temp
  • set_l2_curve_20_temp
  • set_l2_temperature_drop
  • set_l2_big_temperature_drop
  • set_l2_water_out_minimum_temperature
  • set_l2_water_out_maximum_temperature

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@Markus98 Markus98 released this 19 Jan 19:17

What's Changed

New Public Exports

  • Added ControlEnum type alias to public API

Development & CI

  • Added GitHub Actions workflows for CI and automated releases
  • Configured strict linting (ruff) and type checking (mypy)
  • Added Makefile for running checks locally
  • Improved test coverage for client convenience methods

Full Changelog: v0.1.0...v0.2.0