• 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 | 0 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 | 3 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 | 5 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 | 7 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 | 11 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
  • v0.7.2 2870e313d7

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

    r3pek released this 2026-09-02 00:53:11 +01:00 | 47 commits to main since this release

    • get_full_poll_batch() now includes scene data (ConfiguredScenes/
      CurrentScene) in the same combined request, falling back to
      get_configured_scenes()/get_current_scene() if the batch itself
      fails.
    • start_scene()/start_feed_mode() now broadcast to the whole mesh by
      default (one write instead of one per device) -- pass
      broadcast=False for the old, single-device-only behavior.
    Downloads
  • v0.7.1 e45c5bf97f

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

    r3pek released this 2026-09-01 22:35:20 +01:00 | 50 commits to main since this release

    • Added scene support: get_configured_scenes(), get_current_scene(),
      start_scene(). Fixed get_current_scene() crashing on a custom
      (non-preset) scene, and start_scene()'s duration being in seconds,
      not minutes as previously labeled.
    Downloads
  • v0.7.0 03c18289aa

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

    r3pek released this 2026-09-01 11:05:19 +01:00 | 52 commits to main since this release

    • Added get_full_poll_batch() -- one round-trip for device identity +
      metadata + light/pump state, confirmed 2-2.6x faster on real
      hardware. Requires the caller to already know the device's own
      PrimitiveType (permanent for its lifetime, so never re-fetched).
    • get_current_pump_block() now accepts an optional pre-fetched
      points param, skipping its own redundant re-fetch of the same
      schedule attribute.
    • Added get_light_poll_batch() -- one round-trip for a light's own
      schedule, lunar/acclimation/insolation state, and Epoch/LocalTime,
      falling back to the original individual reads if the batch fails.
    • Extracted every light-schedule-related method's own decode/compute
      logic into pure, standalone functions, laying the groundwork for
      get_light_poll_batch() above. No behavior change.
    Downloads
  • v0.6.0 ff79a56b36

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

    r3pek released this 2026-08-31 10:27:15 +01:00 | 57 commits to main since this release

    • get_metadata_batch() now falls back to individual reads if the
      batched request itself fails (e.g. no batch support at all) --
      never returns less than those would have. New used_batch field,
      force_individual_reads param.
    • Added get_metadata_batch() -- one round-trip for AdvancedFeatures/
      CalibrationInfo/hardware/firmware/channels/error state/time,
      confirmed 6-14x faster than individual reads over relay.
    • Wired set_advanced_features() into cli.py -- one flag per field
      (--set-local-control-enabled/--set-auto-dim-timeout/
      --set-max-fan-speed/--set-fan-shutdown-enabled).
    • Added set_advanced_features() -- writes LocalControlEnabled/
      AutoDimTimeout/MaxFanSpeed/FanShutdownEnabled, whichever are given.
    • get_current_light_intensities() now uses get_app_lunar_date(),
      deliberately replicating a confirmed app bug in its lunar
      calculation instead of the physically correct date.
    • Fixed RelayedMobiusDevice missing overrides for
      get_supported_attributes()/get_attributes_batch() -- both bypassed
      the relay path entirely.
    • Fixed --dump-attributes/--set-time-to-now in cli.py ignoring
      --relay-target.
    • Added get_attributes_batch() -- reads multiple attributes in one
      round-trip.
    • Added get_supported_attributes()/dump_attributes()/
      enrich_attribute_dump(), replicating the app's own attribute-dump
      feature. New CLI flags: --dump-attributes/--parse-dump.
    Downloads
  • v0.5.0 91d0f726f2

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

    r3pek released this 2026-08-23 22:17:16 +01:00 | 84 commits to main since this release

    • get_pump_telemetry() now returns gph_reliable/minimum_gph/maximum_gph
      -- confirmed via the app's own logic that a raw gph reading isn't
      trustworthy without a supported flow range (a real AI Axis 20
      reported ~8x its own rated max flow).
    • Added support for AquaIllumination devices' own BLE company ID
      (0x0001, alongside EcoTech Marine's 0x0202) -- confirmed via a real
      AI Axis 20 capture. BREAKING: MOBIUS_COMPANY_ID renamed to
      MOBIUS_COMPANY_ID_ECOTECH.
    • Added get_lunar_phase_info(): the device's own firmware-computed
      lunar state, confirmed against real hardware, wired into
      --dump-schedule for comparing against the calculated lunar value.
    • Fixed get_lunar_phase_info() silently returning None on a real read
      failure (indistinguishable from "unsupported") -- now only an empty
      response does that; an actual failure propagates.
    • Documented a confirmed bug in the app itself (double timezone
      application) that can make its own displayed lunar value roll over
      to the next day early -- this library's own calculation is correct
      and unaffected.
    • Added get_advanced_features(): VorTech's "Local Control"/"Led Auto
      Dim" and Radion's "Max Fan Speed"/"Fan Shutdown".
    • Added motor_power_watts to get_pump_telemetry() (Vectra/NYOS Quantum).
    • Added get_vectra_info() and get_coffee_info() (Vectra/NYOS Quantum
      settings, no real hardware to verify against).
    • Fixed get_firmware_versions() showing raw internal names instead of
      proper labels for AquaIllumination devices (Orbit/Axis, Prime/Hydra).
    • RelayedMobiusDevice now fails fast on later reads in the same poll
      cycle after one relay timeout, instead of each one separately
      waiting out its own timeout.
    • Added set_time_to_now() -- writes Epoch with group=1, confirmed
      against real hardware to propagate to the rest of a tank's mesh.
    • Added reboot() -- soft-reboots a device (Reset attribute), matching
      the app's own "Restart" button. Confirmed against real hardware
      directly connected.
    Downloads