iot_driver_core/
lib.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5pub mod kafka_topic_contrant;
6
7// 定义公共常量
8// 所有设备只存ID
9pub const REDIS_KEY_DEVICE_ALL: &str = "IOT:DEVICE:ALL";
10// 设备基本信息
11pub const REDIS_KEY_DEVICE_INFO: &str = "IOT:DEVICE:INFO:";
12
13/// 连接参数
14#[derive(Serialize, Deserialize, Clone)]
15pub struct ConnectParam {
16    //参数名称
17    pub name: String,
18    //参数描述(填写规则)
19    pub desc: String,
20    //参数值
21    pub value: String,
22}
23
24/// 初始化参数
25#[derive(Serialize, Deserialize, Clone)]
26pub struct InitialParam {
27    // 参数列表
28    pub connect_params: Vec<ConnectParam>,
29}
30
31/// 驱动初始化参数属性
32#[derive(Serialize, Deserialize, Clone)]
33pub struct DriverAttribute {
34    // 功能ID
35    pub driver_function_id: String,
36    // 功能名称
37    pub driver_function_name: String,
38    // 功能描述
39    pub param_desc: String,
40}
41
42/// 驱动功能
43#[derive(Serialize, Deserialize, Clone)]
44pub struct DriverFunction {
45
46    // 驱动属性列表
47    pub driver_attributes: Vec<DriverAttribute>,
48
49}
50
51/// 属性操作枚举
52#[derive(Serialize, Deserialize, Clone)]
53pub enum AttributeOperationEnum {
54    //读
55    Read,
56    //写
57    Write,
58}
59
60///  物模属性行为
61#[derive(Serialize, Deserialize, Clone)]
62pub struct TslAttributeAction {
63    // tagid
64    pub id: String,
65    // 设备ID
66    pub device_id: String,
67    // 设备编号
68    pub device_number: String,
69    // 点位功能标识
70    pub identifier: String,
71    // 驱动功能名称
72    pub driver_function_name: String,
73    // 驱动功能参数
74    pub driver_function_param: String,
75    // 值
76    pub value: String,
77}
78
79/// 属性读写入参 操作帧
80#[derive(Serialize, Deserialize, Clone)]
81pub struct TupleFrame {
82    // 操作类型:读or写
83    pub operation: AttributeOperationEnum,
84    // 待处理的属性列表
85    pub attribute_actions: Vec<TslAttributeAction>,
86
87}
88
89/// 属性读写入参 操作帧
90#[derive(Serialize, Deserialize, Clone)]
91pub struct DriverResult {
92    // 操作类型:读or写
93    pub result: bool,
94    // 待处理的属性列表
95    pub attribute_actions: Vec<TslAttributeAction>,
96
97}
98
99/// 点位配置
100#[derive(Serialize, Deserialize, Clone)]
101pub struct DeviceTag {
102    // 设备标识符
103    #[serde(rename = "devId")]
104    pub device_id: String,
105    // 主键
106    pub id: String,
107    // 设备功能标签
108    pub identifier: String,
109    // 设备功能名称
110    #[serde(rename = "identifierName")]
111    pub identifier_name: String,
112    // 类型:事件,服务,属性
113    #[serde(rename = "type")]
114    pub tag_type: String,
115    // 采集间隔,单位ms
116    #[serde(rename = "accessCycle")]
117    pub access_cycle: i64,
118    // 驱动功能名称
119    #[serde(rename = "functionName")]
120    pub function_name: String,
121    // 驱动功能参数
122    #[serde(rename = "functionParam")]
123    pub function_param: String,
124    // 数据类型 INT DOUBLE FLOAT
125    #[serde(rename = "dataType")]
126    pub data_type: String,
127    // 读写类型: R: 只读 W: 只写 RW: 读写
128    #[serde(rename = "accessMode")]
129    pub access_mode: String,
130}
131
132/// 网关驱动
133#[derive(Serialize, Deserialize, Clone)]
134pub struct GatewayDriver {
135
136    // 主键
137    pub id: String,
138    // 驱动id
139    #[serde(rename = "driverId")]
140    pub driver_id: String,
141    // 驱动文件名称
142    #[serde(rename = "fileName")]
143    pub file_name: String,
144    // 驱动存储路径
145    #[serde(rename = "filePath")]
146    pub file_path: String,
147    // 驱动包名
148    #[serde(rename = "packageName")]
149    pub package_name: String,
150    // 驱动类名
151    #[serde(rename = "clzName")]
152    pub class_name: String,
153
154}
155
156/// 驱动实例
157#[derive(Serialize, Deserialize, Clone)]
158pub struct GatewayDriverInstance {
159    // 主键
160    pub id: String, 
161    // 所属网关ID
162    #[serde(rename = "gatewayId")]
163    pub gateway_id: i64,
164    // 驱动实例名称 
165    pub name: String, 
166    // 驱动连接参数
167    #[serde(rename = "connectParams")]
168    pub connect_params: Vec<ConnectParam>,
169    // 关联的驱动
170    #[serde(rename = "gatewayDriver")]
171    pub gateway_driver: GatewayDriver,
172}
173
174/// 设备基本信息
175#[derive(Serialize, Deserialize, Clone)]
176pub struct Device {
177    // 设备标识符
178    #[serde(rename = "devId")]
179    pub device_id: String,
180    // 设备编号
181    #[serde(rename = "devNo")]
182    pub device_number: String,
183    // 通讯方式:1.THIRD_PARTY_CONNECT:第三方接口方式 ; 2.DRIVER_CONNECT:驱动方式
184    #[serde(rename = "communicationMethod")]
185    pub communication_method: String,
186    // 产品key
187    #[serde(rename = "productKey")]
188    pub product_key: String,
189    // 设备名称
190    #[serde(rename = "devName")]
191    pub device_name: String,
192    // 设备secret
193    pub secret: String,
194    // 设备点表配置列表
195    #[serde(rename = "deviceTags")]
196    pub device_tags: Vec<DeviceTag>,
197    // 驱动实例
198    #[serde(rename = "gatewayDriverInstance")]
199    pub gateway_driver_instance: GatewayDriverInstance,
200    // 租户ID
201    #[serde(rename = "tenantId")]
202    pub tenant_id: i32,
203}
204
205/// 消息体Packet元数据
206#[derive(Serialize, Deserialize, Clone)]
207pub struct Packet {
208    // 设备标识符
209    pub device_id: String,
210    // 设备编号
211    pub device_number: String,
212    // 设备名称
213    pub device_name: String,
214    // 产品key
215    pub product_key: String,
216    // 设备点表配置列表
217    pub identifier: String,
218    // 驱动实例
219    pub val: String,
220    // 设备secret
221    pub time: String,
222    // 工控机编号
223    pub control_number: String,
224}
225
226/// 消息体Packet元数据
227#[derive(Serialize, Deserialize, Clone)]
228pub struct PacketOld {
229    // 设备标识符
230    pub pk: String,
231    // 设备编号
232    pub devId: String,
233    // 设备名称
234    pub devName: String,
235    // 产品key
236    pub extra: String,
237    // 设备点表配置列表
238    pub time: String,
239    pub identifier: String,
240    // 驱动实例
241    pub val: String,
242    // 设备secret
243    pub tableName: String,
244    // 工控机编号
245    pub devNo: String,
246    pub controlNo: String,
247}
248
249/// 消息体Packet元数据
250#[derive(Serialize, Deserialize, Clone)]
251pub struct DeviceItem {
252    pub devId: String,
253}
254
255/// 消息体Packet元数据
256#[derive(Serialize, Deserialize, Clone)]
257pub struct DeviceOnlineStatus {
258    // 设备标识符
259    pub device_id: String,
260    // 设备编号
261    pub device_number: String,
262    // 设备名称
263    pub device_name: String,
264    // 设备在离线状态: true: 在线 false: 离线
265    pub online_status: bool,
266}
267
268/// 设备Packet
269#[derive(Serialize, Deserialize, Clone)]
270pub struct DevicePacket {
271    // 设备编号
272    pub device_number: String,
273    // 设备名称
274    pub device_name: String,
275    // 工控机编号
276    pub control_no: String,
277    // 设备数据
278    pub data: HashMap<String, String>,
279}
280
281/// 数据
282#[derive(Serialize, Deserialize, Clone)]
283pub struct Updata {
284    // 设备类key
285    #[serde(rename = "pk")]
286    pub product_key: String,
287    // 设备ID
288    #[serde(rename = "devId")]
289    pub device_id: String,
290    // 设备编号
291    #[serde(rename = "devNo")]
292    pub device_number: String,
293    // unix时间戳
294    pub time: i64,
295    // 以键值对方式上报数据 key为属性功能标识符,value为属性值
296    pub params: HashMap<String, String>,
297}
298
299/// 下发指令
300#[derive(Serialize, Deserialize, Clone)]
301pub struct AttrUpDataPacket {
302    // 操作类型
303    pub operate: String,
304    // 操作ID
305    #[serde(rename = "operateId")]
306    pub operate_id: i32,
307    // 上报的数据
308    pub data: Updata,
309}