Install packages ptpython
rsa
and requests
pip install requests rsa ptpython
# or
python3 -m pip install requests rsa
- Simple command line syntax
- Cache login status (
stok
) - Automatically renew token if expired
- Extensible, customizable
- Interactive shell
$ ./mercury.py --help
usage: mercury.py [-c CONFIG] [-h HOST] [-u USERNAME] [-p PASSWORD] [-d]
[--help]
[camera] {interactive,send,presets,goto,mask} ...
positional arguments:
camera Specify the Camera to use. default: cmdline
{interactive,send,presets,goto,mask}
Functions to call
action_args Function arguments
optional arguments:
-c CONFIG, --config CONFIG
config file to read IPC endpoints
-h HOST, --host HOST Camera web interface URL
-u USERNAME, --username USERNAME
Camera admin username
-p PASSWORD, --password PASSWORD
Camera admin password
-d, --debug Print additional debug logs
--help RT
There are two options.
-
the predefined payloads inside mercury.py.
./mercury.py ipc1 send PAYLOAD_SET_LED_OFF
-
Send payload string directly.
./mercury.py ipc1 send "{'method': 'do', 'preset': {'goto_preset': {'id': '1'}}}"
Print presets config of specific camera. Preset ID and name is ordered by create time, NOT numeric, NOT necessarily start from 1.
$ ./mercury.py ipc1 presets
INFO sendRequest Sending request: {'method': 'get', 'preset': {'name': ['preset']}}
Presets:
2 面壁
INFO main Saving configs back
INFO main Bye
Goto saved location with numeric ID.
./mercury.py ipc1 goto 2
Set lens mask on or off:
./mercury.py ipc1 mask on # or off
Get mask status, invoke with no parameter.
$ ./mercury.py ipc1 mask
INFO sendRequest Sending request: {'method': 'get', 'lens_mask': {'name': ['lens_mask_info']}}
INFO main Lens mask is OFF
INFO main Saving configs back
INFO main Bye
After logged in, you'll get an interactive shell. Requires ptpython
.
You could e.g. send your payload data to mer.sendRequest
.
$ ./mercury.py ipc1 interactive
INFO login Retrive RSA Pubkey and Nonce
DEBUG login Response: 200 {'error_code': -40401, 'data': {'code': -40410, 'encrypt_type': ['1', '2'], 'key': 'MIGf<redacted>iwIDAQAB', 'nonce': '3f<redacted>0'}}
DEBUG login Encrypted password: J+WJ2<redacted>sv4=
INFO login Login with username [admin]
DEBUG login Login response: 200 {'error_code': 0, 'stok': '9fafab<redacted>6dfec', 'user_group': 'root'}
DEBUG <module> <__main__.MercuryIPC object at 0x1065c77d0>
INFO <module> Mercury IPC is available at variable [cam], fire at will ;p
>>> cam.send_request(cam.PAYLOAD_SET_LENMASK_ON)
DEBUG send_request Sending request: {'method': 'set', 'lens_mask': {'lens_mask_info': {'enabled': 'on'}}}
DEBUG send_request Response: 200 {'error_code': 0}
<Response [200]>
>>> cam.send_request({"method":"do","preset":{"goto_preset": {"id": "3"}}})
DEBUG send_request Sending request: {'method': 'do', 'preset': {'goto_preset': {'id': '3'}}}
DEBUG send_request Response: 200 {'error_code': 0}
<Response [200]>
// add PTZ preset position 添加预置点
{"method":"do","preset":{"set_preset":{"name":"name","save_ptz":"1"}}}
// PTZ to preset position 转动到预置点
{"method":"do","preset":{"goto_preset": {"id": "1"}}}
// PTZ by coord 按坐标转动
{"method":"do","motor":{"move":{"x_coord":"10","y_coord":"0"}}}
// PTZ horizontal by step 水平步进
{"method":"do","motor":{"movestep":{"direction":"0"}}}
// PTZ vertical by step 垂直步进
{"method":"do","motor":{"movestep":{"direction":"90"}}}
// stop PTZ 停止步进
{"method":"do","motor":{"stop":"null"}}
//reset PTZ 云台重置
{"method":"do","motor":{"manual_cali":"null"}}
// lens mask 镜头遮蔽
{"method":"set","lens_mask":{"lens_mask_info":{"enabled":"on"}}}
// manual alarm 手动报警
{"method":"do","msg_alarm":{"manual_msg_alarm":{"action":"start"}}}
{"method":"do","msg_alarm":{"manual_msg_alarm":{"action":"stop"}}}
// toggle green led 绿色led开关
{"method":"set","led":{"config":{"enabled":"off"}}}
{"method":"set","led":{"config":{"enabled":"on"}}}
//auto track moving obj 智能追踪 摄像机追随移动物体
{"method":"set","target_track":{"target_track_info":{"enabled":"on"}}}
{"method":"set","target_track":{"target_track_info":{"enabled":"off"}}}
//alarm if found moving obj 检测到移动物体时报警
{"method":"set","msg_alarm":{"chn1_msg_alarm_info":{"enabled":"on","alarm_type":"0","alarm_mode":["sound"]}}}
{"method":"set","msg_alarm":{"chn1_msg_alarm_info":{"enabled":"on","alarm_type":"0","alarm_mode":["light"]}}}
{"method":"set","msg_alarm":{"chn1_msg_alarm_info":{"enabled":"on","alarm_type":"0","alarm_mode":["sound","light"]}}}
{"method":"set","msg_alarm_plan":{"chn1_msg_alarm_plan":{"enabled":"on","alarm_plan_1":"0000-0000%2c127"}}}
//motion detection 移动侦测 与 侦测灵敏度
{"method":"set","motion_detection":{"motion_det":{"enabled":"off"}}}
{"method":"set","motion_detection":{"motion_det":{"enabled":"on"}}}
{"method":"set","motion_detection":{"motion_det":{"digital_sensitivity":"20"}}}
{"method":"set","motion_detection":{"motion_det":{"digital_sensitivity":"50"}}}
{"method":"set","motion_detection":{"motion_det":{"digital_sensitivity":"80"}}}
//enable record and plan 是否录制与录制计划
{"method":"set","record_plan":{"chn1_channel":{"enabled":"off","monday":"%5b%220000-2400%3a2%22%5d","tuesday":"%5b%220000-2400%3a2%22%5d","wednesday":"%5b%220000-2400%3a2%22%5d","thursday":"%5b%220000-2400%3a2%22%5d","friday":"%5b%220000-2400%3a2%22%5d","saturday":"%5b%220000-2400%3a2%22%5d","sunday":"%5b%220000-2400%3a2%22%5d"}}}
{"method":"set","record_plan":{"chn1_channel":{"enabled":"on","monday":"%5b%220000-2400%3a2%22%5d","tuesday":"%5b%220000-2400%3a2%22%5d","wednesday":"%5b%220000-2400%3a2%22%5d","thursday":"%5b%220000-2400%3a2%22%5d","friday":"%5b%220000-2400%3a2%22%5d","saturday":"%5b%220000-2400%3a2%22%5d","sunday":"%5b%220000-2400%3a2%22%5d"}}}
//reboot and timing reboot 重启与定时重启
{"method":"do","system":{"reboot":"null"}}
{"method":"set","timing_reboot":{"reboot":{"enabled":"off","day":"7","time":"03%3a00%3a00"}}}
{"method":"set","timing_reboot":{"reboot":{"enabled":"on","day":"7","time":"03%3a00%3a00"}}}
//greetings 个性语音提示
{"method":"set","greeter":{"chn1_greeter_ctrl":{"enabled":"on"}}}
{"method":"set","greeter":{"chn1_greeter_ctrl":{"enabled":"off"}}}
//greeting volume 音量
{"method":"set","greeter":{"chn1_greeter_audio":{"enter_volume":"77","leave_volume":"77"}}}
//play greetings 播放语音
{"method":"do","greeter":{"test_audio":{"force":"1"}}} 播放默认语音
{"method":"do","greeter":{"test_audio":{"id":"4096","force":"1"}}} 播放指定语音
//id
//0 无
//12288 你好
//4096-4104 依次为 你好欢迎光临 .....
//set enter or leave greetings 设置进入或离开语音
{"method":"set","greeter":{"chn1_greeter_audio":{"enter_audio_id":"0"}}} 无
{"method":"set","greeter":{"chn1_greeter_audio":{"leave_audio_id":"4104"}}}
ref: http://blog.xiazhiri.com/Mercury-MIPC251C-4-Reverse.html