2.2.1 (2026-06-16)
- add strict static typing with basedpyright across
modpoll/; introducemodpoll/types.pyand enforcemake typecheckin local and CI quality gates - extract
Device,Poller, andReferenceintomodpoll/modbus_models.py(orchestration remains inmodbus_task.py) - replace black with ruff for format and lint
- add typing audit baseline in
docs/typing-audit.md - extend contributor release checklist and harden the
on-release-mainworkflow
- import device models from
modpoll.modbus_modelsin unit tests
2.2.0 (2026-06-16)
- MQTT on-demand read (get): subscribe on
modpoll/+/get(--mqtt-get-topic-pattern); publish{"ref": null}tomodpoll/{device}/get; response onmodpoll/{device}/get/responsewith partial success (unknown or failed refs omitted); targeted Modbus reads viareference_read.pywith adjacent register batching - Persistent Modbus connection:
ModbusConnectionManagerkeeps the client open between poll cycles and MQTT commands; non-blocking exponential reconnect backoff (--modbus-backoff-base,--modbus-backoff-max); optional connection recycle (--modbus-max-connection-age) - enrich per-device MQTT diagnostics with
config_source, get/set counters (get_count,get_errors,get_success,get_unknown_refs,get_read_errors,set_count,set_errors,set_success,set_unknown_refs) - publish process-wide health on
modpoll/diagnostics(mqtt_connected,modbus_ok,devices_failing,last_cycle_s, Modbus connection state and reconnect metrics) - publish process presence on
modpoll/statuswith last-will (online: false) and birth message (online: true); status is always retained - apply
--mqtt-retainto diagnostics topics (same policy as data publishes)
--intervaldefault is now transport-aware:0.0s for TCP/UDP (was0.5s); serial/RTU derives the RTU 3.5-character frame gap from--serial-baudwith a0.005s floor. Set--intervalexplicitly for slow devices.- Modbus connect/close per poll cycle removed: the client stays open until shutdown or a transport failure; on serial/RTU the port remains reserved while
modpollruns - MQTT multi-reference writes now use
--intervalbetween successive refs in onesetmessage (was a fixed0.1s delay)
- document MQTT get, persistent connection, transport-aware
--interval, and extended diagnostics indocs/usage.rst
- add
tests/test_modbus_connection.py, extendtests/test_main_get.pyfor backoff, connection reuse, and diagnostic counters - migrate Modbus lifecycle tests to
ModbusConnectionManager
2.1.2 (2026-06-15)
- warn at config load when a reference is marked
w/rwon adiscrete_inputorinput_registerpoller (Modbus inputs are read-only)
- fix README MQTT write example for
bool8references (array of 8 booleans, not a scalar) - document export, diagnostics, mqtt-single, config sources, write constraints, and publish behavior in
docs/usage.rst - expand
docs/configure.rstwith CSV schema, dtypes, poll limits, and validation rules - correct
config_template.csvcomment: dtype column is required
- add contract tests in
tests/test_handler_behavior.pyfor documented edge cases - consolidate handler regression/contract tests; share
FakeModbusMasterintests/helpers/modbus.py
2.1.1 (2026-06-11)
- add
--mqtt-retainto set the MQTT retain flag on data publishes (diagnostics topics are never retained)
- add release documentation checklist for agents and maintainers in CONTRIBUTING.md
- align narrative docs with MQTT reference-map write format and
--mqtt-keysusage
- centralize MQTT data publish policy (QoS and retain) in
MqttHandler.publish_data_message
2.1.0 (2026-06-10)
- add
--mqtt-keys name-onlyto publish MQTT JSON keys without the unit suffix (default key style remainsname-with-unit) - MQTT writes on
modpoll/{device}/setaccept a map of references{"ref_a": val, "ref_b": val}in one message; unknown keys are skipped with a warning
- renamed
--daemon/-dto--no-output(suppresses poll result tables only; does not fork) - MQTT write payload must be a reference map (
{"ref": val});ref/valueobject format removed
2.0.0 (2026-06-10)
- forked from modpoll; PyPI package renamed to
modpoll2mqtt, repositoryyoch/modpoll2mqtt - CLI command and Python module remain
modpoll
- semantic MQTT write by CSV reference on
modpoll/{device}/setwith payloadrefandvalue(device from topic; scale, dtype, and endianness handled automatically) - subscribe pattern
modpoll/+/setby default
- removed low-level MQTT write format (
object_type,address,value); use topic +refandvalueinstead - duplicate reference names on the same device now abort config loading (previously warned and overwrote)
1.6.0 (2025-12-06)
- add bit-level access for boolean registers (cecf79d)
- add new argument 'serial' to support multiple framers, including rtu/ascii/binary. Keep the old 'rtu' argument as an alias to 'serial' argument for backward compatibility. (d42ab78)
- add support for ascii framer (#97) (c918e74)
- upgrade to python 3.10 and pymodbus 3.9.0 (189b3fd)
- bit syntax is only used with bool dtype (cf1e2b9)
- forward mqtt tls flags to handler (#93) (d31db25)
- guard mqtt cleanup on setup errors (#95) (daa8c0c)
- incompatibility issues due to pymodbus 3.9+ (d59a336)
- Sphinx build errors (2d06ee6)
1.5.1 (2025-09-29)
- Clear reference value when disconnect (#90) (9543ce0), closes #87
- Replace unreliable mqtt broker (#88) (bce269c)
1.5.0 (2025-03-13)
- Update docker compose to conform to new specification (abc55aa)
- CI pipelines issue with wrong poetry version (14d0563)
- Install specific version of plugins (98af91c)
- Wrong poll size in docs (4ad6dbf)
- Install poetry before cache check (2041db7)
1.4.1 (2025-01-03)
- Eastron meter config issue (d58ed36)
1.4.0 (2024-11-15)
- Add example config for Eastron SDM120 (#72) (2dde6b9)
- Allow HEX number in configuration file (#70) (6324269)
- Publish MQTT message for each single reference. (adb869f)
1.3.3 (2024-10-15)
- CI docs pipeline issue (ada4089)
1.3.2 (2024-10-15)
- CI pipeline issue (9386455)
1.3.1 (2024-10-14)
- Arguments mqtt-qos doesn't work for publish (0a65d0a)
- Zsh parse error due to the special character used in mqtt-publish-topic-pattern. (98230e8)
1.3.0 (2024-10-13)
- Optimize code to make it more object oriented (7195e29)
- Remove importlib-metadata dependency since we drop support for pre-python3.8 environments. (36a6fd4)
- Support running multiple master instances (#64) (c44b597)
- Adjust delay to every loop iteration (e368922)
- Allow github action to read the PR title and add labels (22cb7c8)
1.2.0 (2024-08-25)
- Introduce MQTT topic pattern to replace the existing MQTT topic prefix. (58d3f67)
- Add docker compose for better developer experience. (01f15e8)
1.1.0 (2024-08-03)
- add docker run commands for dev (074d51e)
- add test cases for pytest (99fc461)
- support paho v2 (#52) (3e6681a)
- allow user defined docker registry (38acfcc)
- device list is not properly used (1824bed)
- duplications in ci actions (db5c667)
- paho v2 changes in callbacks (09316f8)
- poetry warning (44ec61f)
- Unexpected input for release-please (24703fe)
- update CHANGELOG.md (73fcc01)
1.0.0 (2024-07-11)
- Release v1.0.0
-
Support Modbus RTU/TCP/UDP devices
-
Poll data from multiple Modbus devices
-
Publish data to MQTT broker for remote debugging
-
Log data for further investigation
-
Provide docker solution for continuous data polling in production