# Details about used MQTT messages ## Topic lists - [`actuator`](#actuator) - [`actuator/pump`](#actuatorpump) - [`actuator/focus`](#actuatorfocus) - [`imager/image`](#imagerimage) - [`segmenter/segment`](#segmentersegment) - [`status`](#status) - [`status/pump`](#statuspump) - [`status/focus`](#statusfocus) - [`status/imager`](#statusimager) - [`status/segmenter`](#statussegmenter) - [`status/segmenter/name`](#statussegmentername) - [`status/segmenter/object_id`](#statussegmenterobject_id) - [`status/segmenter/metric`](#statussegmentermetric) ## Topic details ### `actuator` #### `actuator/pump` Control the movement of the pump. The message is a JSON object: ```json { "action": "move", "direction": "FORWARD", "volume": 10, "flowrate": 1 } ``` This messages make the pump move 10mL forward at 1mL/min. Another supported message is: ```json { "action": "stop" } ``` - Receive only #### `actuator/focus` Control of the focus stage. The message is a JSON object, speed is optional: ```json { "action": "move", "direction": "UP", "distance": 0.26, "speed": 1 } ``` This message makes the stage move up by 10mm. Another supported message is: ```json { "action": "stop" } ``` - Receive only ### `imager/image` This topic controls the camera and capture. The message allowed is a JSON message: ```json { "action": "image", "pump_direction": "FORWARD", "volume": 1, "nb_frame": 200 } ``` Volume is in mL. This topic can also receive a config update message: ```json { "action": "config", "config": {...} } ``` A camera settings message can also be received here. The fields `iso`, `shutter_speed`, `white_balance_gain`, `white_balance` and `image_gain` are optionals: ```json { "action": "settings", "settings":{ "iso": 100, "shutter_speed": 40, "white_balance_gain": {"red": 100, "blue": 100}, "white_balance": "auto", "image_gain": {"analog": 100, "digital": 100} } } ``` - Receive only ### `segmenter/segment` This topic controls the segmentation process. The message is a JSON object: ```json { "action": "segment", "path": "/path/to/segment", "settings": { "force": False, "recursive": True, "ecotaxa": True, "keep": True } } ``` `action` can also be `stop`. The `action` element is the only element required. If no `path` is supplied, the whole images repository is segmented recursively (this is very long!). `force` is going to overcome the presence of the file `done` that is here to prevent for resegmenting a folder already segmented. `recursive` will force parsing all folders below `path`. `ecotaxa` activates the export of an ecotaxa compatible archive. `keep` allows to remove or keep the roi (when you do an ecotaxa export, no effects otherwise, the roi are kept). - Receive only ### `status` This high-level topic is used to send information to the Node-Red process. There is no publication or receive at this level. #### `status/pump` State of the pump. It's a JSON object with: ```json { "status": "Started", "duration": 25 } ``` Duration is a best guess estimate. It should not be used to control the other events. If you want to wait for a movement to finish, the best thing to do is to wait for the message `Done`. Status can be `Started`, `Ready`, `Done`, `Interrupted`, `Error`, `Dead`. - Publish only #### `status/focus` State of the focus stage. It's a JSON object with: ```json { "status": "Started", "duration": 25 } ``` Duration is a best guess estimate. It should not be used to control the other events. If you want to wait for a movement to finish, the best thing to do is to wait for the message `Done`. Status is one of `Started`, `Ready`, `Done`, `Interrupted`, `Error`, `Dead`. - Publish only #### `status/imager` State of the imager. It's a JSON object with: ```json { "status": "Started", "time_left": 25 } ``` Status is one of `Started`, `Ready`, `Completed` or `12_11_15_0.1.jpg has been imaged`. - Publish only #### `status/segmenter` Status of the segmentation. It's a JSON object with: ```json { "status": "Started", } ``` `status` is one of `Started`, `Done`, `Interrupted`, `Busy`, `Ready` or `Dead`. - Publish only #### `status/segmenter/object_id` ```json { "object_id": "13449" } ``` #### `status/segmenter/metric` ```json { "name": "01_13_28_232066_0", "metadata": { "label": 0, "width": 29, "height": 80, .... } ```