Written by Edward Wright for use with the Elite: Dangerous Market Connector (EDMC) by Jonathan Harris and the Elite Dangerous Community Developers.
This plugin takes the dashboard status and/or player journal updates from Elite: Dangerous as ingested by EDMC and distributes them via the MQTT connectivity protocol. Its primary use case is to provide in-game status and feedback to custom cockpits and controls.
Want to build a custom flight stick and throttle with led feedback that accurately reflects the state of your hardpoints, landing gear, and cargo scoop? How about a set of backlit controls that all change colour when you toggle between combat and analysis cockpit modes? Maybe just a little LCD display that shows you how many jumps are left on your current route? EDMC-Telemetry can provide the necessary status to drive this feedback through MQTT.
If you're interested in building your own controls, there are MQTT client libraries available for just about every major programming language and platform. Of particular interest are the Arduino Client, CircuitPython Client, Raspberry Pi via Python Client, and even Node-Red.
For a detailed list of the status and events that are available, please see the Elite Dangerous Player Journal documentation.
-
First and foremost, this plugin requires EDMC.
As of version 0.3.0, EDMC version 5.0.0 or higher is required.
-
The plugin needs somewhere to send the data, which means a correctly installed and configured MQTT broker is required. I personally use - and develop EDMC-Telemetry using - the Eclipse Mosquitto™ broker installed on a Raspberry Pi
EDMC-Telemetry publishes messages using MQTT v3.1.1 through raw TCP. WebSockets connections are not supported.
- On EDMC's
Plugins
settings tab press theOpen
button. This reveals theplugins
folder where EDMC looks for plugins. - Download the latest release of this plugin.
- Open the
.zip
archive that you downloaded and move theTelemetry
folder contained inside into theplugins
folder.
You will need to re-start EDMC for it to notice the new plugin.
After installing the plugin, it can be configured using the "Telemetry" tab in EDMC's "settings" dialog. The following options are available in two separate sub-tabs, Connection and Data:
[Required Settings]
-
Broker Address: IP Address / hostname of MQTT broker. (default=127.0.0.1)
-
Port: TCP/IP port used by MQTT broker (default=1883)
-
QoS: MQTT QoS setting (0=at most once, 1=at least once, 2=exactly once, default=0)
-
Keepalive: MQTT keepalive in seconds (default=60)
-
Client ID: MQTT client ID used when connecting to the broker. If you have multiple instances of EDMC-Telemetry connecting to the same broker, this value will have to be unique for each instance. (default=EDMCTelemetryClient)
[Authentication]
-
Username: Username for authentication with MQTT broker. (leave blank if not required)
-
Password: Password for authentication with MQTT broker. (leave blank if not required)
[Encryption]
-
Encrypted Connection: Enable this option to use SSL/TLS encryption for the connection to the MQTT broker. Enabling this option likely requires the port setting to be changed - 8883 is the standard for encrypted MQTT connections, but your broker may be configured differently.
-
Skip Certificate Verification: Enable this option to disable verification of the server hostname in the server certificate. This can be useful for testing, and when using a dedicated broker on your local network, but it makes using encryption virtually pointless, as it makes it impossible to guarantee that the broker you are connecting to is not a malicious 3rd party device impersonating your actual broker. This option should absolutely not be used for connections to brokers outside of your own local network.
-
Server Certificate (CA): The absolute (full) path to the Certificate Authority certificate file for the server (broker). If your broker certificate is signed by a CA that is already trusted by your Operating System (i.e. Let's Encrypt, Verisign, etc.) then you should be able to leave this blank.
-
Client Certificate: The absolute (full) path to the PEM encoded client certificate. Only required if using TLS-based authentication.
-
Client Key: The absolute (full) path to the PEM encoded client private key. Only required if using TLS-based authentication.
-
Root Topic: Root topic for all MQTT messages from EDMC-Telemetry. You can include multiple topic levels here, so something like
Telemetry/CMDR1
is valid if needed. (default=Telemetry) -
Convert all topics to lowercase: If you don't like capital letters in your MQTT topics, enable this option. (default=unchecked)
-
Publish Dashboard:
Use the checkbox to enable/disable publishing of dashboard status and events. The associated drop-down menu allows selection of
Raw
orProcessed
telemetry streams.In
Raw
mode the JSON data received from the game will be published as-is to theTelemetry/Dashboard
topic.In
Processed
mode the data is broken down and published into specific topics, i.e.Telemetry/Dashboard/FireGroup
,Telemetry/Dashboard/GuiFocus
,Telemetry/Dashboard/Flags
and so on.Pips
information is further broken down intoTelemetry/Dashboard/Pips/Eng
,Wep
andSys
.Fuel
shows up asTelemetry/Dashboard/Fuel/Main
andReservoir
. Note that all dashboard topics are only published when their associated data changes.(default=checked, Processed)
-
Publish Journal:
Use the checkbox to enable/disable publishing of journal events. The associated drop-down menu allows selection of
Raw
orProcessed
telemetry streams.In
Raw
mode, the JSON data received from the game will be published as-is to theTelemetry/Journal
topic.In
Processed
mode, data from journal entries is published to individual topics based on theEvent
key in each entry's JSON data, i.e.Telemetry/Journal/Docked
,Telemetry/Journal/FSDJump
, and so on.(default=checked, Processed)
-
Publish Current System/Station: Use the checkbox to enable/disable publishing of EDMC's internally-tracked current system and station. These will be published to
Telemetry/Location/System
andTelemetry/Location/Station
. (default=checked) -
Publish EDMC State Tracking: Use the checkbox to enable/disable publishing of EDMC's internal
state
toTelemetry/Location/State
. Note that this generates an almost continuous stream of very large MQTT messages which may bog down your MQTT setup - enabling this option is generally unnecessary and not recommended. (default=unchecked)
Two topics are provided by EDMC-Telemetry to help determine the current state of the telemetry plugin as well as the Elite Dangerous game state.
-
Telemetry/FeedActive:
True
when the MQTT connection to the broker is active,False
otherwise. This topic is published with theretain
flag set to True, and is also specified as the Last Will and Testament for the MQTT client, so it should always be available on the broker and reflect the state of the connection. -
Telemetry/GameRunning:
True
when EDMC believes Elite Dangerous is running,False
otherwise.
All of EDMC-Telemetry's configuration settings are stored in the settings.json
file located in the same folder as the plugin. (This file gets generated with default settings the first time you run EDMC after installing the plugin.) If you want to customize the MQTT topics that EDMC-Telemetry publishes to, you can do so by editing this file.
The default configuration looks like this:
{
"version": "0.4.0",
"broker": "127.0.0.1",
"port": 1883,
"keepalive": 60,
"qos": 0,
"username": "",
"password": "",
"client_id": "EDMCTelemetryPlugin",
"encryption": false,
"ca_certs": "",
"certfile": "",
"keyfile": "",
"tls_insecure": false,
"dashboard": true,
"dashboard_format": "Processed",
"journal": true,
"journal_format": "Processed",
"location": true,
"state": false,
"lowercase_topics": false,
"topics": {
"root": "Telemetry",
"gamerunning": "GameRunning",
"feedactive": "FeedActive",
"dashboard": "Dashboard",
"journal": "Journal",
"location": "Location",
"state": "State",
"system": "System",
"station": "Station",
"pips": "Pips",
"sys": "Sys",
"eng": "Eng",
"wep": "Wep",
"fuel": "Fuel",
"fuelreservoir": "Reservoir",
"fuelmain": "Main"
}
}
MQTT topics can be modified by changing the corresponding entry in the topics
section. If you wanted to shorten the Dashboard
topic, you could do so by modifying the corresponding line in the file to "dashboard": "db",
, which would result in all dashboard topics being published to Telemetry/db
. You can freely adjust the topics in the default configuration file, just make sure that you:
-
Only modify the value for the desired topic. (i.e. the part after the colon!)
-
Don't remove any of the lines that exist in the default configuration - the plugin needs these, and will crash without them.
-
Avoid doing silly things like specifying the same topic for multiple items. This will technically work, but likely won't be very useful.
-
Remember to restart EDMC after making any changes. The JSON configuration is only loaded once, when EDMC starts.
-
Don't mess with the other (not topic-related) settings. Everything else is configurable via the EDMC settings UI, and modifying them here to values that the plugin isn't expecting will just prevent it from running.
If you happen to mess up the configuration file and can't figure out how to fix it, just delete or rename it. A new, default file will be generated the next time you start EDMC.
In addition to the default topics that are created, you can add any other topic you like here in the same "original_topic": "desired_topic",
format, and EDMC-Telemetry will replace any instance of original_topic
with desired_topic
. If you want to use a custom topic for journal FighterDestroyed
events, you could add a line like "fighterdestroyed": "BigBadaBoom",
, and all of those events will get published to Telemetry/Journal/BigBadaBoom
. (assuming, of course, that you haven't also messed with your root
and journal
topics.)
Note that topic replacement lookups are not case-sensitive. In the previous example, anything coming from the game as FighterDestroyed
, FIGHTERdestroyed
, FiGhTeRdEsTrOyEd
, and similar would all get published to BigBadaBoom
. In order for your topics to get replaced correctly, make sure that the original_topic
part of the line is all lowercase, regardless of how the journal documentation describes the event. Incoming topics all get converted to lowercase before comparing them to items in this replacement list.
I welcome any comments, suggestions, or criticism (of the constructive nature) that will allow me to improve this plugin.
Copyright © 2021 Edward Wright.
Licensed under the GNU Public License (GPL) version 3.