2026-09-09 host verification

COMMAND: C:\bachelorthesis_micrOBU\.venv\Scripts\python.exe -W ignore::DeprecationWarning -m unittest discover -s C:\bachelorthesis_micrOBU\implementation\v2x2map-0.3.0\bridge -p test_vam.py -v
test_all_truncations_and_trailing_data (test_vam.VamTests.test_all_truncations_and_trailing_data) ... ok
test_independent_asn1c_vectors (test_vam.VamTests.test_independent_asn1c_vectors) ... ok
test_malformed_never_falls_back_to_gn_position (test_vam.VamTests.test_malformed_never_falls_back_to_gn_position) ... ok
test_optional_containers_and_json (test_vam.VamTests.test_optional_containers_and_json) ... ok
test_secured_header_is_not_guessed (test_vam.VamTests.test_secured_header_is_not_guessed) ... ok
test_transport_and_map_fields (test_vam.VamTests.test_transport_and_map_fields) ... ok
test_unavailable_coordinates_and_real_zero (test_vam.VamTests.test_unavailable_coordinates_and_real_zero) ... ok

----------------------------------------------------------------------
Ran 7 tests in 0.709s

OK

COMMAND: node C:\bachelorthesis_micrOBU\implementation\v2x2map-0.3.0\bridge\tests\dashboard-vam.cjs
PASS: VAM map updates, popups, unavailable fields, escaping, filters and log

COMMAND: C:\bachelorthesis_micrOBU\.venv\Scripts\python.exe C:\bachelorthesis_micrOBU\implementation\v2x2map-0.3.0\bridge\its_g5_bridge.py --help
usage: its_g5_bridge.py [-h] [--port PORT] [--list-ports] [--baud BAUD]
                        [--node-id NODE_ID] [--broker URL] [--no-mqtt]
                        [--reset-on-start] [--reconnect-delay RECONNECT_DELAY]
                        [--exit-after EXIT_AFTER]
                        [--dashboard-port DASHBOARD_PORT] [--open-browser]
                        [--no-browser] [--pcap-out PCAP_OUT] [--verbose]

ITS-G5 USB->MQTT bridge  (V2X2MAP)
Config: C:\bachelorthesis_micrOBU\implementation\v2x2map-0.3.0\bridge\config\v2x2map.cfg

options:
  -h, --help            show this help message and exit
  --port PORT           serial port (e.g. COM7); omit to auto-detect or use
                        config
  --list-ports          print available serial ports with VID/PID and exit
  --baud BAUD
  --node-id NODE_ID     device ID, e.g. V2X2MAP:d2cf13ed6293 (read from config
                        if omitted)
  --broker URL          MQTT broker URL (mqtts://host:port or
                        mqtt://host:port). Can be specified multiple times.
                        Default from config or
                        mqtts://cits1.opentrafficmap.org:8883
  --no-mqtt             parse only, don't publish (for testing)
  --reset-on-start      pulse RTS to reboot the device on first connect
  --reconnect-delay RECONNECT_DELAY
                        seconds to wait before reconnecting after USB
                        disconnect (0 = exit)
  --exit-after EXIT_AFTER
                        exit after N seconds (0 = run forever)
  --dashboard-port DASHBOARD_PORT
                        local HTTP port for the live dashboard (0 to disable)
  --open-browser        open the dashboard URL in the default browser on start
                        (default: on when running as .exe)
  --no-browser          suppress automatic browser opening
  --pcap-out PCAP_OUT   write all captured frames to a .pcap file
                        (DLT_IEEE802_11)
  --verbose, -v

PASS: Python/spec syntax, bridge CLI, Debian archive includes decoder, schemas, requirements and notices. Debian install and Windows EXE build not run.

2026-09-14 host verification (signed VAMs)

Change: bridge/secured.py unwraps TS 103 097 signed GeoNetworking packets (no signature
verification); its_g5_bridge.decode_itsg5_full continues on the unsecured payload and reports
security = {psid, hash, signer, signer_id, generation_time_ms, verified: false}.

COMMAND: C:\bachelorthesis_micrOBU\.venv\Scripts\python.exe -W ignore::DeprecationWarning -m unittest -v test_vam
Ran 8 tests ... OK (new: test_signed_vam_is_unwrapped_but_not_verified, vector = frame 1 of
recordings/its5_20260914_202525.pcap, signer HashedId8 ba1862d0e89fe341 = the micrOBU's ticket)

COMMAND: node tests/dashboard-vam.cjs
PASS

Live: bridge on COM20 (V2X2MAP receiver firmware) with the micrOBU transmitting signed VAMs on
COM11: /events carries msg_type VAM, vam_status decoded, security.signer certificate/digest.
