UNPKG

@mxtommy/kip

Version:

An advanced and versatile marine instrumentation package to display Signal K data.

856 lines (855 loc) 31.5 kB
{ "openapi": "3.0.0", "info": { "version": "1.1.0", "title": "KIP Plugin API", "description": "Endpoints\n- List remote displays and control remote dashboard of a given KIP instance.\n- Configure data series for widget framework historical data series and data chart widgets.", "termsOfService": "http://signalk.org/terms/", "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, "externalDocs": { "url": "http://signalk.org/specification/", "description": "Signal K specification." }, "servers": [ { "url": "/" } ], "tags": [ { "name": "Displays", "description": "KIP remote display discovery and control." }, { "name": "Series", "description": "KIP widget history series configuration." } ], "components": { "schemas": { "DisplayInfo": { "type": "object", "properties": { "displayId": { "type": "string", "description": "KIP instance UUID" }, "displayName": { "type": "string", "nullable": true } }, "required": [ "displayId" ] }, "ScreenItem": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "icon": { "type": "string" } }, "required": [ "id", "name", "icon" ] }, "ScreenListOrNull": { "type": "array", "nullable": true, "items": { "$ref": "#/components/schemas/ScreenItem" } }, "SuccessResponse": { "type": "object", "properties": { "state": { "type": "string", "enum": [ "SUCCESS" ] }, "statusCode": { "type": "integer", "enum": [ 200 ] } }, "required": [ "state", "statusCode" ] }, "ErrorResponse": { "type": "object", "properties": { "state": { "type": "string", "enum": [ "FAILED" ] }, "statusCode": { "type": "integer" }, "message": { "type": "string" } }, "required": [ "state", "statusCode", "message" ] }, "ActiveScreenSetRequest": { "type": "object", "properties": { "screenIdx": { "type": "integer", "nullable": true, "description": "Index of active screen or null to clear" } } }, "AnyObjectOrNull": { "type": "object", "nullable": true, "additionalProperties": true }, "SeriesDefinitionBase": { "type": "object", "properties": { "seriesId": { "type": "string" }, "datasetUuid": { "type": "string" }, "ownerWidgetUuid": { "type": "string" }, "ownerWidgetSelector": { "type": "string", "nullable": true }, "path": { "type": "string" }, "context": { "type": "string", "nullable": true }, "source": { "type": "string", "nullable": true }, "timeScale": { "type": "string", "nullable": true }, "period": { "type": "integer", "nullable": true }, "retentionDurationMs": { "type": "integer", "nullable": true }, "sampleTime": { "type": "integer", "nullable": true }, "enabled": { "type": "boolean", "default": true }, "methods": { "type": "array", "items": { "type": "string", "enum": [ "min", "max", "avg", "sma", "ema" ] } }, "reconcileTs": { "type": "integer", "nullable": true } }, "required": [ "seriesId", "datasetUuid", "ownerWidgetUuid", "ownerWidgetSelector", "path", "enabled" ] }, "ConcreteSeriesDefinition": { "allOf": [ { "$ref": "#/components/schemas/SeriesDefinitionBase" }, { "type": "object", "properties": { "expansionMode": { "nullable": true, "description": "Null for concrete series definitions." }, "familyKey": { "type": "string", "nullable": true, "description": "Concrete series do not use family key and should leave this null." }, "allowedIds": { "type": "array", "nullable": true, "items": { "type": "string" }, "description": "Concrete series do not use template filters and should leave this null." }, "trackedDevices": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "id": { "type": "string" }, "source": { "type": "string" } }, "required": [ "id", "source" ] }, "description": "Concrete series do not use tracked device template filters and should leave this null." } } } ] }, "TemplateSeriesDefinition": { "allOf": [ { "$ref": "#/components/schemas/SeriesDefinitionBase" }, { "type": "object", "properties": { "ownerWidgetSelector": { "type": "string", "enum": [ "widget-bms", "widget-solar-charger", "widget-charger", "widget-inverter", "widget-alternator", "widget-ac" ] }, "expansionMode": { "type": "string", "enum": [ "bms-battery-tree", "solar-tree", "charger-tree", "inverter-tree", "alternator-tree", "ac-tree" ] }, "familyKey": { "type": "string", "enum": [ "batteries", "solar", "chargers", "inverters", "alternators", "ac" ] }, "allowedIds": { "type": "array", "nullable": true, "items": { "type": "string" }, "description": "Template device IDs to include. Null or empty includes all discovered devices." }, "trackedDevices": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "id": { "type": "string" }, "source": { "type": "string" } }, "required": [ "id", "source" ] }, "description": "Explicit tracked device id/source pairs to expand. When provided, template expansion skips self-tree discovery and emits one concrete series per pair and metric." } }, "required": [ "ownerWidgetSelector", "expansionMode", "familyKey" ] } ] }, "SeriesDefinition": { "oneOf": [ { "$ref": "#/components/schemas/ConcreteSeriesDefinition" }, { "$ref": "#/components/schemas/TemplateSeriesDefinition" } ] }, "SeriesReconcileResult": { "type": "object", "properties": { "created": { "type": "integer" }, "updated": { "type": "integer" }, "deleted": { "type": "integer" }, "total": { "type": "integer" } }, "required": [ "created", "updated", "deleted", "total" ] } }, "parameters": { "DisplayIdParam": { "in": "path", "required": true, "name": "displayId", "description": "KIP instance UUID", "schema": { "type": "string" } }, "SeriesIdParam": { "in": "path", "required": true, "name": "seriesId", "description": "Series identifier (dataset UUID)", "schema": { "type": "string" } } }, "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" }, "cookieAuth": { "type": "apiKey", "in": "cookie", "name": "JAUTHENTICATION" } } }, "security": [ { "cookieAuth": [] }, { "bearerAuth": [] } ], "paths": { "/plugins/kip/displays": { "get": { "tags": [ "Displays" ], "summary": "List available KIP displays", "responses": { "200": { "description": "List of KIP instances discovered under self.displays", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DisplayInfo" } } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/plugins/kip/displays/{displayId}": { "parameters": [ { "$ref": "#/components/parameters/DisplayIdParam" } ], "get": { "tags": [ "Displays" ], "summary": "List screens for a display (self.displays.{displayId}.value.screens)", "responses": { "200": { "description": "Array of screen entries (or null)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScreenListOrNull" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": [ "Displays" ], "summary": "Set display entry under self.displays.{displayId}", "requestBody": { "required": false, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnyObjectOrNull" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/plugins/kip/displays/{displayId}/screenIndex": { "parameters": [ { "$ref": "#/components/parameters/DisplayIdParam" } ], "get": { "tags": [ "Displays" ], "summary": "Get current screen index for display (self.displays.{displayId}.screenIndex)", "responses": { "200": { "description": "Current screen index or null", "content": { "application/json": { "schema": { "type": "integer", "nullable": true } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": [ "Displays" ], "summary": "Set current screen index for display (self.displays.{displayId}.screenIndex)", "requestBody": { "required": false, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ActiveScreenSetRequest" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/plugins/kip/displays/{displayId}/activeScreen": { "parameters": [ { "$ref": "#/components/parameters/DisplayIdParam" } ], "get": { "tags": [ "Displays" ], "summary": "Get requested screen change index (self.displays.{displayId}.activeScreen)", "responses": { "200": { "description": "Requested screen index or null", "content": { "application/json": { "schema": { "type": "integer", "nullable": true } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": [ "Displays" ], "summary": "Request a screen change (sets self.displays.{displayId}.activeScreen)", "requestBody": { "required": false, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ActiveScreenSetRequest" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/plugins/kip/series": { "get": { "tags": [ "Series" ], "summary": "List all configured history series", "responses": { "200": { "description": "Current series definitions", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDefinition" } } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/plugins/kip/series/{seriesId}": { "parameters": [ { "$ref": "#/components/parameters/SeriesIdParam" } ], "put": { "tags": [ "Series" ], "summary": "Create or update a series definition", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDefinition" } } } }, "responses": { "200": { "description": "Series upserted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDefinition" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Series" ], "summary": "Delete a series definition", "responses": { "200": { "description": "Series removed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "404": { "description": "Series not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/plugins/kip/series/reconcile": { "post": { "tags": [ "Series" ], "summary": "Reconcile full desired series set", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesDefinition" } } } } }, "responses": { "200": { "description": "Reconcile summary", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesReconcileResult" } } } }, "400": { "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } } } }