457 lines
8.7 KiB
JSON
457 lines
8.7 KiB
JSON
{
|
|
"openapi": "3.0.3",
|
|
"info": {
|
|
"title": "BTClock API",
|
|
"version": "3.0",
|
|
"description": "BTClock V3 API"
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "/api/"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/status": {
|
|
"get": {
|
|
"tags": ["system"],
|
|
"summary": "Get current status",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/system_status": {
|
|
"get": {
|
|
"tags": ["system"],
|
|
"summary": "Get system status",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/settings": {
|
|
"get": {
|
|
"tags": ["system"],
|
|
"summary": "Get current settings",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ArrayOfLeds"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": ["system"],
|
|
"summary": "Save current settings",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Settings"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": ["system"],
|
|
"summary": "Save current settings",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Settings"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/action/pause": {
|
|
"get": {
|
|
"tags": ["timer"],
|
|
"summary": "Pause screen rotation",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/action/timer_restart": {
|
|
"get": {
|
|
"tags": ["timer"],
|
|
"summary": "Restart screen rotation",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/show/screen/{id}": {
|
|
"get": {
|
|
"tags": ["screens"],
|
|
"summary": "Set screen to show",
|
|
"parameters": [
|
|
{
|
|
"in": "path",
|
|
"name": "id",
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 1
|
|
},
|
|
"required": true,
|
|
"description": "ID of screen to show"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/show/text/{text}": {
|
|
"get": {
|
|
"tags": ["screens"],
|
|
"summary": "Set text to show",
|
|
"parameters": [
|
|
{
|
|
"in": "path",
|
|
"name": "text",
|
|
"schema": {
|
|
"type": "string",
|
|
"default": "text"
|
|
},
|
|
"required": true,
|
|
"description": "Text to show"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/show/custom": {
|
|
"post": {
|
|
"tags": ["screens"],
|
|
"summary": "Set text to show (advanced)",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CustomText"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/full_refresh": {
|
|
"get": {
|
|
"tags": ["system"],
|
|
"summary": "Force full refresh of all displays",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/lights": {
|
|
"get": {
|
|
"tags": ["lights"],
|
|
"summary": "Get LEDs status",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ArrayOfLeds"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/lights/set": {
|
|
"patch": {
|
|
"tags": ["lights"],
|
|
"summary": "Set individual LEDs",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ArrayOfLedsInput"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "succesful operation"
|
|
},
|
|
"400": {
|
|
"description": "invalid colors or wrong amount of LEDs"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/lights/color/{color}": {
|
|
"get": {
|
|
"tags": ["lights"],
|
|
"summary": "Turn on LEDs with specific color",
|
|
"parameters": [
|
|
{
|
|
"in": "path",
|
|
"name": "color",
|
|
"schema": {
|
|
"type": "string",
|
|
"default": "FFCC00"
|
|
},
|
|
"required": true,
|
|
"description": "Color in RGB hex"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/lights/off": {
|
|
"get": {
|
|
"tags": ["lights"],
|
|
"summary": "Turn LEDs off",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/restart": {
|
|
"get": {
|
|
"tags": ["system"],
|
|
"summary": "Restart BTClock",
|
|
"responses": {
|
|
"200": {
|
|
"description": "successful operation"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"RgbColorValues": {
|
|
"type": "object",
|
|
"properties": {
|
|
"red": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 255,
|
|
"example": 255
|
|
},
|
|
"green": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 255,
|
|
"example": 204
|
|
},
|
|
"blue": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 255,
|
|
"example": 0
|
|
}
|
|
}
|
|
},
|
|
"RgbColorHex": {
|
|
"type": "object",
|
|
"properties": {
|
|
"hex": {
|
|
"type": "string",
|
|
"pattern": "^#(?:[0-9a-fA-F]{3}){1,2}$",
|
|
"example": "#FFCC00"
|
|
}
|
|
}
|
|
},
|
|
"RgbColorValueAndHex": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RgbColorValues"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/RgbColorHex"
|
|
}
|
|
]
|
|
},
|
|
"RgbColorValueOrHex": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RgbColorValues"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/RgbColorHex"
|
|
}
|
|
]
|
|
},
|
|
"ArrayOfLeds": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RgbColorValueAndHex"
|
|
}
|
|
},
|
|
"ArrayOfLedsInput": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RgbColorValueOrHex"
|
|
}
|
|
},
|
|
"Settings": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fetchEurPrice": {
|
|
"type": "boolean",
|
|
"description": "Fetch EUR price instead of USD"
|
|
},
|
|
"fgColor": {
|
|
"type": "string",
|
|
"default": 16777215,
|
|
"description": "ePaper foreground (text) color"
|
|
},
|
|
"bgColor": {
|
|
"type": "string",
|
|
"default": 0,
|
|
"description": "ePaper background color"
|
|
},
|
|
"ledTestOnPower": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Do LED test on power-on"
|
|
},
|
|
"ledFlashOnUpd": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Flash LEDs on new block"
|
|
},
|
|
"mdnsEnabled": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Enable mDNS"
|
|
},
|
|
"otaEnabled": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Enable over-the-air updates"
|
|
},
|
|
"stealFocus": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Steal focus on new block"
|
|
},
|
|
"mcapBigChar": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Use big characters for market cap screen"
|
|
},
|
|
"mempoolInstance": {
|
|
"type": "string",
|
|
"default": "mempool.space",
|
|
"description": "Mempool.space instance to connect to"
|
|
},
|
|
"ledBrightness": {
|
|
"type": "integer",
|
|
"default": 128,
|
|
"description": "Brightness of LEDs"
|
|
},
|
|
"fullRefreshMin": {
|
|
"type": "integer",
|
|
"default": 60,
|
|
"description": "Full refresh time of ePaper displays in minutes"
|
|
},
|
|
"screen[0]": {
|
|
"type": "boolean"
|
|
},
|
|
"screen[1]": {
|
|
"type": "boolean"
|
|
},
|
|
"screen[2]": {
|
|
"type": "boolean"
|
|
},
|
|
"screen[3]": {
|
|
"type": "boolean"
|
|
},
|
|
"screen[4]": {
|
|
"type": "boolean"
|
|
},
|
|
"screen[5]": {
|
|
"type": "boolean"
|
|
},
|
|
"screen[6]": {
|
|
"type": "boolean"
|
|
},
|
|
"tzOffset": {
|
|
"type": "integer",
|
|
"default": 60,
|
|
"description": "Timezone offset in minutes"
|
|
},
|
|
"minSecPriceUpd": {
|
|
"type": "integer",
|
|
"default": 30,
|
|
"description": "Minimum time between price updates in seconds"
|
|
},
|
|
"timePerScreen": {
|
|
"type": "integer",
|
|
"default": 30,
|
|
"description": "Time between screens when rotating in minutes"
|
|
},
|
|
"txPower": {
|
|
"type": "integer",
|
|
"description": "WiFi Tx Power"
|
|
}
|
|
}
|
|
},
|
|
"CustomText": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"minItems": 7,
|
|
"maxItems": 7
|
|
}
|
|
}
|
|
}
|
|
}
|