#ifndef __DATADEF_Hx__ #define __DATADEF_Hx__ #include #include "log.h" #define VERSION_SMART "V1.1.0" #define POWER_CH_MAX 12 #define POWER_BOARD_MAX 32 #define POWER_BOARD_TIMEOUT 50 #define POWER_RETRY_TIMES 3 #define POWER_SLAVE_CH_MAX 32 #define POWER_CASCADE_MAX 32 #define BREAKER_BOARD_MAX 8 #define BREAKER_CH_MAX 6 #define BREAKER_BOARD_ADDR_START 64 enum { RW_READ=0, //读 RW_WRITE //写 }; enum{ A_P = 0, B_P, C_P, }; enum { TIME_ABS=0, //绝对时间 TIME_REL //相对时间 }; enum { LOOP_HOUR=0, LOOP_DAY, LOOP_WEEK, LOOP_MONTH, LOOP_YEAR, LOOP_USER }; enum { PDU_AC_I1O1=0, //单相交流 PDU_DC_I1O1, //直流 PDU_AC_I3O3=3, //三相进三相出 PDU_AC_I3O1, //三相进单相出 PDU_AC_I3O1_H, //三相进单相出 PDU_AC_I3O2, //三相进两相出 }; enum { ALARM_TYPE_POWER=0, ALARM_TYPE_SENSOR, ALARM_TYPE_NETWORK, ALARM_TYPE_OPRATION, ALARM_TYPE_RUNNING, ALARM_TYPE_MAX }; enum { ALARM_V_UPPER=0, ALARM_V_LOWER, ALARM_C_UPPER, ALARM_W_UPPER, ALARM_P_UPPER, ALARM_PH_LOSS, ALARM_MAX }; enum { ALARM_ACT_CLOSE_CH=1, ALARM_ACT_MESG, ALARM_ACT_CLOSE_CHALL, }; enum { IP_MODE_DHCP=0, IP_MODE_STATIC, }; enum { IP_VER_ERR=0, IP_VER_V4, IP_VER_V6, }; enum { MODBUS_MASTER=0, MODBUS_SLAVE, }; enum { SNMP_AUTH_NONE=0, SNMP_AUTH_MD5, SNMP_AUTH_SHA, SNMP_AUTH_MAX }; enum { SNMP_ENCYPT_NONE=0, SNMP_ENCYPT_DES, SNMP_ENCYPT_AES, SNMP_ENCYPT_MAX }; enum { SENSOR_TYPE_TEMP_HUMI=0, //温湿度传感器 SENSOR_TYPE_SMOKE, //烟雾传感器 SENSOR_TYPE_WATER, //水浸传感器 SENSOR_TYPE_ACCESS, //门禁传感器 SENSOR_TYPE_GAS, //气体传感器 SENSOR_TYPE_AIR_PRESS, //气压传感器 SENSOR_TYPE_AIR_COND, //空条传感器 SENSOR_TYPE_LEAK, //泄漏传感器 SENSOR_TYPE_TEMP, //温度传感器 SENSOR_TYPE_TEMP_DOUBLE, //双温度传感器 SENSOR_TYPE_PRESS, //压力传感器 SENSOR_TYPE_MAX, }; enum { SENSOR_TYPE_TEMP_HUMI_RSWSN01PVC=0, SENSOR_TYPE_TEMP_HUMI_HKSHT301T1H536VRS485, SENSOR_TYPE_TEMP_HUMI_MAX }; enum { SENSOR_TYPE_TEMP_DOUBLE_DL10BM485V24D2=0, SENSOR_TYPE_TEMP_DOUBLE_MAX }; enum { SENSOR_TYPE_TEMP_BTG50H8EL3200=0, SENSOR_TYPE_TEMP_MAX }; enum { SENSOR_TYPE_LEAK_XWDC01A=0, SENSOR_TYPE_LEAK_MAX }; enum { LANG_ID_CHINESE=0, LANG_ID_ENGLISH, LANG_ID_RUSSIAN, LANG_ID_SPANISH, LANG_ID_PORTYGYESE, LANG_ID_GERMAN, LANG_ID_FRENCH, LANG_ID_ITALIAN, LANG_ID_JAPANESE, LANG_ID_MAX }; //////////////////////////////////////////////// #pragma pack (1) typedef struct { uint16_t year; uint8_t mon; uint8_t day; uint8_t hour; uint8_t min; uint8_t sec; }datetime_t; typedef struct { uint8_t mode; uint8_t addr; uint32_t baud; }modbus_data_t; typedef struct { char max_char_1; char max_char_2; uint8_t flash_index; char show_data[16]; }net_show_val; typedef struct { uint8_t mode; //0:DHCP 1:STATIC char ipaddr[48]; // char mask[48]; // char gateway[48]; // char dns1[48]; //dns1 char dns2[48]; //dns2 }network_data_t; typedef struct{ net_show_val n_show; network_data_t n_bak; }menu_net_t; typedef struct { char max_char_1; char max_char_2; uint8_t flash_index; char show_data[16]; }base_show_val; typedef struct{ int zone; uint8_t lang; uint16_t route; char date[12]; char time[12]; }base_set_t; typedef struct { base_show_val n_show; base_set_t n_bak; }menu_base_t; typedef struct { uint32_t id; //产品ID char pname[32]; //产品名称 char pnumber[32]; //产品编号 char status[32]; //产品状态 char name[32]; //设备名称 char number[32]; //设备编号 char date[32]; //设备生产日期 char batch[32]; //设备生产批次 uint8_t type; //产品类型 uint8_t count; //级联设备数 uint32_t samp_time; //采集周期 单位ms uint32_t save_time; //采集周期 单位ms uint16_t ph_group; //三组相数 uint16_t ch_delay; //通道延时 }product_data_t; typedef struct { char phase_seq[36]; }phase_seq_3_1_t; typedef struct { char phase_left[36]; char phase_right[36]; }phase_seq_3_2_t; typedef struct { uint8_t watchdog; int32_t flip_time; uint8_t led; uint8_t beep; uint16_t rotate; uint8_t lang; }misc_data_t; typedef struct { char name[256]; char site[256]; char mail[256]; char addr[256]; char tele[32]; }service_data_t; typedef struct { uint32_t id[3]; uint32_t chs; uint32_t time; char ver[12]; }board_info_t; typedef struct { uint8_t type; uint8_t chs; }board_key_t; typedef struct { char ver[16]; char bldtime[32]; }version_data_t; typedef struct { uint8_t lang; int8_t tzone; uint16_t route; char ver[16]; char sys_time[32]; }system_data_t; typedef struct { int32_t th_max_1; int32_t th_min_1; int32_t th_max_2; int32_t th_min_2; }sensor_th_t; typedef struct { char alg[12]; char passwd[32]; }crypt_data_t; typedef struct { char user[32]; crypt_data_t auth; crypt_data_t priv; }crypt_t; typedef struct { uint8_t mode; uint8_t version; char publics[10]; char privates[10]; uint8_t trapmode; //crypt_t crypt; char nms_ip[32]; }snmp_data_t; typedef struct{ sensor_th_t sens[3]; }sensor_config_t; typedef struct{ int role_id; char user_name[32]; char password_md5[33]; char date[16]; char time[16]; }user_config_t; typedef struct{ uint32_t user_count; user_config_t config[10]; }user_data_t; typedef struct { system_data_t sys; version_data_t ver; modbus_data_t cas; misc_data_t misc; product_data_t prod; service_data_t serv; network_data_t netwk; sensor_config_t sensor; snmp_data_t snmp; phase_seq_3_1_t phase_seq; phase_seq_3_2_t phase_seq_2; user_data_t user; }paras_data_t; typedef struct { float voltage; //电压 float current; //电流 float power; //功率(视在) float reactive_power; //无功功率 float app_power; //视在 float freq; //频率 float factor; //功率因数 float consump; //耗电量consumption }power_t; //designed over by liyi typedef struct { uint8_t th_sen_max_en : 1; uint8_t th_sen_min_en : 1; uint8_t : 6; }th_sen_t; typedef struct { th_sen_t en; float max; //threashold max value float min; // uint8_t act; uint8_t para[14]; //14*8=128 channels }thr_val_t; typedef struct { uint16_t v_upper_en:1; uint16_t v_lower_en:1; uint16_t c_upper_en:1; uint16_t p_upper_en:1; uint16_t w_upper_en:1; uint16_t : 11; }thr_en; typedef struct { // thr_val_t v_upper; // thr_val_t v_lower; // thr_val_t c_upper; //current // thr_val_t p_upper; // thr_val_t w_upper; //power consumption thr_en en; float v_upper; float v_lower; float c_upper; float p_upper; float w_upper; }thr_t; typedef struct { uint8_t v_upper : 1; uint8_t v_lower : 1; uint8_t c_upper : 1; uint8_t p_upper : 1; uint8_t w_upper : 1; uint8_t : 3; //预留 }wanning_type_t; typedef struct { uint32_t l1_v_upper : 1; uint32_t l1_v_lower : 1; uint32_t l1_c_upper : 1; uint32_t l1_p_upper : 1; uint32_t l1_w_upper : 1; uint32_t : 3; //预留 uint32_t l2_v_upper : 1; uint32_t l2_v_lower : 1; uint32_t l2_c_upper : 1; uint32_t l2_p_upper : 1; uint32_t l2_w_upper : 1; uint32_t : 3; //预留 uint32_t l3_v_upper : 1; uint32_t l3_v_lower : 1; uint32_t l3_c_upper : 1; uint32_t l3_p_upper : 1; uint32_t l3_w_upper : 1; uint32_t : 3; //预留 uint32_t ph_1_lose : 1; //缺相L1用于输入端 uint32_t ph_2_lose : 1; //缺相L2用于输入端 uint32_t ph_3_lose : 1; //缺相L3用于输入端 uint32_t : 5; //预留 }alarm_all_t; typedef struct{ uint8_t l_v_upper : 1; uint8_t l_v_lower : 1; uint8_t l_c_upper : 1; uint8_t l_p_upper : 1; uint8_t l_w_upper : 1; uint8_t : 3; //预留 }alar_t; typedef union{ alar_t ala[4]; alarm_all_t ala_all; }p_alar_t; typedef struct { uint8_t ch; alarm_all_t alarm; uint32_t time; }alarm_data_t; typedef struct { char name[16]; uint8_t type; uint8_t addr; uint8_t ch; //该通道在全部板上的所排序号,程序始于0,用户始于1 uint8_t sch; //该通道在其所在的板上的序号,程序始于0,用户始于1 uint8_t ph_id; //phase id, 0:L1相 1:L2相 2:L3相 uint8_t ph_val; //三相输出设置,0:单相 1:三相 uint8_t open_delay; uint8_t close_delay; }info_t; typedef struct { info_t info; power_t power[3]; //电力信息 thr_t thr; //阈值 alarm_all_t alarm; uint8_t status; uint8_t nwire; //uint32_t time; void *pbrd; }power_ch_t; typedef struct { char name[16]; uint8_t addr; }breaker_info_t; typedef struct { uint8_t id; //breaker id uint8_t nid; //node id uint8_t sw; uint32_t time; }breaker_samp_t; typedef struct { breaker_info_t info; breaker_samp_t samp; }breaker_data_t; typedef struct { uint8_t cnt; breaker_data_t *data; }breaker_all_t; typedef struct { uint8_t chn; uint8_t status; }web_chn_ctrl_t; typedef struct { uint8_t status; }web_all_ctrl_t; typedef struct{ uint8_t chn; uint8_t open; uint8_t close; }web_delay_t; typedef struct{ uint8_t chn; thr_t thr; }web_thr_t; typedef struct { thr_t thr; }web_batch_thr_t; typedef struct { uint8_t chn; }web_clear_consumer_t; typedef network_data_t web_net_t; typedef web_thr_t batch_thr_t; typedef struct { uint8_t mode; uint8_t addr; uint32_t baud; }web_rs485_t; typedef snmp_data_t web_snmp_t; typedef struct { int8_t zone; uint8_t date_time[32]; }web_device_t; typedef struct { float v_max; float v_min; }web_sensor_config_t; typedef struct{ char user[32]; char password[32]; }web_login_t; typedef struct { uint8_t permition; char user[32]; char password[32]; }web_user_add_t; typedef struct { char user[32]; }web_user_delete_t; typedef struct { uint8_t role_id; char user[32]; char old_password[32]; char new_password[32]; }web_user_update_t; typedef union { web_chn_ctrl_t cnt_ctrl; web_all_ctrl_t all_ctrl; web_delay_t delay; web_thr_t thr; web_batch_thr_t b_thr; web_clear_consumer_t clear; web_net_t net; web_rs485_t rs485; web_device_t device; web_sensor_config_t sensor; web_snmp_t snmp; batch_thr_t batch; web_login_t login; web_user_add_t user_add; web_user_delete_t user_delete; web_user_update_t user_update; }wed_set_t; typedef struct { int roul_id; char user[32]; char date[16]; char time[16]; }user_t; typedef struct{ uint32_t count; user_t users[10]; }wb_send_user_t; typedef struct { char name[32]; uint8_t type; uint8_t addr; uint8_t num_val; uint8_t status; uint8_t check_count; }sensor_info_t; typedef struct { uint8_t max_up : 1; uint8_t min_down :1; }sensor_alarm_t; typedef struct { thr_val_t thr; sensor_alarm_t s_alarm; float value; }sensor_val_t; typedef struct { sensor_info_t info; sensor_val_t val[2]; //uint32_t time; }sensor_data_t; typedef struct { uint8_t cnt; uint8_t max; sensor_data_t *data; }sensor_all_t; typedef struct{ char name[32]; uint8_t status; uint8_t v_max_wrn; uint8_t v_min_wrn; float value; float v_max; float v_min; }web_sensor_info_t; typedef struct { uint8_t type; uint32_t str_id; uint32_t sep_id; uint32_t time; }alarm_msg_t; typedef struct { uint32_t brd[POWER_BOARD_MAX]; uint8_t time_mode; //绝对时间/相对时间 uint32_t time_s; //起始时间, 单位: 秒 uint32_t time_inv; //间隔时间, 单位: 秒 int8_t loop_mode; //按日/周/月/年 int32_t loop_times; //循环次数, 负值为无限循环 }schedule_data_t; ////////////////////////////// //typedef struct //{ // uint8_t userID; //用户ID // char name[32]; //用户名-登录 // char password[32]; //用户密码 // char nick[32]; //用户名称 // uint8_t roleID; //角色ID // uint32_t time; //用户创建时间 //}user_data_t; typedef struct { uint8_t roleID; //角色ID char roleName[32]; //角色名称 uint8_t roleLevel; //角色等级 char auth[32]; //角色权限 int roleSort; //显示顺序 uint32_t time; //创建时间 }role_data_t; typedef struct { int id; int use; char account[64]; }mail_recv_t; typedef struct { uint8_t id; uint8_t mode; //0: open 1: close char account[64]; //用户账号 char password[24]; //用户密码 char server[64]; //服务器 char port[10]; //端口 char auth[16]; //认证方式 char *ca; //ca cert }mail_send_t; typedef struct { mail_send_t send; #define MAIL_RECV_MAX 10 mail_recv_t recv[MAIL_RECV_MAX]; //接收账号列表 }mail_info_t; enum { MQTT_PLAT_EMQX=0, MQTT_PLAT_ALIYUN, MQTT_PLAT_MAX }; typedef struct { uint8_t id; //id uint8_t plat; //0: emqx 1: aliyun uint8_t mode; //0: open 1: close char proto[16]; //mqtt, mqtts, ws, wss char name[32]; //server name char server[256]; //server ip char port[10]; //server port char cid[64]; //client ID char user[32]; // char password[32]; char *cert; uint8_t status; }mqtt_server_t; typedef struct { #define MQTT_SER_MAX 5 mqtt_server_t ser[MQTT_SER_MAX]; }mqtt_info_t; typedef struct { uint8_t type; char *content; uint32_t time; }log_data_t; /////////////////////////////////////////////////////////// typedef struct ac_dc_out{ uint32_t voltage; uint32_t current; uint32_t power; uint32_t freq; uint32_t consumer; uint32_t factor; }ac_dc_out_t; typedef struct ac_dc_in{ uint32_t all_voltage; uint32_t all_current; uint32_t all_power; uint32_t all_consumer; }ac_dc_in_t; typedef uint32_t sensor_t; typedef struct cascade_sensor{ sensor_t s_1; sensor_t s_2; }cascade_sensor_t; typedef struct md_ac_dc{ uint16_t dev_cnt; //设备类型和通道数 ac_dc_out_t power[POWER_SLAVE_CH_MAX]; //最大64通道 ac_dc_in_t power_all; uint16_t temp; uint16_t humity; uint16_t switch_stu[POWER_SLAVE_CH_MAX]; uint16_t delay_open[POWER_SLAVE_CH_MAX]; uint16_t delay_close[POWER_SLAVE_CH_MAX]; cascade_sensor_t md_s[4]; //sensor_info_t md_s[4]; //uint16_t dry_node[4]; }md_ac_dc_t; typedef struct all_info{ uint32_t voltage; uint32_t current; uint32_t power; uint32_t consumer; }all_info_t; typedef struct { uint32_t power; uint32_t freq; uint32_t consumer; uint16_t fac; uint32_t out_type; }all_chn_info_t; typedef struct chn_phase_info{ uint32_t p_voltage; uint32_t p_current; uint32_t p_power; uint32_t p_consumer; uint32_t p_status; }chn_phase_info_t; typedef struct md_3_ac{ uint16_t dev_cnt; //设备类型和通道数 all_info_t ac_3_all_pw[3]; all_chn_info_t ac_3_all_chn[POWER_SLAVE_CH_MAX]; chn_phase_info_t ac_3_chn_p[POWER_SLAVE_CH_MAX][3]; uint16_t temp; uint16_t humity; uint16_t switch_chn[POWER_SLAVE_CH_MAX]; uint16_t delay_open[POWER_SLAVE_CH_MAX]; uint16_t delay_close[POWER_SLAVE_CH_MAX]; cascade_sensor_t md_s[4]; //sensor_info_t md_s[4]; //uint16_t dry_node[4]; }md_3_ac_t; typedef struct cascade_data{ uint8_t chs; //从机读取通道数 power_ch_t *pch; }cascade_data_t; /////////////////////////////////////////////////////////// typedef struct { uint8_t flag; }sys_stat_t; typedef struct { uint8_t flag; }mesg_data_t; typedef struct { uint8_t cnt; uint8_t addr[POWER_CASCADE_MAX]; }slave_list_t; enum{ NEW_PKT_TYPE_DEVICE_INFO, //channels,power type,date,version,hard,version NEW_PKT_TYPE_ELE_INFO, //name_16 status board_addr board_chn delay_open delay_close phase_l phase_r max 32 NEW_PKT_TYPE_SENSOR, NEW_PKT_TYPE_NETWORK, NEW_PKT_TYPE_RS485, NEW_PKT_TYPE_SNMP, NEW_PKT_TYPE_WANNING, NEW_PKT_TYPE_NTP, MEW_PKT_TYPE_LOGIN, NEW_PKT_TYPE_USER, }; enum{ NEW_SUB_PKT_TYPE_ELE_DATA_L1, NEW_SUB_PKT_TYPE_ELE_DATA_L2, NEW_SUB_PKT_TYPE_ELE_DATA_L3, NEW_SUB_PKT_TYPE_ELE_DATA_INFO, NEW_SUB_PKT_TYPE_ELE_DATA_ALL, NEW_SUB_PKT_TYPE_ELE_DATA_THR, NEW_SUB_PKT_TYPE_ELE_DELAY, NEW_SUB_PKT_TYPE_ELE_CLEAR_CONSUMER, NEW_SUB_PKT_TYPE_ELE_CTRL, NEW_SUB_PKT_TYPE_ELE_ALL_CTRL, NEW_SUB_PKT_TYPE_ELE_BATCH, }; enum{ NEW_SUB_PKT_TYPE_HUMI = 0, NEW_SUB_PKT_TYPE_TEMP, NEW_SUB_PKT_TYPE_SMOKE, NEW_SUB_PKT_TYPE_CO2, }; enum{ NEW_SUB_PKT_TYPE_WANNING_CLEAN = 0, NEW_SUB_PKT_TYPE_WANNING_SOUND_LIGHT_CLEAN, }; enum{ NEW_SUB_PKT_TYPE_USER_INFO = 0, NEW_SUB_PKT_TYPE_USER_ADD, NEW_SUB_PKT_TYPE_USER_UPDATE, NEW_SUB_PKT_TYPE_USER_DELETE, }; typedef struct{ uint8_t chs; uint8_t power_type; int8_t zone; uint8_t board_cnt; char soft_version[32]; char hard_version[32]; char date[16]; char time[16]; }web_device_info_t; typedef alarm_all_t web_channel_wanning_t; enum { SUB_TYPE_POWER_SWITCH=0, //set relay switch SUB_TYPE_POWER_ALARM, SUB_TYPE_POWER_THRESHOLD, SUB_TYPE_POWER_OPEN_DELAY, SUB_TYPE_POWER_CLOSE_DELAY, SUB_TYPE_PARAS_SYS, SUB_TYPE_PARAS_MODBUS, SUB_TYPE_PARAS_MISC, SUB_TYPE_PARAS_PROD, SUB_TYPE_PARAS_SERV, SUB_TYPE_PARAS_NETWORK, SUB_TYPE_PARAS_SNMP, SUB_TYPE_PARAS_NTP, SUB_TYPE_POWER_CONSUMER_CLEAR, SUB_TYPE_POWER_PH_CFG, SUB_TYPE_MAX, }; #define PKT_MAGIC 0xdead typedef struct { uint16_t magic; uint8_t addr; uint8_t type; uint8_t subtype; uint8_t nack; uint32_t flag; uint32_t dlen; uint8_t data[0]; }pkt_hdr_t; #pragma pack () #define CONCAT(a,b) a b #define SD_DEV "sd" #define NOR_DEV "nor" #define ROOT_PATH "/" #define SD_PATH CONCAT(ROOT_PATH,SD_DEV) #define NOR_PATH CONCAT(ROOT_PATH,NOR_DEV) #define DB_NAME "smartPDU" #define INI_NAME "smartPDU.ini" #define INF_NAME "PDUInfo.txt" #define INF_PH_3_1 "PH_3_1.ini" #define INF_PH_3_2 "PH_3_2.ini" #define USER_NAME "userInfo.csv" #if 1 #define DB_PATH SD_PATH #define CFG_PATH NOR_PATH #else #define DB_PATH ROOT_PATH #define CFG_PATH ROOT_PATH #endif #endif