设备端对接(C语言)
1 整体架构
2 业务流程
3 对接LinkVisual SDK
3.1 C语言SDK对接
车行设备由多功能停车摄像头、LED显示屏、道闸等设备组成,其中多功能停车摄像头负责车牌识别、车辆权限判定、云端通信,以及LED和道闸控制。多功能停车摄像头在标准摄像头功能基础上,扩展了与车行相关的服务与能力,是车行设备端对接的主要部件。
对接C语言SDK参见:概述
3.2 创建车行产品
1)访问地址:
https://iot.console.aliyun.com/product,
在物联网平台上创建产品,所属品类选择“智能园区/多功能停车摄像头”:
2)在产品详情页面,选择“功能定义-编辑草稿”:
3)然后在编辑草稿页面,选择“添加标准功能”:
4)在弹出的对话框中选择所需要的属性、服务、事件。例如:选择服务“下发LED数据”,事件“异常抬杆”:
5)选择完成后将物模型发布上线:
3.3 创建车行设备
1)在产品列表中选择“设备管理”:
2)为产品添加设备,然后在设备列表中选择“查看”:
3)获得设备证书(ProductKey、DeviceName、DeviceSecret)信息:
3.4 设备连接物联网平台
复制车行设备证书(ProductKey、DeviceName、DeviceSecret),将设备连入物联网平台。
3.5 设备物模型开发
根据物模型定义的属性、事件、服务,完成设备端开发。
4 多功能停车摄像头物模型
与标准的“摄像头”物模型相比,多功能停车摄像头增加(或复用)了以下属性、事件、服务:
4.1 属性
名称 | 类型 | 描述 |
LedRowNumber | Integer | 屏幕行数,只读属性,取值范围: -100 ~ 100
|
LedNoticeMode | Enum | 屏幕通知模式,只读属性:
|
IsSurportQrCode | Bool | 是否支持二维码,只读属性:
|
GateState | Enum | 道闸设备状态,只读属性:
|
VehicleState | Enum | 车辆等待状态,只读属性:
|
Volume | Integer | 音量大小,取值范围:0 - 100 |
Brightness | Integer | 屏幕亮度,取值范围:0 - 100 |
4.2 服务
4.2.1 下发车辆权限
名称 | AddVehicleIOfPermission |
描述 | 通过文件异步下发车辆权限到设备。 |
入参:
参数 | 类型 | 描述 |
VehiclePermissionUrl | String | 车辆权限文件URL |
出参:
参数 | 类型 | 描述 |
VehiclePermissionStatus | Enum | 车辆权限文件下载状态:
|
车辆权限通过JSON文件下发、上报。JSON文件中字段定义如下:
参数 | 类型 | 描述 | 是否必须 |
total | Integer | 文件包含的记录数量 | 是 |
permList | List | 车辆权限数组 | 是 |
-type | Integer | 操作类型:1-增加(或覆盖),2-删除 | 是-下发权限时 否-返回权限时 |
-plateNumber | String | 车牌号 | 是 |
-effectiveDate | String | 生效时间(UTC)单位精确到毫秒 | 是-下发、返回权限 否-黑白名单 |
-expiryDate | String | 终止时间(UTC)单位精确到毫秒 | 是-下发、返回权限 否-黑白名单 |
-permissionType | Integer | 权限类型:1-普通,2-白名单,3-黑名单 | 是 |
下发车辆权限文件示例:
{
"total": 100,
"permList": [
{
"type": 1,
"plateNumber": "京N1***45",
"effectiveDate": "时间戳",
"expiryDate": "时间戳",
"permissionType": 1
},
{
"type": 2,
"plateNumber": "京N***67",
"effectiveDate": "",
"expiryDate": "",
"permissionType": 2
}
]
}
设备端下载并解析JSON权限文件,按照指定操作类型更新本地车辆权限数据库。
4.2.2 获取车辆权限
名称 | GetVehiclePermission |
描述 | 获取设备本地存储的车辆权限,用于校验云端与设备端权限是否一致 |
请求参数:无
出参:
参数 | 类型 | 描述 |
VehiclePermissionUrl | String | 设备端权限文件URL |
设备端按约定格式导出权限文件,使用OSS STS Token将文件上传到指定位置,并返回文件URL。
4.2.3 查询车辆权限下发状态
名称 | GetPermissionDownloadProgress |
描述 | 查询车辆权限下发状态 |
请求参数:无
出参:
参数 | 类型 | 描述 |
DownloadStatus | Enum | 车辆权限下发状态:
|
4.2.4 下发OSS STS Token
名称 | SendOssStsToken |
描述 | 云端下发OSS STS Token到设备,允许设备使用临时访问权限上传文件 |
入参:
参数 | 类型 | 描述 |
Credentials | String | 加密的STS Token证书,包含如下信息:
|
BucketName | String | 允许设备访问的OSS Bucket Name |
ObjectName | String | 指定设备上传文件的路径 |
EndPoint | String | 允许设备访问的OSS接入地址 |
出参:
参数 | 类型 | 描述 |
Status | Enum | STS Token下发状态:
|
设备端通过解密STS Token证书,获取上传文件所需的权限。当证书过期后,设备端上报OSS STS Token请求事件,云端重新下发有效的STS Token证书。
4.2.5 下发LED显示数据
根据设备属性LedNoticeMode定义的模式,下发屏幕提示数据。以分离模式下发需要实现以下服务:
NoticeBroadcast:下发提示语音
NoticeDisplay:下发提示显示
DefaultDisplay:下发默认显示
以混合模式下发需要实现以下服务:
AddLedData:提示语音、提示显示同时下发
1)下发提示语音
名称 | NoticeBroadcast |
描述 | 下发提示语音信息 |
入参:
参数 | 类型 | 描述 |
VoiceContent | String | 语音播报内容,最大长度不超过2048 |
PlaySpeed | Integer | 语音播报速度,取值范围:1 - 10,步长:1 |
返回参数:无
2)下发提示显示
名称 | NoticeDisplay |
描述 | 下发提示显示信息 |
入参:
参数 | 类型 | 描述 |
DisplayContent | String | 显示内容,最大长度不超过2048 |
RowNumber | Integer | 屏幕行号,取值范围:1 - 100 |
MovingSpeed | Integer | 文字移动速度,取值范围:1 - 10,步长:1 |
DisplayTime | Integer | 显示时长,取值范围1-3600,单位:秒 |
MovingType | Enum | 文字移动方式:0:禁止 (默认)1:从右到左2:从左到右3:从下到上4:从上到下 |
返回参数:无
3)下发默认显示
名称 | DefaultDisplay |
描述 | 下发默认显示信息 |
入参:
参数 | 类型 | 描述 |
DisplayContent | String | 显示内容,最大长度不超过2048 |
RowNumber | Integer | 屏幕行号,取值范围:1 - 100 |
DefaultSituation | Enum | 默认显示场景:0:空闲1:普通权限车辆、白名单车辆过车2:黑名单车辆过车3:临时车量过车4:无牌车辆过车 |
返回参数:无
4)混合下发LED提示数据
名称 | AddLedData |
描述 | 下发LED显示数据,控制LED在不同场景下的显示与播报内容 |
入参:
参数 | 类型 | 描述 |
LedData | JSON | 以JSON描述的LED显示内容,最大长度不超过2048 |
出参:
参数 | 类型 | 描述 |
Result | Enum | LED内容解析状态:
|
云端通过JSON字符串下发LED显示数据,JSON字符串内容定义如下:
属性名 | 类型 | 描述 |
Type | Integer | 下发内容的类型:
|
Situation | Integer | 固定场景(Type=0)下的场景类型:
|
ShowTime | Integer | 内容显示时长,单位为秒 |
AudioContextInfo | String | 自定义语音播报内容 |
ScreenLineNum | Integer | 屏幕行数 |
ContextList | JSONArray | 屏幕内容数组,每个元素代表一行 |
-RunType | Integer | 文字滚动方式:
|
-ColorType | Integer | 文字颜色:
|
-CustomContext | String | 自定义内容,长度1-128。内容支持以下通配符:
|
-Audio | Integer | 是否进行语音播报:
|
以支持四行文字,红、绿两种颜色的LED显示器为例,下发“固定场景-空闲”时显示的内容:
{
"Type": 0,
"Situation": 0,
"PlateNumber": "",
"ShowTime": ,
"AudioContextInfo": "",
"ScreenLineNum": 4,
"ContextList":[
{
"RunType": 0,
"ColorType": 1,
"CustomContext":"智慧停车",
"Audio": 0
},
{
"RunType": 0,
"ColorType": 1,
"CustomContext":"智能识别",
"Audio": 0
},
{
"RunType": 0,
"ColorType": 1,
"CustomContext":"一车一杆",
"Audio": 0
},
{
"RunType": 0,
"ColorType": 2,
"CustomContext":"#T",
"Audio": 0
}
]
}
4.2.6 下发二维码
名称 | QrCodeDisplay |
描述 | 下发二维码信息 |
入参:
参数 | 类型 | 描述 |
QrCode | String | 二维码信息,最大长度不超过2048 |
返回参数:无
4.2.7 手动触发车牌识别
名称 | TriggerRecognition |
描述 | 触发设备上报智能告警事件 |
请求参数:无,或者返回参数:无
设备端抓拍车辆图片,并通过智能告警事件上报图片和相关信息。
4.3 事件
4.3.1 智能告警事件
名称 | IntelligentAlarm |
描述 | 上报智能告警事件,包含车辆图片和车牌识别结果等信息 |
与其他事件不同,设备端需要调用LV SDK提供的“
lv_post_intelligent_alarm”接口上报智能告警事件,相关参数和接口定义以LV SDK为准:
/* 智能事件参数集 */
typedef struct {
lv_intelligent_event_type_e type; //智能事件类型,车辆识别为10005
lv_media_format format; //智能事件的媒体数据类型,图片类型为0
struct {
char *p;
uint32_t len;
} media; //智能事件的媒体数据,不大于1MB
struct {
char *p;
uint32_t len;
} addition_string; //智能事件的附加字符串信息,不大于2048B
} lv_intelligent_alarm_param_s;
/* 上报智能告警事件图片、告警信息 */
int lv_post_intelligent_alarm(const lv_intelligent_alarm_param_s *param);
参数说明:
参数 | 类型 | 描述 |
type | Enum | 告警类型,固定值10005(车辆识别) |
format | Enum | 媒体数据类型,固定值0(JPEG格式图片) |
media | Struct | 媒体数据,不大于1MB |
addition_string | Struct | 告警内容字段定义参见2 车辆通行记录。 以下字段不需要上报:
|
4.3.2 OSS STS Token请求事件
名称 | OssStsTokenRequest |
描述 | 上报OSS STS Token请求事件,请求云端下发OSS STS Token |
上报参数:
参数 | 类型 | 描述 |
RequestType | Enum | 请求上传的文件类型:
|
4.3.3 异常抬杆事件
名称 | AbnormalOpenGate |
描述 | 当闸机非自动抬杆时,上报异常抬杆事件 |
上报参数:
参数 | 类型 | 描述 |
OpenType | Enum | 抬杆类型:0 遥控器控制抬杆1 设备自身按键抬杆99 其他方式 |
ImagePath | String | 抓拍图片地址,数据长度2048 |
5 通过OSS STS Token上传文件
设备端集成OSS SDK参见:安装
设备端使用签名URL上传文件示例参考:授权访问