datadef.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. #ifndef __DATADEF_Hx__
  2. #define __DATADEF_Hx__
  3. #include <stdint.h>
  4. #include "log.h"
  5. #define CH_MAX 12
  6. #define BRD_MAX 32
  7. #define SLAVE_CH_MAX 64
  8. enum {
  9. RW_READ=0, //读
  10. RW_WRITE //写
  11. };
  12. enum {
  13. TIME_ABS=0, //绝对时间
  14. TIME_REL //相对时间
  15. };
  16. enum {
  17. LOOP_HOUR=0,
  18. LOOP_DAY,
  19. LOOP_WEEK,
  20. LOOP_MONTH,
  21. LOOP_YEAR,
  22. LOOP_USER
  23. };
  24. enum {
  25. PDU_AC_I1O1=0,
  26. PDU_DC_I1O1,
  27. PDU_AC_I3O3=3,
  28. PDU_AC_I3O1,
  29. PDU_AC_I3O1_H,
  30. };
  31. enum {
  32. ALARM_TYPE_POWER=0,
  33. ALARM_TYPE_SENSOR,
  34. ALARM_TYPE_NETWORK,
  35. ALARM_TYPE_OPRATION,
  36. ALARM_TYPE_RUNNING,
  37. ALARM_TYPE_MAX
  38. };
  39. enum {
  40. ALARM_V_UPPER=0,
  41. ALARM_V_LOWER,
  42. ALARM_C_UPPER,
  43. ALARM_W_UPPER,
  44. ALARM_P_UPPER,
  45. ALARM_PH_LOSS,
  46. ALARM_MAX
  47. };
  48. enum {
  49. ALARM_ACT_CLOSE_CH=1,
  50. ALARM_ACT_MESG,
  51. ALARM_ACT_CLOSE_CHALL,
  52. };
  53. enum {
  54. IP_MODE_DHCP=0,
  55. IP_MODE_STATIC,
  56. };
  57. enum {
  58. IP_VER_ERR=0,
  59. IP_VER_V4,
  60. IP_VER_V6,
  61. };
  62. enum {
  63. MODBUS_MASTER=0,
  64. MODBUS_SLAVE,
  65. };
  66. enum {
  67. SNMP_AUTH_NONE=0,
  68. SNMP_AUTH_MD5,
  69. SNMP_AUTH_SHA,
  70. SNMP_AUTH_MAX
  71. };
  72. enum {
  73. SNMP_ENCYPT_NONE=0,
  74. SNMP_ENCYPT_DES,
  75. SNMP_ENCYPT_AES,
  76. SNMP_ENCYPT_MAX
  77. };
  78. enum
  79. {
  80. SENSOR_TYPE_TEMP_HUMI=0, //温湿度传感器
  81. SENSOR_TYPE_SMOKE, //烟雾传感器
  82. SENSOR_TYPE_WATER, //水浸传感器
  83. SENSOR_TYPE_ACCESS, //门禁传感器
  84. SENSOR_TYPE_GAS, //气体传感器
  85. SENSOR_TYPE_AIR_PRESS, //气压传感器
  86. SENSOR_TYPE_AIR_COND, //空条传感器
  87. SENSOR_TYPE_LEAK, //泄漏传感器
  88. SENSOR_TYPE_TEMP, //温度传感器
  89. SENSOR_TYPE_TEMP_DOUBLE, //双温度传感器
  90. SENSOR_TYPE_PRESS, //压力传感器
  91. SENSOR_TYPE_MAX,
  92. };
  93. enum {
  94. SENSOR_TYPE_TEMP_HUMI_RSWSN01PVC=0,
  95. SENSOR_TYPE_TEMP_HUMI_HKSHT301T1H536VRS485,
  96. SENSOR_TYPE_TEMP_HUMI_MAX
  97. };
  98. enum {
  99. SENSOR_TYPE_TEMP_DOUBLE_DL10BM485V24D2=0,
  100. SENSOR_TYPE_TEMP_DOUBLE_MAX
  101. };
  102. enum {
  103. SENSOR_TYPE_TEMP_BTG50H8EL3200=0,
  104. SENSOR_TYPE_TEMP_MAX
  105. };
  106. enum {
  107. SENSOR_TYPE_LEAK_XWDC01A=0,
  108. SENSOR_TYPE_LEAK_MAX
  109. };
  110. enum {
  111. LANG_ID_CHINESE=0,
  112. LANG_ID_ENGLISH,
  113. LANG_ID_RUSSIAN,
  114. LANG_ID_SPANISH,
  115. LANG_ID_PORTYGYESE,
  116. LANG_ID_GERMAN,
  117. LANG_ID_FRENCH,
  118. LANG_ID_ITALIAN,
  119. LANG_ID_JAPANESE,
  120. LANG_ID_MAX
  121. };
  122. ////////////////////////////////////////////////
  123. #pragma pack (1)
  124. typedef struct {
  125. uint8_t mode;
  126. uint8_t addr;
  127. uint32_t baud;
  128. }modbus_data_t;
  129. typedef struct {
  130. uint8_t mode; //0:DHCP 1:STATIC
  131. char ipaddr[48]; //
  132. char mask[48]; //
  133. char gateway[48]; //
  134. char dns1[48]; //dns1
  135. char dns2[48]; //dns2
  136. }network_data_t;
  137. typedef struct {
  138. uint32_t id; //产品ID
  139. char pname[32]; //产品名称
  140. char pnumber[32]; //产品编号
  141. char status[32]; //产品状态
  142. char name[32]; //设备名称
  143. char number[32]; //设备编号
  144. char date[32]; //设备生产日期
  145. char batch[32]; //设备生产批次
  146. uint8_t type; //产品类型
  147. uint8_t pwr_type; //电源类型
  148. char version[8]; //软件版本
  149. uint8_t language; //多国语言
  150. uint8_t count; //级联设备数
  151. uint32_t samp_time; //采集周期 单位ms
  152. uint32_t save_time; //采集周期 单位ms
  153. uint16_t ph_group; //三组相数
  154. uint16_t ch_delay; //通道延时
  155. }product_data_t;
  156. typedef struct {
  157. uint8_t watchdog;
  158. int32_t flip_time;
  159. uint8_t led;
  160. uint8_t beep;
  161. uint8_t rotate;
  162. }misc_data_t;
  163. typedef struct {
  164. char name[256];
  165. char site[256];
  166. char mail[256];
  167. char addr[256];
  168. char tele[32];
  169. }service_data_t;
  170. typedef struct {
  171. uint32_t id[3];
  172. uint32_t chs;
  173. uint32_t time;
  174. char ver[12];
  175. }board_info_t;
  176. typedef struct {
  177. uint8_t type;
  178. uint8_t chs;
  179. }board_key_t;
  180. typedef struct {
  181. modbus_data_t cas;
  182. misc_data_t misc;
  183. product_data_t prod;
  184. service_data_t serv;
  185. network_data_t netwk;
  186. }paras_data_t;
  187. typedef struct {
  188. uint8_t lang;
  189. }sys_data_t;
  190. typedef struct power_data{
  191. float voltage; //电压
  192. float current; //电流
  193. float power; //功率(视在)
  194. float freq; //频率
  195. float factor; //功率因数
  196. float consump; //耗电量consumption
  197. float active; //有功功率
  198. float reactive; //无功功率
  199. uint8_t ph_out; //三相输出时,用于判断该相是否有输出
  200. uint8_t status; //开关状态
  201. uint8_t nwire; //零线状态
  202. }power_t;
  203. typedef struct {
  204. uint8_t en;
  205. float val; //threashold value
  206. uint8_t act;
  207. uint8_t para[14]; //14*8=128 channels
  208. }thr_val_t;
  209. typedef struct {
  210. thr_val_t v_upper;
  211. thr_val_t v_lower;
  212. thr_val_t c_upper; //current
  213. thr_val_t p_upper;
  214. thr_val_t w_upper; //power consumption
  215. }thr_t;
  216. typedef struct {
  217. uint8_t v_upper; //电压超上限
  218. uint8_t v_lower; //电压超下限
  219. uint8_t c_upper; //电流超上限
  220. uint8_t p_upper; //功率超上限
  221. uint8_t w_upper; //耗电量超上限
  222. uint8_t ph_loss; //缺相,0,1,2位分别代表L1,L2,L3相,相应位为1则代表缺相,为0则不缺
  223. }alarm_t;
  224. typedef struct {
  225. uint8_t ch;
  226. alarm_t alarm;
  227. uint32_t time;
  228. }alarm_data_t;
  229. typedef struct {
  230. char name[32];
  231. uint8_t type;
  232. uint8_t addr;
  233. uint8_t ch; //该通道在全部板上的所排序号,程序始于0,用户始于1
  234. uint8_t sch; //该通道在其所在的板上的序号,程序始于0,用户始于1
  235. uint8_t ph_id; //phase id, 0:L1相 1:L2相 2:L3相
  236. uint8_t ph_val; //三相输出设置,0:单相 1:三相
  237. uint32_t start_delay;
  238. uint32_t stop_delay;
  239. }info_t;
  240. typedef struct {
  241. info_t info;
  242. power_t power[3]; //电力信息
  243. thr_t thr; //阈值
  244. alarm_t alarm;
  245. uint32_t time;
  246. void *pbrd;
  247. }power_ch_t;
  248. typedef struct {
  249. int (*get_power)(power_ch_t *pch);
  250. int (*get_alarm)(power_ch_t *pch);
  251. int (*set_ch)(power_ch_t *pch);
  252. int (*set_open_delay)(power_ch_t *pch);
  253. int (*set_close_delay)(power_ch_t *pch);
  254. int (*set_kb_value)(power_ch_t *pch);
  255. int (*set_threshold)(power_ch_t *pch);
  256. int (*reset_consump)(power_ch_t *pch);
  257. int (*detect)(uint8_t addr);
  258. int (*get_info)(uint8_t addr, board_info_t *info);
  259. //int (*get_board)(board_data_t *pbrd);
  260. int (*set_board)(uint8_t addr, uint8_t on);
  261. int (*set_all)(uint8_t on);
  262. }board_fn_t;
  263. typedef struct board_data {
  264. board_fn_t *fn;
  265. uint8_t type;
  266. uint8_t addr;
  267. uint8_t chs;
  268. uint8_t sw; //开关监测状态
  269. uint8_t ch0; //board ch start
  270. uint8_t ph_loss;
  271. board_info_t info;
  272. power_ch_t *pch; //根据实际通道数申请连续内存
  273. }board_data_t;
  274. typedef struct {
  275. float voltage; //电压
  276. float current; //电流
  277. float power; //视在功率
  278. float freq; //频率
  279. float factor; //功率因数
  280. float consump; //耗电量
  281. float active; //有功功率
  282. float reactive; //无功功率
  283. }total_t;
  284. typedef struct {
  285. uint8_t type;
  286. total_t total[3];
  287. }power_total_t;
  288. typedef struct {
  289. uint8_t type;
  290. float data;
  291. uint8_t time;
  292. }sensor_data_t;
  293. typedef struct {
  294. uint8_t type;
  295. uint32_t str_id;
  296. uint32_t sep_id;
  297. uint32_t time;
  298. }alarm_msg_t;
  299. typedef struct {
  300. uint32_t brd[BRD_MAX];
  301. uint8_t time_mode; //绝对时间/相对时间
  302. uint32_t time_s; //起始时间, 单位: 秒
  303. uint32_t time_inv; //间隔时间, 单位: 秒
  304. int8_t loop_mode; //按日/周/月/年
  305. int32_t loop_times; //循环次数, 负值为无限循环
  306. }schedule_data_t;
  307. typedef struct cascade_saddr{
  308. uint8_t addr;
  309. uint16_t channels;
  310. //board_fn_t *fn;
  311. power_ch_t ch[SLAVE_CH_MAX];
  312. }slave_info_t;
  313. typedef struct cascade_data{
  314. slave_info_t *c_s[BRD_MAX]; //从机最多个数
  315. }cascade_data_t;
  316. typedef struct sensor_info{
  317. uint8_t type;
  318. float v[2];
  319. }sensor_info_t;
  320. //////////////////////////////
  321. typedef struct
  322. {
  323. uint8_t userID; //用户ID
  324. char name[32]; //用户名-登录
  325. char password[32]; //用户密码
  326. char nick[32]; //用户名称
  327. uint8_t roleID; //角色ID
  328. uint32_t time; //用户创建时间
  329. }user_data_t;
  330. typedef struct
  331. {
  332. uint8_t roleID; //角色ID
  333. char roleName[32]; //角色名称
  334. uint8_t roleLevel; //角色等级
  335. char auth[32]; //角色权限
  336. int roleSort; //显示顺序
  337. uint32_t time; //创建时间
  338. }role_data_t;
  339. typedef struct {
  340. char alg[12];
  341. char passwd[64];
  342. }crypt_data_t;
  343. typedef struct {
  344. char user[32];
  345. crypt_data_t auth;
  346. crypt_data_t priv;
  347. }crypt_t;
  348. typedef struct {
  349. uint8_t mode;
  350. uint8_t version;
  351. char publics[64];
  352. uint8_t trapmode;
  353. crypt_t crypt;
  354. char nms_ip[64];
  355. }snmp_data_t;
  356. typedef struct
  357. {
  358. int id;
  359. int use;
  360. char account[64];
  361. }mail_recv_t;
  362. typedef struct
  363. {
  364. uint8_t id;
  365. uint8_t mode; //0: open 1: close
  366. char account[64]; //用户账号
  367. char password[24]; //用户密码
  368. char server[64]; //服务器
  369. char port[10]; //端口
  370. char auth[16]; //认证方式
  371. char *ca; //ca cert
  372. }mail_send_t;
  373. typedef struct
  374. {
  375. mail_send_t send;
  376. #define MAIL_RECV_MAX 10
  377. mail_recv_t recv[MAIL_RECV_MAX]; //接收账号列表
  378. }mail_info_t;
  379. enum {
  380. MQTT_PLAT_EMQX=0,
  381. MQTT_PLAT_ALIYUN,
  382. MQTT_PLAT_MAX
  383. };
  384. typedef struct {
  385. uint8_t id; //id
  386. uint8_t plat; //0: emqx 1: aliyun
  387. uint8_t mode; //0: open 1: close
  388. char proto[16]; //mqtt, mqtts, ws, wss
  389. char name[32]; //server name
  390. char server[256]; //server ip
  391. char port[10]; //server port
  392. char cid[64]; //client ID
  393. char user[32]; //
  394. char password[32];
  395. char *cert;
  396. uint8_t status;
  397. }mqtt_server_t;
  398. typedef struct {
  399. #define MQTT_SER_MAX 5
  400. mqtt_server_t ser[MQTT_SER_MAX];
  401. }mqtt_info_t;
  402. ///////////////////////////////////////////////////////////
  403. typedef struct {
  404. uint8_t flag;
  405. }sys_stat_t;
  406. typedef struct {
  407. uint8_t flag;
  408. }mesg_data_t;
  409. enum {
  410. PKT_TYPE_ACK=0,
  411. PKT_TYPE_PARAS,
  412. PKT_TYPE_POWER_CH, //power_ch_t
  413. PKT_TYPE_POWER_TOTAL, //power_total_t
  414. PKT_TYPE_POWER_RESET,
  415. PKT_TYPE_CH_ALL,
  416. PKT_TYPE_SCAN,
  417. PKT_TYPE_FACTORY,
  418. PKT_TYPE_ALARM,
  419. PKT_TYPE_SENSOR,
  420. PKT_TYPE_BREAKER,
  421. PKT_TYPE_STAT,
  422. PKT_TYPE_MESG,
  423. PKT_TYPE_FILE,
  424. PKT_TYPE_MAX
  425. };
  426. enum {
  427. SUB_TYPE_POWER_SWITCH=0, //set relay switch
  428. SUB_TYPE_POWER_ALARM,
  429. SUB_TYPE_POWER_THRESHOLD,
  430. SUB_TYPE_POWER_START_DELAY,
  431. SUB_TYPE_POWER_STOP_DELAY,
  432. SUB_TYPE_MAX
  433. };
  434. #define PKT_MAGIC 0xdead
  435. typedef struct {
  436. uint16_t magic;
  437. uint8_t type;
  438. uint8_t subtype;
  439. uint8_t nack;
  440. uint32_t flag;
  441. uint32_t dlen;
  442. uint8_t data[0];
  443. }pkt_hdr_t;
  444. #pragma pack ()
  445. #define DB_NAME "smartPDU.db"
  446. #define INI_NAME "smartPDU.ini"
  447. #define INF_NAME "PDUInfo.txt"
  448. #define CASCADE_MAX 32
  449. #endif