cec-web
A REST micro webservice to control devices via the CEC bus in HDMI.
Written in Go with some help from Gin, Go-Flags and cec.go.
Usage
Usage:
cec-web [OPTIONS]
Application Options:
-i, --ip= ip to listen on (127.0.0.1)
-p, --port= tcp port to listen on (8080)
-a, --adapter= cec adapter to connect to [RPI, usb, ...]
-n, --name= OSD name to announce on the cec bus (REST Gateway)
JSON API
The app provides the following JSON based RESTful API:
Scan CEC bus
GET /info
- Information about all the connected devices on the CEC bus
Resonse
HTTP/1.1 200 OK
{
"Playback":{
"OSDName":"REST Gateway",
"Vendor":"Panasonic",
"LogicalAddress":4,
"ActiveSource":false,
"PowerStatus":"on",
"PhysicalAddress":"f.f.f.f"
},
"TV":{
"OSDName":"TV",
"Vendor":"Panasonic",
"LogicalAddress":0,
"ActiveSource":false,
"PowerStatus":"standby",
"PhysicalAddress":"0.0.0.0"
}
}
Power
GET /power/:device
- Request device power status
PUT /power/:device
- Power on device
DELETE /power/:device
- Put device in standby
:device
is the name of the device on the CEC bus (see GET /info
)
Responses
success (PUT/DELETE); is powered on (GET)
HTTP/1.1 204 No Content
is in standy/no power (GET)
HTTP/1.1 404 Not Found
Volume (not supported by all devices)
PUT /volume/up
- Increase volume
PUT /volume/down
- Reduce volume
PUT /volume/mute
- Mute/unmute audio
Response
HTTP/1.1 204 No Content
Remote control
PUT /key/:device/:key
- Send key press command followed by key release
:device
is the name of the device on the CEC bus (see GET /info
)
:key
is the name (e.g. down
) or the keycode in hex (e.g. 0x00
) of a remote key
Response
HTTP/1.1 204 No Content
Raw CEC commands
POST /transmit
- Send a list of CEC commands over the bus
data example:
[
"40:04",
"40:64:00:48:65:6C:6C:6F:20:77:6F:72:6C:64"
]
Hint: Use cec-o-matic to generate commands.