DENM
Look for the current version via the link in the table at the message-type introduction page
As of mid november 2024, Mobilidata has changed version regarding AMQP headers (version 0.9 to 1.0). This is caused by changes in the C-Roads (TF4 spec release 2.1.0) specification.
Description
The DENM (Decentralized Environmental Notification Message) standard is a communication protocol for sharing information related to mobility and the environment. It is designed to facilitate the exchange of data between vehicles, infrastructure, and other entities in the transportation ecosystem.
The standard builds on this framework by specifying a set of message types and data elements that can be used to transmit information related to mobility and the environment.
Some examples of the types of information that can be shared using the DENM standard include traffic congestion, road closures, accidents, and hazardous driving conditions. This information can be used by vehicles and other entities to improve safety and efficiency on the road.
Overall, the DENM standard provides a flexible and interoperable way for vehicles and other entities to exchange information related to mobility and the environment. This can help improve safety and efficiency on the road, and support the development of intelligent transportation systems.
Usage
The reference point from which all traces are drawn is the event location. In case of a stretched event like roadworks, the reference is the location wher the roadworks is starting. There are two types of traces (optional) in the message:
- Situation Container: eventHistory (single trace)
This trace describes the route and length of the event. Literally the route that the event-detecting vehicle has driven until the event ended. - Location Container: traces (up to 7 traces)
These awareness traces indicate where to raise he event warning for the end-user. They are drawn on all (max 7) available upstream roadsegments.
Data packages are encoded/decoded to ASN.1 standard, using the 'UPER' encoding rules.
Timestamps
The 'referenceTime' and 'detectionTime' in DENM are timestamps in milliseconds with epoch '2004-01-01 UTC' including leap seconds. be aware that standard Unix timeis not aware of leapseconds, depending on the used computing method, those seconds have to be added. The timestamps are defined in ISO 8601 [i.10].
Overview
The following figure provides an overview of the construct of a DEN meassage, complete with the possible value ranges. DENM is for all types of warning technically the same.

