ym310_protecl.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /*
  2. * YM310 Protocol Handler - Header File
  3. *
  4. * 定义系统信息、设备信息、限制参数等结构体,并提供外部变量声明。
  5. *
  6. * Version: 1.0.0
  7. */
  8. #ifndef __YM310_PROTECL_H__
  9. #define __YM310_PROTECL_H__
  10. /*********************↓ define ↓************************/
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15. #define VALID 0x9D
  16. /*********************↑ define ↑************************/
  17. /*********************↓ include ↓************************/
  18. #include <rtthread.h>
  19. #include <stdint.h>
  20. /*********************↑ include ↑************************/
  21. /*********************↓ global variables ↓************************/
  22. /* 第三方服务器配置结构体(用于持久化) */
  23. typedef struct
  24. {
  25. char sub_topic[64]; /* 订阅主题 */
  26. char pub_topic[64]; /* 发布主题 */
  27. char host[64]; /* 服务器地址 */
  28. uint16_t port; /* 端口 */
  29. uint8_t qos; /* QoS */
  30. char lastwill[64]; /* 遗嘱主题 */
  31. char username[32]; /* 用户名 */
  32. char password[32]; /* 密码 */
  33. char client_id[32]; /* 客户端ID(默认IMEI) */
  34. char enable; // 0x9D为开启 其余为关闭
  35. } SERVER_CFG;
  36. /* 系统信息结构体(全局参数,持久化) */
  37. typedef struct
  38. {
  39. char imei[16]; /* IMEI(模组唯一ID) */
  40. char iccid[21]; /* SIM卡ICCID */
  41. uint8_t csq; /* 信号强度 0-31 */
  42. SERVER_CFG customer_cfg; /* 客户MQTT配置(可保存) */
  43. char update_url[128]; // 升级路径
  44. } SYS_INFO;
  45. typedef enum
  46. {
  47. work_state_IDLE = 0,
  48. work_state_WORK,
  49. work_state_CHG
  50. }work_state_DEF;
  51. typedef struct
  52. {
  53. uint8_t temp_protect; /* tps: 温控保护 */
  54. uint8_t tilt_protect; /* dps: 倾倒保护 */
  55. uint8_t rain_protect; /* rps: 雨控保护 */
  56. uint8_t light_protect; /* lps: 光控保护 */
  57. uint8_t undervolt_protect; /* vps: 欠压保护 */
  58. uint8_t work_state; /* ws: 0待机,1工作,2充电 */
  59. uint32_t hv_count; /* ct: 高压计数 */
  60. uint16_t charge_voltage; /* cv: 充电电压(mV) */
  61. uint16_t battery_voltage; /* bv: 电池电压(mV) */
  62. int16_t board_temp; /* bt: 主板温度(0.1℃) */
  63. uint8_t lamp_fault; /* voltval: 灯管故障检测(1故障) */
  64. uint8_t idle_flag; /* cycle_off: 空闲标志位 */
  65. uint16_t lamp_current; // 灯管电流
  66. uint16_t hv_current; /* ct: 高压电流 */
  67. uint16_t light_percent; // 光控值(百分比值 保留一位小数 )
  68. } SYS_STATUS;
  69. /* 设备信息结构体(可配置工作参数,部分持久化) */
  70. typedef struct
  71. {
  72. uint8_t power_state; /* ds: 0关机,1开机 */
  73. uint16_t light_work_duration; /* tt: 光控工作时长(小时) */
  74. uint8_t light_flag; /* : 光控切换标志位 0-太阳能板 1-光敏二极管 */
  75. uint8_t time_ctrl_enable; /* ts: 时控开关 0-光控/1-时控 */
  76. uint8_t time_start; /* st: 时控开始小时 */
  77. uint8_t time_end; /* et: 时控结束小时 */
  78. uint16_t data_interval; /* dat_f: 数据上报间隔(分钟) */
  79. uint16_t clean_interval; /* clt_t: 清扫间隔(分钟) (暂时无需使用)*/
  80. uint8_t clean_enable; /* clear_on: 自清虫标志 (暂时无需使用)*/
  81. uint8_t GPS_MODE; /* gps: 0手动,1GPS */
  82. char longitude[16]; /* 经度,字符串格式如 "113.3963165" */
  83. char latitude[16]; /* 纬度,字符串格式如 "34.4861845" */
  84. char longitude_FORCE[16]; /* 强制经度 */
  85. char latitude_FORCE[16]; /* 强制纬度 */
  86. } DEV_INFO;
  87. /* 限制参数结构体(电压阈值等配置,持久化) */
  88. typedef struct
  89. {
  90. uint16_t vsunrise; /* 日出电压(mV) */
  91. uint16_t vsunset; /* 日落电压(mV) */
  92. uint16_t vcutof; /* 截止电压(mV) */
  93. uint16_t vfloat; /* 浮充电压(mV) */
  94. uint16_t vrecharge; /* 再次开启充电电压(mV) */
  95. uint16_t uvstart; /* 开机电压(mV) */
  96. uint16_t uvoff; /* 欠压恢复电压(mV) */
  97. uint16_t uvon; /* 欠压保护电压(mV) */
  98. uint16_t overtemp; /* 高温保护温度(0.1℃) */
  99. int16_t lowtemp; /* 低温保护温度(0.1℃) */
  100. uint16_t unovert; /* 高温恢复温度(0.1℃) */
  101. int16_t unlowt; /* 低温恢复温度(0.1℃) */
  102. uint8_t battype; /* 电池类型 */
  103. } LIMIT;
  104. /* Sensor数据结构体 - 三合一简化结构 */
  105. typedef struct
  106. {
  107. int16_t temp_plat; /* 平台下发温度,保留一位小数(如23.5°C存储235) */
  108. int16_t humi_plat; /* 平台下发湿度,保留一位小数(如65.3%存储653) */
  109. uint8_t valid_plat; /* 平台数据有效标志:0x9D有效 */
  110. int16_t temp_sht; /* SHT30温度,保留一位小数(如23.5°C存储235) */
  111. int16_t humi_sht; /* SHT30湿度,保留一位小数(如65.3%存储653) */
  112. uint8_t valid_sht; /* SHT30数据有效标志:0x9D有效 */
  113. int16_t temp_ntc; /* NTC温度,保留一位小数(如23.5°C存储235) */
  114. uint8_t valid_ntc; /* NTC数据有效标志:0x9D有效 */
  115. } sensor_t;
  116. extern SYS_INFO sys_info;
  117. extern DEV_INFO dev_info;
  118. extern LIMIT limit;
  119. extern sensor_t sensor;
  120. /*********************↑ global variables ↑************************/
  121. /********************↓ declaration ↓***********************/
  122. void ym310_protocol_process(rt_uint8_t client_idx, const char *topic,
  123. const char *payload, rt_uint16_t len);
  124. void report_now(void);
  125. /********************↑ declaration ↑***********************/
  126. #ifdef __cplusplus
  127. }
  128. #endif
  129. #endif /* __YM310_PROTECL_H__ */