# 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` and `shutter_speed` are optionals: ```json { "action": "settings", "iso": 100, "shutter_speed": 40 } ``` - Receive only ### `segmenter/segment` This topic controls the segmentation process. The message is a JSON object: ```json { "action": "segment" } ``` `action` can also be `stop`. - 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`