Copy of 1. Data sharing
Sensor and/or noon report data is required to create Ship Kernel models.
Below you may find which data sources and variables are required, and how to upload these to our platform.
Once uploaded, we will continuously process, merge and analyze the data to determine whether the quality is sufficient for modeling. The results of these analyses will be made available through our API. See the next step, Data Monitoring.
Data Requirements
Data Sources
Different sources can be used to build a model:
- Sensor data
- Noon report data
- Design data
- Any combination of the above
Only one of the above sources is minimally required to create a model. Still, we recommend sharing as many data sources as available, as it will increase accuracy and usability.
Next, we need to know about any events that might impact the performance of the ship (hull cleanings, propeller cleanings, dry-dockings, ESDs, ...). This ensures the models can capture the changes in performance due to these events.
Lastly, weather data may be provided but is not required. If not provided, we will use our own sources.
Operational data (sensor and/or noon reports)
Allowed variables
The table below shows the supported variables. Variables marked as 'essential' are minimally required to create data-driven models. Sharing non-essential variables will lead to richer and more accurate models and is highly recommended.
These variables can be sourced from sensor data and/or noon reports.
If possible, we recommend sharing both sensor and noon reports for all variables as this increases the reliability of the model.
| Variable | Unit | Essential | API field |
|---|---|---|---|
| Time and position | |||
| Timestamp (end of period) | ISO8601 | ✅ | datetime_end |
| Position (latitude / longitude) | degrees | ✅ | lat, lng |
| Speed over ground | kn | ✅ | sog |
| Speed through water | kn | stw | |
| Heading | degrees | ship_heading | |
| Loading condition | |||
| Mean draft | m | ✅ | draft_avg |
| Trim | m | trim | |
| Main engine and propeller | |||
| Shaft power | kW | ✅ | me_power |
| Fuel consumption | noon reports: mt sensor: mt/day |
✅ | me_fuel_consumption |
| Fuel type | SVD fuel type code, see Table 2 below. | within me_fuel_consumption | |
| Fuel specific energy (LCV), overrides the fuel type's default LCV | MJ/kg per fuel type | within me_fuel_consumption | |
| Shaft RPM | rotations/min | me_rpm | |
| Running hours | h | me_running_hours | |
| Propeller pitch percentage | % | If applicable | propeller_pitch_percentage |
| Generators | |||
| Shaft generator power | kW | If applicable | shaft_generator_power |
| Turbo generator power | kW | If applicable | turbo_generator_power |
| Boilers These fields may be provided per boiler (up to 3) as well as the total over all boilers. | |||
| Fuel consumption | noon reports: mt sensor: mt/day |
boiler_fuel_consumption_1 .. _3, _total | |
| Fuel type | SVD fuel type code, see Table 2 below. | within boiler_fuel_consumption_* | |
| Fuel specific energy (LCV), overrides the fuel type's default LCV | MJ/kg per fuel type | within boiler_fuel_consumption_* | |
| Running hours | h | boiler_running_hours_1 .. _3 | |
| Auxiliary engines These fields may be provided per auxiliary engine (up to 6) as well as the total over all auxiliary engines. | |||
| Power | kW | ae_power_1 .. _6, _total | |
| Fuel consumption | noon reports: mt sensor: mt/day |
ae_fuel_consumption_1 .. _6, _total | |
| Fuel type | SVD fuel type code, see Table 2 below. | within ae_fuel_consumption_* | |
| Fuel specific energy (LCV), overrides the fuel type's default LCV | MJ/kg per fuel type | within ae_fuel_consumption_* | |
| Running hours | h | ae_running_hours_1 .. _6 | |
| Lubrication | |||
| Cylinder oil remaining on board | mt | cyl_oil_rob | |
| Cylinder oil consumption | g/kWh | cyl_oil_consumption | |
| System oil remaining on board | mt | sys_oil_rob | |
| System oil consumption | mt/day | sys_oil_consumption | |
| Energy saving devices | |||
| Air lubrication system power | kW | If applicable | air_lubrication_system_power |
| Noon report context | |||
| Voyage ID | text | voyage_id | |
| Voyage leg ID | text | voyage_leg_id | |
| Noon report event (arrival, departure, begin / end of sea passage, noon at sea, …) | SVD event code, see Table 1 below. | event_type_code | |
SVD Codes
Fuel types and event codes from the Smart Maritime Council Standardised Vessel Dataset.
Table 1: SVD Event Type code
Event type code list from the Smart Maritime Council Standardised Vessel Dataset (IMO0597).
| Code | Event type | Remark |
|---|---|---|
| EV01 | Arrival | Arrival at berth or anchorage within port |
| EV02 | Departure | Departure from berth or anchorage within port |
| EV03 | Begin of off-hire | |
| EV04 | End of off-hire | |
| EV05 | Arrival STS | Arrival at ship-to-ship location |
| EV06 | Departure STS | Departure from STS location |
| EV07 | STS | Events at which STS operation took place |
| EV08 | Begin canal passage | |
| EV09 | End canal passage | |
| EV10 | Begin of sea passage | |
| EV11 | End of sea passage | |
| EV12 | Begin anchoring | |
| EV13 | End anchoring | |
| EV14 | Begin drifting | |
| EV15 | End drifting | |
| EV16 | Noon (position) - sea passage | |
| EV17 | Noon (position) - port | |
| EV18 | Noon (position) - river | |
| EV19 | Noon (position) - stoppage | |
| EV20 | ETA update | |
| EV21 | Begin fuel change over | |
| EV22 | End fuel change over | |
| EV23 | Change destination (deviation) | |
| EV24 | Begin of deviation | |
| EV25 | End of deviation | |
| EV26 | Entering special area | |
| EV27 | Leaving special area | |
| EV28 | Other event | |
| EV29 | Performance snapshot |
Table 2: SVD Fuel Type Code
Fuel type code list from the Smart Maritime Council Standardised Vessel Dataset (IMO0654). Each code maps to a default LCV which may be overridden.
| Code | Fuel type | LCV |
|---|---|---|
| Ethane | Ethane | 46.4 |
| Ethanol | Ethanol | 26.8 |
| HFO | Heavy Fuel Oil | 40.2 |
| LBG | Liquefied Biogas, Bio-LNG | 48.0 |
| LFO | Light Fuel Oil | 41.2 |
| LNG | Liquefied Natural Gas | 48.0 |
| LNGBO | LNG boil-off cargo used as fuel | 48.0 |
| LNGN2 | Deducted portion of Nitrogen from LNG Fuel | 48.0 |
| LPG | Liquefied Petroleum Gas | 46.0 |
| LPGB | Liquefied Petroleum Gas, Butane | 45.7 |
| LPGP | Liquefied Petroleum Gas, Propane | 46.3 |
| LSHFO | Low Sulfur Heavy Fuel Oil | 40.2 |
| LSLFO | Low Sulfur Fuel Oil | 41.2 |
| LSMGO | Low Sulfur Marine Gas Oil | 42.7 |
| MDO | Marine Diesel Oil | 42.7 |
| Methanol | Methanol | 19.9 |
| MGO | Marine Gas Oil | 42.7 |
| Other | Other fuel type name | / |
| ULSFO2020 | HFO with a sulphur content of 0.1% or below | 41.2 |
| ULSLFO2020 | LFO with a sulphur content of 0.1% or below | 41.2 |
| ULSMDO2020 | MDO with a sulphur content of 0.1% or below | 42.7 |
| ULSMGO2020 | MGO with a sulphur content of 0.1% or below | 42.7 |
| VLSFO | Very Low Sulphur Fuel Oil | 40.2 |
| VLSFO2020 | HFO with a sulphur content between 0.1% and 0.5% | 40.2 |
| VLSLFO2020 | LFO with a sulphur content between 0.1% and 0.5% | 40.2 |
Sensor sampling rate
We recommend a sampling rate of 1 sample / 5min. Nevertheless, other frequencies (1/sec to 1/hour) are supported too. This doesn't mean that data should be uploaded at this same sampling rate. Preferably, data is uploaded in batches.
Amount of data
Technically sound models can already be made with as little as 1 week of historical data in some cases, but a safe lower threshold would be 3 months of data. Ideally multiple years of historical operational data is shared. This increases model accuracy and provides more conditions to evaluate the model on.
Frequency of sharing
We recommend:
- Initially, uploading a one-off historical batch containing all available historical data.
- Afterwards, periodically upload a new batch once a week as new data becomes available.
The frequency of once a week is merely a suggestion, other frequencies are also possible.
Design data
Apart from operational data (sensor data and/or noon reports), design data can also be shared. This allows to create models in case no or insufficient operational data is available. It also helps improve data-driven models by providing more vessel specifics the model can learn from. It is not a must to share design data, as long as sufficient operational data (sensor data and/or noon report data) is available. It is however highly recommended, as it will improve the data-driven models, and create a fallback option in case of serious data issues or unavailability.
Minimum required variables
Calm water curve: sourced from sea trials, model tests, CFD, or other.
| Variable | Unit |
|---|---|
| Draft fore | m |
| Draft aft | m |
| Speed Over Ground or Speed Through Water | kn |
| Shaft Power | kW |
| RPM | /min |
Main Engine Shop Test
| Variable | Unit |
|---|---|
| Power | kW |
| RPM | /min |
| SFOC | g/kWh |
Uploading Data
To make a request to our API you must be authorized. Please see Authorization.
Adding a ship
Query the Ships list endpoint to view all ships you have access to.
A new ship can be added through the Add a new ship endpoint. Only name and IMO number are strictly required. MCR and Max RPM should be added to limit the model to the operational range of the vessel.
Data Sources
Each data source has its own API endpoint:
- Sensor data
- Noon reports
- Event data
- Weather data
- Design data (sea trial, shop tests, ...): not yet supported through the API. Only supported through manual transfer (e.g. via email).
Data can be uploaded by sending a POST request to these endpoints. The details of what such a request should look like and the exact unit each parameter should have is documented in each endpoint. For clarity, an example is also given further below.
Data Format
For uploading data, we impose a few format constraints.
- Each sample should at least have a timestamp in ISO8601 format.
- Each variable should have the correct data type, as defined in the endpoint reference. For example, text won't be accepted where a number should be.
- Variables may be missing or null.
Example
As a manner of example, please find an example JSON file containing two rows of sensor and noon reports data below, and an example Python script that uploads the sensor data through the API.
{
"datetime_end": ["2022-08-02T09:21:24.0000000+00:00", "2022-08-02T09:26:24.0000000+00:00"],
"lat": [24.69452, 24.60452],
"lng": [128.10483, 128.20483],
"sog": [14.1, 15],
"stw": [14.1, 15],
"me_power": [20000, 20010.5],
"me_rpm": [60, 61],
"me_fuel_consumption": [
[
{"fuel_type": "LNG", "rate_in_mt_per_day": 70, "lcv": 49.1},
{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.2, "lcv": 42.7}
],
[
{"fuel_type": "LNG", "rate_in_mt_per_day": 72, "lcv": 49.1},
{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.1}
]
],
"ae_fuel_consumption_1": [
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.8}],
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.6}]
],
"ae_fuel_consumption_2": [
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.2}],
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 0.0}]
],
"ae_power_1": [700, 640],
"ae_power_2": [300, 0],
"ae_power_total": [1000, 640],
"boiler_fuel_consumption_1": [
[{"fuel_type": "VLSFO", "rate_in_mt_per_day": 0.5}],
[{"fuel_type": "VLSFO", "rate_in_mt_per_day": 0.4}]
],
"turbo_generator_power": [500, 520.5],
"shaft_generator_power": [800, 810.2],
"ship_heading": [222.3, 30.6],
"draft_avg": [21.1, 21],
"trim": [-0.15, -0.1],
"sea_depth": [200.5, 30.1]
}{
"datetime_end": ["2022-08-02T12:00:00.0000000+00:00", "2022-08-03T12:00:00.0000000+00:00"],
"lat": [24.69452, 24.50452],
"lng": [128.10483, 128.20483],
"sog": [14.1, 15],
"stw": [14.1, 15],
"me_power": [20000, 20010.5],
"me_rpm": [60, 61],
"me_fuel_consumption": [
[
{"fuel_type": "LNG", "amount_in_mt": 70, "lcv": 49.1},
{"fuel_type": "LSMGO", "amount_in_mt": 1.2, "lcv": 42.7}
],
[
{"fuel_type": "LNG", "amount_in_mt": 72, "lcv": 49.1},
{"fuel_type": "LSMGO", "amount_in_mt": 1.1}
]
],
"ae_fuel_consumption_1": [
[{"fuel_type": "LSMGO", "amount_in_mt": 1.8}],
[{"fuel_type": "LSMGO", "amount_in_mt": 1.6}]
],
"ae_fuel_consumption_2": [
[{"fuel_type": "LSMGO", "amount_in_mt": 1.2}],
[{"fuel_type": "LSMGO", "amount_in_mt": 0.0}]
],
"ae_power_1": [700, 640],
"ae_power_2": [300, 0],
"ae_power_total": [1000, 640],
"boiler_fuel_consumption_1": [
[{"fuel_type": "VLSFO", "amount_in_mt": 0.5}],
[{"fuel_type": "VLSFO", "amount_in_mt": 0.4}]
],
"turbo_generator_power": [500, 520.5],
"shaft_generator_power": [800, 810.2],
"ship_heading": [222.3, 30.6],
"draft_avg": [21.1, 21],
"trim": [-0.15, -0.1],
"sea_depth": [200.5, 30.1]
}import requests
url = "https://api.toqua.ai/ships/{imo_number}/data/sensors"
payload = {
{
"datetime_end": ["2022-08-02T09:21:24.0000000+00:00", "2022-08-02T09:26:24.0000000+00:00"],
"lat": [24.69452, 24.60452],
"lng": [128.10483, 128.20483],
"sog": [14.1, 15],
"stw": [14.1, 15],
"me_power": [20000, 20010.5],
"me_rpm": [60, 61],
"me_fuel_consumption": [
[
{"fuel_type": "LNG", "rate_in_mt_per_day": 70, "lcv": 49.1},
{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.2, "lcv": 42.7}
],
[
{"fuel_type": "LNG", "rate_in_mt_per_day": 72, "lcv": 49.1},
{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.1}
]
],
"ae_fuel_consumption_1": [
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.8}],
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.6}]
],
"ae_fuel_consumption_2": [
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 1.2}],
[{"fuel_type": "LSMGO", "rate_in_mt_per_day": 0.0}]
],
"ae_power_1": [700, 640],
"ae_power_2": [300, 0],
"ae_power_total": [1000, 640],
"boiler_fuel_consumption_1": [
[{"fuel_type": "VLSFO", "rate_in_mt_per_day": 0.5}],
[{"fuel_type": "VLSFO", "rate_in_mt_per_day": 0.4}]
],
"turbo_generator_power": [500, 520.5],
"shaft_generator_power": [800, 810.2],
"ship_heading": [222.3, 30.6],
"draft_avg": [21.1, 21],
"trim": [-0.15, -0.1],
"sea_depth": [200.5, 30.1]
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"X-API-Key": "your_api_key"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Correcting Data
Data can be corrected by re-uploading samples with the exact same timestamp. We will always use the values of the latest uploaded sample.
In case erroneous timestamps were uploaded, contact us to fix the issue.
Updated 9 days ago