Code Monkey home page Code Monkey logo

mercury-ipc-control's Introduction

Prerequisites

Install packages ptpython rsa and requests

pip install requests rsa ptpython
# or
python3 -m pip install requests rsa

Features

  • Simple command line syntax
  • Cache login status (stok)
  • Automatically renew token if expired
  • Extensible, customizable
  • Interactive shell

Usage

$ ./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

Commands

send

There are two options.

  1. the predefined payloads inside mercury.py.

    ./mercury.py ipc1 send PAYLOAD_SET_LED_OFF
  2. Send payload string directly.

    ./mercury.py ipc1 send "{'method': 'do', 'preset': {'goto_preset': {'id': '1'}}}"

presets

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

Goto saved location with numeric ID.

./mercury.py ipc1 goto 2

mask

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

Interactive mode

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]>

Data Example

// 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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.