Attributes
"Denm": {
"Management": {
"ActionID": {
"OriginatingStationID": 1,
"SequenceNumber": 19733
},
...
},
...
},
The ActionID contains the the unique identifier of a DENM event, which is a combination of OriginationStationID and SequenceNumber.
"Denm": {
"Management": {
...
"DetectionTime": 625144898831,
"ReferenceTime": 625144898831,
...
},
...
},
DetectionTime and ReferenceTime contain a timestamp which specifies the actual detection time of the original event and the time the event was added to the MI.
"Denm": {
"Management": {
...
"EventPosition": {
"Latitude": 509689670,
"Longitude": 53592259,
"PositionConfidenceEllipse": {
"SemiMajorConfidence": 4095,
"SemiMajorOrientation": 3601,
"SemiMinorConfidence": 4095
},
...
},
...
},
...
},
EventPosition describes the exact location of the event and contains the coordinate in Latitude, Longitude and Altitude. It also contains extra information on the accuracy of the measurement.
To get the values of Latitude and Longitude in WGS84, the following calculation has to be applied: WGS84 Latitude = Latitude * 1e-7 and WGS84 Longitude = Longitude * 1e-7.
"Denm": {
"Management": {
...
"ValidityDuration": 5966,
...
}
},
How long the DENM message is valid is described in ValidityDuration. This field contains the time in seconds that the message is valid.
"Denm": {
"Management": {
...
"StationType": 0
...
}
},
The type of the station that sends the DENM message is described in StationType. Currently this is fixed to 0, but can be extended to be used with eg. IoT device stations.
"Denm": {
...
"Situation": {
...
"InformationQuality": 0,
...
},
...
},
The quality of the information in the DENM message is described in InformationQuality. This field contains a value between 0 and 7, where 0 is the lowest quality and 7 is the highest quality.
"Denm": {
...
"Situation": {
...
"EventType": {
"CauseCodeType": 3,
"SubCauseCodeType": 0
},
...
},
...
},
In EventType more information about the type of the DENM message is described. This field contains a CauseCodeType and SubCauseCodeType which can be linked to the seperate Use Cases.
An overview of all Cause Codes can be found here.
"Denm": {
...
"Location": {
"EventSpeed": null,
"EventPositionHeading": {
"HeadingValue": 2038,
"HeadingConfidence": 127
},
"Traces": [
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
...
],
...
],
},
...
},
The geographic impact of the DENM message is desribed in the Location attribute. This field contains values for the heading of the event and also the different Traces. These Traces are multiline strings described by delta values from the previous points and describe the roads that are impacted by this event.
Example
An extended description of the DENM ASN.1 can be found here.
DENM AMQP Header example
{
"custom-mobilidata-useCase": ",12,",
"custom-mobilidata-publisherType": "PIP",
"latitude": "51.010456",
"subCauseCode": "0",
"quadTree": ",120202132033011022,",
"custom-mobilidata-dtapEnvironment": "production",
"originatingCountry": "BE",
"custom-mobilidata-alertCCodes": "702,401",
"publisherId": "BE00004",
"messageType": "DENM",
"causeCode": "3",
"protocolVersion:DENM": "1.3.1",
"publicationId": "BE00004:DENM_ROADWORKS_01",
"custom-mobilidata-timestamp": "1710751248100",
"longitude": "4.515842",
"shardCount": "1",
"shardId": "1",
"baselineVersion": "2.1.0",
"custom-mobilidata-baselineVersion": "1.0.0"
}
When receiving a DENM message, the AMQP header will contain some extra information that is not included in the DENM message itself. This information can be used to filter and process the message.
custom-mobilidata-useCase: The use case of the message.quadTree: The quadtree of the message. This can be used to filter the message on the location based on quadkeys.
DENM Message example
- ASN.1
- JSON
010100000001c100000000a68a9231b144a1e48c6c51287d40628466e7b92c3ffffffe11dbba1f0ba70010030001d4a4786c31ce027f6fd923fffeffffe39c41d370518e39c4080b0162e39c41745040ae39c41733040a639c41dd70527639c4199d0469e39c4199f0469639c414db039ce39c414db03a1e39c402690068e39c4166b0397639c4164103ab639c41bf504d7e39c40d6d025ce39c406dd011c639c3fbc90347e39c3f96efeb0e39c40ffffbffff8e71074dc14638e710202c058b8e7105d14102b8e7105ccc10298e710775c149d8e710667411a78e710667c11a58e710536c0e738e710536c0e878e71009a401a38e71059ac0e5d8e71059040ead8e7106fd4135f8e71035b409738e7101b7404718e7123fffeffffe39c41d370518e39c4080b0162e39c41745040ae39c41733040a639c41dd70527639c4199d0469e39c4199f0469639c414db039ce39c414db03a1e39c402690068e39c4166b0397639c4164103ab639c41bf504d7e39c41a3cfb2d639c40346fe84639c40472fe5be39c3fe82ff00e39c48ffffbffff8e71074dc14638e710202c058b8e7105d14102b8e7105ccc10298e710775c149d8e710667411a78e710667c11a58e710536c0e738e710536c0e878e71009a401a38e71059ac0e5d8e71059040ead8e7106fd4135f8e71035b409738e7101b7404718e70fef240d1f8e70fe5bbfac38e7123fffeffffe39c41d370518e39c4080b0162e39c41745040ae39c41733040a639c41dd70527639c4199d0469e39c4199f0469639c414db039ce39c414db03a1e39c402690068e39c4166b0397639c4164103ab639c41bf504d7e39c41a3cfb2d639c40346fe84639c40472fe5be39c3fe82ff00e39c38ffffbffff8e71074dc14638e710202c058b8e70ff7dc0e378e70fd3a3f8438e70f942bedcd8e70f9433eddf8e70f8da3ecc98e70ffffc08598e710045c35338e710040435338e710045c35338e710045c351f8e710045c35318e7113fffeffffe39c41d370518e39c4080b0162e39c41745040ae39c41733040a639c41dd70527639c4199d0469e39c4199f0469639c414db039ce39c414db03a1e39c402690068e39c4166b0397639c4164103ab639c41bf504d7e39c41a3cfb2d639c40346fe84639c40472fe5be39c0
{
"Header": {
"ProtocolVersion": 1,
"MessageID": 1,
"StationID": 1
},
"Denm": {
"Management": {
"ActionID": {
"OriginatingStationID": 1,
"SequenceNumber": 19733
},
"DetectionTime": 625144898831,
"ReferenceTime": 625144898831,
"Termination": false,
"EventPosition": {
"Latitude": 509689670,
"Longitude": 53592259,
"PositionConfidenceEllipse": {
"SemiMajorConfidence": 4095,
"SemiMajorOrientation": 3601,
"SemiMinorConfidence": 4095
},
"Altitude": {
"AltitudeValue": 800001,
"AltitudeConfidence": 15
}
},
"RelevanceDistance": null,
"RelevanceTrafficDirection": null,
"ValidityDuration": 5966,
"TransmissionInterval": null,
"StationType": 0
},
"Situation": {
"InformationQuality": 0,
"EventType": {
"CauseCodeType": 3,
"SubCauseCodeType": 0
},
"LinkedCause": null,
"EventHistory": [
{
"EventPosition": {
"DeltaLatitude": -11099,
"DeltaLongitude": -7759,
"DeltaAltitude": 12800
},
"EventDeltaTime": null,
"InformationQuality": 0
}
]
},
"Location": {
"EventSpeed": null,
"EventPositionHeading": {
"HeadingValue": 2038,
"HeadingConfidence": 127
},
"Traces": [
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2979,
"DeltaLongitude": 2070,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2970,
"DeltaLongitude": 2069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3820,
"DeltaLongitude": 2639,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3279,
"DeltaLongitude": 2260,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3280,
"DeltaLongitude": 2259,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1850,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1860,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 309,
"DeltaLongitude": 210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2870,
"DeltaLongitude": 1839,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2849,
"DeltaLongitude": 1879,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3579,
"DeltaLongitude": 2480,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1719,
"DeltaLongitude": 1210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 879,
"DeltaLongitude": 569,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -539,
"DeltaLongitude": 1680,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -840,
"DeltaLongitude": -670,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
],
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2979,
"DeltaLongitude": 2070,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2970,
"DeltaLongitude": 2069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3820,
"DeltaLongitude": 2639,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3279,
"DeltaLongitude": 2260,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3280,
"DeltaLongitude": 2259,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1850,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1860,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 309,
"DeltaLongitude": 210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2870,
"DeltaLongitude": 1839,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2849,
"DeltaLongitude": 1879,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3579,
"DeltaLongitude": 2480,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1719,
"DeltaLongitude": 1210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 879,
"DeltaLongitude": 569,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
],
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2979,
"DeltaLongitude": 2070,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2970,
"DeltaLongitude": 2069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3820,
"DeltaLongitude": 2639,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3279,
"DeltaLongitude": 2260,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3280,
"DeltaLongitude": 2259,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1850,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1860,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 309,
"DeltaLongitude": 210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2870,
"DeltaLongitude": 1839,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2849,
"DeltaLongitude": 1879,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3579,
"DeltaLongitude": 2480,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3359,
"DeltaLongitude": -2469,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 420,
"DeltaLongitude": -759,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 570,
"DeltaLongitude": -840,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -190,
"DeltaLongitude": -510,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
],
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2979,
"DeltaLongitude": 2070,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2970,
"DeltaLongitude": 2069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3820,
"DeltaLongitude": 2639,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3279,
"DeltaLongitude": 2260,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3280,
"DeltaLongitude": 2259,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1850,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1860,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 309,
"DeltaLongitude": 210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2870,
"DeltaLongitude": 1839,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2849,
"DeltaLongitude": 1879,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3579,
"DeltaLongitude": 2480,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1719,
"DeltaLongitude": 1210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 879,
"DeltaLongitude": 569,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -539,
"DeltaLongitude": 1680,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -840,
"DeltaLongitude": -670,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
],
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2979,
"DeltaLongitude": 2070,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2970,
"DeltaLongitude": 2069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3820,
"DeltaLongitude": 2639,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3279,
"DeltaLongitude": 2260,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3280,
"DeltaLongitude": 2259,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1850,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1860,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 309,
"DeltaLongitude": 210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2870,
"DeltaLongitude": 1839,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2849,
"DeltaLongitude": 1879,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3579,
"DeltaLongitude": 2480,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3359,
"DeltaLongitude": -2469,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 420,
"DeltaLongitude": -759,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 570,
"DeltaLongitude": -840,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -190,
"DeltaLongitude": -510,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
],
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -260,
"DeltaLongitude": 1820,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -1419,
"DeltaLongitude": -990,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -3450,
"DeltaLongitude": -2329,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -3449,
"DeltaLongitude": -2320,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": -3659,
"DeltaLongitude": -2459,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 1069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 140,
"DeltaLongitude": 6810,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 129,
"DeltaLongitude": 6810,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 140,
"DeltaLongitude": 6810,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 140,
"DeltaLongitude": 6800,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 140,
"DeltaLongitude": 6809,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
],
[
{
"PathPosition": {
"DeltaLatitude": 0,
"DeltaLongitude": 0,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3740,
"DeltaLongitude": 2610,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 1030,
"DeltaLongitude": 710,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2979,
"DeltaLongitude": 2070,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2970,
"DeltaLongitude": 2069,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3820,
"DeltaLongitude": 2639,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3279,
"DeltaLongitude": 2260,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3280,
"DeltaLongitude": 2259,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1850,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2670,
"DeltaLongitude": 1860,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 309,
"DeltaLongitude": 210,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2870,
"DeltaLongitude": 1839,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 2849,
"DeltaLongitude": 1879,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3579,
"DeltaLongitude": 2480,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 3359,
"DeltaLongitude": -2469,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 420,
"DeltaLongitude": -759,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
},
{
"PathPosition": {
"DeltaLatitude": 570,
"DeltaLongitude": -840,
"DeltaAltitude": 12800
},
"PathDeltaTime": null
}
]
],
"RoadType": null
},
"Alacarte": null
}
}
DENM CauseCodes
This table is for easy reference. If there is any mismatch with the C-roads specs, always trust the C-roads specs.
| Cause code | Cause Description | Direct Cause Code | Sub Cause Code | Sub Cause Description |
|---|---|---|---|---|
| 1 | Traffic condition | 1 | 0 | Unavailable |
| 1 | Increased volume of traffic | |||
| 2 | Traffic jam slowly increasing | |||
| 3 | Traffic jam increasing | |||
| 4 | Traffic jam strongly increasing | |||
| 5 | Traffic stationary | |||
| 6 | Traffic jam slightly decreasing | |||
| 7 | Traffic jam decreasing | |||
| 8 | Traffic jam strongly decreasing | |||
| 2 | Accident | 2 | 0 | Unavailable |
| 1 | Multi-vehicle accident | |||
| 2 | Heavy accident | |||
| 3 | Accident involving lorry | |||
| 4 | Accident involving bus | |||
| 5 | Accident involving hazardous materials | |||
| 6 | Accident on opposite lane | |||
| 7 | Unsecured accident | |||
| 8 | Assistance requested (e-call) | |||
| 3 | Roadworks | 3 | 0 | Unavailable |
| 1 | major roadwork | |||
| 2 | Road marking work | |||
| 3 | Slow moving road maintenance | |||
| 4 | Short-term stationary roadWorks | |||
| 5 | Street cleaning | |||
| 6 | Adverse weather condition - adhesion | 6 | 0 | Unavailable |
| 1 | Heavy frost on road | |||
| 2 | Fuel on road | |||
| 3 | Mud on road | |||
| 4 | Snow on road | |||
| 5 | Ice on road | |||
| 6 | Black ice on road | |||
| 7 | Oil on road | |||
| 8 | Loose chippings | |||
| 9 | Instant black ice | |||
| 10 | Roads salted | |||
| 9 | Hazardous location - Surface condition | 9 | 0 | Unavailable |
| 1 | Rock falls | |||
| 2 | Earthquake damage | |||
| 3 | Sewer collapse | |||
| 4 | Subsidence | |||
| 5 | Snow drifts | |||
| 6 | Storm damage | |||
| 7 | Burst pipe | |||
| 8 | Volcano eruption | |||
| 9 | Falling ice | |||
| 10 | Hazardous location - Obstacle on the road | 10 | 0 | Unavailable |
| 1 | Shed load | |||
| 2 | Parts of vehicles | |||
| 3 | Parts of tyres | |||
| 4 | Big objects | |||
| 5 | Fallen trees | |||
| 6 | Hub caps | |||
| 7 | Waiting vehicles | |||
| 11 | Hazardous location - Animal on the road | 11 | 0 | Unavailable |
| 1 | Wild animals | |||
| 2 | Herd of animals | |||
| 3 | Small animals | |||
| 4 | Large animals | |||
| 12 | Human presence on the road | 12 | 0 | Unavailable |
| 1 | Children on roadway | |||
| 2 | Cyclists on roadway | |||
| 3 | Motor cyclist on roadway | |||
| 14 | Wrong way driving | 14 | 0 | Unavailable |
| 1 | Vehicle driving in the wrong lane | |||
| 2 | Vehicle driving in the wrong driving direction | |||
| 15 | Rescue and recovery work in progress | 15 | 0 | Unavailable |
| 1 | Emergency vehicles | |||
| 2 | Rescue helicopter landing | |||
| 3 | Police activity ongoing | |||
| 4 | Medical emergency ongoing | |||
| 5 | Child abduction in progress | |||
| 17 | Adverse weather condition - extreme weather condition | 17 | 0 | Unavailable |
| 1 | Strong winds | |||
| 2 | Damaging hail | |||
| 3 | Hurricane | |||
| 4 | Thunderstorm | |||
| 5 | Tornado | |||
| 6 | Blizzard | |||
| 18 | Adverse weather condition - visibility | 18 | 0 | Unavailable |
| 1 | Visibility reduced due to fog | |||
| 2 | Visibility reduced due to smoke | |||
| 3 | Visibility reduced due to heavy snowfall | |||
| 4 | Visibility reduced due to heavy rain | |||
| 5 | Visibility reduced due to heavy hail | |||
| 6 | Visibility reduced due to low sun glare | |||
| 7 | Visibility reduced due to sandstorms | |||
| 8 | Visibility reduced due to swarms of insects | |||
| 19 | Adverse weather condition - Precipitation | 19 | 0 | Unavailable |
| 1 | Heavy rain | |||
| 2 | Heavy snowfall | |||
| 3 | Soft hail | |||
| 26 | Slow vehicle | 26 | 0 | Unavailable |
| 1 | Slow moving maintenance vehicle | |||
| 2 | Vehicles slowing to look at accident | |||
| 3 | Abnormal load | |||
| 4 | Abnormal wide load | |||
| 5 | Convoy | |||
| 6 | Snowplough | |||
| 7 | De-icing | |||
| 8 | Salting vehicles | |||
| 27 | Dangerous end of queue | 27 | 0 | Unavailable |
| 1 | Sudden enf of queue | |||
| 2 | Queue over hill | |||
| 3 | Queue around bend | |||
| 4 | Queue in tunnel | |||
| 91 | Vehicle breakdown | 91 | 0 | Unavailable |
| 1 | Lack of fuel | |||
| 2 | Lack of battery | |||
| 3 | Engine problem | |||
| 4 | Transmission problem | |||
| 5 | Engine cooling problem | |||
| 6 | Braking system problem | |||
| 7 | Steering problem | |||
| 8 | Tyre puncture | |||
| 92 | Post crash | 92 | 0 | Unavailable |
| 1 | Accident without e-Call triggered | |||
| 2 | Accident with e-Call manually triggered | |||
| 3 | Accident with e-Call automatically triggered | |||
| 4 | Accident with e-Call triggered without possible access to a cell network | |||
| 93 | Human problem | 93 | 0 | Unavailable |
| 1 | Glycaemia problem | |||
| 2 | Heart problem | |||
| 94 | Stationary vehicle | 94 | 0 | Unavailable |
| 1 | Human Problem | |||
| 2 | Vehicle breakdown | |||
| 3 | Post crash | |||
| 4 | Public transport stop | |||
| 5 | Carrying dangerous goods | |||
| 95 | Emergency vehicle approaching | 95 | 0 | Unavailable |
| 1 | Emergency vehicle approaching | |||
| 2 | Prioritized vehicle approaching | |||
| 96 | Hazardous location indication - Dangerous Curve | 96 | 0 | Unavailable |
| 1 | Dangerous left turn curve | |||
| 2 | Dangerous right turn curve | |||
| 3 | Multiple curves starting with unknown turning direction | |||
| 4 | Multiple curves starting with a left turn | |||
| 5 | Multiple curves starting with a right turn | |||
| 97 | Collision risk | 97 | 0 | Unavailable |
| 1 | Longitudinal collision risk | |||
| 2 | Crossing collision risk | |||
| 3 | Lateral collision risk | |||
| 4 | Collision risk involving a vulnerable road user | |||
| 98 | Signal violation | 98 | 0 | Unavailable |
| 1 | Stop sign violation | |||
| 2 | Traffic light violation | |||
| 3 | Turning regulation violation | |||
| 99 | Dangerous situation | 99 | 0 | Unavailable |
| 1 | Emergency electronic brake lights | |||
| 2 | Pre-crash system activated | |||
| 3 | ESP (Electronic Stability Program) activated | |||
| 4 | ABS (Anti-lock braking system) activated | |||
| 5 | AEB (Automatic Emergency Braking) activated | |||
| 6 | Brake warning activated | |||
| 7 | Collision risk warning activated |
Reference: https://www.etsi.org/deliver/etsi_ts/102800_102899/10286901/01.03.01_60/ts_10286901v010301p.pdf
Mobilidata solution for updating DENM messages
The ETSI DENM standard is somewhat confusing according to management of messages with a longer duration as 24 hours, which needs some special attention.
The Main cause of the issue is the fact that the standard does not allow a duration value for longer than those 24 hours and that all relevant time values seem to change at the same moment to the same content.
Justified by the limitation in duration of the DENM message to a maximum of 86400 seconds according to the ETSI standard, the Mobilidata application will update the messages posted on the MI-bus, which are still valid, by updating the fields detectionTime, referenceTime and validityDuration according to the rules, named in the standards documents. For normal usage, the referenceTime is less important. If the interpreter of the message must determine the maximum lifetime of the message it must use the addition of detectionTime and validityDuration.
The actionId field will remain unchanged as well as the other content of the message.
Referral to MI-bus posted messages, is to be done be using the actionId which is a constant during the lifetime of a DENM message.
The actionId code itself will be re-used after a cancellation message. But not immediately. If a cancellation is missed, earlier named check is sufficient for determination if it is an updated message or not.
| Action | Field | Set Value | Remarks |
|---|---|---|---|
| Create message | stationId | Constant1 | |
| actionId | Constant2 | ||
| detectionTime | Time1 | Detection time | |
| referenceTime | Time2 | Generation time (same as detection) | |
| validityDuration | Set to value | 0-86400 seconds | |
| termination | Not present | ||
| Update message | stationId | Constant1 | |
| actionId | Constant2 | ||
| detectionTime | Time3 | Update detection time | |
| referenceTime | Time3 | Update generation time | |
| validityDuration | Set to value | 0-86400 seconds | |
| termination | Not present | ||
| Cancel message | stationId | Constant1 | |
| actionId | Constant2 | ||
| termination | isCancellation(0) |
Time2 is mostly the same time as Time1, because of the insecure detectionTime for most events.
After update, the times are anyway equal, due to the standards given [ETSI TS 103 831 V2.1.1 (2022-11), B13 & B39].
Reference to specifications
According ETSI EN 302 237-3 V1.3.1:
The parameter referenceTime is the identifier for DENM update referring to a specific actionID. The referenceTime represents the time at which a DENM is generated by the DEN basic service, after receiving the application request. For each DENM update, the referenceTime shall be updated and the value shall be greater than the referenceTime value of the previous DENM update for the same actionID.
The actionID shall remain unchanged for DENM update, as long as the stationID of the originating ITS-S remains unchanged.The actionID shall remain unchanged when the validityDuration is updated, as long as the stationID of the originating ITS-S remains unchanged.
According ETSI TS 103 831 V2.1.1:
The parameter referenceTime is the identifier for DENM update referring to a specific actionId. The referenceTime represents the time at which a DENM is generated by the DEN basic service, after receiving the application request. For each DENM update, the referenceTime shall be updated and the value shall be greater than the referenceTime value of the previous DENM update for the same actionId.
The actionId shall remain unchanged for DENM update, as long as the stationId of the originating ITS-S remains unchanged.The actionId shall remain unchanged when the validityDuration is updated, as long as the stationId of the originating ITS-S remains unchanged.
DetectionTime definition is:
detectionTime is the second component of ManagementContainer and represents the time at which the event is detected. For the DENM repetition, detectionTime shall remain unchanged.
For the DENM update, this component shall be the time at which the event update is detected.For the DENM termination, this component shall be the time at which the termination of the event is detected.
ReferenceTime definition is:
referenceTime is the third component of ManagementContainer and represents the time at which a new DENM, an update DENM or a cancellation DENM is generated.
The standard validity value is defined as:
defaultValidity is the default value for DENM validity duration used for DENM protocol operation, as specified in clause 8.2.1.5. Clause 8.2.1.5: The timer T_O_Validity is the time that indicates the end of the DENM validity for the originating ITS-S protocol operation. Its expiration time shall be set to: - the offset of the validityDuration starting from the detectionTime, if the validityDuration is provided by the application; - the default offset of 600 s starting from the detectionTime, if the validityDuration is not provided by the application.