sofiactl is an open source cross-platform tool and sdk to control Sofia powered Hi35xx DVR devices using hybrid JSON/binary communication protocol used by original CMS software (default port 34567)
sofiactl.pl --user username --pass password --host 192.168.0.1 --port 34567 --command command [ --of output_file ] [ -d] [ --help]
ALWAYS BACKUP your configuration with OEM CMS software before using this tool
| command | description |
|---|---|
| OPTimeSetting | Set device time to the current time |
| Users | Get users info |
| Groups | Get groups info |
| SystemInfo | Get system info |
| StorageInfo | Get storage info |
| OEMInfo | Get OEM info |
| WorkState | Get work state |
| LogExport | Download logs to the output file specified by --of parameter |
| ConfigImport | Import configuration from previously exported file specified by --if parameter. Needs reboot after. |
| ConfigExport | Download configuration files to the output file specified by --of parameter |
| CustomExport | Download additional configuration files (maybe OEM) to the output file specified by --of parameter |
| OPStorageManagerClear | Format storage (remove all recording) |
| OPStorageManagerRO | Switch partition 0 to read-only mode (not tested!) |
| OPStorageManagerRW | Switch partition 0 to read/write mode (not tested!) |
| OPFileQuery | Search records. Requires --bt, --et, --ch parameters |
| OPLogQuery | Search logs. Requires --bt, --et parameters |
| OPPTZControl | Execute PTZ command. Requires parameter --sd CommandName; available PTZ commands: DirectionRight, DirectionLeft, DirectionUp, DirectionDown, ZoomWide, ZoomTile, IrisLarge, IrisSmall, FocusNear, FocusFar. These require also parameter --pn PresetNumber; SetPreset, GotoPreset, ClearPreset |
| ConfigGet | Get configuration of specified by --co parameter section |
| AuthorityList | Get authenticated user access permissions |
| OPTimeQuery | Get device date and time |
| Ability | Get device features. Features group must be specified by --co parameter (SystemFunction, BlindCapability, Camera, Encode264ability, MultiLanguage, MultiVstd, SupportExtRecord, VencMaxFps) |
| User | Add new user. Requires --username, --newuserpass and --newusergroup parameters |
| DeleteUser | Delete existing user |
| ChannelTitle | Show channel titles |
| ChannelTitleSet | Set channel titles. Pass comma separated channel titles for all device channels |
| ConfigSet | Set configuration section (--co) value from set data (--sd) or input json file (--if). WARNING!!! There are reports about settings break using thius command. Hold on with use this option until resolution confirm. |
| Reboot | Reboot the device |
| Talk | Play file specified by --if parameter for the devices supporting talk feature. File must be in headless G711 alaw format. Use snd2pcm.sh for conversion. |
| Upgrade | Upgrade the device firmware. Firmware file name should be passed with (--if) parameter. |
| ProbeCommand | !!! DANGER !!! Execute custom protocol command (2 byte message id) specified by --co parameter, response will be decoded from json |
| ProbeCommandRaw | !!! DANGER !!! Execute custom protocol command (2 byte message id) specified by --co parameter, response will be dumped as-is to file |
| EncryptionInfo | Get encryption public key and alogrithm info on some devices |
| OPTelnetControl | Control telnet functionality (not tested!). Options: TelnetEnable, TelnetDisEnable - !!!DANGER!!! there are info that TelnetDisEnable disable telnet forever if succeed. |
| OPGetCustomData | Get channel custom data |
| OPSetCustomData | Set channel custom data |
| OPDefaultConfig | Reset the comma separated configuration sections specified by --co parameter to default settings (Preview,CommPtz,General,Account,NetCommon,Record,Encode,NetServer,Factory,CameraPARAM,Alarm) |
| OPNetModeSwitch | Switch networking mode for wireless devices to the specified by --co parameter. Options: ToAP - disconnect from wlan, enable configuration access point. ToRoute - disable configuration access point, connect to configured WLAN (!!! WARNING !!! you will lose the control if not configured access point) |
| OPLogManager | Remove all logs |
| parameter | description |
|---|---|
| --help | Print a brief help message and exits |
| --of | Path to output file filename |
| --user | Username |
| --pass | Password |
| --hashtype | Hash type. "md5based" - md5 based hash calculation (modified md5, default), "plain" - password hash as-is (plain text) |
| --host | DVR/NVR/IPC hostname or ip address |
| --port | DVR/NVR/IPC CMS port |
| --bt | Search begin time, ISO 8601 format (example: 2018-01-29T17:00:00Z) |
| --et | Search end time, ISO 8601 format |
| --ch | Channel |
| --co | Config option. Sections: AVEnc, AVEnc.VideoWidget, AVEnc.SmartH264V2.[0], Ability, Alarm, BrowserLanguage, Detect, General, General.AutoMaintain, General.General, General.Location, Guide, NetWork, NetWork.DigManagerShow, NetWork.OnlineUpgrade, NetWork.Wifi, Profuce, Record, Status.NatInfo, Storage, System, fVideo, fVideo.GUISet, Uart. Subsection could be requested in as object property, example: Uart.Comm; Ability options: SystemFunction, Camera, Ability options: SystemFunction, BlindCapability, Camera, Encode264ability, MultiLanguage, MultiVstd, SupportExtRecord, VencMaxFps |
| --dl | Download found files |
| --c | DVR/NVR/IPC command: OPTimeSetting, OPDefaultConfig, Users, Groups, WorkState, StorageInfo, SystemInfo, OEMInfo, LogExport, ConfigExport, ConfigImport, CustomExport, OPStorageManagerClear, OPStorageManagerRO, OPStorageManagerRW, OPVersionList, OPFileQuery, OPLogQuery, OPNetModeSwitch, ConfigGet, AuthorityList, OPTimeQuery, Ability, User, DeleteUser, ChannelTitle, ProbeCommand, ProbeCommandRaw |
| --username | Name of user to add/edit/delete |
| --newuserpass | Password for new user |
| --newusergroup | Group of new user. Must exists, permissions (authorities) will be copied from that group |
| --if | Input file for setting data/to upgrade firmware from |
| --sd | Set data |
| --pn | Preset number (PTZ preset commands) |
| --d | Debug output |
| --jp | JSON pretty print |
| --fd | Dsconnect immediately after sending the command without getting a reply |
DVR HJCCTV HJ-H4808BW (XiongMai, Hi3520, MBD6304T)
IP Camera PBFZ TCV-UTH200 (XiongMai, Hi3518, 50H20L_S39)
SANNCE 4CH 1080P PoE NVR (XiongMai, NBD6904T-F)
3516EV200+SC4239P Module (XiongMai, IVG85HF30PS-S)
Sony IMX307+3516EV200 Module (XiongMai, IVG-85HF20PYA-S)
USAFEQLO USA-IPT-Y307/335 (XiongMai, NRW4X-5274P-5X, XM530_80X50_8M)
GS-2AD178WTCMF/GS-2AD21WTC (XiongMai, 50X20-WG, XM530_50X20-WG_8M)
ANBIUX 3MP Outdoor IP Camera (XiongMai, R80X30-PQL, XM530_R80X30-PQL_8M)
Copyright (C) 2014-2021 667bdrm
Dual licensed under GNU General Public License 2 and commercial license
Commercial license available by request
vendor: http://www.xiongmaitech.com
vendor specifications: http://wiki.xm030.com:81/
vendor sdk: https://github.com/mondwan/cpp-surveillance-cli
Additional protocol reference : https://github.com/charmyin/IPCTimeLapse
password hashing: https://github.com/tothi/pwn-hisilicon-dvr
python sdk: https://github.com/NeiroNx/python-dvr
xm cam tricks: https://zftlab.org/pages/2018020100.html
more docs: https://github.com/OpenIPC/camerasrnd/tree/master/doc