From 322dfcbf577c1038d92c85559d00ed17ee9ad2ec Mon Sep 17 00:00:00 2001 From: Drew Johnston <31270488+drewjj@users.noreply.github.com> Date: Tue, 28 Jan 2025 17:20:59 -0700 Subject: [PATCH 1/3] Update jpo-utils submodule --- .gitmodules | 1 + jpo-utils | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 03482a82..a0ce9ce9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "jpo-utils"] path = jpo-utils url = https://github.com/usdot-jpo-ode/jpo-utils + branch = master \ No newline at end of file diff --git a/jpo-utils b/jpo-utils index 2c461202..8a9d9612 160000 --- a/jpo-utils +++ b/jpo-utils @@ -1 +1 @@ -Subproject commit 2c46120222e127d599663376134ab060d0e2587f +Subproject commit 8a9d96122bd33ddcff57880ed1e08ff9bdcf0aa1 From 968494cf9f9e5600cf74562ef4eab94efe629f55 Mon Sep 17 00:00:00 2001 From: Drew Johnston <31270488+drewjj@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:07:37 -0700 Subject: [PATCH 2/3] Updated the docker compose and sample env for running the project locally --- docker-compose.yml | 18 +++++- sample.env | 155 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 156 insertions(+), 17 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2e716d78..c419681b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,10 +61,24 @@ services: - "5555:5555/udp" - "6666:6666/udp" environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP:?error} + DOCKER_HOST_IP: ${DOCKER_HOST_IP} + ODE_KAFKA_BROKERS: ${DOCKER_HOST_IP}:9092 KAFKA_TYPE: ${KAFKA_TYPE} CONFLUENT_KEY: ${CONFLUENT_KEY} CONFLUENT_SECRET: ${CONFLUENT_SECRET} + DATA_SIGNING_ENABLED_RSU: ${DATA_SIGNING_ENABLED_RSU} + DATA_SIGNING_ENABLED_SDW: ${DATA_SIGNING_ENABLED_SDW} + DEFAULT_SNMP_PROTOCOL: ${DEFAULT_SNMP_PROTOCOL} + KAFKA_LINGER_MS: ${KAFKA_LINGER_MS} + KAFKA_ACKS: ${KAFKA_ACKS} + KAFKA_RETRIES: ${KAFKA_RETRIES} + KAFKA_BATCH_SIZE: ${KAFKA_BATCH_SIZE} + KAFKA_COMPRESSION_TYPE: ${KAFKA_COMPRESSION_TYPE} + KAFKA_KEY_SERIALIZER: ${KAFKA_KEY_SERIALIZER} + KAFKA_VALUE_SERIALIZER: ${KAFKA_VALUE_SERIALIZER} + KAFKA_PARTITIONER_CLASS: ${KAFKA_PARTITIONER_CLASS} + ODE_TIM_INGEST_MONITORING_ENABLED: ${ODE_TIM_INGEST_MONITORING_ENABLED} + ODE_TIM_INGEST_MONITORING_INTERVAL: ${ODE_TIM_INGEST_MONITORING_INTERVAL} depends_on: kafka: condition: service_healthy @@ -91,7 +105,7 @@ services: cpus: '1' memory: 2G environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP:?error} + DOCKER_HOST_IP: ${DOCKER_HOST_IP} KAFKA_TYPE: ${KAFKA_TYPE} CONFLUENT_KEY: ${CONFLUENT_KEY} CONFLUENT_SECRET: ${CONFLUENT_SECRET} diff --git a/sample.env b/sample.env index e3f05c7d..7d2c10c4 100644 --- a/sample.env +++ b/sample.env @@ -21,6 +21,7 @@ DOCKER_HOST_IP= # GitHub properties for pulling the latest version of the JPO-ODE at build time # NOTE: These variables are only required for building the geojson-converter image, not for running the image +MAVEN_GITHUB_TOKEN_NAME= MAVEN_GITHUB_TOKEN= MAVEN_GITHUB_ORG=usdot-jpo-ode @@ -29,12 +30,9 @@ RESTART_POLICY="no" # Available profiles: # - all -# - geojson_full -# - geojson_converter -# - ode -# - adm # - geojson_base # - geojson_converter +# - geojson_cc_base # - mongo_full # - mongo # - mongo_express @@ -50,24 +48,151 @@ RESTART_POLICY="no" # - kafka_connect # - kafka_connect # EXAMPLE: COMPOSE_PROFILES=kafka_connect_standalone,kafka_ui,mongo_express -COMPOSE_PROFILES=geojson_full,kafka,kafka_setup +COMPOSE_PROFILES=geojson_full,kafka,kafka_setup,kafka_ui -#################### -# Confluent Cloud Properties (for Confluent Cloud support) +# Feature geometry output mode +# Options are GEOJSON_ONLY or WKT, defaults to GEOJSON_ONLY if nothing is specified +# WKT mode will still generate geoJSON output +GEOMETRY_OUTPUT_MODE= + +######################### +# Kafka and Confluent Cloud Properties - START -# Set to "CONFLUENT" if broker is a Confluent Cloud broker +# The type of Kafka broker to connect to. If set to "CONFLUENT", the broker will be Confluent Cloud. Otherwise, it will be a local Kafka broker. KAFKA_TYPE= +KAFKA_LINGER_MS=1 +KAFKA_BOOTSTRAP_SERVERS=${DOCKER_HOST_IP}:9092 +KAFKA_LOG_RETENTION_HOURS=3 +KAFKA_LOG_RETENTION_BYTES=10737418240 # 10GB + +# Local Kafka broker properties - you can override these if you want, but the defaults should be fine for normal use +# The application will not boot if these environment variables are set to empty strings (e.g. KAFKA_BATCH_SIZE=) +KAFKA_COMPRESSION_TYPE="zstd" +KAFKA_BATCH_SIZE=16384 +KAFKA_ACKS="all" +KAFKA_RETRIES=0 +KAFKA_KEY_SERIALIZER="org.apache.kafka.common.serialization.StringSerializer" +KAFKA_VALUE_SERIALIZER="org.apache.kafka.common.serialization.StringSerializer" +KAFKA_PARTITIONER_CLASS="org.apache.kafka.clients.producer.internals.DefaultPartitioner" -# Set to actual Confluent Cloud access key and secret values for SASL authentication +# Variables for creating kafka topics: +KAFKA_TOPIC_PARTITIONS=1 +KAFKA_TOPIC_REPLICAS=1 +KAFKA_TOPIC_MIN_INSYNC_REPLICAS=1 +KAFKA_TOPIC_RETENTION_MS=300000 +KAFKA_TOPIC_DELETE_RETENTION_MS=3600000 +KAFKA_TOPIC_CREATE_ODE=true # Create topics for ODE +KAFKA_TOPIC_CREATE_GEOJSONCONVERTER=true # Create topics for GeoJSON Converter +KAFKA_TOPIC_CREATE_CONFLICTMONITOR=true # Create topics for Conflict Monitor +KAFKA_TOPIC_CREATE_DEDUPLICATOR=false # Create topics for Deduplicator +KAFKA_TOPIC_CREATE_MECDEPOSIT=false # Create topics for MecDeposit +# Relative path to the Kafka topic yaml configuration script, upper level directories are supported +# NOTE: This script is used to create kafka topics +KAFKA_TOPIC_CONFIG_RELATIVE_PATH="./jikkou/kafka-topics-values.yaml" + +# Set to Confluent Cloud access key and secret values for SASL authentication CONFLUENT_KEY= CONFLUENT_SECRET= -# Feature geometry output mode -# Options are GEOJSON_ONLY or WKT, defaults to GEOJSON_ONLY if nothing is specified -# WKT mode will still generate geoJSON output -GEOMETRY_OUTPUT_MODE= +# Kafka and Confluent Cloud Properties - END +######################### + +######################### +# JPO-ODE Specific Properties - START + +# These are optional +DATA_SIGNING_ENABLED_RSU= +DATA_SIGNING_ENABLED_SDW= +DEFAULT_SNMP_PROTOCOL= + +# ODE Monitoring +ODE_TIM_INGEST_MONITORING_ENABLED=false +# The interval is measured in seconds. 60 seconds is a sane default for local monitoring, but you may want to increase +# the interval to 3600 (1 hour) or more for production monitoring to reduce the noise in logs for healthy systems +ODE_TIM_INGEST_MONITORING_INTERVAL=60 + +# JPO-ODE Specific Properties - END +######################### + +######################### +# ACM Logging Properties - START -# ACM Logging ADM_LOG_TO_FILE=false ADM_LOG_TO_CONSOLE=true -ADM_LOG_LEVEL=INFO \ No newline at end of file +ADM_LOG_LEVEL=INFO + +# ACM Logging Properties - END +######################### + +######################### +# MongoDB Properties - START + +# NOTE: Must set a password for the container to start up properly +MONGO_IP=${DOCKER_HOST_IP} +MONGO_DB_NAME=CV + +# Generate a random string for the MongoDB keyfile using the following command: +# $ openssl rand -base64 32 +MONGO_DB_KEYFILE_STRING=replacethisstring + +MONGO_ADMIN_DB_USER=admin +MONGO_ADMIN_DB_PASS=replace_me + +MONGO_READ_WRITE_USER=ode +MONGO_READ_WRITE_PASS=replace_me + +MONGO_READ_USER=user +MONGO_READ_PASS=replace_me + +MONGO_EXPORTER_USERNAME=export +MONGO_EXPORTER_PASSWORD=replace_me + +MONGO_EXPRESS_USER=${MONGO_ADMIN_DB_USER} +MONGO_EXPRESS_PASS=${MONGO_ADMIN_DB_PASS} + +MONGO_PORT=27017 +MONGO_DATA_RETENTION_SECONDS=5184000 +MONGO_ASN_RETENTION_SECONDS=86400 + + +MONGO_DATABASE_STORAGE_COLLECTION_NAME=MongoStorage +MONGO_DATABASE_SIZE_GB=1000 +MONGO_DATABASE_SIZE_TARGET_PERCENT=0.8 +MONGO_DATABASE_DELETE_THRESHOLD_PERCENT=0.9 +MONGO_DATABASE_MAX_TTL_RETENTION_SECONDS=5184000 +MONGO_DATABASE_MIN_TTL_RETENTION_SECONDS=604800 +MONGO_DATABASE_COMPACTION_TRIGGER_PERCENT=MONGO_DATABASE_COMPACTION_TRIGGER_PERCENT +MONGO_ENABLE_STORAGE_RECORD=true +MONGO_ENABLE_DYNAMIC_TTL=true + + + +# Relative path to the MongoDB init script, upper level directories are supported +MONGO_SETUP_SCRIPT_RELATIVE_PATH="./mongo/setup_mongo.sh" +MONGO_INIT_REPLICAS_SCRIPT_RELATIVE_PATH="./mongo/init_replicas.js" +MONGO_CREATE_INDEXES_SCRIPT_RELATIVE_PATH="./mongo/create_indexes.js" +MONGO_MANAGE_VOLUMES_SCRIPT_RELATIVE_PATH="./mongo/manage_volume.js" + +# MongoDB Properties - END +######################### + +######################### +# Kafka Connect Properties - START + +# NOTE: Required variables: [MONGODB, KAFKA] +CONNECT_URL=http://${DOCKER_HOST_IP}:8083 +# Kafka connect log level +CONNECT_LOG_LEVEL=ERROR + +CONNECT_TASKS_MAX=1 # Number of concurrent tasks to configure on kafka connectors +CONNECT_CREATE_ODE=true # Create kafka connectors to MongoDB for ODE +CONNECT_CREATE_GEOJSONCONVERTER=true # Create kafka connectors to MongoDB for GeoJSON Converter +CONNECT_CREATE_CONFLICTMONITOR=true # Create kafka connectors to MongoDB for Conflict Monitor +CONNECT_CREATE_DEDUPLICATOR=false # Create kafka connectors to MongoDB for Deduplicator +CONNECT_CREATE_MECDEPOSIT=false # Create kafka connectors to MongoDB for MecDeposit +# Relative path to the Kafka Connector yaml configuration script, upper level directories are supported +# NOTE: This script is used to create kafka connectors +CONNECT_CONFIG_RELATIVE_PATH="./jikkou/kafka-connectors-values.yaml" + +# Kafka Connect - END +######################### \ No newline at end of file From fe7ea8b9217dd436b2b1776874bfd26b943a6a9a Mon Sep 17 00:00:00 2001 From: Drew Johnston <31270488+drewjj@users.noreply.github.com> Date: Wed, 29 Jan 2025 09:27:58 -0700 Subject: [PATCH 3/3] Update schemas and test examples with asn1 fields --- .../main/resources/schemas/bsm.schema.json | 3457 +++++++++-------- .../main/resources/schemas/map.schema.json | 9 +- .../main/resources/schemas/spat.schema.json | 9 +- .../src/test/resources/json/invalid.bsm.json | 3 +- .../src/test/resources/json/invalid.map.json | 1 + .../src/test/resources/json/invalid.spat.json | 1 + .../src/test/resources/json/invalid2.map.json | 1 + .../src/test/resources/json/valid.bsm.json | 1 + .../src/test/resources/json/valid.map.json | 1 + .../src/test/resources/json/valid.spat.json | 1 + 10 files changed, 1763 insertions(+), 1721 deletions(-) diff --git a/jpo-geojsonconverter/src/main/resources/schemas/bsm.schema.json b/jpo-geojsonconverter/src/main/resources/schemas/bsm.schema.json index b8e9f9a0..b5bc9edb 100644 --- a/jpo-geojsonconverter/src/main/resources/schemas/bsm.schema.json +++ b/jpo-geojsonconverter/src/main/resources/schemas/bsm.schema.json @@ -228,6 +228,12 @@ "recordId", "serialNumber" ] + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -241,7 +247,8 @@ "odeReceivedAt", "schemaVersion", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ] }, "payload": { @@ -456,1726 +463,13 @@ "items": { "oneOf": [ { - "type": "object", - "properties": { - "id": { - "type": "string", - "const": "VehicleSafetyExtensions" - }, - "value": { - "type": "object", - "properties": { - "events": { - "type": [ - "object", - "null" - ], - "properties": { - "eventABSactivated": { - "type": "boolean" - }, - "eventAirBagDeployment": { - "type": "boolean" - }, - "eventDisabledVehicle": { - "type": "boolean" - }, - "eventFlatTire": { - "type": "boolean" - }, - "eventHardBraking": { - "type": "boolean" - }, - "eventHazardLights": { - "type": "boolean" - }, - "eventHazardousMaterials": { - "type": "boolean" - }, - "eventLightsChanged": { - "type": "boolean" - }, - "eventReserved1": { - "type": "boolean" - }, - "eventStabilityControlactivated": { - "type": "boolean" - }, - "eventStopLineViolation": { - "type": "boolean" - }, - "eventTractionControlLoss": { - "type": "boolean" - }, - "eventWipersChanged": { - "type": "boolean" - } - }, - "required": [ - "eventHazardLights", - "eventStopLineViolation", - "eventABSactivated", - "eventTractionControlLoss", - "eventStabilityControlactivated", - "eventHazardousMaterials", - "eventReserved1", - "eventHardBraking", - "eventLightsChanged", - "eventWipersChanged", - "eventFlatTire", - "eventDisabledVehicle", - "eventAirBagDeployment" - ] - }, - "lights": { - "type": [ - "object", - "null" - ], - "properties": { - "automaticLightControlOn": { - "type": "boolean" - }, - "daytimeRunningLightsOn": { - "type": "boolean" - }, - "fogLightOn": { - "type": "boolean" - }, - "hazardSignalOn": { - "type": "boolean" - }, - "highBeamHeadlightsOn": { - "type": "boolean" - }, - "leftTurnSignalOn": { - "type": "boolean" - }, - "lowBeamHeadlightsOn": { - "type": "boolean" - }, - "parkingLightsOn": { - "type": "boolean" - }, - "rightTurnSignalOn": { - "type": "boolean" - } - }, - "required": [ - "lowBeamHeadlightsOn", - "highBeamHeadlightsOn", - "leftTurnSignalOn", - "rightTurnSignalOn", - "hazardSignalOn", - "automaticLightControlOn", - "daytimeRunningLightsOn", - "fogLightOn", - "parkingLightsOn" - ] - }, - "pathHistory": { - "type": [ - "object", - "null" - ], - "properties": { - "crumbData": { - "type": "array", - "maxItems": 23, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "elevationOffset": { - "type": "number" - }, - "heading": { - "type": [ - "number", - "null" - ] - }, - "latOffset": { - "type": "number" - }, - "lonOffset": { - "type": "number" - }, - "posAccuracy": { - "type": [ - "object", - "null" - ], - "properties": { - "orientation": { - "type": "number" - }, - "semiMajor": { - "type": "number" - }, - "semiMinor": { - "type": "number" - } - }, - "required": [ - "semiMajor", - "semiMinor", - "orientation" - ] - }, - "speed": { - "type": [ - "number", - "null" - ] - }, - "timeOffset": { - "type": "number" - } - }, - "required": [ - "elevationOffset", - "latOffset", - "lonOffset", - "timeOffset" - ] - } - }, - "currGNSSstatus": { - "type": [ - "object", - "null" - ], - "properties": { - "aPDOPofUnder5": { - "type": "boolean" - }, - "baseStationType": { - "type": "boolean" - }, - "inViewOfUnder5": { - "type": "boolean" - }, - "isHealthy": { - "type": "boolean" - }, - "isMonitored": { - "type": "boolean" - }, - "localCorrectionsPresent": { - "type": "boolean" - }, - "networkCorrectionsPresent": { - "type": "boolean" - }, - "unavailable": { - "type": "boolean" - } - }, - "required": [ - "unavailable", - "isHealthy", - "isMonitored", - "baseStationType", - "aPDOPofUnder5", - "inViewOfUnder5", - "localCorrectionsPresent", - "networkCorrectionsPresent" - ] - }, - "initialPosition": { - "type": [ - "object", - "null" - ], - "properties": { - "heading": { - "type": [ - "number", - "null" - ] - }, - "posAccuracy": { - "type": "object", - "properties": { - "orientation": { - "type": [ - "number", - "null" - ] - }, - "semiMajor": { - "type": [ - "number", - "null" - ] - }, - "semiMinor": { - "type": [ - "number", - "null" - ] - } - }, - "required": [] - }, - "posConfidence": { - "type": [ - "object", - "null" - ], - "properties": { - "elevation": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "ELEV_500_00", - "ELEV_200_00", - "ELEV_100_00", - "ELEV_050_00", - "ELEV_020_00", - "ELEV_010_00", - "ELEV_005_00", - "ELEV_002_00", - "ELEV_001_00", - "ELEV_000_50", - "ELEV_000_20", - "ELEV_000_10", - "ELEV_000_05", - "ELEV_000_02", - "ELEV_000_01" - ] - }, - "pos": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "A500M", - "A200M", - "A100M", - "A50M", - "A20M", - "A10M", - "A5M", - "A2M", - "A1M", - "A50CM", - "A20CM", - "A10CM", - "A5CM", - "A2CM", - "A1CM" - ] - } - }, - "required": [ - "pos", - "elevation" - ] - }, - "position": { - "type": "object", - "properties": { - "elevation": { - "type": [ - "number", - "null" - ] - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ] - }, - "speed": { - "type": [ - "object", - "null" - ], - "properties": { - "speed": { - "type": "number" - }, - "transmission": { - "type": "string", - "enum": [ - "NEUTRAL", - "PARK", - "FORWARDGEARS", - "REVERSEGEARS", - "RESERVED1", - "RESERVED2", - "RESERVED3", - "UNAVAILABLE" - ] - } - }, - "required": [ - "speed", - "transmission" - ] - }, - "speedConfidence": { - "type": [ - "object", - "null" - ], - "properties": { - "heading": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "PREC10DEG", - "PREC05DEG", - "PREC01DEG", - "PREC0_1DEG", - "PREC0_05DEG", - "PREC0_01DEG", - "PREC0_0125DEG" - ] - }, - "speed": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "PREC100MS", - "PREC10MS", - "PREC5MS", - "PREC1MS", - "PREC0_1MS", - "PREC0_05MS", - "PREC0_01MS" - ] - }, - "throttle": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "PREC10PERCENT", - "PREC1PERCENT", - "PREC0_5PERCENT" - ] - } - }, - "required": [ - "heading", - "speed", - "throttle" - ] - }, - "timeConfidence": { - "type": [ - "string", - "null" - ], - "enum": [ - "UNAVAILABLE", - "TIME_100_000", - "TIME_050_000", - "TIME_020_000", - "TIME_010_000", - "TIME_002_000", - "TIME_001_000", - "TIME_000_500", - "TIME_000_200", - "TIME_000_100", - "TIME_000_050", - "TIME_000_020", - "TIME_000_010", - "TIME_000_005", - "TIME_000_002", - "TIME_000_001", - "TIME_000_000_5", - "TIME_000_000_2", - "TIME_000_000_1", - "TIME_000_000_05", - "TIME_000_000_02", - "TIME_000_000_01", - "TIME_000_000_005", - "TIME_000_000_002", - "TIME_000_000_001", - "TIME_000_000_000_5", - "TIME_000_000_000_2", - "TIME_000_000_000_1", - "TIME_000_000_000_05", - "TIME_000_000_000_02", - "TIME_000_000_000_01", - "TIME_000_000_000_005", - "TIME_000_000_000_002", - "TIME_000_000_000_001", - "TIME_000_000_000_000_5", - "TIME_000_000_000_000_2", - "TIME_000_000_000_000_1", - "TIME_000_000_000_000_05", - "TIME_000_000_000_000_02", - "TIME_000_000_000_000_01", - null - ] - }, - "utcTime": { - "type": [ - "object", - "null" - ], - "properties": { - "day": { - "type": [ - "integer", - "null" - ] - }, - "hour": { - "type": [ - "integer", - "null" - ] - }, - "minute": { - "type": [ - "integer", - "null" - ] - }, - "month": { - "type": [ - "integer", - "null" - ] - }, - "offset": { - "type": [ - "integer", - "null" - ] - }, - "second": { - "type": [ - "integer", - "null" - ] - }, - "year": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [] - } - }, - "required": [ - "position" - ] - } - }, - "required": [ - "crumbData" - ] - }, - "pathPrediction": { - "type": [ - "object", - "null" - ], - "properties": { - "confidence": { - "type": "number" - }, - "radiusOfCurve": { - "type": "number" - } - }, - "required": [ - "confidence", - "radiusOfCurve" - ] - } - }, - "required": [] - } - }, - "required": [ - "id", - "value" - ] + "$ref": "#/$defs/VehicleSafetyExtensions" }, { - "type": "object", - "properties": { - "id": { - "type": "string", - "const": "SpecialVehicleExtensions" - }, - "value": { - "type": "object", - "properties": { - "description": { - "type": [ - "object", - "null" - ], - "properties": { - "description": { - "type": [ - "array", - "null" - ], - "maxItems": 8, - "minItems": 1, - "items": { - "type": "integer" - } - }, - "extent": { - "type": [ - "string", - "null" - ], - "enum": [ - "USEINSTANTLYONLY", - "USEFOR3METERS", - "USEFOR10METERS", - "USEFOR50METERS", - "USEFOR100METERS", - "USEFOR500METERS", - "USEFOR1000METERS", - "USEFOR5000METERS", - "USEFOR10000METERS", - "USEFOR50000METERS", - "USEFOR100000METERS", - "USEFOR500000METERS", - "USEFOR1000000METERS", - "USEFOR5000000METERS", - "USEFOR10000000METERS", - "FOREVER", - null - ] - }, - "heading": { - "type": [ - "object", - "null" - ], - "properties": { - "FROM000_0TO022_5DEGREES": { - "type": "boolean" - }, - "FROM022_5TO045_0DEGREES": { - "type": "boolean" - }, - "FROM045_0TO067_5DEGREES": { - "type": "boolean" - }, - "FROM067_5TO090_0DEGREES": { - "type": "boolean" - }, - "FROM090_0TO112_5DEGREES": { - "type": "boolean" - }, - "FROM112_5TO135_0DEGREES": { - "type": "boolean" - }, - "FROM135_0TO157_5DEGREES": { - "type": "boolean" - }, - "FROM157_5TO180_0DEGREES": { - "type": "boolean" - }, - "FROM180_0TO202_5DEGREES": { - "type": "boolean" - }, - "FROM202_5TO225_0DEGREES": { - "type": "boolean" - }, - "FROM225_0TO247_5DEGREES": { - "type": "boolean" - }, - "FROM247_5TO270_0DEGREES": { - "type": "boolean" - }, - "FROM270_0TO292_5DEGREES": { - "type": "boolean" - }, - "FROM292_5TO315_0DEGREES": { - "type": "boolean" - }, - "FROM315_0TO337_5DEGREES": { - "type": "boolean" - }, - "FROM337_5TO360_0DEGREES": { - "type": "boolean" - } - }, - "required": [ - "FROM000_0TO022_5DEGREES", - "FROM022_5TO045_0DEGREES", - "FROM045_0TO067_5DEGREES", - "FROM067_5TO090_0DEGREES", - "FROM090_0TO112_5DEGREES", - "FROM112_5TO135_0DEGREES", - "FROM135_0TO157_5DEGREES", - "FROM157_5TO180_0DEGREES", - "FROM180_0TO202_5DEGREES", - "FROM202_5TO225_0DEGREES", - "FROM225_0TO247_5DEGREES", - "FROM247_5TO270_0DEGREES", - "FROM270_0TO292_5DEGREES", - "FROM292_5TO315_0DEGREES", - "FROM315_0TO337_5DEGREES", - "FROM337_5TO360_0DEGREES" - ] - }, - "priority": { - "type": [ - "string", - "null" - ] - }, - "regional": { - "type": [ - "array", - "null" - ], - "maxItems": 4, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "value": { - "type": "string", - "contentEncoding": "base64" - } - }, - "required": [ - "id", - "value" - ] - } - }, - "typeEvent": { - "type": "integer" - } - }, - "required": [] - }, - "trailers": { - "type": [ - "object", - "null" - ], - "properties": { - "connection": { - "type": "object", - "properties": { - "pivotAngle": { - "type": "number" - }, - "pivotOffset": { - "type": "number" - }, - "pivots": { - "type": "boolean" - } - }, - "required": [ - "pivotOffset", - "pivotAngle", - "pivots" - ] - }, - "sspRights": { - "type": "integer" - }, - "units": { - "type": "array", - "maxItems": 8, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "bumperHeights": { - "type": [ - "object", - "null" - ], - "properties": { - "front": { - "type": "number" - }, - "rear": { - "type": "number" - } - }, - "required": [ - "front", - "rear" - ] - }, - "centerOfGravity": { - "type": [ - "number", - "null" - ] - }, - "crumbData": { - "type": [ - "array", - "null" - ], - "maxItems": 23, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "elevationOffset": { - "type": "number" - }, - "heading": { - "type": [ - "number", - "null" - ] - }, - "latOffset": { - "type": "number" - }, - "lonOffset": { - "type": "number" - }, - "posAccuracy": { - "type": [ - "object", - "null" - ], - "properties": { - "orientation": { - "type": "number" - }, - "semiMajor": { - "type": "number" - }, - "semiMinor": { - "type": "number" - } - }, - "required": [ - "semiMajor", - "semiMinor", - "orientation" - ] - }, - "speed": { - "type": [ - "number", - "null" - ] - }, - "timeOffset": { - "type": "number" - } - }, - "required": [ - "elevationOffset", - "latOffset", - "lonOffset", - "timeOffset" - ] - } - }, - "elevationOffset": { - "type": [ - "number", - "null" - ] - }, - "frontPivot": { - "type": "object", - "properties": { - "pivotAngle": { - "type": "number" - }, - "pivotOffset": { - "type": "number" - }, - "pivots": { - "type": "boolean" - } - }, - "required": [ - "pivotOffset", - "pivotAngle", - "pivots" - ] - }, - "height": { - "type": [ - "number", - "null" - ] - }, - "isDolly": { - "type": "boolean" - }, - "length": { - "type": [ - "integer", - "null" - ] - }, - "mass": { - "type": [ - "integer", - "null" - ] - }, - "positionOffset": { - "type": "object", - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ] - }, - "rearPivot": { - "type": [ - "object", - "null" - ], - "properties": { - "pivotAngle": { - "type": "number" - }, - "pivotOffset": { - "type": "number" - }, - "pivots": { - "type": "boolean" - } - }, - "required": [ - "pivotOffset", - "pivotAngle", - "pivots" - ] - }, - "rearWheelOffset": { - "type": [ - "number", - "null" - ] - }, - "width": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "isDolly", - "frontPivot", - "positionOffset" - ] - } - } - }, - "required": [ - "connection", - "sspRights", - "units" - ] - }, - "vehicleAlerts": { - "type": [ - "object", - "null" - ], - "properties": { - "events": { - "type": [ - "object", - "null" - ], - "properties": { - "event": { - "type": "object", - "properties": { - "peEmergencyLightsActive": { - "type": "boolean" - }, - "peEmergencyResponse": { - "type": "boolean" - }, - "peEmergencySoundActive": { - "type": "boolean" - }, - "peNonEmergencyLightsActive": { - "type": "boolean" - }, - "peNonEmergencySoundActive": { - "type": "boolean" - }, - "peUnavailable": { - "type": "boolean" - } - }, - "required": [ - "peUnavailable", - "peEmergencyResponse", - "peEmergencyLightsActive", - "peEmergencySoundActive", - "peNonEmergencyLightsActive", - "peNonEmergencySoundActive" - ] - }, - "sspRights": { - "type": "integer" - } - }, - "required": [ - "event", - "sspRights" - ] - }, - "lightsUse": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "NOTINUSE", - "INUSE", - "YELLOWCAUTIONLIGHTS", - "SCHOOLBUSLIGHTS", - "ARROWSIGNSACTIVE", - "SLOWMOVINGVEHICLE", - "FREQSTOPS" - ] - }, - "multi": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "SINGLEVEHICLE", - "MULTIVEHICLE", - "RESERVED" - ] - }, - "responseType": { - "type": [ - "string", - "null" - ], - "enum": [ - "NOTINUSEORNOTEQUIPPED", - "EMERGENCY", - "NONEMERGENCY", - "PURSUIT", - "STATIONARY", - "SLOWMOVING", - "STOPANDGOMOVEMENT", - null - ] - }, - "sirenUse": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "NOTINUSE", - "INUSE", - "RESERVED" - ] - }, - "sspRights": { - "type": "number" - } - }, - "required": [ - "sspRights", - "lightsUse", - "multi", - "sirenUse" - ] - } - }, - "required": [] - } - }, - "required": [ - "id", - "value" - ] + "$ref": "#/$defs/SpecialVehicleExtensions" }, { - "type": "object", - "properties": { - "id": { - "type": "string", - "const": "SupplementalVehicleExtensions" - }, - "value": { - "type": "object", - "properties": { - "classDetails": { - "type": [ - "object", - "null" - ], - "properties": { - "fuelType": { - "type": [ - "string", - "null" - ], - "enum": [ - "unknownFuel", - "gasoline", - "ethanol", - "diesel", - "electric", - "hybrid", - "hydrogen", - "natGasLiquid", - "natGasComp", - "propane", - null - ] - }, - "hpmsType": { - "type": [ - "string", - "null" - ], - "enum": [ - "none", - "unknown", - "special", - "moto", - "car", - "carOther", - "bus", - "axleCnt2", - "axleCnt3", - "axleCnt4", - "axleCnt4Trailer", - "axleCnt5Trailer", - "axleCnt6Trailer", - "axleCnt5MultiTrailer", - "axleCnt6MultiTrailer", - "axleCnt7MultiTrailer", - null - ] - }, - "iso3883": { - "type": [ - "integer", - "null" - ] - }, - "keyType": { - "type": [ - "integer", - "null" - ] - }, - "regional": { - "type": [ - "array", - "null" - ], - "maxItems": 4, - "minItems": 1, - "items": { - "type": "string", - "contentEncoding": "base64" - } - }, - "responderType": { - "type": [ - "string", - "null" - ], - "enum": [ - "emergency_vehicle_units", - "federal_law_enforcement_units", - "state_police_units", - "county_police_units", - "local_police_units", - "ambulance_units", - "rescue_units", - "fire_units", - "hAZMAT_units", - "light_tow_unit", - "heavy_tow_unit", - "freeway_service_patrols", - "transportation_response_units", - "private_contractor_response_units", - null - ] - }, - "responseEquip": { - "type": [ - "object", - "null" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ] - }, - "role": { - "type": [ - "string", - "null" - ], - "enum": [ - "basicVehicle", - "publicTransport", - "specialTransport", - "dangerousGoods", - "roadWork", - "roadRescue", - "emergency", - "safetyCar", - "none_unknown", - "truck", - "motorcycle", - "roadSideSource", - "police", - "fire", - "ambulance", - "dot", - "transit", - "slowMoving", - "stopNgo", - "cyclist", - "pedestrian", - "nonMotorized", - "military", - null - ] - }, - "vehicleType": { - "type": [ - "object", - "null" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ] - } - }, - "required": [] - }, - "classification": { - "type": [ - "integer", - "null" - ] - }, - "obstacle": { - "type": [ - "object", - "null" - ], - "properties": { - "dateTime": { - "type": [ - "object", - "null" - ], - "properties": { - "day": { - "type": [ - "integer", - "null" - ] - }, - "hour": { - "type": [ - "integer", - "null" - ] - }, - "minute": { - "type": [ - "integer", - "null" - ] - }, - "month": { - "type": [ - "integer", - "null" - ] - }, - "offset": { - "type": [ - "integer", - "null" - ] - }, - "second": { - "type": [ - "integer", - "null" - ] - }, - "year": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [] - }, - "description": { - "type": [ - "integer", - "null" - ] - }, - "locationDetails": { - "type": [ - "object", - "null" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ] - }, - "obDirect": { - "type": "number" - }, - "obDist": { - "type": "integer" - }, - "vertEvent": { - "type": [ - "object", - "null" - ], - "properties": { - "leftFront": { - "type": "boolean" - }, - "leftRear": { - "type": "boolean" - }, - "notEquipped": { - "type": "boolean" - }, - "rightFront": { - "type": "boolean" - }, - "rightRear": { - "type": "boolean" - } - }, - "required": [ - "rightRear", - "rightFront", - "leftRear", - "leftFront", - "notEquipped" - ] - } - }, - "required": [ - "obDirect", - "obDist" - ] - }, - "regional": { - "type": [ - "array", - "null" - ], - "maxItems": 4, - "minItems": 1, - "items": { - "type": "string", - "contentEncoding": "base64" - } - }, - "speedProfile": { - "type": [ - "object", - "null" - ], - "properties": { - "speedReports": { - "type": "array", - "maxItems": 20, - "minItems": 1, - "items": { - "type": "integer" - } - } - }, - "required": [] - }, - "status": { - "type": [ - "object", - "null" - ], - "properties": { - "locationDetails": { - "type": [ - "object", - "null" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ] - }, - "statusDetails": { - "type": "integer" - } - }, - "required": [ - "statusDetails" - ] - }, - "theRTCM": { - "type": "object", - "properties": { - "msgs": { - "type": "array", - "maxItems": 5, - "minItems": 1, - "items": { - "type": "string" - } - }, - "rtcmHeader": { - "type": [ - "object", - "null" - ], - "properties": { - "offsetSet": { - "type": "object", - "properties": { - "antOffsetX": { - "type": "number" - }, - "antOffsetY": { - "type": "number" - }, - "antOffsetZ": { - "type": "number" - } - }, - "required": [ - "antOffsetX", - "antOffsetY", - "antOffsetZ" - ] - }, - "status": { - "type": "object", - "properties": { - "aPDOPofUnder5": { - "type": "boolean" - }, - "baseStationType": { - "type": "boolean" - }, - "inViewOfUnder5": { - "type": "boolean" - }, - "isHealthy": { - "type": "boolean" - }, - "isMonitored": { - "type": "boolean" - }, - "localCorrectionsPresent": { - "type": "boolean" - }, - "networkCorrectionsPresent": { - "type": "boolean" - }, - "unavailable": { - "type": "boolean" - } - }, - "required": [ - "unavailable", - "isHealthy", - "isMonitored", - "baseStationType", - "aPDOPofUnder5", - "inViewOfUnder5", - "localCorrectionsPresent", - "networkCorrectionsPresent" - ] - } - }, - "required": [ - "status", - "offsetSet" - ] - } - }, - "required": [ - "msgs" - ] - }, - "vehicleData": { - "type": [ - "object", - "null" - ], - "properties": { - "bumpers": { - "type": [ - "object", - "null" - ], - "properties": { - "front": { - "type": "number" - }, - "rear": { - "type": "number" - } - }, - "required": [ - "front", - "rear" - ] - }, - "height": { - "type": [ - "number", - "null" - ] - }, - "mass": { - "type": [ - "integer", - "null" - ] - }, - "trailerWeight": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [] - }, - "weatherProbe": { - "type": [ - "object", - "null" - ], - "properties": { - "airPressure": { - "type": [ - "integer", - "null" - ] - }, - "airTemp": { - "type": [ - "integer", - "null" - ] - }, - "rainRates": { - "type": [ - "object", - "null" - ], - "properties": { - "rateFront": { - "type": "integer" - }, - "rateRear": { - "type": [ - "integer", - "null" - ] - }, - "statusFront": { - "type": "string", - "enum": [ - "UNAVAILABLE", - "OFF", - "INTERMITTENT", - "LOW", - "HIGH", - "WASHERINUSE", - "AUTOMATICPRESENT" - ] - }, - "statusRear": { - "type": [ - "string", - "null" - ], - "enum": [ - "UNAVAILABLE", - "OFF", - "INTERMITTENT", - "LOW", - "HIGH", - "WASHERINUSE", - "AUTOMATICPRESENT", - null - ] - } - }, - "required": [ - "rateFront", - "statusFront" - ] - } - }, - "required": [] - }, - "weatherReport": { - "type": [ - "object", - "null" - ], - "properties": { - "friction": { - "type": [ - "integer", - "null" - ] - }, - "isRaining": { - "type": "string", - "enum": [ - "NA", - "PRECIP", - "NOPRECIP", - "ERROR" - ] - }, - "precipSituation": { - "type": [ - "string", - "null" - ], - "enum": [ - "NA", - "OTHER", - "UNKNOWN", - "NOPRECIPITATION", - "UNIDENTIFIEDSLIGHT", - "UNIDENTIFIEDMODERATE", - "UNIDENTIFIEDHEAVY", - "SNOWSLIGHT", - "SNOWMODERATE", - "SNOWHEAVY", - "RAINSLIGHT", - "RAINMODERATE", - "RAINHEAVY", - "FROZENPRECIPITATIONSLIGHT", - "FROZENPRECIPITATIONMODERATE", - "FROZENPRECIPITATIONHEAVY", - null - ] - }, - "rainRate": { - "type": [ - "number", - "null" - ] - }, - "roadFriction": { - "type": [ - "number", - "null" - ] - }, - "solarRadiation": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "isRaining" - ] - } - }, - "required": [] - } - }, - "required": [ - "id", - "value" - ] + "$ref": "#/$defs/SupplementalVehicleExtensions" } ] } @@ -2199,5 +493,1732 @@ "required": [ "metadata", "payload" - ] + ], + "$defs": { + "VehicleSafetyExtensions": { + "type": "object", + "properties": { + "id": { + "type": "string", + "const": "VehicleSafetyExtensions" + }, + "value": { + "type": "object", + "properties": { + "events": { + "type": [ + "object", + "null" + ], + "properties": { + "eventABSactivated": { + "type": "boolean" + }, + "eventAirBagDeployment": { + "type": "boolean" + }, + "eventDisabledVehicle": { + "type": "boolean" + }, + "eventFlatTire": { + "type": "boolean" + }, + "eventHardBraking": { + "type": "boolean" + }, + "eventHazardLights": { + "type": "boolean" + }, + "eventHazardousMaterials": { + "type": "boolean" + }, + "eventLightsChanged": { + "type": "boolean" + }, + "eventReserved1": { + "type": "boolean" + }, + "eventStabilityControlactivated": { + "type": "boolean" + }, + "eventStopLineViolation": { + "type": "boolean" + }, + "eventTractionControlLoss": { + "type": "boolean" + }, + "eventWipersChanged": { + "type": "boolean" + } + }, + "required": [ + "eventHazardLights", + "eventStopLineViolation", + "eventABSactivated", + "eventTractionControlLoss", + "eventStabilityControlactivated", + "eventHazardousMaterials", + "eventReserved1", + "eventHardBraking", + "eventLightsChanged", + "eventWipersChanged", + "eventFlatTire", + "eventDisabledVehicle", + "eventAirBagDeployment" + ] + }, + "lights": { + "type": [ + "object", + "null" + ], + "properties": { + "automaticLightControlOn": { + "type": "boolean" + }, + "daytimeRunningLightsOn": { + "type": "boolean" + }, + "fogLightOn": { + "type": "boolean" + }, + "hazardSignalOn": { + "type": "boolean" + }, + "highBeamHeadlightsOn": { + "type": "boolean" + }, + "leftTurnSignalOn": { + "type": "boolean" + }, + "lowBeamHeadlightsOn": { + "type": "boolean" + }, + "parkingLightsOn": { + "type": "boolean" + }, + "rightTurnSignalOn": { + "type": "boolean" + } + }, + "required": [ + "lowBeamHeadlightsOn", + "highBeamHeadlightsOn", + "leftTurnSignalOn", + "rightTurnSignalOn", + "hazardSignalOn", + "automaticLightControlOn", + "daytimeRunningLightsOn", + "fogLightOn", + "parkingLightsOn" + ] + }, + "pathHistory": { + "type": [ + "object", + "null" + ], + "properties": { + "crumbData": { + "type": "array", + "maxItems": 23, + "minItems": 1, + "items": { + "type": "object", + "properties": { + "elevationOffset": { + "type": "number" + }, + "heading": { + "type": [ + "number", + "null" + ] + }, + "latOffset": { + "type": "number" + }, + "lonOffset": { + "type": "number" + }, + "posAccuracy": { + "type": [ + "object", + "null" + ], + "properties": { + "orientation": { + "type": "number" + }, + "semiMajor": { + "type": "number" + }, + "semiMinor": { + "type": "number" + } + }, + "required": [ + "semiMajor", + "semiMinor", + "orientation" + ] + }, + "speed": { + "type": [ + "number", + "null" + ] + }, + "timeOffset": { + "type": "number" + } + }, + "required": [ + "elevationOffset", + "latOffset", + "lonOffset", + "timeOffset" + ] + } + }, + "currGNSSstatus": { + "type": [ + "object", + "null" + ], + "properties": { + "aPDOPofUnder5": { + "type": "boolean" + }, + "baseStationType": { + "type": "boolean" + }, + "inViewOfUnder5": { + "type": "boolean" + }, + "isHealthy": { + "type": "boolean" + }, + "isMonitored": { + "type": "boolean" + }, + "localCorrectionsPresent": { + "type": "boolean" + }, + "networkCorrectionsPresent": { + "type": "boolean" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "unavailable", + "isHealthy", + "isMonitored", + "baseStationType", + "aPDOPofUnder5", + "inViewOfUnder5", + "localCorrectionsPresent", + "networkCorrectionsPresent" + ] + }, + "initialPosition": { + "type": [ + "object", + "null" + ], + "properties": { + "heading": { + "type": [ + "number", + "null" + ] + }, + "posAccuracy": { + "type": "object", + "properties": { + "orientation": { + "type": [ + "number", + "null" + ] + }, + "semiMajor": { + "type": [ + "number", + "null" + ] + }, + "semiMinor": { + "type": [ + "number", + "null" + ] + } + }, + "required": [] + }, + "posConfidence": { + "type": [ + "object", + "null" + ], + "properties": { + "elevation": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "ELEV_500_00", + "ELEV_200_00", + "ELEV_100_00", + "ELEV_050_00", + "ELEV_020_00", + "ELEV_010_00", + "ELEV_005_00", + "ELEV_002_00", + "ELEV_001_00", + "ELEV_000_50", + "ELEV_000_20", + "ELEV_000_10", + "ELEV_000_05", + "ELEV_000_02", + "ELEV_000_01" + ] + }, + "pos": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "A500M", + "A200M", + "A100M", + "A50M", + "A20M", + "A10M", + "A5M", + "A2M", + "A1M", + "A50CM", + "A20CM", + "A10CM", + "A5CM", + "A2CM", + "A1CM" + ] + } + }, + "required": [ + "pos", + "elevation" + ] + }, + "position": { + "type": "object", + "properties": { + "elevation": { + "type": [ + "number", + "null" + ] + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ] + }, + "speed": { + "type": [ + "object", + "null" + ], + "properties": { + "speed": { + "type": "number" + }, + "transmission": { + "type": "string", + "enum": [ + "NEUTRAL", + "PARK", + "FORWARDGEARS", + "REVERSEGEARS", + "RESERVED1", + "RESERVED2", + "RESERVED3", + "UNAVAILABLE" + ] + } + }, + "required": [ + "speed", + "transmission" + ] + }, + "speedConfidence": { + "type": [ + "object", + "null" + ], + "properties": { + "heading": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "PREC10DEG", + "PREC05DEG", + "PREC01DEG", + "PREC0_1DEG", + "PREC0_05DEG", + "PREC0_01DEG", + "PREC0_0125DEG" + ] + }, + "speed": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "PREC100MS", + "PREC10MS", + "PREC5MS", + "PREC1MS", + "PREC0_1MS", + "PREC0_05MS", + "PREC0_01MS" + ] + }, + "throttle": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "PREC10PERCENT", + "PREC1PERCENT", + "PREC0_5PERCENT" + ] + } + }, + "required": [ + "heading", + "speed", + "throttle" + ] + }, + "timeConfidence": { + "type": [ + "string", + "null" + ], + "enum": [ + "UNAVAILABLE", + "TIME_100_000", + "TIME_050_000", + "TIME_020_000", + "TIME_010_000", + "TIME_002_000", + "TIME_001_000", + "TIME_000_500", + "TIME_000_200", + "TIME_000_100", + "TIME_000_050", + "TIME_000_020", + "TIME_000_010", + "TIME_000_005", + "TIME_000_002", + "TIME_000_001", + "TIME_000_000_5", + "TIME_000_000_2", + "TIME_000_000_1", + "TIME_000_000_05", + "TIME_000_000_02", + "TIME_000_000_01", + "TIME_000_000_005", + "TIME_000_000_002", + "TIME_000_000_001", + "TIME_000_000_000_5", + "TIME_000_000_000_2", + "TIME_000_000_000_1", + "TIME_000_000_000_05", + "TIME_000_000_000_02", + "TIME_000_000_000_01", + "TIME_000_000_000_005", + "TIME_000_000_000_002", + "TIME_000_000_000_001", + "TIME_000_000_000_000_5", + "TIME_000_000_000_000_2", + "TIME_000_000_000_000_1", + "TIME_000_000_000_000_05", + "TIME_000_000_000_000_02", + "TIME_000_000_000_000_01", + null + ] + }, + "utcTime": { + "type": [ + "object", + "null" + ], + "properties": { + "day": { + "type": [ + "integer", + "null" + ] + }, + "hour": { + "type": [ + "integer", + "null" + ] + }, + "minute": { + "type": [ + "integer", + "null" + ] + }, + "month": { + "type": [ + "integer", + "null" + ] + }, + "offset": { + "type": [ + "integer", + "null" + ] + }, + "second": { + "type": [ + "integer", + "null" + ] + }, + "year": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [] + } + }, + "required": [ + "position" + ] + } + }, + "required": [ + "crumbData" + ] + }, + "pathPrediction": { + "type": [ + "object", + "null" + ], + "properties": { + "confidence": { + "type": "number" + }, + "radiusOfCurve": { + "type": "number" + } + }, + "required": [ + "confidence", + "radiusOfCurve" + ] + } + }, + "required": [] + } + }, + "required": [ + "id", + "value" + ] + }, + "SpecialVehicleExtensions": { + "type": "object", + "properties": { + "id": { + "type": "string", + "const": "SpecialVehicleExtensions" + }, + "value": { + "type": "object", + "properties": { + "description": { + "type": [ + "object", + "null" + ], + "properties": { + "description": { + "type": [ + "array", + "null" + ], + "maxItems": 8, + "minItems": 1, + "items": { + "type": "integer" + } + }, + "extent": { + "type": [ + "string", + "null" + ], + "enum": [ + "USEINSTANTLYONLY", + "USEFOR3METERS", + "USEFOR10METERS", + "USEFOR50METERS", + "USEFOR100METERS", + "USEFOR500METERS", + "USEFOR1000METERS", + "USEFOR5000METERS", + "USEFOR10000METERS", + "USEFOR50000METERS", + "USEFOR100000METERS", + "USEFOR500000METERS", + "USEFOR1000000METERS", + "USEFOR5000000METERS", + "USEFOR10000000METERS", + "FOREVER", + null + ] + }, + "heading": { + "type": [ + "object", + "null" + ], + "properties": { + "FROM000_0TO022_5DEGREES": { + "type": "boolean" + }, + "FROM022_5TO045_0DEGREES": { + "type": "boolean" + }, + "FROM045_0TO067_5DEGREES": { + "type": "boolean" + }, + "FROM067_5TO090_0DEGREES": { + "type": "boolean" + }, + "FROM090_0TO112_5DEGREES": { + "type": "boolean" + }, + "FROM112_5TO135_0DEGREES": { + "type": "boolean" + }, + "FROM135_0TO157_5DEGREES": { + "type": "boolean" + }, + "FROM157_5TO180_0DEGREES": { + "type": "boolean" + }, + "FROM180_0TO202_5DEGREES": { + "type": "boolean" + }, + "FROM202_5TO225_0DEGREES": { + "type": "boolean" + }, + "FROM225_0TO247_5DEGREES": { + "type": "boolean" + }, + "FROM247_5TO270_0DEGREES": { + "type": "boolean" + }, + "FROM270_0TO292_5DEGREES": { + "type": "boolean" + }, + "FROM292_5TO315_0DEGREES": { + "type": "boolean" + }, + "FROM315_0TO337_5DEGREES": { + "type": "boolean" + }, + "FROM337_5TO360_0DEGREES": { + "type": "boolean" + } + }, + "required": [ + "FROM000_0TO022_5DEGREES", + "FROM022_5TO045_0DEGREES", + "FROM045_0TO067_5DEGREES", + "FROM067_5TO090_0DEGREES", + "FROM090_0TO112_5DEGREES", + "FROM112_5TO135_0DEGREES", + "FROM135_0TO157_5DEGREES", + "FROM157_5TO180_0DEGREES", + "FROM180_0TO202_5DEGREES", + "FROM202_5TO225_0DEGREES", + "FROM225_0TO247_5DEGREES", + "FROM247_5TO270_0DEGREES", + "FROM270_0TO292_5DEGREES", + "FROM292_5TO315_0DEGREES", + "FROM315_0TO337_5DEGREES", + "FROM337_5TO360_0DEGREES" + ] + }, + "priority": { + "type": [ + "string", + "null" + ] + }, + "regional": { + "type": [ + "array", + "null" + ], + "maxItems": 4, + "minItems": 1, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "value": { + "type": "string", + "contentEncoding": "base64" + } + }, + "required": [ + "id", + "value" + ] + } + }, + "typeEvent": { + "type": "integer" + } + }, + "required": [] + }, + "doNotUse": { + "type": [ + "object", + "null" + ], + "properties": { + "connection": { + "type": "object", + "properties": { + "pivotAngle": { + "type": "number" + }, + "pivotOffset": { + "type": "number" + }, + "pivots": { + "type": "boolean" + } + }, + "required": [ + "pivotOffset", + "pivotAngle", + "pivots" + ] + }, + "doNotUse": { + "type": "integer" + }, + "units": { + "type": "array", + "maxItems": 8, + "minItems": 1, + "items": { + "type": "object", + "properties": { + "bumperHeights": { + "type": [ + "object", + "null" + ], + "properties": { + "front": { + "type": "number" + }, + "rear": { + "type": "number" + } + }, + "required": [ + "front", + "rear" + ] + }, + "centerOfGravity": { + "type": [ + "number", + "null" + ] + }, + "crumbData": { + "type": [ + "array", + "null" + ], + "maxItems": 23, + "minItems": 1, + "items": { + "type": "object", + "properties": { + "elevationOffset": { + "type": "number" + }, + "heading": { + "type": [ + "number", + "null" + ] + }, + "latOffset": { + "type": "number" + }, + "lonOffset": { + "type": "number" + }, + "posAccuracy": { + "type": [ + "object", + "null" + ], + "properties": { + "orientation": { + "type": "number" + }, + "semiMajor": { + "type": "number" + }, + "semiMinor": { + "type": "number" + } + }, + "required": [ + "semiMajor", + "semiMinor", + "orientation" + ] + }, + "speed": { + "type": [ + "number", + "null" + ] + }, + "timeOffset": { + "type": "number" + } + }, + "required": [ + "elevationOffset", + "latOffset", + "lonOffset", + "timeOffset" + ] + } + }, + "elevationOffset": { + "type": [ + "number", + "null" + ] + }, + "frontPivot": { + "type": "object", + "properties": { + "pivotAngle": { + "type": "number" + }, + "pivotOffset": { + "type": "number" + }, + "pivots": { + "type": "boolean" + } + }, + "required": [ + "pivotOffset", + "pivotAngle", + "pivots" + ] + }, + "height": { + "type": [ + "number", + "null" + ] + }, + "isDolly": { + "type": "boolean" + }, + "length": { + "type": [ + "integer", + "null" + ] + }, + "mass": { + "type": [ + "integer", + "null" + ] + }, + "positionOffset": { + "type": "object", + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ] + }, + "rearPivot": { + "type": [ + "object", + "null" + ], + "properties": { + "pivotAngle": { + "type": "number" + }, + "pivotOffset": { + "type": "number" + }, + "pivots": { + "type": "boolean" + } + }, + "required": [ + "pivotOffset", + "pivotAngle", + "pivots" + ] + }, + "rearWheelOffset": { + "type": [ + "number", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "isDolly", + "frontPivot", + "positionOffset" + ] + } + } + }, + "required": [ + "connection", + "doNotUse", + "units" + ] + }, + "vehicleAlerts": { + "type": [ + "object", + "null" + ], + "properties": { + "events": { + "type": [ + "object", + "null" + ], + "properties": { + "event": { + "type": "object", + "properties": { + "peEmergencyLightsActive": { + "type": "boolean" + }, + "peEmergencyResponse": { + "type": "boolean" + }, + "peEmergencySoundActive": { + "type": "boolean" + }, + "peNonEmergencyLightsActive": { + "type": "boolean" + }, + "peNonEmergencySoundActive": { + "type": "boolean" + }, + "peUnavailable": { + "type": "boolean" + } + }, + "required": [ + "peUnavailable", + "peEmergencyResponse", + "peEmergencyLightsActive", + "peEmergencySoundActive", + "peNonEmergencyLightsActive", + "peNonEmergencySoundActive" + ] + }, + "doNotUse": { + "type": "integer" + } + }, + "required": [ + "event", + "doNotUse" + ] + }, + "lightsUse": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "NOTINUSE", + "INUSE", + "YELLOWCAUTIONLIGHTS", + "SCHOOLBUSLIGHTS", + "ARROWSIGNSACTIVE", + "SLOWMOVINGVEHICLE", + "FREQSTOPS" + ] + }, + "multi": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "SINGLEVEHICLE", + "MULTIVEHICLE", + "RESERVED" + ] + }, + "responseType": { + "type": [ + "string", + "null" + ], + "enum": [ + "NOTINUSEORNOTEQUIPPED", + "EMERGENCY", + "NONEMERGENCY", + "PURSUIT", + "STATIONARY", + "SLOWMOVING", + "STOPANDGOMOVEMENT", + null + ] + }, + "sirenUse": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "NOTINUSE", + "INUSE", + "RESERVED" + ] + }, + "doNotUse": { + "type": "number" + } + }, + "required": [ + "doNotUse", + "lightsUse", + "multi", + "sirenUse" + ] + } + }, + "required": [] + } + }, + "required": [ + "id", + "value" + ] + }, + "SupplementalVehicleExtensions": { + "type": "object", + "properties": { + "id": { + "type": "string", + "const": "SupplementalVehicleExtensions" + }, + "value": { + "type": "object", + "properties": { + "classDetails": { + "type": [ + "object", + "null" + ], + "properties": { + "fuelType": { + "type": [ + "string", + "null" + ], + "enum": [ + "unknownFuel", + "gasoline", + "ethanol", + "diesel", + "electric", + "hybrid", + "hydrogen", + "natGasLiquid", + "natGasComp", + "propane", + null + ] + }, + "hpmsType": { + "type": [ + "string", + "null" + ], + "enum": [ + "none", + "unknown", + "special", + "moto", + "car", + "carOther", + "bus", + "axleCnt2", + "axleCnt3", + "axleCnt4", + "axleCnt4Trailer", + "axleCnt5Trailer", + "axleCnt6Trailer", + "axleCnt5MultiTrailer", + "axleCnt6MultiTrailer", + "axleCnt7MultiTrailer", + null + ] + }, + "iso3883": { + "type": [ + "integer", + "null" + ] + }, + "keyType": { + "type": [ + "integer", + "null" + ] + }, + "regional": { + "type": [ + "array", + "null" + ], + "maxItems": 4, + "minItems": 1, + "items": { + "type": "string", + "contentEncoding": "base64" + } + }, + "responderType": { + "type": [ + "string", + "null" + ], + "enum": [ + "emergency_vehicle_units", + "federal_law_enforcement_units", + "state_police_units", + "county_police_units", + "local_police_units", + "ambulance_units", + "rescue_units", + "fire_units", + "hAZMAT_units", + "light_tow_unit", + "heavy_tow_unit", + "freeway_service_patrols", + "transportation_response_units", + "private_contractor_response_units", + null + ] + }, + "responseEquip": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ] + }, + "role": { + "type": [ + "string", + "null" + ], + "enum": [ + "basicVehicle", + "publicTransport", + "specialTransport", + "dangerousGoods", + "roadWork", + "roadRescue", + "emergency", + "safetyCar", + "none_unknown", + "truck", + "motorcycle", + "roadSideSource", + "police", + "fire", + "ambulance", + "dot", + "transit", + "slowMoving", + "stopNgo", + "cyclist", + "pedestrian", + "nonMotorized", + "military", + null + ] + }, + "vehicleType": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ] + } + }, + "required": [] + }, + "classification": { + "type": [ + "integer", + "null" + ] + }, + "doNotUse3": { + "type": [ + "object", + "null" + ], + "properties": { + "dateTime": { + "type": [ + "object", + "null" + ], + "properties": { + "day": { + "type": [ + "integer", + "null" + ] + }, + "hour": { + "type": [ + "integer", + "null" + ] + }, + "minute": { + "type": [ + "integer", + "null" + ] + }, + "month": { + "type": [ + "integer", + "null" + ] + }, + "offset": { + "type": [ + "integer", + "null" + ] + }, + "second": { + "type": [ + "integer", + "null" + ] + }, + "year": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [] + }, + "description": { + "type": [ + "integer", + "null" + ] + }, + "locationDetails": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ] + }, + "obDirect": { + "type": "number" + }, + "obDist": { + "type": "integer" + }, + "vertEvent": { + "type": [ + "object", + "null" + ], + "properties": { + "leftFront": { + "type": "boolean" + }, + "leftRear": { + "type": "boolean" + }, + "notEquipped": { + "type": "boolean" + }, + "rightFront": { + "type": "boolean" + }, + "rightRear": { + "type": "boolean" + } + }, + "required": [ + "rightRear", + "rightFront", + "leftRear", + "leftFront", + "notEquipped" + ] + } + }, + "required": [ + "obDirect", + "obDist" + ] + }, + "regional": { + "type": [ + "array", + "null" + ], + "maxItems": 4, + "minItems": 1, + "items": { + "type": "string", + "contentEncoding": "base64" + } + }, + "doNotUse4": { + "type": [ + "object", + "null" + ], + "properties": { + "speedReports": { + "type": "array", + "maxItems": 20, + "minItems": 1, + "items": { + "type": "integer" + } + } + }, + "required": [] + }, + "status": { + "type": [ + "object", + "null" + ], + "properties": { + "locationDetails": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ] + }, + "statusDetails": { + "type": "integer" + } + }, + "required": [ + "statusDetails" + ] + }, + "doNotUse5": { + "type": [ + "object", + "null" + ], + "properties": { + "msgs": { + "type": "array", + "maxItems": 5, + "minItems": 1, + "items": { + "type": "string" + } + }, + "rtcmHeader": { + "type": [ + "object", + "null" + ], + "properties": { + "offsetSet": { + "type": "object", + "properties": { + "antOffsetX": { + "type": "number" + }, + "antOffsetY": { + "type": "number" + }, + "antOffsetZ": { + "type": "number" + } + }, + "required": [ + "antOffsetX", + "antOffsetY", + "antOffsetZ" + ] + }, + "status": { + "type": "object", + "properties": { + "aPDOPofUnder5": { + "type": "boolean" + }, + "baseStationType": { + "type": "boolean" + }, + "inViewOfUnder5": { + "type": "boolean" + }, + "isHealthy": { + "type": "boolean" + }, + "isMonitored": { + "type": "boolean" + }, + "localCorrectionsPresent": { + "type": "boolean" + }, + "networkCorrectionsPresent": { + "type": "boolean" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "unavailable", + "isHealthy", + "isMonitored", + "baseStationType", + "aPDOPofUnder5", + "inViewOfUnder5", + "localCorrectionsPresent", + "networkCorrectionsPresent" + ] + } + }, + "required": [ + "status", + "offsetSet" + ] + } + }, + "required": [ + "msgs" + ] + }, + "vehicleData": { + "type": [ + "object", + "null" + ], + "properties": { + "bumpers": { + "type": [ + "object", + "null" + ], + "properties": { + "front": { + "type": "number" + }, + "rear": { + "type": "number" + } + }, + "required": [ + "front", + "rear" + ] + }, + "height": { + "type": [ + "number", + "null" + ] + }, + "mass": { + "type": [ + "integer", + "null" + ] + }, + "doNotUse": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [] + }, + "doNotUse2": { + "type": [ + "object", + "null" + ], + "properties": { + "airPressure": { + "type": [ + "integer", + "null" + ] + }, + "airTemp": { + "type": [ + "integer", + "null" + ] + }, + "rainRates": { + "type": [ + "object", + "null" + ], + "properties": { + "rateFront": { + "type": "integer" + }, + "rateRear": { + "type": [ + "integer", + "null" + ] + }, + "statusFront": { + "type": "string", + "enum": [ + "UNAVAILABLE", + "OFF", + "INTERMITTENT", + "LOW", + "HIGH", + "WASHERINUSE", + "AUTOMATICPRESENT" + ] + }, + "statusRear": { + "type": [ + "string", + "null" + ], + "enum": [ + "UNAVAILABLE", + "OFF", + "INTERMITTENT", + "LOW", + "HIGH", + "WASHERINUSE", + "AUTOMATICPRESENT", + null + ] + } + }, + "required": [ + "rateFront", + "statusFront" + ] + } + }, + "required": [] + }, + "doNotUse1": { + "type": [ + "object", + "null" + ], + "properties": { + "friction": { + "type": [ + "integer", + "null" + ] + }, + "isRaining": { + "type": "string", + "enum": [ + "NA", + "PRECIP", + "NOPRECIP", + "ERROR" + ] + }, + "precipSituation": { + "type": [ + "string", + "null" + ], + "enum": [ + "NA", + "OTHER", + "UNKNOWN", + "NOPRECIPITATION", + "UNIDENTIFIEDSLIGHT", + "UNIDENTIFIEDMODERATE", + "UNIDENTIFIEDHEAVY", + "SNOWSLIGHT", + "SNOWMODERATE", + "SNOWHEAVY", + "RAINSLIGHT", + "RAINMODERATE", + "RAINHEAVY", + "FROZENPRECIPITATIONSLIGHT", + "FROZENPRECIPITATIONMODERATE", + "FROZENPRECIPITATIONHEAVY", + null + ] + }, + "rainRate": { + "type": [ + "number", + "null" + ] + }, + "roadFriction": { + "type": [ + "number", + "null" + ] + }, + "solarRadiation": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "isRaining" + ] + } + }, + "required": [] + } + }, + "required": [ + "id", + "value" + ] + } + } } \ No newline at end of file diff --git a/jpo-geojsonconverter/src/main/resources/schemas/map.schema.json b/jpo-geojsonconverter/src/main/resources/schemas/map.schema.json index 560ba128..212f451c 100644 --- a/jpo-geojsonconverter/src/main/resources/schemas/map.schema.json +++ b/jpo-geojsonconverter/src/main/resources/schemas/map.schema.json @@ -138,6 +138,12 @@ "recordId", "serialNumber" ] + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -155,7 +161,8 @@ "odePacketID", "odeTimStartDateTime", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ] }, "OdeMapPayload": { diff --git a/jpo-geojsonconverter/src/main/resources/schemas/spat.schema.json b/jpo-geojsonconverter/src/main/resources/schemas/spat.schema.json index a7ea1bb9..eab4e454 100644 --- a/jpo-geojsonconverter/src/main/resources/schemas/spat.schema.json +++ b/jpo-geojsonconverter/src/main/resources/schemas/spat.schema.json @@ -148,6 +148,12 @@ }, "sanitized": { "type": "boolean" + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -161,7 +167,8 @@ "odeReceivedAt", "schemaVersion", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ], "additionalProperties": false }, diff --git a/jpo-geojsonconverter/src/test/resources/json/invalid.bsm.json b/jpo-geojsonconverter/src/test/resources/json/invalid.bsm.json index b3723449..04b03121 100644 --- a/jpo-geojsonconverter/src/test/resources/json/invalid.bsm.json +++ b/jpo-geojsonconverter/src/test/resources/json/invalid.bsm.json @@ -23,13 +23,14 @@ "serialNumber": 0 }, "odeReceivedAt": "2024-08-12T12:32:03.811Z", - "schemaVersion": 6, + "schemaVersion": 8, "maxDurationTime": 0, "recordGeneratedAt": "", "recordGeneratedBy": "OBU", "sanitized": false, "odePacketID": "", "odeTimStartDateTime": "", + "asn1": "", "originIp": 5 }, "payload": { diff --git a/jpo-geojsonconverter/src/test/resources/json/invalid.map.json b/jpo-geojsonconverter/src/test/resources/json/invalid.map.json index 5632a70d..3470a7b4 100644 --- a/jpo-geojsonconverter/src/test/resources/json/invalid.map.json +++ b/jpo-geojsonconverter/src/test/resources/json/invalid.map.json @@ -25,6 +25,7 @@ "odePacketID": "", "odeTimStartDateTime": "", "mapSource": "RSU", + "asn1": "", "originIp": "172.18.0.1" }, "payload": { diff --git a/jpo-geojsonconverter/src/test/resources/json/invalid.spat.json b/jpo-geojsonconverter/src/test/resources/json/invalid.spat.json index 567c1689..4df8fe6f 100644 --- a/jpo-geojsonconverter/src/test/resources/json/invalid.spat.json +++ b/jpo-geojsonconverter/src/test/resources/json/invalid.spat.json @@ -25,6 +25,7 @@ "odePacketID": "", "odeTimStartDateTime": "", "spatSource": "V2X", + "asn1": "", "originIp": "172.21.0.1", "isCertPresent": false, "invalidExtraProperty": "invalid" diff --git a/jpo-geojsonconverter/src/test/resources/json/invalid2.map.json b/jpo-geojsonconverter/src/test/resources/json/invalid2.map.json index 7b95ba51..467dd1e1 100644 --- a/jpo-geojsonconverter/src/test/resources/json/invalid2.map.json +++ b/jpo-geojsonconverter/src/test/resources/json/invalid2.map.json @@ -25,6 +25,7 @@ "odePacketID": "", "odeTimStartDateTime": "", "mapSource": "RSU", + "asn1": "", "originIp": "172.18.0.1" }, "payload": { diff --git a/jpo-geojsonconverter/src/test/resources/json/valid.bsm.json b/jpo-geojsonconverter/src/test/resources/json/valid.bsm.json index 4223fabe..e4bdd012 100644 --- a/jpo-geojsonconverter/src/test/resources/json/valid.bsm.json +++ b/jpo-geojsonconverter/src/test/resources/json/valid.bsm.json @@ -30,6 +30,7 @@ "sanitized": false, "odePacketID": "", "odeTimStartDateTime": "", + "asn1": "", "originIp": "172.19.0.1" }, "payload": { diff --git a/jpo-geojsonconverter/src/test/resources/json/valid.map.json b/jpo-geojsonconverter/src/test/resources/json/valid.map.json index 903be4d6..b681a2ac 100644 --- a/jpo-geojsonconverter/src/test/resources/json/valid.map.json +++ b/jpo-geojsonconverter/src/test/resources/json/valid.map.json @@ -25,6 +25,7 @@ "odePacketID": "", "odeTimStartDateTime": "", "mapSource": "RSU", + "asn1": "", "originIp": "172.18.0.1" }, "payload": { diff --git a/jpo-geojsonconverter/src/test/resources/json/valid.spat.json b/jpo-geojsonconverter/src/test/resources/json/valid.spat.json index df42490e..50ab9f8d 100644 --- a/jpo-geojsonconverter/src/test/resources/json/valid.spat.json +++ b/jpo-geojsonconverter/src/test/resources/json/valid.spat.json @@ -25,6 +25,7 @@ "odePacketID": "", "odeTimStartDateTime": "", "spatSource": "V2X", + "asn1": "", "originIp": "172.21.0.1", "isCertPresent": false },