Files
whtp/schema.json
2025-07-07 15:23:17 +08:00

338 lines
9.9 KiB
JSON

{
"$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"
}
}
}
}
}