Hi, just completed a Python project sending INDI protocol over MQTT, and storing data to redis, see indi-mr.readthedocs.io, together with a web client that displays the redis stored data allowing control of the attached instruments. The web client is documented at indiredis.readthedocs.io So far only tested with simulated drivers, I'd be interested in any feedback from anyone who cares to try them out.
Nice! I recently did something similar in node.js. Have you tried doing any blob transfers with paho-mqtt? I found it wouldn't work for me with large message sizes, even though they were below the mqtt limit.
Tried ok with blobs generated by simulated telescope/ccd, but not specifically tested large blobs for size. It's on my list to create test drivers to exercise the package, so I'll bear that in mind, thanks. I did find when reading an input stream in Python I got asyncio.LimitOverrunError exceptions so I read data in chunks of 32K at a time, but that had nothing to do with mqtt.
I will be looking at you MQTT implmentation with interest as I use MQTT regularly. However there is no way,IMHO, "Blobs" of any size will (or should IMHO) use MQTT. Trying to send Blob's does one of two things
a. Stops (OK to a trickle) all other MQTT traffic as you have to set buffers so large to get the Blob transfer within a reasonable time.
b. Using smaller buffers ,i found , just means very very long download times (Note my testing was with RPI acting as a Broker and using Python clent on Windows as receiver, RPI as a client as the Publisher ).
The above does depend on file sizes and small JPG would be fine!
Most other devices,i have have used, work pretty well except for a few devices (but really thats down to driver protocol problems - e.g. Moonlite focuser protocol and the temp reading times out too quickly!)
An alternative maybe,would be to just send the file name(and associated IP address or DNS name) of the Blob and/or initiate another protocol to broadcast/stream the file.
For Internet or distributed Indi I think MQTT has a few advantages IMO - all local working(one SCB) not really IMO.
The indi protocol does allow blobs to be enabled/disabled, - normally on the indiserver port, giving the option of using an out of band solution. I've implemented this by sending the appropriate enable/disable command from the client via MQTT, and applying it at the remote end. So if disabled (the default) blobs will not be published to MQTT.