{"componentChunkName":"component---src-templates-developers-js","path":"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/","result":{"data":{"childPages":{"edges":[{"node":{"fields":{"slug":"/en/developers/"},"frontmatter":{"title":"For developers","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/"},"frontmatter":{"title":"System architecture","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/api-registration/"},"frontmatter":{"title":"API portal and registration","order":-12,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/changes/"},"frontmatter":{"title":"Changes","order":-10,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/user-interfaces/"},"frontmatter":{"title":"User interfaces","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/deprecations/"},"frontmatter":{"title":"Deprecations","order":-11,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/docker-guide/"},"frontmatter":{"title":"Docker guide","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/"},"frontmatter":{"title":"APIs","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/"},"frontmatter":{"title":"Routing API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/2-routing-data-api/"},"frontmatter":{"title":"Routing data API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/4-map-api/"},"frontmatter":{"title":"Map API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/"},"frontmatter":{"title":"API architecture","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/6-api-faq/"},"frontmatter":{"title":"FAQ","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/"},"frontmatter":{"title":"Realtime APIs","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/"},"frontmatter":{"title":"Geocoding API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/7-terms-of-use/"},"frontmatter":{"title":"Terms of use","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/user-interfaces/1-digitransit-ui/"},"frontmatter":{"title":"Digitransit-ui","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/0-graphql/"},"frontmatter":{"title":"GraphQL","order":10,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/3-realtime-information/"},"frontmatter":{"title":"Real-time information","order":40,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/2-glossary/"},"frontmatter":{"title":"Glossary","order":30,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/canceled-trips/"},"frontmatter":{"title":"Canceled trips","order":80,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/disruption-info/"},"frontmatter":{"title":"Disruption info","order":70,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/4-translations/"},"frontmatter":{"title":"Translation","order":50,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/routes/"},"frontmatter":{"title":"Routes","order":100,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/stops/"},"frontmatter":{"title":"Stops","order":110,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/bicycles-scooters-cars/"},"frontmatter":{"title":"Bicycles, cars and e-scooters","order":60,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/itinerary-planning/"},"frontmatter":{"title":"Itinerary planning","order":90,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/1-routing-api/"},"frontmatter":{"title":"Routing API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/2-routing-data-api/"},"frontmatter":{"title":"Routing Data","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/4-map-api/"},"frontmatter":{"title":"Map API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/5-realtime-api/"},"frontmatter":{"title":"Real-time APIs","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/3-geocoding-api/"},"frontmatter":{"title":"Geocoding API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/1-graphiql/"},"frontmatter":{"title":"GraphiQL","order":20,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/4-map-api/background-map/"},"frontmatter":{"title":"Background map","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/1-getting-started/"},"frontmatter":{"title":"Getting started","order":10,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/address-search/"},"frontmatter":{"title":"Address search","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/autocomplete/"},"frontmatter":{"title":"Autocomplete","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/trip-updates/"},"frontmatter":{"title":"Trip updates","order":30,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/service-alerts/"},"frontmatter":{"title":"Service alerts","order":20,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/address-lookup/"},"frontmatter":{"title":"Address lookup","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/4-map-api/pois/"},"frontmatter":{"title":"Points of interest","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/"},"frontmatter":{"title":"Vehicle positions","order":40,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/3-geocoding-api/data-container/"},"frontmatter":{"title":"Data builder and container","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/3-geocoding-api/api/"},"frontmatter":{"title":"API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/"},"frontmatter":{"title":"High-frequency positioning","order":20,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/digitransit-mqtt/"},"frontmatter":{"title":"Digitransit MQTT broker","order":10,"redirect":null}}}]},"markdownRemark":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/"},"frontmatter":{"title":"High-frequency positioning","redirect":null,"toc":true,"description":{"info":"The open HFP API can be used to subscribe to vehicle movements in soft real time.","architecture":"https://raw.githubusercontent.com/HSLdevcom/digitransit-site/master/src/pages/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/architecture.xml"},"assets":null,"technologies":null,"docker":null},"html":"<p>Most of the vehicles in the HSL area should publish their status, including their position, once per second.\nThe devices of the end users, e.g. smartphones, may subscribe to receive the relevant messages based on their context, e.g. filtered on the mode of transport, the route ID, the geographical region etc.\nThe subscription scope is specified by the MQTT topic structure of the API.</p>\n<div class=\"custom-block alert alert-info\"><div class=\"custom-block-body\"><p>Vehicle positions are also available in GTFS-RT format, see <a href=\"https://hsldevcom.github.io/gtfs_rt/\">HSL GTFS-RT API documentation</a></p></div></div>\n<h2 id=\"quickstart\" style=\"position:relative;\"><a href=\"#quickstart\" aria-label=\"quickstart permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Quickstart</h2>\n<p>Try this example to get an quick idea of what kind of data is available from the API:</p>\n<ol>\n<li>Install <a href=\"https://github.com/mqttjs/MQTT.js\">MQTT.js</a> command line tools:</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> <span class=\"token parameter variable\">-g</span> mqtt</code></pre></div>\n<ol start=\"2\">\n<li>Use MQTT.js to subscribe to HFP messages:</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-v</span> <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/#\"</span></code></pre></div>\n<!-- (or try [this example](https://repl.it/@digitransit/VehiclePositionsMQTTrawJSON) if you don't want to install anything) -->\n<h2 id=\"api-endpoints\" style=\"position:relative;\"><a href=\"#api-endpoints\" aria-label=\"api endpoints permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>API endpoints</h2>\n<table>\n<thead>\n<tr>\n<th>URL</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">mqtts://mqtt.hsl.fi:8883/</code></td>\n<td>The bare MQTT protocol with TLS, lightweight.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">wss://mqtt.hsl.fi:443/</code></td>\n<td>MQTT over WebSockets with TLS, for browsers.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">mqtt://mqtt.hsl.fi:1883/</code></td>\n<td>The bare MQTT protocol without TLS, lightweight. Prefer the port 8883 to respect the locational privacy of your users.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">ws://mqtt.hsl.fi:1883/</code></td>\n<td>MQTT over WebSockets without TLS. Prefer the port 443 to respect the locational privacy of your users.</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"message-format\" style=\"position:relative;\"><a href=\"#message-format\" aria-label=\"message format permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Message format</h2>\n<p>From a client's point of view, every MQTT message has two parts, the topic and the binary payload.</p>\n<h3 id=\"the-topic\" style=\"position:relative;\"><a href=\"#the-topic\" aria-label=\"the topic permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The topic</h3>\n<p>The topic looks similar to a file path with levels separated by <code class=\"language-text\">/</code>.\nWhen subscribing, all values for a level or several levels may be specified with a wildcard.\n<code class=\"language-text\">+</code> refers to all values for one level, <code class=\"language-text\">#</code> refers to all values of the parent level and its child levels.\nSee the advanced examples <a href=\"#examples\">further below</a> on how to tailor the subscription to your needs.</p>\n<p>Here is an example of an HFP message topic:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">/hfp/v2/journey/ongoing/vp/bus/0055/01216/1069/1/Malmi/07:20/1130106/2/60;24/19/73/44</code></pre></div>\n<p>It can be split into these parts:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">/&lt;prefix>/&lt;version>/&lt;journey_type>/&lt;temporal_type>/&lt;event_type>/&lt;transport_mode>/&lt;operator_id>/&lt;vehicle_number>/&lt;route_id>/&lt;direction_id>/&lt;headsign>/&lt;start_time>/&lt;next_stop>/&lt;geohash_level>/&lt;geohash>/&lt;sid>/#</code></pre></div>\n<p>Topic levels up to <code class=\"language-text\">vehicle_number</code> are present in all types of topics and levels after <code class=\"language-text\">vehicle_number</code> are only present with vehicle journey position messages (i.e. when <code class=\"language-text\">journey_type</code> is <code class=\"language-text\">journey</code>).</p>\n<p><strong>Note:</strong> For future proofing your subscription, add wildcard <code class=\"language-text\">#</code> to the end of the topic. We may change the HFP topic structure by adding new filters to the end without updating the version number.</p>\n<table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">prefix</code></td>\n<td><code class=\"language-text\">/hfp/</code> is the root of the topic tree.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">version</code></td>\n<td><code class=\"language-text\">v2</code> is the current version of the HFP topic and the payload format.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">journey_type</code></td>\n<td>The type of the journey. Either <code class=\"language-text\">journey</code>, <code class=\"language-text\">deadrun</code> or <code class=\"language-text\">signoff</code>.<br/><code class=\"language-text\">journey</code> refers to a vehicle that is running on a specific public transport journey.<br/><code class=\"language-text\">deadrun</code> refers to a vehicle that is not on any specific route, but instead coming from a depot, for example.<br/><code class=\"language-text\">signoff</code> is used when the vehicle PC is shut down.<br/><br/><strong>Note:</strong> <code class=\"language-text\">deadrun</code> and <code class=\"language-text\">signoff</code> messages are only available for authorized users.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">temporal_type</code></td>\n<td>The status of the journey, <code class=\"language-text\">ongoing</code> or <code class=\"language-text\">upcoming</code>.<br/><code class=\"language-text\">ongoing</code> describes a journey that is currently in operation.<br/><code class=\"language-text\">upcoming</code> refers to the next expected journey of the same vehicle. <code class=\"language-text\">upcoming</code> messages are broadcasted shortly before the start of the next journey. One use of <code class=\"language-text\">upcoming</code> is to show the relevant vehicle to your users even before the driver has signed on to the journey that your users are interested in.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">event_type</code></td>\n<td>One of <code class=\"language-text\">vp</code>, <code class=\"language-text\">due</code>, <code class=\"language-text\">arr</code>, <code class=\"language-text\">dep</code>, <code class=\"language-text\">ars</code>, <code class=\"language-text\">pde</code>, <code class=\"language-text\">pas</code>, <code class=\"language-text\">wait</code>, <code class=\"language-text\">doo</code>, <code class=\"language-text\">doc</code>, <code class=\"language-text\">tlr</code>, <code class=\"language-text\">tla</code>, <code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code>, <code class=\"language-text\">vja</code>, <code class=\"language-text\">vjout</code>.<br/>See descriptions for these values <a href=\"#event-types\">below</a>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">transport_mode</code></td>\n<td>The type of the vehicle. One of <code class=\"language-text\">bus</code>, <code class=\"language-text\">tram</code>, <code class=\"language-text\">train</code>, <code class=\"language-text\">ferry</code>, <code class=\"language-text\">metro</code>, <code class=\"language-text\">ubus</code> (used by <a href=\"https://www.hsl.fi/en/timetables-and-routes/u-line-services\">U-line buses</a> and other vehicles with limited realtime information) or <code class=\"language-text\">robot</code> (used by robot buses).</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">operator_id</code></td>\n<td>The unique ID of the operator that <em>owns</em> the vehicle. See the list of operators below.<br/><strong>Note:</strong> Operator ids must be exactly 4 digits long in the topic filter, so prefix them with zeroes if needed (e.g. <code class=\"language-text\">80</code> → <code class=\"language-text\">0080</code>)</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">vehicle_number</code></td>\n<td>The vehicle number that can be seen painted on the side of the vehicle, often next to the front door. Different operators may use overlapping vehicle numbers. <code class=\"language-text\">operator_id/vehicle_number</code> uniquely identifies the vehicle.<br/><strong>Note:</strong> Vehicle numbers must be exactly 5 digits long in the topic filter, so prefix them with zeroes if needed.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">route_id</code></td>\n<td>The ID of the route the vehicle is running on. This matches <code class=\"language-text\">route_id</code> in GTFS (field <code class=\"language-text\">gtfsId</code> of <code class=\"language-text\">Route</code> in <a href=\"../../1-routing-api/\">the routing API</a>).</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">direction_id</code></td>\n<td>The line direction of the trip, either <code class=\"language-text\">1</code> or <code class=\"language-text\">2</code>.<br/><strong>Note:</strong> This does not exactly match <code class=\"language-text\">direction_id</code> in GTFS or the routing API.<br/>Value <code class=\"language-text\">1</code> here is same as <code class=\"language-text\">0</code> in GTFS and the Routing API.<br/>Value <code class=\"language-text\">2</code> here is same as <code class=\"language-text\">1</code> in GTFS and the Routing API.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">headsign</code></td>\n<td>The destination name, e.g. <code class=\"language-text\">Aviapolis</code>. <strong>Note:</strong> This does NOT match <code class=\"language-text\">trip_headsign</code> in GTFS exactly.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">start_time</code></td>\n<td>The scheduled start time of the trip, i.e. the scheduled departure time from the first stop of the trip. The format follows <code class=\"language-text\">HH:mm</code> in 24-hour local time, not the 30-hour overlapping operating days present in GTFS.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">next_stop</code></td>\n<td>The ID of next stop or station. Updated on each departure from or passing of a stop. <code class=\"language-text\">EOL</code> (end of line) after final stop and empty if the vehicle is leaving HSL area. Matches <code class=\"language-text\">stop_id</code> in GTFS (value of <code class=\"language-text\">gtfsId</code> field, without <code class=\"language-text\">HSL:</code> prefix, in <strong>Stop</strong> type in the routing API).</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">geohash_level</code></td>\n<td>The geohash level represents the magnitude of change in the GPS coordinates since the previous message from the same vehicle. More exactly, <code class=\"language-text\">geohash_level</code> is equal to the minimum of the digit positions of the most significant changed digit in <a href=\"#payload\">the latitude and the longitude</a> since the previous message. For example, if the previous message has value (60.12345, 25.12345) for (<code class=\"language-text\">lat</code>, <code class=\"language-text\">long</code>) and the current message has value (60.12499, 25.12388), then the third digit of the fractional part is the most significant changed digit and <code class=\"language-text\">geohash_level</code> has value <code class=\"language-text\">3</code>.<br/>However, <code class=\"language-text\">geohash_level</code> value <code class=\"language-text\">0</code> is overloaded. <code class=\"language-text\">geohash_level</code> is <code class=\"language-text\">0</code> if:<ul><li>the integer part of the latitude or the longitude has changed,</li><li>the previous or the current message has <code class=\"language-text\">null</code> for coordinates or</li><li>the non-location parts of the topic have changed, e.g. when a bus departs from a stop.</li></ul>By subscribing to specific geohash levels, you can reduce the amount of traffic into the client. By only subscribing to level <code class=\"language-text\">0</code> the client gets the most important status changes. The rough percentages of messages with a specific <code class=\"language-text\">geohash_level</code> value out of all <code class=\"language-text\">ongoing</code> messages are:<ul><li><code class=\"language-text\">0</code>: 3 %</li><li><code class=\"language-text\">1</code>: 0.09 %</li><li><code class=\"language-text\">2</code>: 0.9 %</li><li><code class=\"language-text\">3</code>: 8 %</li><li><code class=\"language-text\">4</code>: 43 %</li><li><code class=\"language-text\">5</code>: 44 %</li></ul></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">geohash</code></td>\n<td>The latitude and the longitude of the vehicle. The digits of the integer parts are separated into their own level in the format <code class=\"language-text\">&lt;lat>;&lt;long></code>, e.g. <code class=\"language-text\">60;24</code>. The digits of the fractional parts are split and interleaved into a custom format so that e.g. (60.123, 24.789) becomes <code class=\"language-text\">60;24/17/28/39</code>. This format enables subscribing to specific geographic boundaries easily.<br/>If the coordinates are missing, <code class=\"language-text\">geohash_level</code> and <code class=\"language-text\">geohash</code> have the concatenated value <code class=\"language-text\">0////</code>.<br/>This geohash scheme is greatly simplified from <a href=\"https://en.wikipedia.org/wiki/Geohash\">the original geohash scheme</a></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">sid</code></td>\n<td>Junction ID, corresponds to <code class=\"language-text\">sid</code> in the payload. Only available for <code class=\"language-text\">tlr</code> and <code class=\"language-text\">tla</code> event types, empty for other event types.</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"event-types\" style=\"position:relative;\"><a href=\"#event-types\" aria-label=\"event types permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Event types</h3>\n<p>The most notable change in HFP 2.0 is introduction of different types of messages. Whereas HFP 1.0 had only vehicle position messages, in HFP 2.0 vehicles also send messages from different types of event happening during the journey (for example, arriving to a stop etc.). </p>\n<p><strong>Note:</strong> events are not available for metros (<code class=\"language-text\">metro</code>), U-line buses (<code class=\"language-text\">ubus</code>), robot buses (<code class=\"language-text\">robot</code>) and ferries (<code class=\"language-text\">ferry</code>).</p>\n<p>List of possible events:</p>\n<table>\n<thead>\n<tr>\n<th>Event type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">vp</code></td>\n<td>Vehicle position</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">due</code></td>\n<td>Vehicle will soon arrive to a stop</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">arr</code></td>\n<td>Vehicle arrives inside of a stop radius</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">dep</code></td>\n<td>Vehicle departs from a stop and leaves the stop radius</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">ars</code></td>\n<td>Vehicle has arrived to a stop</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">pde</code></td>\n<td>Vehicle is ready to depart from a stop</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">pas</code></td>\n<td>Vehicle passes through a stop without stopping</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">wait</code></td>\n<td>Vehicle is waiting at a stop</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">doo</code></td>\n<td>Doors of the vehicle are opened</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">doc</code></td>\n<td>Doors of the vehicle are closed</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlr</code></td>\n<td>Vehicle is requesting traffic light priority</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tla</code></td>\n<td>Vehicle receives a response to traffic light priority request</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">da</code></td>\n<td>Driver signs in to the vehicle</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">dout</code></td>\n<td>Driver signs out of the vehicle</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">ba</code></td>\n<td>Driver selects the block that the vehicle will run</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">bout</code></td>\n<td>Driver signs out from the selected block (usually from a depot)</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">vja</code>  </td>\n<td>Vehicle signs in to a service journey (i.e. a single public transport journey from location A to location B, also known as trip)</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">vjout</code></td>\n<td>Vehicle signs off from a service journey, after reaching the final stop</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"the-payload\" style=\"position:relative;\"><a href=\"#the-payload\" aria-label=\"the payload permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The payload</h3>\n<p>The payload is an UTF-8 encoded, compact JSON string. The JSON contains a single key-value pair where the key is equivalent to the event type of the message and the value is an object describing the event. Fields of the event object depend on event type.</p>\n<p>Here is an example of a vehicle position message (with <code class=\"language-text\">VP</code> key):</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"VP\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"desi\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"551\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"dir\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"oper\"</span><span class=\"token operator\">:</span> <span class=\"token number\">12</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"veh\"</span><span class=\"token operator\">:</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"tst\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2019-05-23T14:15:16.000Z\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"tsi\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1416308975</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"spd\"</span><span class=\"token operator\">:</span> <span class=\"token number\">12.5</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"hdg\"</span><span class=\"token operator\">:</span> <span class=\"token number\">354</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lat\"</span><span class=\"token operator\">:</span> <span class=\"token number\">24.9435</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"long\"</span><span class=\"token operator\">:</span> <span class=\"token number\">60.1967</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"acc\"</span><span class=\"token operator\">:</span> <span class=\"token number\">-12.34</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"dl\"</span><span class=\"token operator\">:</span> <span class=\"token number\">600</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"odo\"</span><span class=\"token operator\">:</span> <span class=\"token number\">45.12</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"drst\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"oday\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2019-05-23\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"jrn\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"line\"</span><span class=\"token operator\">:</span> <span class=\"token number\">264</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"13:40\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"loc\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"GPS\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"stop\"</span><span class=\"token operator\">:</span> <span class=\"token null keyword\">null</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"route\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2551\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"occu\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The fields are described below:</p>\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th><em>Not</em> available on events</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">desi</code></td>\n<td>String</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td> Route number visible to passengers.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">dir</code></td>\n<td>String</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td> Route direction of the trip. After type conversion matches <code class=\"language-text\">direction_id</code> in GTFS and the topic. Either <code class=\"language-text\">\"1\"</code> or <code class=\"language-text\">\"2\"</code>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">oper</code></td>\n<td>Integer</td>\n<td></td>\n<td> Unique ID of the operator <em>running</em> the trip (i.e. this value can be different than the operator ID in the topic, for example if the service has been subcontracted to another operator).<br/>The unique ID does not have prefix zeroes here.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">veh</code></td>\n<td>Integer</td>\n<td></td>\n<td> Vehicle number that can be seen painted on the side of the vehicle, often next to the front door. Different operators may use overlapping vehicle numbers. Matches <code class=\"language-text\">vehicle_number</code> in the topic except without the prefix zeroes.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tst</code></td>\n<td>String</td>\n<td></td>\n<td>UTC timestamp with millisecond precision from the vehicle in ISO 8601 format (<code class=\"language-text\">yyyy-MM-dd'T'HH:mm:ss.SSSZ</code>).</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tsi</code></td>\n<td>Integer</td>\n<td></td>\n<td>Unix time in seconds from the vehicle.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">spd</code></td>\n<td>Floating-point number</td>\n<td></td>\n<td> Speed of the vehicle, in meters per second (m/s).</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">hdg</code></td>\n<td>Integer</td>\n<td></td>\n<td> Heading of the vehicle, in degrees (⁰) starting clockwise from geographic north. Valid values are on the closed interval [0, 360].</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">lat</code></td>\n<td>Floating-point number</td>\n<td></td>\n<td>WGS 84 latitude in degrees.<br/><code class=\"language-text\">null</code> if location is unavailable.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">long</code></td>\n<td>Floating-point number</td>\n<td></td>\n<td>WGS 84 longitude in degrees.<br/><code class=\"language-text\">null</code> if location is unavailable.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">acc</code></td>\n<td>Floating-point number</td>\n<td></td>\n<td> Acceleration (m/s^2), calculated from the speed on this and the previous message. Negative values indicate that the speed of the vehicle is decreasing.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">dl</code></td>\n<td>Integer</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td>Offset from the scheduled timetable in seconds (s). Negative values indicate lagging behind the schedule, positive values running ahead of schedule.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">odo</code></td>\n<td>Integer</td>\n<td></td>\n<td>The odometer reading in meters (m) since the start of the trip. Currently the values not very reliable.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">drst</code></td>\n<td>Integer</td>\n<td></td>\n<td>Door status.<br/><code class=\"language-text\">0</code> if all the doors are closed.<br/><code class=\"language-text\">1</code> if any of the doors are open.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">oday</code></td>\n<td>String</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code></td>\n<td>Operating day of the trip. The exact time when an operating day ends depends on the route. For most routes, the operating day ends at 4:30 AM on the next day. In that case, for example, the final moment of the operating day <code class=\"language-text\">\"2018-04-05\"</code> would be at 2018-04-06T04:30 local time.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">jrn</code></td>\n<td>Integer</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td>Internal journey descriptor, not meant to be useful for external use.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">line</code></td>\n<td>Integer</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td> Internal line descriptor, not meant to be useful for external use.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">start</code></td>\n<td>String</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td>Scheduled start time of the trip, i.e. the scheduled departure time from the first stop of the trip. The format follows <code class=\"language-text\">HH:mm</code> in 24-hour local time, not the 30-hour overlapping operating days present in GTFS. Matches <code class=\"language-text\">start_time</code> in the topic.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">loc</code></td>\n<td>String</td>\n<td></td>\n<td>Location source, either <code class=\"language-text\">GPS</code>, <code class=\"language-text\">ODO</code>, <code class=\"language-text\">MAN</code>, <code class=\"language-text\">DR</code> or <code class=\"language-text\">N/A</code>. <ul><li><code class=\"language-text\">GPS</code> - location is received from GPS</li><li><code class=\"language-text\">ODO</code> - location is calculated based on odometer value</li><li><code class=\"language-text\">MAN</code> - location is specified manually</li><li><code class=\"language-text\">DR</code> - location is calculated using dead reckoning (used in tunnels and other locations without GPS signal)</li><li><code class=\"language-text\">N/A</code> - location is unavailable</li></ul></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">stop</code></td>\n<td> String</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td>ID of the stop related to the event (e.g. ID of the stop where the vehicle departed from in case of <code class=\"language-text\">dep</code> event or the stop where the vehicle currently is in case of <code class=\"language-text\">vp</code> event).<br/><code class=\"language-text\">null</code> if the event is not related to any stop.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">route</code></td>\n<td> String</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td>ID of the route the vehicle is currently running on. Matches <code class=\"language-text\">route_id</code> in the topic.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">occu</code></td>\n<td>Integer</td>\n<td><code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code></td>\n<td>Integer describing passenger occupancy level of the vehicle. Valid values are on interval <code class=\"language-text\">[0, 100]</code>.<br /><br />Currently passenger occupancy level is only available for Suomenlinna ferries as a proof-of-concept. The value will be available shortly after departure when the ferry operator has registered passenger count for the journey.<br /><br />For other vehicles, currently only values used are <code class=\"language-text\">0</code> <em>(= vehicle has space and is accepting passengers)</em> and <code class=\"language-text\">100</code> <em>(= vehicle is full and might not accept passengers)</em></td>\n</tr>\n<tr>\n<td> <code class=\"language-text\">seq</code></td>\n<td>Integer</td>\n<td></td>\n<td>Sequence number of the unit when the journey is operated with a vehicle that consists of multiple units (e.g. metros, trains). Sequence number starts from 1.<br /><strong>Note:</strong> <code class=\"language-text\">seq</code> is currently only available for metros.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">label</code></td>\n<td> String</td>\n<td></td>\n<td>User visible label that helps to identify the vehicle. Currently available only for Suomenlinna ferries with values being vessel names.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">ttarr</code></td>\n<td> String</td>\n<td><code class=\"language-text\">vp</code>, <code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code>, <code class=\"language-text\">vja</code>, <code class=\"language-text\">vjout</code></td>\n<td>UTC timestamp of scheduled arrival time to the stop</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">ttdep</code></td>\n<td> String</td>\n<td><code class=\"language-text\">vp</code>, <code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code>, <code class=\"language-text\">vja</code>, <code class=\"language-text\">vjout</code></td>\n<td>UTC timestamp of scheduled departure time from the stop</td>\n</tr>\n<tr>\n<td> <code class=\"language-text\">dr-type</code></td>\n<td>Integer</td>\n<td>Other than <code class=\"language-text\">da</code>, <code class=\"language-text\">dout</code>, <code class=\"language-text\">ba</code>, <code class=\"language-text\">bout</code>, <code class=\"language-text\">vja</code>, <code class=\"language-text\">vjout</code></td>\n<td> Type of the driver, either <code class=\"language-text\">0</code> or <code class=\"language-text\">1</code>. <ul><li><code class=\"language-text\">0</code> = service technician</li><li><code class=\"language-text\">1</code> = normal driver</li></ul></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-requestid</code></td>\n<td> Integer</td>\n<td>Other than <code class=\"language-text\">tlr</code>, <code class=\"language-text\">tla</code></td>\n<td>Traffic light priority request ID. Valid values are on interval <code class=\"language-text\">[0, 255]</code>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-requesttype</code></td>\n<td>String</td>\n<td>Other than <code class=\"language-text\">tlr</code></td>\n<td>Traffic light priority request type, either <code class=\"language-text\">NORMAL</code>, <code class=\"language-text\">DOOR_CLOSE</code>, <code class=\"language-text\">DOOR_OPEN</code> or <code class=\"language-text\">ADVANCE</code>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-prioritylevel</code></td>\n<td>String</td>\n<td>Other than <code class=\"language-text\">tlr</code></td>\n<td>Priority level of a traffic light priority request. Either <code class=\"language-text\">normal</code>, <code class=\"language-text\">high</code> or <code class=\"language-text\">norequest</code>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-reason</code></td>\n<td> String</td>\n<td> Other than <code class=\"language-text\">tlr</code></td>\n<td>Reason for <em>not</em> sending a traffic light priority request. Either <code class=\"language-text\">GLOBAL</code>, <code class=\"language-text\">AHEAD</code>, <code class=\"language-text\">LINE</code> or <code class=\"language-text\">PRIOEXEP</code>.</td>\n</tr>\n<tr>\n<td> <code class=\"language-text\">tlp-att-seq</code></td>\n<td> Integer</td>\n<td>Other than <code class=\"language-text\">tlr</code></td>\n<td>Traffic light priority request attempt sequence number</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-decision</code></td>\n<td>String</td>\n<td>Other than <code class=\"language-text\">tla</code></td>\n<td>Response for traffic light priority request. Either <code class=\"language-text\">ACK</code> or <code class=\"language-text\">NAK</code>.</td>\n</tr>\n</tbody>\n</table>\n<p>Also the following fields are available on traffic light priority request events (event type <code class=\"language-text\">tlr</code>), but they probably have no use for 3rd party users: </p>\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">sid</code></td>\n<td>Integer</td>\n<td>Junction ID</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">signal-groupid</code></td>\n<td>Integer</td>\n<td>Signal group (a group of traffic lights at a junction) ID</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-signalgroupnbr</code></td>\n<td>Integer</td>\n<td>ID of the specific traffic light in a signal group. Possibly negative</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-line-configid</code></td>\n<td>Integer</td>\n<td>ID of the line configuration in DOI</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-point-configid</code></td>\n<td> Integer</td>\n<td>Point configuration ID</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-frequency</code></td>\n<td>Integer</td>\n<td>Frequency used for traffic light prority request</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">tlp-protocol</code></td>\n<td>String</td>\n<td>Protocol used for traffic light priority request. Either <code class=\"language-text\">MQTT</code> or <code class=\"language-text\">KAR-MQTT</code></td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"operators\" style=\"position:relative;\"><a href=\"#operators\" aria-label=\"operators permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Operators</h3>\n<p>The numerical values for the different transit operators are listed below:</p>\n<table>\n<thead>\n<tr>\n<th><code class=\"language-text\">oper</code></th>\n<th>Operator name</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">6</code></td>\n<td>Oy Pohjolan Liikenne Ab<sup>2</sup></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">12</code></td>\n<td>Koiviston Auto Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">17</code></td>\n<td>Tammelundin Liikenne Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">18</code></td>\n<td>Oy Pohjolan Liikenne Ab</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">20</code></td>\n<td>Bus Travel Åbergin Linja Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">21</code></td>\n<td>Bus Travel Oy Reissu Ruoti</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">22</code></td>\n<td>Nobina Finland Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">30</code></td>\n<td>Savonlinja Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">36</code></td>\n<td>Nurmijärven Linja Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">40</code></td>\n<td>HKL-Raitioliikenne</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">47</code></td>\n<td>Taksikuljetus Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">50</code></td>\n<td>HKL-Metroliikenne</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">51</code></td>\n<td>Korsisaari Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">54</code></td>\n<td>V-S Bussipalvelut Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">58</code></td>\n<td>Koillisen Liikennepalvelut Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">59</code></td>\n<td>Tilausliikenne Nikkanen Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">60</code></td>\n<td>Suomenlinnan Liikenne Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">64</code></td>\n<td>Taksikuljetus Harri Vuolle Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">89</code></td>\n<td>Metropolia</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">90</code></td>\n<td>VR Oy</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">130</code></td>\n<td>Matkahuolto<sup>1</sup></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">195</code></td>\n<td>Siuntio<sup>1</sup></td>\n</tr>\n</tbody>\n</table>\n<p><sup>1</sup>Multiple smaller operators operate under this operator ID<br />\n<sup>2</sup>This value is present only in the <code class=\"language-text\">oper</code> field of the payload. Operator <code class=\"language-text\">6</code> is the same as <code class=\"language-text\">18</code>.</p>\n<h2 id=\"examples\" style=\"position:relative;\"><a href=\"#examples\" aria-label=\"examples permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Examples</h2>\n<h3 id=\"topics\" style=\"position:relative;\"><a href=\"#topics\" aria-label=\"topics permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Topics</h3>\n<p>The HFP topic format forms a tree.\nBy combining wildcards with several topic filters in one MQTT <code class=\"language-text\">SUBSCRIBE</code> packet you can carve quite interesting subsets of the tree to serve different use cases.\nAs the MQTT broker handles the resolving of the topic filters, handling messages for complicated subscriptions does not have inherent overhead in the client compared to simple subscriptions.\nGo hog wild.</p>\n<h3 id=\"command-line\" style=\"position:relative;\"><a href=\"#command-line\" aria-label=\"command line permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Command line</h3>\n<p>Below are sample subscriptions utilizing <a href=\"https://github.com/mqttjs/MQTT.js\">MQTT.js</a> command line tools.<br>\nMQTT.js command line tools can be installed with:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> <span class=\"token parameter variable\">-g</span> mqtt</code></pre></div>\n<p>If you insist on using <a href=\"https://mosquitto.org/\">mosquitto</a>, try this for TLS access:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mosquitto_sub <span class=\"token parameter variable\">--capath</span> <span class=\"token string\">\"/etc/ssl/certs/\"</span> <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/#\"</span></code></pre></div>\n<h4 id=\"a-situational-overview\" style=\"position:relative;\"><a href=\"#a-situational-overview\" aria-label=\"a situational overview permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A situational overview</h4>\n<p>To get just the most significant vehicle position updates, use:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/vp/+/+/+/+/+/+/+/+/0/#\"</span></code></pre></div>\n<h4 id=\"a-route-in-one-direction\" style=\"position:relative;\"><a href=\"#a-route-in-one-direction\" aria-label=\"a route in one direction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A route in one direction</h4>\n<p>To subscribe to all vehicle position messages from vehicles currently on the route 551 (<code class=\"language-text\">route_short_name</code> in GTFS) going in direction 1, subscribe to the corresponding <code class=\"language-text\">route_id</code> 2551:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/vp/+/+/+/2551/1/#\"</span></code></pre></div>\n<h4 id=\"all-trams\" style=\"position:relative;\"><a href=\"#all-trams\" aria-label=\"all trams permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>All trams</h4>\n<p>Subscribe to all vehicle position messages from trams with:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/vp/tram/#\"</span></code></pre></div>\n<h4 id=\"a-certain-trip\" style=\"position:relative;\"><a href=\"#a-certain-trip\" aria-label=\"a certain trip permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A certain trip</h4>\n<p>Subscribe to vehicle position messages of a certain trip, even slightly before the driver has signed onto the trip:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/+/vp/+/+/+/1069/1/+/07:20/#\"</span></code></pre></div>\n<p>Or if your users would find it confusing to see a vehicle going in the wrong direction, subscribe to the <code class=\"language-text\">ongoing</code> messages only:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/vp/+/+/+/1069/1/+/07:20/#\"</span></code></pre></div>\n<h4 id=\"all-vehicles-arriving-to-a-certain-stop\" style=\"position:relative;\"><a href=\"#all-vehicles-arriving-to-a-certain-stop\" aria-label=\"all vehicles arriving to a certain stop permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>All vehicles arriving to a certain stop</h4>\n<p>To subscribe to all vehicles arriving to a certain stop, use:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/arr/+/+/+/+/+/+/+/1293140/#\"</span></code></pre></div>\n<p><strong>Note:</strong> depending on the current traffic situation, you might have to wait a while to receive data</p>\n<h4 id=\"door-status-of-a-certain-vehicle\" style=\"position:relative;\"><a href=\"#door-status-of-a-certain-vehicle\" aria-label=\"door status of a certain vehicle permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Door status of a certain vehicle</h4>\n<p>To subscribe to door status of a certain vehicle, use:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/doo/+/0012/01312/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/doc/+/0012/01312/#\"</span></code></pre></div>\n<p><strong>Note:</strong> you will have to change operator ID and vehicle number in the topic if vehicle <code class=\"language-text\">0012/01312</code> is not running currently.</p>\n<h4 id=\"a-bounding-box\" style=\"position:relative;\"><a href=\"#a-bounding-box\" aria-label=\"a bounding box permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A bounding box</h4>\n<ul>\n<li>See <a href=\"https://gist.github.com/mjaakko/f148be987734fdb9f7f8e71458516571\">this example</a> on how to generate topic filters for a bounding box</li>\n</ul>\n<p>Let's assume that you wish to subscribe to all action inside the following <a href=\"http://geojson.io\">GeoJSON</a> Polygon:</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Feature\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"geometry\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Polygon\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"coordinates\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">24.9578905105</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60.1836538254</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">24.9646711349</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60.1836538254</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">24.9646711349</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60.1894146967</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">24.9578905105</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60.1894146967</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">[</span><span class=\"token number\">24.9578905105</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60.1836538254</span><span class=\"token punctuation\">]</span>\n      <span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The box bounded by the latitude interval [60.18, 60.19[ and the longitude interval [24.95, 24.97[ corresponds with the following HFP subscription:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/#\"</span></code></pre></div>\n<p>For the precision of one more digit of latitude and longitude, one would need 56 topic filters for the bounding box:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">mqtt subscribe <span class=\"token parameter variable\">-h</span> mqtt.hsl.fi <span class=\"token parameter variable\">-l</span> mqtts <span class=\"token parameter variable\">-p</span> <span class=\"token number\">8883</span> <span class=\"token parameter variable\">-v</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/37/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/38/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/39/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/30/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/31/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/32/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/33/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/34/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/47/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/48/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/49/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/40/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/41/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/42/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/43/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/44/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/57/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/58/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/59/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/50/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/51/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/52/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/53/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/54/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/67/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/68/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/69/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/60/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/61/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/62/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/63/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/64/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/77/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/78/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/79/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/70/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/71/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/72/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/73/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/74/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/87/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/88/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/89/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/80/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/81/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/82/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/83/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/84/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/97/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/98/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/85/99/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/90/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/91/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/92/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/93/#\"</span> <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">-t</span> <span class=\"token string\">\"/hfp/v2/journey/ongoing/+/+/+/+/+/+/+/+/+/+/60;24/19/86/94/#\"</span></code></pre></div>\n<p>There is no need to restrict yourself to just one rectangle like above, though.</p>\n<p>For example, you could try to generate an HFP subscription for all <code class=\"language-text\">ongoing</code> vehicles in the minimal geographic area encompassing the Kontula borough with the precision of two digits in the fractional part.</p>\n<h3 id=\"querying-a-trip-corresponding-to-a-vehicle-position\" style=\"position:relative;\"><a href=\"#querying-a-trip-corresponding-to-a-vehicle-position\" aria-label=\"querying a trip corresponding to a vehicle position permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Querying a trip corresponding to a vehicle position</h3>\n<p>The Routing API can be used to query a trip correspoding to a vehicle position message.</p>\n<ul>\n<li>Query type <strong>fuzzyTrip</strong> can be used to query a trip without its id, if other details uniquely identifying the trip are available</li>\n</ul>\n<p>For example, from the following vehicle position message</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"VP\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"desi\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"550\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"dir\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"1\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"oper\"</span><span class=\"token operator\">:</span><span class=\"token number\">12</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"veh\"</span><span class=\"token operator\">:</span><span class=\"token number\">1306</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"tst\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"2019-06-28T09:49:01.457Z\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"tsi\"</span><span class=\"token operator\">:</span><span class=\"token number\">1561715341</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"spd\"</span><span class=\"token operator\">:</span><span class=\"token number\">12.29</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"hdg\"</span><span class=\"token operator\">:</span><span class=\"token number\">47</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lat\"</span><span class=\"token operator\">:</span><span class=\"token number\">60.182376</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"long\"</span><span class=\"token operator\">:</span><span class=\"token number\">24.825781</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"acc\"</span><span class=\"token operator\">:</span><span class=\"token number\">0.44</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"dl\"</span><span class=\"token operator\">:</span><span class=\"token number\">-2</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"odo\"</span><span class=\"token operator\">:</span><span class=\"token number\">24627</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"drst\"</span><span class=\"token operator\">:</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"oday\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"2019-06-28\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"jrn\"</span><span class=\"token operator\">:</span><span class=\"token number\">99</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"line\"</span><span class=\"token operator\">:</span><span class=\"token number\">261</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"11:57\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"loc\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"GPS\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"stop\"</span><span class=\"token operator\">:</span><span class=\"token null keyword\">null</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"route\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"2550\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"occu\"</span><span class=\"token operator\">:</span><span class=\"token number\">0</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>it is possible to parse:</p>\n<ul>\n<li>Route id from the message: <em>2550</em></li>\n<li>Direction id from the topic: <em>1</em></li>\n<li>Departure time from the message: <em>11:57</em></li>\n<li>Departure date from the message: <em>2019-06-28</em></li>\n</ul>\n<p><strong>Note:</strong></p>\n<ol>\n<li>\n<p>Vehicle position messages use different direction id than the Routing API</p>\n<ul>\n<li>Direction id <em>1</em> in a vehicle position is same as direction id <em>0</em> in the Routing API</li>\n<li>Direction id <em>2</em> in a vehicle position is same as direction id <em>1</em> in the Routing API</li>\n</ul>\n</li>\n<li>\n<p>Departure time must be in seconds</p>\n<ul>\n<li>e.g. <em>11:57</em> = <code class=\"language-text\">11 * 60 * 60 + 57 * 60</code> = <em>43020</em></li>\n<li>\n<p>If the date in fields <code class=\"language-text\">oday</code> and <code class=\"language-text\">tst</code> is not the same and the departure time (<code class=\"language-text\">start</code>) is earlier than the time in <code class=\"language-text\">tst</code>, add 86400 seconds to departure time</p>\n<ul>\n<li>This is due to differences in time formats, when vehicles which have departed after midnight have the previous date as operating day</li>\n<li>\n<p>e.g.</p>\n<ul>\n<li><code class=\"language-text\">tst = 2018-08-16T00:15:00.836Z</code> <em>(note that this is in UTC time)</em></li>\n<li><code class=\"language-text\">oday = 2018-08-15</code></li>\n<li><code class=\"language-text\">start = 03:10</code></li>\n<li>→ <em>03:10</em> = <code class=\"language-text\">3 * 60 * 60 + 10 * 60 + 86400</code> = <em>97800</em></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<p>Due to a bug in the vehicle position API, some route ids don't match the route id in the routing API</p>\n<ul>\n<li>In this case, <strong>fuzzyTrip</strong> query returns <code class=\"language-text\">null</code></li>\n</ul>\n</li>\n</ol>\n<p>For example, the following query checks if the vehicle, which sent the vehicle position message above, is wheelchair accessible:</p>\n<div class=\"gatsby-highlight\" data-language=\"graphql\"><pre class=\"language-graphql\"><code class=\"language-graphql\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property-query\">fuzzyTrip</span><span class=\"token punctuation\">(</span><span class=\"token attr-name\">route</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"HSL:2550\"</span><span class=\"token punctuation\">,</span> <span class=\"token attr-name\">direction</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token attr-name\">date</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"2019-06-28\"</span><span class=\"token punctuation\">,</span> <span class=\"token attr-name\">time</span><span class=\"token punctuation\">:</span> <span class=\"token number\">43020</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token object\">route</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">shortName</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token property\">wheelchairAccessible</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<!-- ## Demos\n\n- [MQTT demo map](https://vehiclepositionsmapdemo--digitransit.repl.co/), displays vehicle positions from a specific topic on a map _[(source code)](https://repl.it/@digitransit/VehiclePositionsMapDemo)_ -->\n<h2 id=\"further-reading\" style=\"position:relative;\"><a href=\"#further-reading\" aria-label=\"further reading permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Further reading</h2>\n<ul>\n<li>The <a href=\"https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt\">MQTT Essentials</a> series introduces the MQTT protocol in more detail.</li>\n<li><a href=\"https://github.com/PasiSalenius/LightMQTT\">LightMQTT</a> is an MQTT client library written in Swift by one of the developers in the HSL developer community.</li>\n</ul>","tableOfContents":"<ul>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#quickstart\">Quickstart</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#api-endpoints\">API endpoints</a></li>\n<li>\n<p><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#message-format\">Message format</a></p>\n<ul>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#the-topic\">The topic</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#event-types\">Event types</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#the-payload\">The payload</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#operators\">Operators</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#examples\">Examples</a></p>\n<ul>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#topics\">Topics</a></li>\n<li>\n<p><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#command-line\">Command line</a></p>\n<ul>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#a-situational-overview\">A situational overview</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#a-route-in-one-direction\">A route in one direction</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#all-trams\">All trams</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#a-certain-trip\">A certain trip</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#all-vehicles-arriving-to-a-certain-stop\">All vehicles arriving to a certain stop</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#door-status-of-a-certain-vehicle\">Door status of a certain vehicle</a></li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#a-bounding-box\">A bounding box</a></li>\n</ul>\n</li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#querying-a-trip-corresponding-to-a-vehicle-position\">Querying a trip corresponding to a vehicle position</a></li>\n</ul>\n</li>\n<li><a href=\"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/#further-reading\">Further reading</a></li>\n</ul>","excerpt":"Most of the vehicles in the HSL area should publish their status, including their position, once per second.\nThe devices of the end users, e.g. smartphones, may subscribe to receive the relevant…"}},"pageContext":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/"}},"staticQueryHashes":["3675773199","4050193485"]}