Skip to main content

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