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