Metadata-Version: 2.1
Name: moat-modbus
Version: 0.5.3
Summary: Modular async modbus client and server
Author-email: Matthias Urlichs <matthias@urlichs.de>
Project-URL: homepage, https://m-o-a-t.org
Project-URL: repository, https://github.com/M-o-a-T/moat-modbus
Keywords: MoaT
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Framework :: AsyncIO
Classifier: Framework :: Trio
Classifier: Framework :: AnyIO
Classifier: License :: OSI Approved
Classifier: Development Status :: 4 - Beta
Requires-Python: >=3.8
Description-Content-Type: text/x-rst

###########
moat-modbus
###########

This is an anyio-enabled async frontend for pymodbus.

+++++
Usage
+++++

Check the example client and server for rudimentary usage.

Documentation patches gladly accepted.

++++++++++
Background
++++++++++

`moat-modbus` diverges from `pymodbus` in that it does not expose a "data
store" context to the user. Instead, every bus value is a separate object,
with arbitrary length and encapsulating its own encoding and decoding rules.

A Modbus server exposing writeable registers only needs to

* register the value in question

* wait for it to be written to

The rest happens behind the scenes.

+++++++++++++
Device Server
+++++++++++++

As some Modbus devices only allow ine server at a time, MoaT's Modbus
supports a simple bidirectional gateway.

How to get there:

* Write a generic device description. Put it in the modbus-data repository.

* Add an interface overlay that describes which topic to send the data to /
  which topic to read.

* Run ``moat modbus dev poll FILE.yaml``. You can use a generic systemd
  service if you copy the file to ``/etc/moat/modbus``.

The values can be modified (factor+offset); the gateway works in both
directions (command/state).

TODO
++++

* plain MQTT
* configurable codecs
* get/set attributes
* pack multiple values into a message
