Files
GarminHomeAssistant/config.schema.json
Philip Abbey 47a930828a Revised glance view
Refreshed default view and new customisable view.
2025-07-06 14:44:53 +01:00

299 lines
7.9 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"$schema": {
"type": "string",
"description": "The schema will prevent JSON file errors."
},
"title": {
"type": "string",
"description": "Top level menu title"
},
"glance": {
"$ref": "#/$defs/glance"
},
"items": {
"$ref": "#/$defs/items"
}
},
"required": ["$schema", "title", "items"],
"additionalProperties": false,
"$defs": {
"toggle": {
"type": "object",
"properties": {
"entity": {
"$ref": "#/$defs/entity"
},
"name": {
"$ref": "#/$defs/name"
},
"type": {
"$ref": "#/$defs/type",
"const": "toggle"
},
"content": {
"$ref": "#/$defs/content"
},
"tap_action": {
"type": "object",
"properties": {
"confirm": {
"$ref": "#/$defs/confirm"
},
"pin": {
"$ref": "#/$defs/pin"
}
},
"additionalProperties": false
}
},
"required": ["entity", "name", "type"],
"additionalProperties": false
},
"template": {
"oneOf": [
{
"type": "object",
"properties": {
"entity": {
"$ref": "#/$defs/entity",
"deprecated": true,
"title": "Schema change:",
"description": "Use 'tap_action' instead to mirror Home Assistant."
},
"name": {
"$ref": "#/$defs/name"
},
"content": {
"$ref": "#/$defs/content"
},
"type": {
"$ref": "#/$defs/type",
"const": "template",
"deprecated": true,
"title": "Schema change:",
"description": "Use 'info' or 'tap' instead."
}
},
"required": ["name", "content", "type"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"entity": {
"$ref": "#/$defs/entity"
},
"name": {
"$ref": "#/$defs/name"
},
"content": {
"$ref": "#/$defs/content"
},
"type": {
"$ref": "#/$defs/type",
"const": "template",
"deprecated": true,
"title": "Schema change:",
"description": "Use 'info' or 'tap' instead."
},
"tap_action": {
"$ref": "#/$defs/tap_action"
}
},
"required": ["name", "content", "type", "tap_action"],
"additionalProperties": false
}
]
},
"info": {
"type": "object",
"properties": {
"name": {
"$ref": "#/$defs/name"
},
"content": {
"$ref": "#/$defs/content"
},
"type": {
"$ref": "#/$defs/type",
"const": "info"
}
},
"required": ["name", "content", "type"],
"additionalProperties": false
},
"tap": {
"type": "object",
"properties": {
"entity": {
"$ref": "#/$defs/entity"
},
"name": {
"$ref": "#/$defs/name"
},
"type": {
"$ref": "#/$defs/type",
"const": "tap"
},
"content": {
"$ref": "#/$defs/content"
},
"service": {
"$ref": "#/$defs/entity",
"deprecated": true,
"title": "Schema change:",
"description": "Use 'tap_action' instead to mirror Home Assistant."
},
"tap_action": {
"$ref": "#/$defs/tap_action"
}
},
"required": ["name", "type"],
"additionalProperties": false
},
"group": {
"type": "object",
"properties": {
"entity": {
"$ref": "#/$defs/entity",
"type": "string",
"deprecated": true,
"title": "Schema change:",
"description": "'entity' is no longer necessary and should now be removed."
},
"name": {
"title": "Menu item's familiar name.",
"type": "string"
},
"title": {
"title": "Sub menu's title once displayed.",
"type": "string"
},
"type": {
"$ref": "#/$defs/type",
"const": "group"
},
"content": {
"$ref": "#/$defs/content"
},
"items": {
"$ref": "#/$defs/items"
}
},
"required": ["name", "title", "type", "items"],
"additionalProperties": false
},
"type": {
"title": "Menu item type",
"description": "One of 'info', 'tap', 'toggle' or 'group'."
},
"items": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/$defs/toggle"
},
{
"$ref": "#/$defs/template"
},
{
"$ref": "#/$defs/tap"
},
{
"$ref": "#/$defs/info"
},
{
"$ref": "#/$defs/group"
}
]
}
},
"name": {
"title": "Your familiar name to display in the menu item",
"type": "string"
},
"entity": {
"type": "string",
"title": "Home Assistant entity name",
"pattern": "^[^.]+\\.[^.]+$"
},
"service": {
"type": "string",
"title": "Home Assistant service name",
"pattern": "^[^.]+\\.[^.]+$"
},
"tap_action": {
"type": "object",
"title": "Action",
"description": "'confirm' field is optional.",
"properties": {
"service": {
"$ref": "#/$defs/service"
},
"confirm": {
"$ref": "#/$defs/confirm"
},
"pin": {
"$ref": "#/$defs/pin"
},
"data": {
"type": "object",
"title": "Your services's parameters",
"description": "The object containing the parameters and their values to be passed to the entity. No schema checking can be done here, you are on your own! On application crash, remove the parameters."
}
},
"required": ["service"]
},
"content": {
"title": "Home Assistant Template",
"description": "Jinja2 template defining the text to display. Must be included in an 'info'. Optional in a 'toggle', 'tap' and 'group'. Special characters may not render in the glance context.",
"type": "string"
},
"confirm": {
"type": "boolean",
"default": false,
"title": "Confirmation",
"description": "Optional confirmation of the action before execution as a precaution."
},
"pin": {
"type": "boolean",
"default": false,
"title": "PIN Confirmation",
"description": "Optional PIN confirmation of the action before execution as a precaution. Has precedence over 'confirm': true if both are set."
},
"glance": {
"type": "object",
"title": "Glance customisation",
"oneOf": [
{
"properties": {
"type": {
"title": "Glance type",
"description": "One of 'info' or 'status'. 'info' renders the template specified in the 'content' field inside the glance view. 'status' reverts to the default glance view and ignores the 'content' field. This allows for disabling the template temporarily.",
"const": "info"
},
"content": {
"$ref": "#/$defs/content"
}
},
"required": ["type", "content"]
},
{
"properties": {
"type": {
"title": "Glance type",
"description": "One of 'info' or 'status'.",
"const": "status"
}
},
"required": ["type"]
}
]
}
}
}