init
This commit is contained in:
338
schema.json
Normal file
338
schema.json
Normal file
@ -0,0 +1,338 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://example.com/telemetry.schema.json",
|
||||
"title": "Telemetry Message",
|
||||
"description": "Schema describing a telemetry message exchanged by devices.",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"version": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Protocol semantic version (integer)."
|
||||
},
|
||||
"msg_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"telemetry"
|
||||
],
|
||||
"description": "Currently only the literal string 'telemetry' is supported."
|
||||
},
|
||||
"dev_id": {
|
||||
"$ref": "#/$defs/uuid"
|
||||
},
|
||||
"dev_type": {
|
||||
"description": "Device type identifier (string or one-of helper objects).",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type_id"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"type_id": {
|
||||
"$ref": "#/$defs/uuid"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type_name"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"type_name": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"timestamp": {
|
||||
"$ref": "#/$defs/timestamp"
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "Array of discrete or batch field objects.",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "#/$defs/discrete_field"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/batch_field"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"enum": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/enum_definition"
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"$ref": "#/$defs/location"
|
||||
},
|
||||
"battery": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 100,
|
||||
"description": "Battery percentage (0-100)."
|
||||
},
|
||||
"sqe": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 4294967295,
|
||||
"description": "Sample sequence counter (uint32)."
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version",
|
||||
"msg_type",
|
||||
"dev_id",
|
||||
"dev_type",
|
||||
"timestamp",
|
||||
"fields"
|
||||
],
|
||||
"$defs": {
|
||||
"uuid": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
|
||||
"description": "UUID v4 string."
|
||||
},
|
||||
"timestamp": {
|
||||
"description": "UNIX epoch (seconds) or an object with a single alternative timestamp representation.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"minProperties": 1,
|
||||
"maxProperties": 1,
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"unix_ns": {
|
||||
"type": "number"
|
||||
},
|
||||
"unix_us": {
|
||||
"type": "number"
|
||||
},
|
||||
"unix_ms": {
|
||||
"type": "number"
|
||||
},
|
||||
"unix_s": {
|
||||
"type": "number"
|
||||
},
|
||||
"iso8601": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"sample_interval": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number",
|
||||
"description": "Interval in seconds."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"ms": {
|
||||
"type": "number"
|
||||
},
|
||||
"s": {
|
||||
"type": "number"
|
||||
},
|
||||
"m": {
|
||||
"type": "number"
|
||||
},
|
||||
"h": {
|
||||
"type": "number"
|
||||
},
|
||||
"d": {
|
||||
"type": "number"
|
||||
},
|
||||
"w": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"confidence": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"discrete_field": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"name",
|
||||
"data_type",
|
||||
"value",
|
||||
"timestamp"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"data_type": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"timestamp": {
|
||||
"$ref": "#/$defs/timestamp"
|
||||
},
|
||||
"unit": {
|
||||
"type": "string"
|
||||
},
|
||||
"confidence": {
|
||||
"$ref": "#/$defs/confidence"
|
||||
}
|
||||
}
|
||||
},
|
||||
"batch_field": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"name",
|
||||
"array_type",
|
||||
"value",
|
||||
"timestamp"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"array_type": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"timestamp": {
|
||||
"$ref": "#/$defs/timestamp"
|
||||
},
|
||||
"sample_interval": {
|
||||
"$ref": "#/$defs/sample_interval"
|
||||
},
|
||||
"unit": {
|
||||
"type": "string"
|
||||
},
|
||||
"confidence": {
|
||||
"$ref": "#/$defs/confidence"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enum_definition": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"identifier",
|
||||
"value"
|
||||
],
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"coordinates"
|
||||
],
|
||||
"properties": {
|
||||
"coordinates": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
"maxItems": 2,
|
||||
"items": [
|
||||
{
|
||||
"type": "number",
|
||||
"minimum": -90,
|
||||
"maximum": 90
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"minimum": -180,
|
||||
"maximum": 180
|
||||
}
|
||||
]
|
||||
},
|
||||
"coordinate_system": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"wgs84",
|
||||
"gcj02",
|
||||
"bd09"
|
||||
],
|
||||
"default": "gcj02"
|
||||
},
|
||||
"accuracy": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"altitude": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user