• v0.10.3 dceb1a202c

    v0.10.3
    All checks were successful
    Release / release (push) Successful in 2m43s
    Stable

    r3pek released this 2026-10-11 16:25:59 +01:00 | 0 commits to main since this release

    • Frames that fail to parse or fail their CRC are logged at debug level.
    Downloads
  • v0.10.2 8a778b3b47

    v0.10.2
    All checks were successful
    Release / release (push) Successful in 5m55s
    Stable

    r3pek released this 2026-10-06 09:51:26 +01:00 | 2 commits to main since this release

    • Mesh peer discovery can raise its error (raise_errors=True) instead
      of returning an empty list on failure.
    Downloads
  • v0.10.1 b99960704c

    v0.10.1
    All checks were successful
    Release / release (push) Successful in 3m4s
    Stable

    r3pek released this 2026-09-30 18:03:15 +01:00 | 4 commits to main since this release

    • Fixed lights not being read through a gateway: the poll's reply was too
      large to be relayed. The schedule and scenes are now read in requests
      of their own, as the app does.
    Downloads
  • v0.10.0 4f78eb1e56

    v0.10.0
    All checks were successful
    Release / release (push) Successful in 3m22s
    Stable

    r3pek released this 2026-09-30 16:39:03 +01:00 | 6 commits to main since this release

    • Added set_time_zone(); the batched polls now include the device's time
      zone strings.
    • Relayed requests now accept a late response to the first attempt, as
      the app does.
    • Fixed an unreachable light returning an empty poll as a success.
    • Added configuration checksums (get_configuration_checksums(), CLI
      --check-checksums).
    • get_full_poll_batch(cache=...) reads scenes and schedules only when
      their checksum changed.
    • start_scene() now runs a scene for its configured length by default
      (a duration of 0 makes the device reuse its last scene length).
    • Fixed a scene briefly reporting about 18 hours remaining as it ends.
    • Added Bluetooth-only device support (Blades, MXM): is_bluetooth_only()
      and find_bluetooth_only_tank_members(). The CLI connects to them
      directly and includes them in schedule group writes.
    • Writes use the negotiated MTU instead of 20-byte fragments, as the app
      does (fewer writes per request).
    • The pump's operation state is now part of the batched poll.
    • ConfigurationCache(static_refresh_interval=...) reads rarely-changing
      attributes (identity, firmware, settings) only at that interval.
    Downloads
  • v0.9.0 3598d846a3

    v0.9.0
    All checks were successful
    Release / release (push) Successful in 3m32s
    Stable

    r3pek released this 2026-09-24 12:26:04 +01:00 | 20 commits to main since this release

    • Breaking: RelayedMobiusDevice writes now raise an error when the
      device rejects them, like direct writes already did.
    • Added helpers shared with ha-mobius: enum_or_none(),
      primitive_type_from_name(), support_tier(), parse_advertisement(),
      schedule_capacity()/min_schedule_capacity(), format_mesh_address(),
      pump_params_to_dict(), Scene.is_empty and PUMP_PRIMITIVES.
    • Added pump battery settings: set_battery_backup_speed() (limited to the
      pump's battery backup max speed) and set_boosted_battery() (only while
      running on battery), with the --set-battery-backup-speed and
      --set-boosted-battery-* options.
    • Added get_operation_mode() and the OperationMode enum; pump telemetry
      now includes operation_mode ("BatteryBackup" while running on
      battery).
    • get_full_poll_batch() now includes the battery settings
      (battery_backup, boosted_battery) and the operation mode.
    • The boosted battery power is permille (0-100 %) and its on/off times are
      seconds.
    • mobius-scan: the debug mesh listing now shows peer age as unsigned, like
      the library.
    • Breaking: fixed the running scene's remaining time: it's now read from
      SceneTimer, so it counts down, and ActiveScene.timeout_seconds holds
      the scene's total time. get_current_scene() returns None when no scene
      is running.
    • Starting a scene, returning to the schedule and restarting all devices now
      use the tank's group, like the app (get_tank_group(), tank_group()).
      Breaking: resume_schedule() now ends the scene on every device of
      the tank with one write (broadcast=False for one device only).
    • Breaking: set_pump_schedule() now rejects parameters outside the
      ranges the app allows (for example a Short Pulse time of 0), before
      writing. Added pump_param_range() and pump_param_errors().
    • Internal cleanup: removed duplicated code and simplified comments.
    Downloads
  • v0.8.4 1a5d9eda56

    v0.8.4
    All checks were successful
    Release / release (push) Successful in 3m49s
    Stable

    r3pek released this 2026-09-17 13:42:32 +01:00 | 29 commits to main since this release

    • Added LightPollResult.lunar_enabled/lunar_phase_day: the device's
      own actual LunarPhasesEnabled setting and current lunar-cycle phase,
      correct at any time of day. Not the same as
      intensities.diagnostics's own lunar_enabled/lunar_date keys,
      which are only meaningful at night.
    Downloads
  • v0.8.3 3361af8739

    v0.8.3
    All checks were successful
    Release / release (push) Successful in 2m51s
    Stable

    r3pek released this 2026-09-17 08:41:05 +01:00 | 32 commits to main since this release

    • Added set_lunar_enabled(enabled). Confirmed byte-for-byte against
      the app's own compiled bytecode: exactly what its "Lunar" chip (top
      of the light schedule editor) writes when toggled.
    Downloads
  • v0.8.2 17c9ce81a4

    v0.8.2
    All checks were successful
    Release / release (push) Successful in 4m42s
    Stable

    r3pek released this 2026-09-16 09:04:58 +01:00 | 34 commits to main since this release

    • Added LightPollResult.schedule_intensity: the device's own raw
      schedule-level master dimmer, matching get_schedule_intensity()'s
      own return value. Not the same as intensities.diagnostics["scalar"],
      which reflects whichever value is currently in effect (the lunar
      reduction factor during a night segment, not the schedule intensity
      setting itself).
    Downloads
  • v0.8.1 89114186d0

    v0.8.1
    All checks were successful
    Release / release (push) Successful in 3m56s
    Stable

    r3pek released this 2026-09-12 15:32:21 +01:00 | 36 commits to main since this release

    • Added get_pump_reverse(primitive_type, params): whether a pump
      schedule point's MaxSpeed/MinSpeed value currently encodes reverse
      rotation. Only AlpacaV1 pumps support this -- every other primitive
      type always returns None.
    • Added reboot_all(): soft-reboots every device on the mesh at
      once, matching the app's own "Restart all Devices" tank setting.
    Downloads
  • v0.8.0 eb7337b411

    v0.8.0
    All checks were successful
    Release / release (push) Successful in 2m55s
    Stable

    r3pek released this 2026-09-11 09:23:20 +01:00 | 40 commits to main since this release

    • Added supported_pump_modes(primitive_type, closed_loop=None): the
      PumpMode values a given pump actually supports. See
      documentation/07-pump-schedule.md's own "Which modes a given pump
      actually supports" section.
    • Added schedule write support: set_light_schedule()/set_pump_schedule(),
      GroupBitmap (group_mask), and --dump-schedule-file/--load-schedule-file
      CLI flags.
    • Added support for .mob (Template) files -- export/import for both
      light and pump schedules, plus --dump-mob-file/--load-mob-file CLI
      flags.
    • --load-schedule-file/--load-mob-file now write to every device in a
      light's schedule group, not just the one named, and check the whole
      group's smallest schedule capacity up front so a too-large schedule
      aborts cleanly instead of partially applying.
    • get_pump_telemetry() now also includes every other sensor value a
      pump reports supporting (motor RPM, temperatures, battery/input
      voltage, etc.) under a new extra_physical_values key, alongside the
      existing gph/motor_power_watts.
    • Added get_extra_physical_values() -- the same extra sensor values as
      above, for callers with no get_pump_telemetry()-equivalent method of
      their own. get_device_summary() uses this for lights specifically
      (ClusterTemperature/DriverTemperature/etc.), which previously had no
      way to surface this data at all.
    • Added get_fan_thresholds() -- FanOnTemperature/FanOffTemperature,
      shown unconditionally in get_device_summary().
    Downloads