mirror of https://github.com/pikvm/pikvm.git
Update api.md
This commit is contained in:
parent
f66e9d90f7
commit
61dceb329d
111
pages/api.md
111
pages/api.md
|
|
@ -43,7 +43,7 @@ $ websocat -k wss://pikvm/api/ws?stream=0 -H X-KVMD-User:admin -H X-KVMD-Passwd:
|
||||||
<details>
|
<details>
|
||||||
<summary>Output with initial events</summary>
|
<summary>Output with initial events</summary>
|
||||||
|
|
||||||
```json
|
```js
|
||||||
{"event_type": "gpio_model_state", "event": {"scheme": {"inputs": {"led1": {"hw": {"driver": "__gpio__", "pin": 19}}, "led2": {"hw": {"driver": "__gpio__", "pin": 16}}}, "outputs": {"button1": {"switch": false, "pulse": {"delay": 0.1, "min_delay": 0.1, "max_delay": 0.1}, "hw": {"driver": "__gpio__", "pin": 26}}, "button2": {"switch": false, "pulse": {"delay": 0.1, "min_delay": 0.1, "max_delay": 0.1}, "hw": {"driver": "__gpio__", "pin": 20}}, "relay1": {"switch": true, "pulse": {"delay": 0.1, "min_delay": 0.1, "max_delay": 0.1}, "hw": {"driver": "relay", "pin": 0}}, "relay2": {"switch": true, "pulse": {"delay": 2.0, "min_delay": 0.1, "max_delay": 5.0}, "hw": {"driver": "relay", "pin": 1}}}}, "view": {"header": {"title": "Switches"}, "table": [[{"type": "label", "text": "Generic GPIO leds"}], null, [{"type": "label", "text": "Test 1:"}, {"type": "input", "channel": "led1", "color": "green"}, {"type": "output", "channel": "button1", "text": "Click"}], [{"type": "label", "text": "Test 2:"}, {"type": "input", "channel": "led2", "color": "green"}, {"type": "output", "channel": "button2", "text": "Click"}], null, [{"type": "label", "text": "HID Relays /dev/hidraw0"}], null, [{"type": "label", "text": "Relay #1:"}, {"type": "output", "channel": "relay1", "text": "Boop 0.1"}], [{"type": "label", "text": "Relay #2:"}, {"type": "output", "channel": "relay2", "text": "Boop 2.0"}]]}}}
|
{"event_type": "gpio_model_state", "event": {"scheme": {"inputs": {"led1": {"hw": {"driver": "__gpio__", "pin": 19}}, "led2": {"hw": {"driver": "__gpio__", "pin": 16}}}, "outputs": {"button1": {"switch": false, "pulse": {"delay": 0.1, "min_delay": 0.1, "max_delay": 0.1}, "hw": {"driver": "__gpio__", "pin": 26}}, "button2": {"switch": false, "pulse": {"delay": 0.1, "min_delay": 0.1, "max_delay": 0.1}, "hw": {"driver": "__gpio__", "pin": 20}}, "relay1": {"switch": true, "pulse": {"delay": 0.1, "min_delay": 0.1, "max_delay": 0.1}, "hw": {"driver": "relay", "pin": 0}}, "relay2": {"switch": true, "pulse": {"delay": 2.0, "min_delay": 0.1, "max_delay": 5.0}, "hw": {"driver": "relay", "pin": 1}}}}, "view": {"header": {"title": "Switches"}, "table": [[{"type": "label", "text": "Generic GPIO leds"}], null, [{"type": "label", "text": "Test 1:"}, {"type": "input", "channel": "led1", "color": "green"}, {"type": "output", "channel": "button1", "text": "Click"}], [{"type": "label", "text": "Test 2:"}, {"type": "input", "channel": "led2", "color": "green"}, {"type": "output", "channel": "button2", "text": "Click"}], null, [{"type": "label", "text": "HID Relays /dev/hidraw0"}], null, [{"type": "label", "text": "Relay #1:"}, {"type": "output", "channel": "relay1", "text": "Boop 0.1"}], [{"type": "label", "text": "Relay #2:"}, {"type": "output", "channel": "relay2", "text": "Boop 2.0"}]]}}}
|
||||||
{"event_type": "info_extras_state", "event": {"vnc": {"name": "VNC", "description": "Show VNC information", "icon": "share/svg/vnc.svg", "path": "vnc", "keyboard_cap": false, "daemon": "kvmd-vnc", "port": 5900, "place": 20, "enabled": true}, "ipmi": {"name": "IPMI", "description": "Show IPMI information", "icon": "share/svg/ipmi.svg", "path": "ipmi", "keyboard_cap": false, "daemon": "kvmd-ipmi", "port": 623, "place": 21, "enabled": true}}}
|
{"event_type": "info_extras_state", "event": {"vnc": {"name": "VNC", "description": "Show VNC information", "icon": "share/svg/vnc.svg", "path": "vnc", "keyboard_cap": false, "daemon": "kvmd-vnc", "port": 5900, "place": 20, "enabled": true}, "ipmi": {"name": "IPMI", "description": "Show IPMI information", "icon": "share/svg/ipmi.svg", "path": "ipmi", "keyboard_cap": false, "daemon": "kvmd-ipmi", "port": 623, "place": 21, "enabled": true}}}
|
||||||
{"event_type": "info_hw_state", "event": {"platform": {"type": "rpi", "base": "Virtual Raspberry Pi"}, "health": {"temp": {"cpu": 36.511, "gpu": 35.0}, "throttling": {"raw_flags": 0, "parsed_flags": {"undervoltage": {"now": false, "past": false}, "freq_capped": {"now": false, "past": false}, "throttled": {"now": false, "past": false}}}}}}
|
{"event_type": "info_hw_state", "event": {"platform": {"type": "rpi", "base": "Virtual Raspberry Pi"}, "health": {"temp": {"cpu": 36.511, "gpu": 35.0}, "throttling": {"raw_flags": 0, "parsed_flags": {"undervoltage": {"now": false, "past": false}, "freq_capped": {"now": false, "past": false}, "throttled": {"now": false, "past": false}}}}}}
|
||||||
|
|
@ -55,5 +55,114 @@ $ websocat -k wss://pikvm/api/ws?stream=0 -H X-KVMD-User:admin -H X-KVMD-Passwd:
|
||||||
{"event_type": "atx_state", "event": {"enabled": true, "busy": false, "leds": {"power": false, "hdd": false}}}
|
{"event_type": "atx_state", "event": {"enabled": true, "busy": false, "leds": {"power": false, "hdd": false}}}
|
||||||
{"event_type": "msd_state", "event": {"enabled": true, "online": true, "busy": false, "storage": {"size": 234950152192, "free": 23514271744, "images": {}, "uploading": false}, "drive": {"image": null, "connected": false, "cdrom": true}, "features": {"multi": true, "cdrom": true}}}
|
{"event_type": "msd_state", "event": {"enabled": true, "online": true, "busy": false, "storage": {"size": 234950152192, "free": 23514271744, "images": {}, "uploading": false}, "drive": {"image": null, "connected": false, "cdrom": true}, "features": {"multi": true, "cdrom": true}}}
|
||||||
{"event_type": "streamer_state", "event": {"limits": {"max_fps": 40}, "params": {"desired_fps": 30, "quality": 80}, "snapshot": {"saved": null}, "streamer": null, "features": {"quality": true, "resolution": false}}}
|
{"event_type": "streamer_state", "event": {"limits": {"max_fps": 40}, "params": {"desired_fps": 30, "quality": 80}, "snapshot": {"saved": null}, "streamer": null, "features": {"quality": true, "resolution": false}}}
|
||||||
|
{"event_type": "loop", "event": {}}
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
After connecting the client receives a bundle of states of all KVMD subsystems. After the batch is completed, it sends a `loop` event, which means that the websocket has entered event loop mode. Now it will send new states and respond to client's requests.
|
||||||
|
|
||||||
|
Another type of event is `ping`, which can be sent by the client: `{"event_type": "ping", "event": {}}`. If the server is running, it will respond with pong: `{"event_type": "pong", "event": {}}`.
|
||||||
|
|
||||||
|
## System info: `/api/info`
|
||||||
|
On `GET` this handle will return general information about the Pi-KVM device. If you specify the `fields` query parameter, only the requested category will be selected, like `fields=system,hw`. By default all categories will be displayed:
|
||||||
|
```
|
||||||
|
$ curl -k -H X-KVMD-User:admin -H X-KVMD-Passwd:admin http://localhost:8080/api/info
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Example</summary>
|
||||||
|
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
"ok": true,
|
||||||
|
"result": {
|
||||||
|
"extras": { // Installed applications; null on internal error
|
||||||
|
"ipmi": {
|
||||||
|
"daemon": "kvmd-ipmi",
|
||||||
|
"description": "Show IPMI information",
|
||||||
|
"enabled": true,
|
||||||
|
"icon": "share/svg/ipmi.svg",
|
||||||
|
"keyboard_cap": false,
|
||||||
|
"name": "IPMI",
|
||||||
|
"path": "ipmi",
|
||||||
|
"place": 21,
|
||||||
|
"port": 623
|
||||||
|
},
|
||||||
|
"vnc": {
|
||||||
|
"daemon": "kvmd-vnc",
|
||||||
|
"description": "Show VNC information",
|
||||||
|
"enabled": true,
|
||||||
|
"icon": "share/svg/vnc.svg",
|
||||||
|
"keyboard_cap": false,
|
||||||
|
"name": "VNC",
|
||||||
|
"path": "vnc",
|
||||||
|
"place": 20,
|
||||||
|
"port": 5900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hw": { // Hardware info
|
||||||
|
"health": {
|
||||||
|
"temp": {
|
||||||
|
"cpu": 36.511, // /sys/class/thermal/thermal_zone0/temp / 1000; null on error
|
||||||
|
"gpu": 35.0 // vcgencmd measure_temp; null on error
|
||||||
|
},
|
||||||
|
"throttling": { // vcgencmd get_throttled; null on error
|
||||||
|
"parsed_flags": {
|
||||||
|
"freq_capped": {
|
||||||
|
"now": false,
|
||||||
|
"past": false
|
||||||
|
},
|
||||||
|
"throttled": {
|
||||||
|
"now": false,
|
||||||
|
"past": false
|
||||||
|
},
|
||||||
|
"undervoltage": {
|
||||||
|
"now": false,
|
||||||
|
"past": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"raw_flags": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"base": "Raspberry Pi 4 Model B Rev 1.1", // /proc/device-tree/model; null on error
|
||||||
|
"type": "rpi"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"meta": { // /etc/kvmd/meta.yaml; null on error
|
||||||
|
"kvm": {},
|
||||||
|
"server": {
|
||||||
|
"host": "localhost.localdomain"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"kernel": {
|
||||||
|
"machine": "x86_64",
|
||||||
|
"release": "5.8.14-arch1-1",
|
||||||
|
"system": "Linux",
|
||||||
|
"version": "#1 SMP PREEMPT Wed, 07 Oct 2020 23:59:46 +0000"
|
||||||
|
},
|
||||||
|
"kvmd": {
|
||||||
|
"version": "2.1"
|
||||||
|
},
|
||||||
|
"streamer": {
|
||||||
|
"app": "ustreamer",
|
||||||
|
"features": { // {} on error
|
||||||
|
"HAS_PDEATHSIG": true,
|
||||||
|
"WITH_GPIO": false,
|
||||||
|
"WITH_OMX": false,
|
||||||
|
"WITH_PTHREAD_NP": true,
|
||||||
|
"WITH_SETPROCTITLE": true
|
||||||
|
},
|
||||||
|
"version": "2.1" // "" on error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Each category is represented by its own event in the websocket (`info_hw_state`, `info_system_state`, etc). The event content has the same format as the category content in API.
|
||||||
|
|
||||||
|
## System log: `/api/log`
|
||||||
|
On `GET` this handle will display messages from all KVMD services as plain text. The `follow=1` request parameter turns the request into an infinite one and you will receive new log messages in real time. The seek parameter runs the log for the specified time in seconds. For example, `seek=3600` will show the log for the last hour. Both the `seek` and `follow` parameters can be used together.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue