# 通讯协议 - [协议结构](#协议结构) - [数据格式](#数据格式) - [心跳](#心跳) - [查询软件参数信息](#查询软件参数信息) - [修改软件参数信息](#修改软件参数信息) - [查询日志](#查询日志) - [添加日志](#添加日志) - [查询录像](#查询录像) - [更新录像数据](#更新录像数据) - [删除录像数据](#删除录像数据) ## 协议结构 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 操作类型 | | msgInfo | object | 每个接口特有的参数,详见每个接口定义 | ## 数据格式 ### 心跳 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 0 | | msgInfo | object | | **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | name | string | 程序名称 | | version | string | 版本信息 | * 回复 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 0 | | msgInfo | DateTime | 时间 | ### 查询软件参数信息 * 请求 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 1 | * 回复 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 1 | | msgInfo | Dictionary < string, string > | 设置信息 | ### 修改软件参数信息 * 请求 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 2 | | msgInfo | Dictionary < string, string > | 设置信息 | * 回复 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 2 | | msgInfo | object | | **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | status | bool | true: 成功; false: 失败; | | message | string | 异常信息 | ### 查询日志 * 请求 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 3 | | msgInfo | object | | **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | type | int | 0: 系统事件; 1: 用户操作; 2: 视频通道; | | date | string | 日期 | | index | int | 通道号(仅视频通道日志有效) | | month | bool | true: 检索全月; false: 不检索全月 | * 回复 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 3 | | msgInfo | object[] | | **msgInfo ** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | timestamp | DateTime | 事件事件 | | type | int | 事件类型 | | index | int | 视频通道日志类型时为通道号,其他为空 | | message | string | 消息 | | data | string | 详细信息 | ### 添加日志 * 请求 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 4 | | msgInfo | object | | **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | timestamp | DateTime | 事件事件 | | type | int | 事件类型 | | index | int | 视频通道日志类型时为通道号,其他为空 | | message | string | 消息 | | data | string | 详细信息 | ### 查询录像 * 请求 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 5 | | msgInfo | object | | > **msgInfo** 参数为空,查询最早的一条录像数据 > **msgInfo** 参数如下, 按通道、开始日期、结束日期参数查询录像数据 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | channel | int | 通道号 | | start_date | DateTime | 开始日期 | | end_date | DateTime | 结束日期 | > **msgInfo** 参数如下, 按日期查询录像数据 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | date | DateTime | 日期 | * 回复 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 5 | | msgInfo | object[] | | **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | channel | int | 通道号 | | start_date | DateTime | 开始日期 | | end_date | DateTime | 结束日期 | | duration | int | 录像时长 | | name | string | 文件名称 | | path | string | 文件路径 | ### 更新录像数据 * 请求 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 6 | | msgInfo | object | | **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | channel | int | 通道号 | | start_date | DateTime | 开始日期 | | end_date | DateTime | 结束日期 | | duration | int | 录像时长 | | name | string | 文件名称 | | path | string | 文件路径 | ### 删除录像数据 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 7 | | msgInfo | object | | > **msgInfo** 参数如下, 按文件路径删除录像 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | path | string | 文件路径 | > **msgInfo** 参数如下, 按录像日期删除录像 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | date | DateTime | 日期 | ### 创建报警视频 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 10 | | msgInfo | object | | > **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | channel | int | 通道 | | timestamp | string | 报警时间 | ### 车辆状态 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 100 | | msgInfo | object | | > **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | speed | float | 车速 | | brake | int | 刹车 1: 刹车 0: 未刹车 | | reversing | int | 倒车 1: 倒车 0: 未倒车 | | left | int | 左转向 1: 转向 0: 未转向 | | right | int | 右转向 1: 转向 0: 未转向 | ### 智能分析数据 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | action_type | int | 101 | | msgInfo | object | | > **msgInfo** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | timestamp | DateTime | 报警事件 | | channel | int | 通道 | | level | int | 报警级别 1表示最高危险报警,2表示次高危险报警,3表示第三高危险报警 | | event_type | int | 事件类型 | | object_infos | object[] | 目标信息 | | face_land_marks | object[] | 人脸关键点 | | left_line_type | int | 左车道线类型 | | right_line_type | int | 右车道线类型 | > **object_infos** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | detect_type | int | 目标类型 | | left | int | 目标位置左 | | top | int | 目标位置上 | | right | int | 目标位置右 | | bottom | int | 目标位置下 | | distance | float | 距离 [0, 250] | | speed | float | 相对运动目标的相对速度 (m/s) | | ttc | float | ttc 时间 (s) | | target_post_x | int | 落脚点横坐标 (BSD用) | | target_post_y | int | 落脚点纵坐标 (BSD用) | > **face_land_marks** 参数如下 | 参数名称 | 类型 | 描述 | | --- | --- | --- | | x | int | x坐标 | | y | int | y坐标 | > **event_type** 定义如下 | 参数 | 描述 | | --- | --- | | 0 | 向左车道偏离报警 | | 1 | 向右车道偏离报警 | | 2 | 前车碰撞报警 | | 3 | 行人碰撞报警 | | 4 | 车距监测报警 | | 5 | 人行横道检测报警 | | 6 | 盲区报警 | | 7 | 抽烟 | | 8 | 打电话 | | 9 | 打哈欠 | | 10 | 未对准(偏离座位) | | 11 | 摄像头遮挡 | | 12 | 身份异常(不是原来的驾驶员) | | 13 | 异常驾驶(检测不到脸) | | 14 | 阻断型墨镜 | | 15 | 嘴部遮挡 | | 16 | 闭眼 | | 17 | 分神驾驶(东张) | | 18 | 分神驾驶(西望) | | 19 | 分神驾驶(仰望) | | 20 | 分神驾驶(低头) | | 21 | 身份正常 | | 22 | 未系安全带 | | 23 | 手脱离方向盘 | | 24 | 玩手机 | | 25 | 超员 | ## 相关脚本 ### 升级脚本 ```bash #!/bin/bash # 参数个数 echo $# if [ $# != 4 ]; then echo "参数错误" exit 1 fi # 升级类型: 文件(file) or 服务(server) echo "type: $1" # 应用程序名称 echo "name: $2" # 应用程序目录 echo "app_path: $3" # 升级包url地址 echo "app_new_url: $4" cd /opt/ echo "开始下载" command=`wget -O "$2.zip" "$4" 2>&1` result=`echo $command | grep "100%"` if [[ "$result" == "" ]]; then echo "升级失败(文件下载失败)" exit 1 fi echo "下载完成" echo "开始解压" unzip -o -d $2 "$2.zip" echo "解压完成" if [ $1 = "server" ]; then systemctl stop $2.service echo "停止服务" else pkill $2 echo "结束进程" fi echo "开始执行升级操作" echo "$2 -> $3" #如果文件夹不存在,创建文件夹 if [ ! -d $3 ]; then mkdir $3 fi chmod 777 $2/* cp -r $2/* $3/ echo "清理" rm -rf $2 rm -rf *.log rm -rf *.zip echo "升级结束" if [ $1 = "server" ]; then systemctl start $2.service echo "启动服务" fi ``` ### HxIVA 服务启动脚本 * HxIVA.service ```bash vim /etc/systemd/system/HxIVA.service [Unit] Description=HxIVA app server [Service] Type=simple ExecStart=/opt/run.sh Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target ``` * run.sh ```bash #! /bin/bash # 清空日志 echo "" > /var/log/syslog echo "" > /var/log/kern.log # 文件存在, 需要进行升级 if [ -f /opt/pretreatment.sh ]; then sed -i 's/\r$//' /opt/pretreatment.sh /opt/pretreatment.sh rm /opt/pretreatment.sh fi HxIVA b 192.168.10.12 5001 ``` ### HxServer 服务启动脚本 * HxServer.service ```bash vim /etc/systemd/system/HxServer.service [Unit] Description=HxServer service [Service] WorkingDirectory=/root/app ExecStart=dotnet /root/app/HxServer.dll Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` ``` systemctl enable HxServer.service systemctl start HxServer.service ```