You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This branch contains a collection of fixes and documentation updates
required for the initial public release.
**Bug Fixes**
- Require Python 3.13+ across all `pyproject.toml` manifests to resolve
a `SIGKILL` crash caused by `wasmtime>=43` being incompatible with
Python 3.9
- Fix MQTT topic patterns in Python and Node loopback, speed monitor,
and vehicle examples to match the correct broker topic structure for
private/public messages
- Fix identity artifact field names in Node examples (`device_id` →
`deviceId`, `expiration_time` → `expirationTime`) for consistency with
the API
- Add `type=float` to `--lat`/`--lon` CLI arguments in Python examples
to prevent string comparison errors at runtime
**Project / Build**
- Bump version to `0.3.0` across all manifests (`VERSION`,
`CMakeLists.txt`, `pyproject.toml`, `package.json` files)
- Rename npm and Python workspace packages from `etx-starter-kit` to
`etx-sample-client`
- Add `uninstall-js` Makefile target hooked into `install-js` and
`purge`
- Add `j2735codec/package.json` and `package-lock.json`; update root
lock files
- Remove stale `.python-version` pin (`3.9`); update `uv.lock` to
reflect Python 3.13 constraint and wasmtime 43.0.0
- Update `.gitignore`: replace `certs/` with `registrations/`, add
`.claude/`
**Documentation**
- Fix all GitHub URLs from `5GRealityLab/etx-starter-kit` to
`Verizon/EdgeTransportationExchange_SampleClient`
- Update cert output path references from `certs/` to `registrations/`
across all READMEs and example run commands
- Fix typos, remove emoji from headings, and improve markdown formatting
consistency across root, `etx/`, and example READMEs
- Add usage hints clarifying that speed monitor and vehicle examples
each require a separate registration profile
**Note**: The release links above are not valid. Please see release page for proper links to to use. You can also download the files from the release page and install locally as well.
72
75
73
-
**For more advance users and contributors**, it is possible to install these packages directly from the source tree as well. The instructions [can be found here](/j2735codec/README.md).
74
-
76
+
**For more advance users and contributors**, it is possible to install these packages directly from the source tree as well. The instructions [can be found here](/j2735codec/README.md).
75
77
76
78
## Version Management (For Contributors Only)
77
79
@@ -83,5 +85,6 @@ To propagate a version change from the root `VERSION` file to all sub-manifests:
83
85
make sync-version
84
86
```
85
87
86
-
## ⚖️ License
88
+
## License
89
+
87
90
Licensed under the Apache License 2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE) for details.
The **Edge Transportation Exchange (ETX)** is a high-performance, mobile-network-integrated V2X (Vehicle-to-Everything) communication platform. By leveraging Verizon networks alongside low-latency Mobile Edge Compute (MEC), ETX enables near-real-time bidirectional data sharing between vehicles, vulnerable road users (pedestrians and cyclists), and intelligent infrastructure.
3
+
## Overview
4
+
5
+
The **Edge Transportation Exchange (ETX)** is a high-performance, mobile-network-integrated V2X (Vehicle-to-Everything) communication platform. By leveraging Verizon networks alongside low-latency Mobile Edge Compute (MEC), ETX enables near-real-time bidirectional data sharing between vehicles, vulnerable road users (pedestrians and cyclists), and intelligent infrastructure.
5
6
6
7
Unlike traditional V2X models that rely heavily on physical roadside units (RSUs), ETX uses a virtualized architecture and a sophisticated geospatial routing engine. This engine organizes the world into high-precision **Geohashes**, ensuring that messages—from safety-critical BSMs to traffic signal timings (SPaT)—are delivered only to participants within relevant proximity, maximizing system efficiency and reducing network noise.
7
8
8
-
## 🛠 Technical Specifications
9
+
## Technical Specifications
10
+
9
11
| Feature | Implementation |
10
12
| :--- | :--- |
11
13
|**Protocol**| MQTT 3.1.1 (v4) |
@@ -14,50 +16,55 @@ Unlike traditional V2X models that rely heavily on physical roadside units (RSUs
14
16
|**Payload Format**| J2735 UPER wrapped in Protobuf |
15
17
|**QoS Levels**| 0 (Preferred), 1 supported |
16
18
17
-
> **For more information and API specification please visit the [link here](https://thingspace.verizon.com/documentation/api-documentation.html#/http/specialized-apis/edge-transportation-exchange/mqtt-api).**
19
+
> **For more information and API specification please visit the [link here](https://thingspace.verizon.com/documentation/api-documentation.html#/http/specialized-apis/edge-transportation-exchange).**
18
20
19
-
## 🔄 How Message Routing Works
21
+
## How Message Routing Works
20
22
21
-
Georouting in the ETX ecosystem follows a highly structured "wrapper" pipeline to balance standardized V2X intelligence with high-speed delivery.
23
+
Georouting in the ETX ecosystem follows a highly structured "wrapper" pipeline to balance standardized V2X intelligence with high-speed delivery.
22
24
23
25
**Note: The encoding and wrapping mechanism (e.g. steps 1 and 2) is included in the language bindings.**
24
26
25
27
### 1. J2735 Encoding
28
+
26
29
The process begins with a J2735 message (such as a BSM), which is encoded into a compact, binary **UPER** format using the core C++/WASM codec.
27
30
28
31
### 2. Protobuf Wrapping
32
+
29
33
Because standard MQTT brokers are "location-blind," the raw binary is encapsulated within a **Protobuf wrapper (`GeoRoutedMsg`)**. This acts as a metadata envelope, attaching critical attributes:
-**Timestamp**: Creation time for latency tracking.
33
38
34
39
**Note: See below for how to generate these bindings yourself.**
35
40
36
41
### 3. MQTT Transport
42
+
37
43
The serialized Protobuf object is sent as the MQTT payload to a topic structured by the client's current Geohash (e.g., `vzimp/1/GeoRelevance/...`).
38
44
39
45
### 4. Spatial Delivery
46
+
40
47
The ETX broker parses the Geohash from the topic and the coordinates from the Protobuf header. It then "shuttles" the message to all relevant subscribers within a neighboring grid, ensuring the data reaches exactly who needs it based on physical proximity.
41
48
42
-
## 📡 Messaging Patterns
49
+
## Messaging Patterns
50
+
43
51
ETX supports four distinct communication patterns to meet diverse ITS requirements:
Copy file name to clipboardExpand all lines: etx/examples/node/README.md
+38-26Lines changed: 38 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,16 +10,14 @@ This version of the client sample has been tested against **v22.16.0**. It utili
10
10
11
11
### Prerequisite - Setup
12
12
13
-
The fastest way to get started is to download the packages from release. The latest release can be [found here](https://github.com/5GRealityLab/etx-starter-kit/releases/latest).
13
+
The fastest way to get started is to download the packages from release. The latest release can be [found here](https://github.com/Verizon/EdgeTransportationExchange_SampleClient/releases/latest).
14
14
15
15
The file to download will look like: `node-etx-sample-x.x.x.zip`, where x.x.x is the version fo the project.
@@ -71,22 +70,23 @@ The following command line arguments are supported by all examples in the next s
71
70
72
71
### 0. Registration Example
73
72
74
-
The registration example is a precursor to performing any other operations on ETX. This step retrieves a unique **Device ID** and the **mTLS certificates** (CA, Certificate, and Private Key) required to connect.
73
+
The registration example is a precursor to performing any other operations on ETX. This step retrieves a unique **Device ID** and the **mTLS certificates** (CA, Certificate, and Private Key) required to connect.
75
74
76
75
**IMPORTANT**: Each vendor ID has a fixed quota of device IDs. Always keep track of your registrations and deregister when finished.
77
76
78
77
#### How to Run
78
+
79
79
```bash
80
-
npm run registration -- --config config.json --cert-dir ./certs
80
+
npm run registration -- --config config.json --cert-dir ./registrations
81
81
```
82
82
83
-
**Output**: The above command generates a JSON "Identity Artifact" in the `./certs/` folder. This file contains everything needed to "re-hydrate" your identity in the following examples.
83
+
**Output**: The above command generates a JSON "Identity Artifact" in the `./registrations/` folder. This file contains everything needed to "re-hydrate" your identity in the following examples.
84
84
85
85
#### Supported Arguments
86
86
87
87
| Arg | Required | Default | Description |
88
88
| :--- | :--- | :--- | :--- |
89
-
| --cert-dir| False | ./cert/ | The local directory where security certificates and keys are generated after registration completes.|
89
+
| --cert-dir| False | ./cert/ | The local directory where security certificates and keys are generated after registration completes. |
90
90
| --config | False | config.json | The configuration file to use for registration. |
91
91
92
92
---
@@ -97,9 +97,10 @@ The deregistration example removes the registered device from ETX. Every vendor
97
97
98
98
#### How to Run
99
99
100
-
The command format to run this example (from the project root):
100
+
The command format to run this example (from the project root):
101
+
101
102
```bash
102
-
npm run deregistration -- --device-files ./certs/20260119_0101_f355703d.json
103
+
npm run deregistration -- --device-file ./registrations/20260119_0101_f355703d.json
103
104
```
104
105
105
106
#### Supported Arguments
@@ -110,7 +111,7 @@ npm run deregistration -- --device-files ./certs/20260119_0101_f355703d.json
110
111
111
112
---
112
113
113
-
### 2. Private Loopback Example
114
+
### 2. Private Loopback Example
114
115
115
116
A diagnostic tool to verify bidirectional private communication.
116
117
@@ -119,9 +120,11 @@ A diagnostic tool to verify bidirectional private communication.
119
120
3. Publishes a BSM to itself to verify the mTLS loop is closed.
120
121
121
122
#### How to Run
123
+
122
124
```bash
123
-
npm run loopback -- --device-file ./certs/20260119_0101_f355703d.json --count 5
125
+
npm run loopback -- --device-file ./registrations/20260119_0101_f355703d.json --count 5
1.**Geohashing**: Subscribes to regional topics by delimiting geohashes (e.g., `d/r/5/r/9/y`).
138
142
2.**Real-time Analytics**: Decodes BSMs from all vehicles in the neighborhood.
139
143
3.**Targeted Advisory**: If a vehicle exceeds the `--limit`, it sends a **TIM (Traveler Information Message)** warning directly to that specific vehicle's private topic.
140
144
145
+
**Hint**: Run the Vehicle Example with a separate registration to trigger the speeding alert. **Remember to use two different registration profiles! One for the monitor and one for the vehicle.**
146
+
141
147
#### How to Run
148
+
142
149
```bash
143
-
npm run speedmon -- --device-file ./certs/20260119_0101_f355703d.json --limit 25
150
+
npm run speedmon -- --device-file ./registrations/20260119_0101_f355703d.json --limit 25
| --device-file | True | - | The device file to use for ETX connection. |
151
158
| --lat | False | - | The default value is defined in the registration config file. |
152
-
| --lon | False | - | The default value is defined in the registraiton config file. |
159
+
| --lon | False | - | The default value is defined in the registration config file. |
153
160
| --limit | False | 25 | The speed limit in mph to send out warnings. |
154
161
155
162
---
156
163
157
164
### 4. Vehicle Example (OBU)
158
165
159
166
Simulates a mobile entity (On-Board Unit). It demonstrates the "Public Broadcast" pattern used in real-world V2X.
167
+
160
168
1.**Session Handshake**: Connects and retrieves a Session ID from `vzimp/1/ClientInfo`.
161
169
2.**Periodic Broadcast**: Runs a background thread to publish BSMs to the `GeoRelevance` topic at 1Hz.
162
170
3.**Regional Listening**: Subscribes to regional safety messages (TIM, SPaT, MAP).
163
171
172
+
**Hint**: Run this example with the Speed Monitor Example running at the same time to trigger the speeding alert. Make sure the speed value is above the speed limit configured in the monitoring application. **Remember to use two different registration profiles! One for the monitor and one for the vehicle.**
173
+
164
174
#### How to Run
175
+
165
176
```bash
166
-
npm run vehicle -- --device-file ./certs/20260119_0101_f355703d.json --speed 25
177
+
npm run vehicle -- --device-file ./registrations/20260119_0101_f355703d.json --speed 25
167
178
```
168
179
169
-
**Note**: You can try running both the speed monitor and vehicle example together to see when TIM messages are sent to warn the vehicle of speed limit violations. **Remember to use two different registration profiles! One for the monitor and one for the vehicle.**
170
-
171
180
#### Supported Arguments
172
181
173
182
| Arg | Required | Default | Description |
174
183
| :--- | :--- | :--- | :--- |
175
184
| --device-file | True | - | The device file to use for ETX connection. |
176
185
| --lat | False | - | The default value is defined in the registration config file. |
177
-
| --lon | False | - | The default value is defined in the registraiton config file. |
186
+
| --lon | False | - | The default value is defined in the registration config file. |
178
187
| --speed | False | 30 | The speed in which the vehicle is traveling at. |
188
+
179
189
---
180
190
181
191
### Install and Running From Source (For Project Contributors)
182
192
183
-
It is possible to run the examples directly from this project as well. Check the prequisites for the building the [language bindings here](/README.md#2-source-install).
193
+
It is possible to run the examples directly from this project as well.
194
+
195
+
**Note: Make sure that you satisfy the prerequisites for building the [language bindings](/j2735codec/README.md#source-installation) before building the node js examples.**
0 commit comments