Introduction
A simple Vehicle Signal Specification (VSS) signal to MQTT proxy, using the KUKSA.val databroker as VSS source. The MQTT payloads are protobufs loosely derived from the update entries in the KUKSA.val gRPC VAL API. See protos/vss-notification.proto
for the protobuf definition.
Support
Support options include: - #automotive IRC channel on Libera.chat, see https://libera.chat/guides/ for guidance on using IRC. - AGL Vehicle to Cloud (V2C) expert group (EG) Zoom call every second Monday, see calendar at https://lists.automotivelinux.org/g/agl-dev-community/calendar. - AGL community mailing list, see https://lists.automotivelinux.org/g/agl-dev-community for subscription information and archives.
Building
Required dependencies: - g++ - protoc - grpc - grpc++ - glib 2.0 - openssl - libmosquitto - yaml-cpp
The development packages for the above need to be available in your build environment.
Compilation also requires the KUKSA.val VAL API protobuf definitions. To get them, clone the KUKSA.val repository from https://github.com/eclipse/kuksa.val.git. A build can then be configued by running:
meson -Dprotos=<kuksa.val/proto> [build directory]
where kuksa.val
is the path to your clone of the kuksa.val repository, and build directory
is an optional build directory that meson will configure (default is build
in the current directory). The proxy can then be built by running ninja
in the created build directory.
Configuration
The proxy requires a configuation file in YAML syntax. If run with no arguments, it will look for it in /etc/agl-vss-proxy/config.yaml
. Alternatively, a different file can be specified on the command-line with the --config-file
option. Specifying signals to proxy is the only mandatory requirement in the configuration file. An example of a minimal configuration file is:
signals:
- Vehicle.Speed
This will result in attempting to use local instances of the KUKSA.val databroker and a MQTT broker with no TLS and default values for the payload client ID, MQTT ID, and MQTT topic. See src/config.yaml.example
for a full example configuration file that documents the various options.
Source Provenance
Some source code from previous AGL projects has been adapted for the proxy, it is documented below to clarify copyrights.
From agl-service-hvac (https://git.automotivelinux.org/apps/agl-service-hvac) as of commit 6ebb449: - meson.build - meson_options.txt - src/meson.build - src/main.cpp - src/HvacService. -> src/ProxyService. - src/KuksaClient. - src/KuksaConfig.
From agl-telematics-demo-recorder (https://git.automotivelinux.org/apps/agl-telematics-demo-recorder) as of commit a69d2e0b: - app/mqttclient. -> src/MqttClient.
TODOs
Planned features that are currently not implemented: - Signal rate-limiting with frequency/period option - Per-signal conditions to control when signals are proxied. - Capturing/snapshotting signal state when a condition is triggered.
Other potential features: - MQTT v5 message properties support - Pre-shared key support - VIS client support to support other VSS server implementations