The Python script capture_device.py
is a wrapper that implements Echo360 Capture Device API Version 3_0.
It is useful as a support tool to control and monitor a capture device.
The classes Echo360CaptureDevice
and Echo360CaptureDeviceResponse
can be used to automate the operation of a capture device.
I am not associated in any way with echo360.com.
Simple help is available using:
python capture_device.py --help
The following are examples of typical commands:
python capture_device.py -s https://10.10.10.10 -p "letmein" -c new-capture --profile "Standard Lecture"
python capture_device.py -s https://10.10.10.10 -p "letmein" -c confidence-monitor --profile "Standard Lecture"
python capture_device.py -s https://10.10.10.10 -p "letmein" -c status --count 4 --sleep 5
python capture_device.py -s https://10.10.10.10 -p "letmein" -c status --count 9999 --sleep 1
python capture_device.py -s https://10.10.10.10 -p "letmein" -c pause
python capture_device.py -s https://10.10.10.10 -p "letmein" -c resume
python capture_device.py -s https://10.10.10.10 -p "letmein" -c extend --duration 300
python capture_device.py -s https://10.10.10.10 -p "letmein" -c stop
python capture_device.py -s https://10.10.10.10 -p "letmein" -c ping --url www.google.com
python capture_device.py -s https://10.10.10.10 -p "letmein" -c traceroute --timeout 20 --url www.google.com
python capture_device.py -s https://10.10.10.10 -p "letmein" -c log --count 3
python capture_device.py -s https://10.10.10.10 -p "letmein" -c system-info --timeout 20
python capture_device.py -s https://10.10.10.10 -p "letmein" -c test-status
python capture_device.py -s https://10.10.10.10 -p "letmein" -c test-capture --sleep 15
python capture_device.py -s https://10.10.10.10 -p "letmein" -c test-confidence --sleep 15
The default username is admin
. Note all lecture controllers are able to use secure HTTP (HTTPS). If that is the case, use http
instead of https
.
Replace the IP address (10.10.10.10
) in the URL with the IP address of your Lecture Capture device.
Two command windows, one for monitoring:
python capture_device.py -s https://10.10.10.10 -p "letmein" -c status --count 9999 --sleep 1
And the other for the control commands:
python capture_device.py -s https://10.10.10.10 -p "letmein" -c new-capture --profile "Standard Lecture"
python capture_device.py -s https://10.10.10.10 -p "letmein" -c pause
python capture_device.py -s https://10.10.10.10 -p "letmein" -c resume
python capture_device.py -s https://10.10.10.10 -p "letmein" -c extend --duration 300
python capture_device.py -s https://10.10.10.10 -p "letmein" -c stop
The monitoring output while the commands above are executed will look something like:
...
State=inactive
State=waiting; duration=5400; start time (local)=2014-07-09T15:08:22
State=waiting; duration=5400; start time (local)=2014-07-09T15:08:22
State=waiting; duration=5400; start time (local)=2014-07-09T15:08:22
State=waiting; duration=5400; start time (local)=2014-07-09T15:08:22
State=active; duration=5400; start time (local)=2014-07-09T15:08:22
State=active; duration=5400; start time (local)=2014-07-09T15:08:22
...
State=active; duration=5400; start time (local)=2014-07-09T15:08:22
State=active; duration=5400; start time (local)=2014-07-09T15:08:22
State=paused; duration=5400; start time (local)=2014-07-09T15:08:22
State=paused; duration=5400; start time (local)=2014-07-09T15:08:22
...
State=paused; duration=5400; start time (local)=2014-07-09T15:08:22
State=paused; duration=5400; start time (local)=2014-07-09T15:08:22
State=active; duration=5400; start time (local)=2014-07-09T15:08:22
State=active; duration=5400; start time (local)=2014-07-09T15:08:22
...
State=active; duration=5700; start time (local)=2014-07-09T15:08:22
State=active; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=complete; duration=5700; start time (local)=2014-07-09T15:08:22
State=inactive
State=inactive
...
The script contains examples of how to use the classes Echo360CaptureDevice
and Echo360CaptureDeviceResponse
.
sample-status.py
is an example using the status/system
API:
from capture_device import Echo360CaptureDevice
import sys
device = Echo360CaptureDevice('https://10.10.10.10', 'admin', 'letmein', timeout=5)
if device.connection_test.success():
print(str(device.status_system()))
else:
print('Unknown error ({0}): {1}'.format(device.connection_test._result_code, device.connection_test._result_message))
It returns:
status_system: success Ok
Data: content_state: idle
last_sync: 2014-06-11T02:50:41.276Z
last_sync_local: 2014-06-11T12:50:41
serial_number: ff-ff-08-00-ff-ff
system_version: 5.4.39512
up_since: 2014-06-07T15:33:45.198Z
up_since_local: 2014-06-08T01:33:45
utc_offset: 600
wall_clock_time: 2014-06-11T02:50:56.749Z
wall_clock_time_local: 2014-06-11T12:50:56
This is a proof of concept for a Smart Capture HD Python controller. It works from a Linux, OS/X command line, or a Raspberry Pi.
Requires diesel.io.
If used on a Raspberry Pi Model B, an LCD Display (and its associated software) is recommended.
The command sudo python echo360/monitor.py room_name
or sudo nohup python echo360/monitor.py room_name &
will start the controller. The script runs as root
to access the LCD display.
The Raspberry Pi button and CLI character mapping is as follows:
button | character | function |
---|---|---|
select | a | start |
left | b | pause/resume |
right | c | stop |
up | t | button press test |
down | s | display current status |
The functions (characters: a
, b
, c
, t
, s
) can also be used from the command line.
Typical log output (log timestamps are UTC):
[2014/07/21 00:56:46] {monitor} INFO:starting state change monitor for https://10.10.10.10 user admin
[2014/07/21 00:56:46] {monitor} INFO:Commands: a=start/extend; b=pause/resume; c=stop
[2014/07/21 00:56:46] {monitor} INFO:No command line input. Probably running as a daemon.
[2014/07/21 00:56:46] {monitor} INFO:Ready for LCD button
[2014/07/21 00:56:47] {monitor} INFO:Message: State: inactive
[2014/07/21 00:56:55] {monitor} INFO:Execute user command: a
[2014/07/21 00:56:55] {monitor} INFO:Change state to start
[2014/07/21 00:56:55] {monitor} INFO:Message: Command: start
[2014/07/21 00:56:55] {monitor} INFO:Device command: start
[2014/07/21 00:56:55] {monitor} INFO:Name=Lecture Capture 2014-07-21 10:56 room_name
[2014/07/21 00:56:56] {monitor} INFO:Message: State: waiting
[2014/07/21 00:57:05] {monitor} INFO:Message: State: active
[2014/07/21 00:57:17] {monitor} INFO:Execute user command: c
[2014/07/21 00:57:17] {monitor} INFO:Change state to stop
[2014/07/21 00:57:17] {monitor} INFO:Message: Command: stop
[2014/07/21 00:57:17] {monitor} INFO:Device command: stop
[2014/07/21 00:57:17] {monitor} INFO:Message: State: complete
[2014/07/21 00:57:36] {monitor} INFO:Message: State: inactive