Data Feeds
The Mayflower Autonomous Ship (MAS) has a number of live data feeds that are usually available whilst it is out at sea.
You can use the data feeds to find out all kinds of things about the ship, including:
- Live Navigational Data & AIS track
- Live Ship Status
- Live Science & Data Collection Status and readings
- Live Weather Data
- Replay Data
The live data feed is available via MQTT from mqtt.mas400.com
, we are also looking into making historical data avaialble once the MAS has completed it’s voyage from the UK to US in Spring 2022.
Connecting using MQTT
You can connect to our public MQTT broker using both traditional MQTT and MQTT over websockets (useful if you want to build a web page that consumes the data).
The connection details are:
MQTT
Host: mqtt.mas400.com
Port: 1883
MQTT Websockets
Host: mqttws.mas400.com
Port: 443
Because our broker is public and read only, there is currently no authentication required.
MQTT Topic Tree
As of March 2022, the current high level topic tree is as follows:
- status
- replay
- AIS
- science
- science_pod
- depth
- ctd
- flurometer
- o2
@andysc is also hosting a Hypercat catalogue here. This can be a great way of programatically exploring the topics and data available.
Status Feed
When connected via Cellular or Satellite to the internet, the MAS can send a small packet of data up on a semi-regular basis (conditions dependant) containing a summary of the ships status.
topic | Data Type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
date | Timestamp | When the status update was recieved |
shipDataTimeStamp | float | Unix Epoch timestamp for when the update was sent on the MAS |
shipStatus | string | Ship Status: offline, standby, autonomous, remote |
shipConnectivity | string | Whether the satelite link is active (Connected / Disconnected) |
shipRudderAnglePercentThousands | float | The Rudder angle in degrees, the key name is misleading |
shipLatitudeDeg | float | MAS Latitude in Degrees |
shipLongitudeDeg | float | MAS Longitude in Degrees |
shipHeadingDeg | float | MAS Heading in Degrees |
shipSpeedOverGroundMS | float | MAS Speed over ground in m/s |
shipCourseOverGroundDeg | float | MAS Course over Ground in Degrees |
shipThrottlePercentThousands | float | MAS Throttle - TODO |
shipPitchDeg | float | MAS Pitch in Degrees |
shipRollDeg | float | MAS Roll in Degrees |
waterDepthM | float | fathometer depth in meters |
batteryVoltageTenths | float | Overall battery voltage in tenths |
batteryCapacityPct | float | Battery charge capacity in percent |
solarChargerPowerWatts | float | Solar Power charging rate in Watts |
weatherDataTimestamp | float | Unix Epoch timestamp for when the weather update was made |
temperatureDegC | int | The Temperature where the MAS is |
windSpeedKmH | int | Windspeed where the MAS is |
windDirectionDeg | int | Wind Direction where the MAS is in Degrees |
weather | string | short weather conditions description |
weatherPhrase | string | longer weather conditions description |
sunrise | timestamp | Sunrise time where the MAS is |
sunset | timestamp | Sunset time where the MAS is |
_id | string | Database record ID for this update |
JSON Example
{
"shipDataTimeStamp": "1648751244.0",
"shipLatitudeDeg": "50.36032",
"shipLongitudeDeg": "-4.11589",
"shipPitchDeg": "0.0",
"shipRollDeg": "0.0",
"shipSpeedOverGroundMS": "0.004",
"shipCourseOverGroundDeg": "265.996",
"waterDepthM": "0.0",
"shipHeadingDeg": "168.7925",
"batteryCapacityPct": "94.186989",
"batteryVoltageTenths": "539.831846",
"shipThrottlePercentThousands": "0.0",
"shipRudderAnglePercentThousands": "-20.0",
"solarChargerPowerWatts": "0.0", "shipStatus": "Standby",
"weatherDataTimestamp": "1648751251.827717",
"date": "2022-03-31 18:27:31.827717+00:00",
"temperatureDegC": "7", "windSpeedKmH": "26",
"windDirectionDeg": "350", "weather": "sun",
"weatherPhrase": "Fair",
"sunrise": "2022-03-31 05:55:25+00:00",
"sunset": "2022-03-31 18:46:53+00:00",
"shipConnectivity": "Connected",
"_id": "6245f2931317b53e48ecc133"
}
AIS Feed
The MAS is equipped with an AIS transponder which allows it to transmit it’s location, speed and bearing from almost anywhere in the world. This data is recieved either locally by other ships or via satelite so that it can be tracked by services online like MarineTraffic. In cases where the MAS onboard satellite connection fails, then AIS is the best way to track it.
topic | Data Type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
time | ISO8601 Timestamp | When the AIS update was recieved |
latitude | float | Latitude of the MAS in degrees |
longitude | float | Longitude of the MAS in degrees |
speed | float | Speed in Knots |
heading | float | Heading in degrees |
courseOverGround | float | The Actual course of the ship |
turnRate | float | Rate of turn (°/min) |
JSON Example
{
"latitude":50.36039,
"longitude":-4.115903,
"speed":0,
"heading":0,
"courseOverGround":0,
"turnRate":0,
"timeStamp":"2022-03-31 18:28:12"
}
Replay
Whilst the MAS is alongside the dock, the live data feed may not be particularly eventful. For those who might want to demonstrate their projects, a Replay feed is available on the replay
topic. This has the same or similar underlying topic structure as the live topics with a few bonus topics only available once the MAS has offloaded certain datasets. Currently, the replay feed is replaying the June 2021 main voyage and should restart once complete on a loop.
For brevitys sake, the subtopics below will link to their live counterparts if they have them:
Hazard Feed
One of the experiments onboard the MAS is looking at how to optimise machine learning algorithms on custom silicon and so was running a simple object detection algorithm on the 6 camera feeds around the mast (Note: This is not the same system used as part of the AI captain, which does not have a data feed). Once the captured images and recorded classifications were uploaded off the MAS, these were added to the replay feed on the following topics:
topic | Data Type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
time | ISO8601 Timestamp | When the classification was made |
epoch_time | Unix Epoch Timestamp | When the classification was made |
object_name | string | The classified object name |
object_id | integer | The classified object ID |
prob | float | The classification probability |
cam_id | integer | The camera ID (1 to 6) |
annotation | URL | A URL to the captured image with the annotation |
JSON Example
{
"time":"2021-06-18T02:10:44.000Z",
"epoch_time":1623982244,
"object_name":"traffic light",
"object_id":10,
"prob":0.5565,
"cam_id":1,
"annotation":"https://mas-science-data-publicimages-mission1-jun21.s3.eu-gb.cloud-object-storage.appdomain.cloud/hds-run_y2021m06d17_h19m50s26_cam_1_frame_02377.png"
}
Note: This object detection model was not built specifcially for the environment the MAS is in (the sea), or the cameras (Wide angle, with Infra Red at night). As such, you may see some entertaining / bizzare classifications for objects. Please be assured that this is absolutely fine!
Science Feeds
These feeds are generated by a number of sensors and other science based systems on board.
science_pod
This is a fairly low level feed of diagnostic information about the Science Pod cluster running on the MAS400. It probably won’t be hugely interesting to many people, but is used to drive a few aspects of the MAS400.com dashboard.
Topic: science/science_pod
Topic | Data Type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
timestamp | integer | Unix Epoch Timestamp (seconds since 1970) when the reading was sent |
timestamp_iso | ISO8601 timestamp | When the reading was recieved |
environment/temperatureC | float | The temperature in degrees C within part of the science Pod. This is expected to be around the 40° mark during full operation |
environment/humidity | float | % humidity within part of the science pod. |
environment/pressureHPA | float | Atmospheric pressure within part of the science pod in hPa (hectopascals) |
ups/batteryCapacity | integer | percentage capacity of the science pod UPS |
ups/batteryCharge | integer | percentage charge of the science pod UPS |
ups/batteryVoltage | float | voltage of the science pod UPS batteries - usually around 10v |
ups/inputVoltage | float | input voltage from the MAS into the science pod - usually around 12v |
ups/outputVoltage | float | output voltage from the UPS to science pod internal components - usually around 12v |
ups/batteryTemperature | float | Average temperature on the UPS board - usually around 40° when the pod is active. |
experiments/hydrophone | string | Shows the state of the hydrophone experiment RUNNING / OFFLINE / ERROR |
experiments/gnssimu | string | Shows the state of the gnss / imu experiment RUNNING / OFFLINE / ERROR |
experiments/video | string | Shows the state of the ocean wave energy experiment RUNNING / OFFLINE / ERROR |
experiments/tds | string | Shows the state of the hazard detection experiment RUNNING / OFFLINE / ERROR |
Science Pod Raspberry Pi Status
This is low level remote telemetry, giving us information about how the four Raspberry Pi 4s that make up the Science Pod are operating. For most people, this data is pretty useless, but it allows the MAS team to understand how running the experiments over long periods of time effects the hardware.
Topic: science/science_pod/system/etsMasPi<1,2,3,4>
Topic | Data Type | Notes |
freeMemory | float | Free RAM in megabytes (higher number is better) |
cpuLoad | float | CPU Usage on the Pi (These Pis have 4 cores) |
cpuVolts | float | CPU Voltage |
cpuClock | float | CPU Clock |
cpuTemp | float | CPU Temp in degrees C |
diskRoot | float | |
throttleUndervolt | boolean | Set to true if the Pi has had to throttle the CPU due to undervoltage |
throttleFrequency | boolean | Set to true if the Pi ARM CPU has been frequency capped |
throttleThrottled | boolean | Set to true if the Pi is currently Throttled |
throttleSoftTempLimit | boolean | Set to true if the Pi has throttled due to the CPU temperature getting to hot |
JSON Example
{
"timestamp": 1651688203,
"environment": {
"temperatureC": 41.71,
"humidity": 19.703760135651397,
"pressureHPA": 1020.9364672979422
},
"ups": {
"batteryCapacity": 100,
"batteryCharge": 100,
"batteryVoltage": 10.09,
"inputVoltage": 12.01,
"outputVoltage": 12.01,
"batteryTemperature": 41
},
"experiments": {
"hydrophone": "RUNNING",
"gnssimu": "RUNNING",
"video": "RUNNING",
"tds": "RUNNING"
},
"system": {
"etsMasPi1": {
"freeMemory": 2374.160384,
"cpuLoad": 0.07,
"cpuVolts": 0.8438,
"cpuClock": 0.3333208,
"cpuTemp": 55.5,
"diskRoot": 4.85222,
"throttleUndervolt": false,
"throttleFrequency": false,
"throttleThrottled": false,
"throttleSoftTempLimit": false
},
"etsMasPi2": {
"freeMemory": 95.06816,
"cpuLoad": 1.07,
"cpuVolts": 0.8688,
"cpuClock": 0.500000992,
"cpuTemp": 60.3,
"diskRoot": 2.623864,
"throttleUndervolt": false,
"throttleFrequency": false,
"throttleThrottled": false,
"throttleSoftTempLimit": false
},
"etsMasPi3": {
"freeMemory": 266.801152,
"cpuLoad": 0.4,
"cpuVolts": 0.8438,
"cpuClock": 0.500000992,
"cpuTemp": 54,
"diskRoot": 11.696636,
"throttleUndervolt": false,
"throttleFrequency": false,
"throttleThrottled": false,
"throttleSoftTempLimit": false
},
"etsMasPi4": {
"freeMemory": 109.604864,
"cpuLoad": 4.09,
"cpuVolts": 0.8563,
"cpuClock": 0.500000992,
"cpuTemp": 69.1,
"diskRoot": 2.684844,
"throttleUndervolt": false,
"throttleFrequency": false,
"throttleThrottled": false,
"throttleSoftTempLimit": false
}
}
}
depth
The MAS has a Valeport VA500 Underwater Altimeter installed that will allow it to track the depth of the sea floor under the MAS up to 100m deep.
Topic: science/depth/#
Topic | Data Type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
time | ISO8601 Timestamp | When the reading was recieved |
depth | integer | The measured depth of the surface below the MAS400 |
depthUnits | string | The depth units from the sensor (M) - Meters |
pressure | integer | The current water pressure. |
pressureUnits | string | The pressure units from the sensor (dbar) |
JSON Example
{
"timestamp": "2022-05-02T07:13:26.000Z",
"depth": 0,
"depthUnits": "M",
"pressure": 0,
"pressureUnits": "dBar"
}
fluorometer
The MAS has a Chelsea Vlux AlgaePro fluorometer installed that tracks characteristics of algae in the water, this can be useful for tracking algal blooms.
Note: The fields for this sensor are still being documented.
Topic: science/fluorometer
Topic | Data type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
time | ISO8601 Timestamp | When the reading was recieved |
ChlAc2 | float | |
ChlBc2 | float | |
phycoerythrin2 | float | |
phycocyanin2 | float | |
turb | float | |
ABS1 | float | Absorbance at 450nm |
ABS2 | float | Absorbance at 470nm |
ABS3 | float | Absorbance at 530nm |
ABS4 | float | Absorbance at 625nm |
ChlAc3 | float | |
ChlBc3 | float | |
phycoerythrin3 | float | Uncorected fluorescence |
phycocyanin3 | float | |
intTemp | float | |
gain | float |
JSON Example
{
"timestamp": "2022-05-02T07:21:47.000Z",
"ChlAc2": 0,
"ChlBc2": 0,
"phycoerythrin2": 0,
"phycocyanin2": 0.468,
"turb": 142,
"ABS1": 0.104,
"ABS2": 0.182,
"ABS3": 0.179,
"ABS4": 0.163,
"ChlAc3": 0,
"ChlBc3": 0,
"phycoerythrin3": 0,
"phycocyanin3": 0.373,
"intTemp": 20.557,
"gain": 3
}
ctd
A CTD (Conductivity, Temperature, Depth) sensor from Valeport is installed which allows us to track the depth, temperature, and salinity of the water.
Topic: science/ctd
Topic | Data type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
time | ISO8601 Timestamp | When the reading was recieved |
pressDepth | float | Pressure in dBar (decibar) |
temperatureDegC | float | Water Temperature in degrees C |
soundSpeedms1 | float | Sound velocity in the water in m/s |
salinity | float | Salinity of sea water in PSU |
densitykgm3 | float | Density of the sea water in kg/m3 |
JSON Example
{
"timestamp": "2022-05-02T07:21:47.000Z",
"pressDepth": 0.605,
"temperatureDegC": 13.887,
"soundSpeedms1": 1504.696,
"salinity": 36.329,
"densitykgm3": 1027.242
}
o2
An Aanderaa o2 sensor is installed which provides o2 readings of the sea water the MAS is passing through.
Topic: science/o2
Topic | Data type | Notes |
---|---|---|
JSON | JSON object | This is a JSON Object summarising the data to save you from subscribing to individual topics |
time | ISO8601 Timestamp | When the reading was recieved |
measurement1 | integer | |
measurement2 | integer | |
o2Concentration | float | O2 Concentration in µM |
airSaturationPct | float | Air Saturation % |
temperatureDegC | float | Water Temperature in Degrees C |
calPhaseDeg | float | Calibrated Phase |
tcPhaseDeg | float | Temperature compensated phase |
c1rphDeg | float | Phase measurement with blue excitation light (deg) |
c2rphDeg | float | Phase measurement with red excitation light (deg) |
c1AmpvV | float | Amplitude measurement with blue excitation light (mv) |
c2AmpvV | float | Amplitude measurement with red excitation light (mv) |
rawTemp | float | Voltage from thermistor bridge. (mV) |
JSON Example
{
"timestamp": "2022-05-04T18:27:17.000Z",
"measurement1": 4835,
"measurement2": 1008,
"o2Concentration": 323.443,
"airSaturationPct": 103.238,
"temperatureDegC": 15.242,
"calPhaseDeg": 29.869,
"tcPhaseDeg": 32.145,
"c1rphDeg": 38.783,
"c2rphDeg": 6.638,
"c1AmpvV": 654.3,
"c2AmpvV": 901.8,
"rawTemp": 423.4
}
Future planned feeds
As we get closer to departure, more feeds will come online to monitor the status of the MAS, it’s sensors and experiments. Once they are brought online, they will be documented in the sections above.
Planned feeds
topic | description |
---|---|
science_pod | Status and alerts from the onboard science pod |
hazard_detection | Classifications from the experimental hazard detection system |
hydrophone | Classifications from the Marine Mammals Experiment |
sensors | sensor data from the ‘wet’ sensors mounted on the MAS |
microphone | Clasifcaitons from the internal microphone onbaord the MAS |