Supporting both client and server modes is turning out to be quite a bit of work, but the implementation has gone nicely – I enjoy working in this code base, and it still feels like the tree/node/point architecture is the right data model. I have lots of ideas for improving it.
In case anyone is not familiar with modbus, it is still a very popular standard for instrumentation. Many advanced sensors offer modbus interfaces, and it is still the universal/easy way to get digital data out of sensors (it is nice to avoid 4-20mA/analog when possible). With a modbus interface, you can often query dozens of parameters which often gives you advanced diagnostic information, configuration settings, etc. Additionally, the modbus overhead is small, so is easy to implement in sensors without needing a huge communication stack. There is a whole range of modbus IO expansion modules available, from fairly expensive Adam IO modules, to cheaper equivalents from China, and loads of sensors.