-
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 ownlunar_enabled/lunar_datekeys,
which are only meaningful at night.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Added
-
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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Added
-
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, matchingget_schedule_intensity()'s
own return value. Not the same asintensities.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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Added
-
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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Added
-
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
PumpModevalues 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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
- Added
-
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
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
- get_full_poll_batch() now includes scene data (ConfiguredScenes/
-
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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Added scene support: get_configured_scenes(), get_current_scene(),
-
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
pointsparam, 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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Added get_full_poll_batch() -- one round-trip for device identity +
-
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. Newused_batchfield,
force_individual_readsparam. - 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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- get_metadata_batch() now falls back to individual reads if the
-
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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- get_pump_telemetry() now returns gph_reliable/minimum_gph/maximum_gph