Explorar el Código

添加一款温度和泄漏传感器

guohui hace 1 año
padre
commit
abd6331b3c

BIN
cust_data/db/pdu_dat.db


BIN
cust_data/db/pdu_dat_itk.db


+ 47 - 10
pro/src/app.c

@@ -1387,7 +1387,8 @@ static void* breaker_thread(void *arg)
 static void* sensor_thread(void* arg)
 {
 #if 1
-   GlobalDeviceManager *_globalDeviceManager = (GlobalDeviceManager *)&__globalDeviceManage;
+    thread_handle_t *th=(thread_handle_t*)arg;
+    GlobalDeviceManager *_globalDeviceManager = (GlobalDeviceManager *)th->arg;
     unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product.samp_time;
     GlobalSensorManger *_globalSensorMangerTemp;
     int ret = 0;
@@ -1430,7 +1431,7 @@ static void* sensor_thread(void* arg)
     log_d("GPIO 初始化成功");
     */
     // 采集线程
-    while (_globalDeviceManager->dev_samp_flag)
+    while (th->quit==0)
     {
 
         if (nSaveIndex > nMaxIndex)
@@ -1450,18 +1451,18 @@ static void* sensor_thread(void* arg)
             _globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;
             switch (_globalSensorMangerTemp->sensor_type)
             {
-            case SENSOR_TYPE_TEMPERATURE: // 温湿度
+            case SENSOR_TYPE_TEMP_HUMI: // 温湿度
             {
                 // printf("get \n");
                 float temperature = 0.0;
                 float humidity = 0.0;
 #ifdef PRJ_ANDERSON
-                ret = _g_sensor_get_temperature_value_ANDERSON((void *)&_globalDeviceManager->sensor_modbus_manager,
+                ret = sensor_get_temperature_value_anderson((void *)&_globalDeviceManager->sensor_modbus_manager,
                                                                _globalSensorMangerTemp->sensor_addr,
                                                                &temperature,
                                                                &humidity);
 #else
-                ret = _g_sensor_get_temperature_value((void *)&_globalDeviceManager->sensor_modbus_manager,
+                ret = sensor_get_temperature_value((void *)&_globalDeviceManager->sensor_modbus_manager,
                                                       _globalSensorMangerTemp->sensor_addr,
                                                       &temperature,
                                                       &humidity);
@@ -1501,7 +1502,7 @@ static void* sensor_thread(void* arg)
             break;
             case SENSOR_TYPE_SMOKE: // 烟雾
             case SENSOR_TYPE_WATER: // 水浸
-            case SENSOR_TYPE_DOOR: // 门禁 IO信号
+            case SENSOR_TYPE_ACCESS: // 门禁 IO信号
             {
                 if (_globalSensorMangerTemp->sensor_interface_type==2)//干节点传感器
                 {
@@ -1524,7 +1525,7 @@ static void* sensor_thread(void* arg)
             case SENSOR_TYPE_GAS: // 气体
             {
                 float CO2 = 0.0;
-                ret = _g_sensor_get_CO2_value((void *)&_globalDeviceManager->sensor_modbus_manager,
+                ret = sensor_get_co2_value((void *)&_globalDeviceManager->sensor_modbus_manager,
                                               _globalSensorMangerTemp->sensor_addr,
                                               &CO2);
                 if (ret == -1)
@@ -1547,18 +1548,53 @@ static void* sensor_thread(void* arg)
                     _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
             }
             break;
-            case SENSOR_TYPE_AIR_Conditioner: // 空调
+            case SENSOR_TYPE_AIR_COND: // 空调
             {
                 _globalSensorInfo.val1 = 0;
                 _globalSensorInfo.val2 =0;
                 _globalSensorMangerTemp->Cur_sensor_info = _globalSensorInfo;
             }
             break;
-            case SENSOR_TYPE_DoubleT://双头传感器
+
+            case SENSOR_TYPE_TEMP://温度传感器
+            {
+                sensor_dat_t sdat;
+                ret = sensor_get_data(SENSOR_TYPE_TEMP, SENSOR_TYPE_TEMP_BTG50H8EL3200, _globalSensorMangerTemp->sensor_addr, &sdat);
+                if (ret == -1){
+                    //log_w("Relay modbus Error:%s\n", modbus_strerror(errno));
+                    _globalSensorMangerTemp->sensor_status = 1;
+                }
+                else {
+                    _globalSensorMangerTemp->sensor_status = 0;
+                }
+                _globalSensorInfo.val1 = sdat.val[0];
+                _globalSensorInfo.val2 = -1;
+                _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
+            }
+            break;
+
+            case SENSOR_TYPE_LEAK://泄漏传感器
+            {
+                sensor_dat_t sdat;
+                ret = sensor_get_data(SENSOR_TYPE_LEAK, SENSOR_TYPE_LEAK_XWDC01A, _globalSensorMangerTemp->sensor_addr, &sdat);
+                if (ret == -1){
+                    //log_w("Relay modbus Error:%s\n", modbus_strerror(errno));
+                    _globalSensorMangerTemp->sensor_status = 1;
+                }
+                else {
+                    _globalSensorMangerTemp->sensor_status = 0;
+                }
+                _globalSensorInfo.val1 = sdat.flag;
+                _globalSensorInfo.val2 = -1;
+                _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
+            }
+            break;
+
+            case SENSOR_TYPE_TEMP_DOUBLE://双头传感器
             {
                 float temperature = 0.0;
                 float temperature2 = 0.0;
-                ret = _g_sensor_get_D_temperature_value_ANDERSON((void *)&_globalDeviceManager->sensor_modbus_manager,
+                ret = sensor_get_d_temperature_value_anderson((void *)&_globalDeviceManager->sensor_modbus_manager,
                                                       _globalSensorMangerTemp->sensor_addr,
                                                       &temperature,
                                                       &temperature2);
@@ -1751,6 +1787,7 @@ static void* shm_thread(void *arg)
                     {
                         nMaxCh+=1;
                     }
+
                     _globalDeviceManager->g_shm_Data->nMaxCh = nMaxCh;
                     if ((__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree||
                         __globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One ||

+ 112 - 75
pro/src/appweb_handle.c

@@ -2,7 +2,7 @@
 #include "common.h"
 #include "json_handle.h"
 #include "sqlite_handle.h"
-#include "cJSON.h"
+#include "common.h"
 #include "switch_ctrl.h"
 #include "sys.h"
 #include "thread.h"
@@ -2172,42 +2172,55 @@ static void sensorStatusMonitoring(void* conn)
             memset(&_globalSensorInfo, 0, sizeof(_globalSensorInfo));
             switch(_globalSensorManagerTemp->sensor_type)
             {
-                case 0://温湿度传感器 2个值
+                case SENSOR_TYPE_TEMP_HUMI://温湿度传感器 2个值
                 {
                     _overSensorBackInfoTemp->temperatureValue = _globalSensorManagerTemp->Cur_sensor_info.val1;
                     _overSensorBackInfoTemp->humidityValue =_globalSensorManagerTemp->Cur_sensor_info.val2;
                 }break; 
-                case 1://烟雾传感器 1个值
+                case SENSOR_TYPE_SMOKE://烟雾传感器 1个值
                 {
                     
                     _overSensorBackInfoTemp->alarmStatus = ! (bool) _globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
                 }break; 
-                case 2://水浸传感器 1个值  c
+                case SENSOR_TYPE_WATER://水浸传感器 1个值  c
                 {
                     _overSensorBackInfoTemp->waterImmersionState = !(bool)_globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
                 }break; 
-                case 3://门禁传感器 
+                case SENSOR_TYPE_ACCESS://门禁传感器 
                 {                    
                     _overSensorBackInfoTemp->accessControlStatus =  !(bool)_globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
                 }break; 
-                case 4: //气体传感器 1个值
+                case SENSOR_TYPE_GAS: //气体传感器 1个值
                 {
                     _overSensorBackInfoTemp->gasConcentration = _globalSensorManagerTemp->Cur_sensor_info.val1; // 气体浓度
                 }break;
-                case 5://气压气流传感器 2个值
+                case SENSOR_TYPE_AIR_PRESS://气压气流传感器 2个值
                 {
                     _overSensorBackInfoTemp->airPressureValue =  _globalSensorManagerTemp->Cur_sensor_info.val1; // 气压
                     _overSensorBackInfoTemp->airflowValue = _globalSensorManagerTemp->Cur_sensor_info.val2; // 气流
                 };break; 
-                case 6://空调遥控器 没有值
+                case SENSOR_TYPE_AIR_COND://空调遥控器 没有值
                 {
 
                 }break; 
-                case 7://双头温度传感器 2个值
+                case SENSOR_TYPE_TEMP_DOUBLE://双头温度传感器 2个值
                 {
                     _overSensorBackInfoTemp->temperatureValue = _globalSensorManagerTemp->Cur_sensor_info.val1;
                     _overSensorBackInfoTemp->temperatureValue2 =_globalSensorManagerTemp->Cur_sensor_info.val2;
-                }break; 
+                }break;
+
+                case SENSOR_TYPE_TEMP:
+                {
+                    _overSensorBackInfoTemp->temperatureValue = _globalSensorManagerTemp->Cur_sensor_info.val1;
+                }break;
+                case SENSOR_TYPE_LEAK:
+                {
+                    _overSensorBackInfoTemp->temperatureValue = _globalSensorManagerTemp->Cur_sensor_info.val1;
+                }break;
+                
+
+
+
             }
             //入队
             list_add_tail(&_overSensorBackInfoTemp->list,&_over_all_sensor_back_info.list);
@@ -2353,30 +2366,37 @@ static void sensorStatusMonitoring(void* conn)
             //_globalSensorMangerTemp->sensor_status = 0;
             switch (_globalSensorMangerTemp->sensor_type)
             {
-            case 0:
+            case SENSOR_TYPE_TEMP_HUMI:
                 _globalSensorMangerTemp->sensor_val_count = 2;
                 break; // 温湿度传感器 2个值
-            case 1:
+            case SENSOR_TYPE_SMOKE:
                 _globalSensorMangerTemp->sensor_val_count = 1;
                 break; // 烟雾传感器 1个值
-            case 2:
+            case SENSOR_TYPE_WATER:
                 _globalSensorMangerTemp->sensor_val_count = 1;
                 break; // 水浸传感器 1个值
-            case 3:
+            case SENSOR_TYPE_ACCESS:
                 _globalSensorMangerTemp->sensor_val_count = 1;
                 break; // 门禁传感器 没有值
-            case 4:
+            case SENSOR_TYPE_GAS:
                 _globalSensorMangerTemp->sensor_val_count = 1;
                 break; // 气体传感器 1个值
-            case 5:
+            case SENSOR_TYPE_AIR_PRESS:
                 _globalSensorMangerTemp->sensor_val_count = 2;
                 break; // 气压气流传感器 2个值
-            case 6:
+            case SENSOR_TYPE_AIR_COND:
                 _globalSensorMangerTemp->sensor_val_count = 0;
                 break; // 空调遥控器 没有值
-            case 7:
+            case SENSOR_TYPE_TEMP_DOUBLE:
                 _globalSensorMangerTemp->sensor_val_count = 2;
                 break; // 双头温度传感器 2个值
+            case SENSOR_TYPE_TEMP:
+                _globalSensorMangerTemp->sensor_val_count = 1;
+                break; // 双头温度传感器 2个值
+            case SENSOR_TYPE_LEAK:
+                _globalSensorMangerTemp->sensor_val_count = 1;
+                break; // 双头温度传感器 2个值
+
             }
 
             // 插入数据库
@@ -2541,14 +2561,16 @@ static void sensorStatusMonitoring(void* conn)
         _globalSensorMangerTemp->sensor_status = 0;
         switch( _globalSensorMangerTemp->sensor_type)
         {
-            case 0:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //温湿度传感器 2个值
-            case 1:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //烟雾传感器 1个值
-            case 2:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //水浸传感器 1个值  
-            case 3:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //门禁传感器 没有值
-            case 4:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //气体传感器 1个值
-            case 5:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //气压气流传感器 2个值
-            case 6:_globalSensorMangerTemp->sensor_val_count = 0 ;break; //空调遥控器 没有值
-            case 7:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //双头温度传感器 2个值
+            case SENSOR_TYPE_TEMP_HUMI:     _globalSensorMangerTemp->sensor_val_count = 2 ;break; //温湿度传感器 2个值
+            case SENSOR_TYPE_SMOKE:         _globalSensorMangerTemp->sensor_val_count = 1 ;break; //烟雾传感器 1个值
+            case SENSOR_TYPE_WATER:         _globalSensorMangerTemp->sensor_val_count = 1 ;break; //水浸传感器 1个值  
+            case SENSOR_TYPE_ACCESS:        _globalSensorMangerTemp->sensor_val_count = 1 ;break; //门禁传感器 没有值
+            case SENSOR_TYPE_GAS:           _globalSensorMangerTemp->sensor_val_count = 1 ;break; //气体传感器 1个值
+            case SENSOR_TYPE_AIR_PRESS:     _globalSensorMangerTemp->sensor_val_count = 2 ;break; //气压气流传感器 2个值
+            case SENSOR_TYPE_AIR_COND:      _globalSensorMangerTemp->sensor_val_count = 0 ;break; //空调遥控器 没有值
+            case SENSOR_TYPE_TEMP_DOUBLE:   _globalSensorMangerTemp->sensor_val_count = 2 ;break; //双头温度传感器 2个值
+            case SENSOR_TYPE_TEMP:          _globalSensorMangerTemp->sensor_val_count = 1 ;break; //温度传感器 1个值
+            case SENSOR_TYPE_LEAK:          _globalSensorMangerTemp->sensor_val_count = 1 ;break; //双头温度传感器 1个值
             default:break;
         }
         //插入数据库
@@ -2687,52 +2709,66 @@ static void sensorStatusMonitoring(void* conn)
                 // 判断sensor type 填充数据
                 switch (_globalSensorMangerSTemp->sensor_type)
                 {
-                case SENSOR_TYPE_TEMPERATURE: // 温湿度传感器 2个值
-                {
-                    _overSensorBackInfoTemp->temp_humi_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
-                    _overSensorBackInfoTemp->temp_humi_sensor.ydata[1][_TempCount] = _globalSensorInfoTemp->val2;
-                    strcpy(_overSensorBackInfoTemp->temp_humi_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
-                }
-                break;
-                case SENSOR_TYPE_SMOKE: // 烟雾传感器 1个值
-                {
-                    _overSensorBackInfoTemp->alarmStatus =! (bool)_globalSensorInfoTemp->val1; // 1/0 报警未报警
-                }
-                break;
-                case SENSOR_TYPE_WATER: // 水浸传感器
-                {
-                    _overSensorBackInfoTemp->waterImmersionState =! (bool)_globalSensorInfoTemp->val1; // 1/0 报警未报警
-                }
-                break;
-                case SENSOR_TYPE_DOOR: // 门禁传感器 没有值
-                {
-                    _overSensorBackInfoTemp->accessControlStatus =! (bool)_globalSensorInfoTemp->val1; // 1/0 报警未报警
-                }
-                break;
-                case SENSOR_TYPE_GAS: // 气体传感器 1个值
-                {
-                    _overSensorBackInfoTemp->gas_sensor.ydata[_TempCount] = _globalSensorInfoTemp->val1; // 气体浓度
-                    strcpy(_overSensorBackInfoTemp->gas_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
-                }
-                break;
-                case SENSOR_TYPE_AIR_PRESS:
-                {
-                    _overSensorBackInfoTemp->air_press_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
-                    _overSensorBackInfoTemp->air_press_sensor.ydata[1][_TempCount] = _globalSensorInfoTemp->val2;
-                    strcpy(_overSensorBackInfoTemp->air_press_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
-                }
-                break;
-                case 6: // 空调遥控器 没有值
-                {
-                }
-                break;
-                case SENSOR_TYPE_DoubleT: // 温湿度传感器 2个值
-                {
-                    _overSensorBackInfoTemp->temp_humi_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
-                    _overSensorBackInfoTemp->temp_humi_sensor.ydata[1][_TempCount] = _globalSensorInfoTemp->val2;
-                    strcpy(_overSensorBackInfoTemp->temp_humi_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
-                }
-                break;
+                    case SENSOR_TYPE_TEMP_HUMI: // 温湿度传感器 2个值
+                    {
+                        _overSensorBackInfoTemp->temp_humi_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
+                        _overSensorBackInfoTemp->temp_humi_sensor.ydata[1][_TempCount] = _globalSensorInfoTemp->val2;
+                        strcpy(_overSensorBackInfoTemp->temp_humi_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
+                    }
+                    break;
+                    case SENSOR_TYPE_SMOKE: // 烟雾传感器 1个值
+                    {
+                        _overSensorBackInfoTemp->alarmStatus =! (bool)_globalSensorInfoTemp->val1; // 1/0 报警未报警
+                    }
+                    break;
+                    case SENSOR_TYPE_WATER: // 水浸传感器
+                    {
+                        _overSensorBackInfoTemp->waterImmersionState =! (bool)_globalSensorInfoTemp->val1; // 1/0 报警未报警
+                    }
+                    break;
+                    case SENSOR_TYPE_ACCESS: // 门禁传感器 没有值
+                    {
+                        _overSensorBackInfoTemp->accessControlStatus =! (bool)_globalSensorInfoTemp->val1; // 1/0 报警未报警
+                    }
+                    break;
+                    case SENSOR_TYPE_GAS: // 气体传感器 1个值
+                    {
+                        _overSensorBackInfoTemp->gas_sensor.ydata[_TempCount] = _globalSensorInfoTemp->val1; // 气体浓度
+                        strcpy(_overSensorBackInfoTemp->gas_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
+                    }
+                    break;
+                    case SENSOR_TYPE_AIR_PRESS:
+                    {
+                        _overSensorBackInfoTemp->air_press_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
+                        _overSensorBackInfoTemp->air_press_sensor.ydata[1][_TempCount] = _globalSensorInfoTemp->val2;
+                        strcpy(_overSensorBackInfoTemp->air_press_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
+                    }
+                    break;
+                    case SENSOR_TYPE_AIR_COND: // 空调遥控器 没有值
+                    {
+                    }
+                    break;
+                    case SENSOR_TYPE_TEMP_DOUBLE: // 温湿度传感器 2个值
+                    {
+                        _overSensorBackInfoTemp->temp_humi_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
+                        _overSensorBackInfoTemp->temp_humi_sensor.ydata[1][_TempCount] = _globalSensorInfoTemp->val2;
+                        strcpy(_overSensorBackInfoTemp->temp_humi_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
+                    }
+                    break;
+                    
+                    case SENSOR_TYPE_TEMP:
+                    {
+                        _overSensorBackInfoTemp->temp_humi_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
+                        strcpy(_overSensorBackInfoTemp->temp_humi_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
+                    }
+                    break;
+
+                    case SENSOR_TYPE_LEAK:
+                    {
+                        _overSensorBackInfoTemp->temp_humi_sensor.ydata[0][_TempCount] = _globalSensorInfoTemp->val1;
+                        strcpy(_overSensorBackInfoTemp->temp_humi_sensor.xAxis[_TempCount], _globalSensorInfoTemp->samp_time);
+                    }
+                    break;
                 }
                 _TempCount++;
             }
@@ -3372,8 +3408,9 @@ static void alarmProtect(void *conn)
         sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
         switch (_globalSensorMangerSaveTemp->sensor_type)
         {
-        case SENSOR_TYPE_TEMPERATURE:
-        case SENSOR_TYPE_DoubleT:
+        case SENSOR_TYPE_TEMP_HUMI:
+        case SENSOR_TYPE_TEMP_DOUBLE:
+        case SENSOR_TYPE_TEMP:
         {
             char strName1[100]={0};
             char strName2[100]={0};
@@ -3448,7 +3485,7 @@ static void alarmProtect(void *conn)
             break;
         case SENSOR_TYPE_SMOKE:
         case SENSOR_TYPE_WATER:
-        case SENSOR_TYPE_DOOR:
+        case SENSOR_TYPE_ACCESS:
             break;
         case SENSOR_TYPE_GAS:
             {

+ 37 - 10
pro/src/common.h

@@ -118,30 +118,57 @@ enum
 
 enum
 {
-    SENSOR_TYPE_TEMPERATURE = 0 , //温度传感器
+    SENSOR_TYPE_TEMP_HUMI   = 0 , //温湿度传感器
     SENSOR_TYPE_SMOKE       = 1 , //烟雾传感器
     SENSOR_TYPE_WATER       = 2 , //水浸传感器
-    SENSOR_TYPE_DOOR        = 3 , //门禁传感器
+    SENSOR_TYPE_ACCESS      = 3 , //门禁传感器
     SENSOR_TYPE_GAS         = 4 , //气体传感器
-    SENSOR_TYPE_AIR_PRESS   = 5 ,  //气体、气压传感器
-    SENSOR_TYPE_AIR_Conditioner   = 6,  //空调传感器
-    SENSOR_TYPE_DoubleT     = 7   //双头温度
+    SENSOR_TYPE_AIR_PRESS   = 5 , //气压传感器
+    SENSOR_TYPE_AIR_COND    = 6,  //空调传感器
+    SENSOR_TYPE_TEMP_DOUBLE = 7,  //双头温度传感器
+
+    SENSOR_TYPE_TEMP        = 8,  //温度传感器
+    SENSOR_TYPE_LEAK        = 9,  //泄漏传感器
+};
+
+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
 {
     SENSOR_VAL1_UPPER = 0,
-    SENSOR_VAL1_LOWER = 1,
-    SENSOR_VAL2_UPPER = 2,
-    SENSOR_VAL2_LOWER = 3,
+    SENSOR_VAL1_LOWER,
+    SENSOR_VAL2_UPPER,
+    SENSOR_VAL2_LOWER,
 
 };
-
 enum
 {
     SENSOR_TYPE_VALUE = 0 , //传感器类型0、4、5
-    SENSOR_TYPE_LIST =1     //传感器类型1、2、3
+    SENSOR_TYPE_LIST        //传感器类型1、2、3
 };
 
+
 /// @brief 板子类型
 enum MODBUS_BOARD_TYPE
 {

+ 10 - 7
pro/src/json_handle.c

@@ -3210,7 +3210,9 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
         {
             cJSON* data = cJSON_CreateObject();
             cJSON* date_time_xAxis_array = cJSON_CreateArray();
-            if(_temp->sensorType == SENSOR_TYPE_TEMPERATURE||_temp->sensorType == SENSOR_TYPE_DoubleT)
+            if(_temp->sensorType == SENSOR_TYPE_TEMP_HUMI||
+               _temp->sensorType == SENSOR_TYPE_TEMP_DOUBLE||
+               _temp->sensorType == SENSOR_TYPE_TEMP)
             {
                 for(int i=0;i< TOTAL_COUNT;i++)
                 {  
@@ -3227,7 +3229,7 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
                 cJSON_AddStringToObject(type_data_temp,"type","0");
                 cJSON_AddItemToArray(type_data_array,type_data_temp);
                 cJSON* type_data_humi = cJSON_CreateObject();
-                if (_temp->sensorType == SENSOR_TYPE_DoubleT)
+                if (_temp->sensorType == SENSOR_TYPE_TEMP_DOUBLE)
                 {
                     cJSON_AddStringToObject(type_data_humi, "typeName", language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
                 }
@@ -3675,8 +3677,9 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
     {
         switch (_globalSensorMangerTemp->sensor_type)
         {
-        case SENSOR_TYPE_TEMPERATURE:
-        case SENSOR_TYPE_DoubleT:
+        case SENSOR_TYPE_TEMP_HUMI:
+        case SENSOR_TYPE_TEMP_DOUBLE:
+        case SENSOR_TYPE_TEMP:
         {
             data_filed = cJSON_CreateObject();
             sprintf(temp, "%d", _globalSensorMangerTemp->sensor_status);
@@ -3686,7 +3689,7 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             sprintf(temp, "%d", _globalSensorMangerTemp->sensor_id);
             cJSON_AddStringToObject(data_filed, "sensorId", temp);
             cJSON_AddNumberToObject(data_filed, "sensorType", _globalSensorMangerTemp->sensor_type);
-            if (SENSOR_TYPE_DoubleT == _globalSensorMangerTemp->sensor_type)
+            if (SENSOR_TYPE_TEMP_DOUBLE == _globalSensorMangerTemp->sensor_type)
             {
                 sprintf(temp, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product.language], 1);
                 cJSON_AddStringToObject(data_filed, "thresholdType", temp);
@@ -3789,7 +3792,7 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             sprintf(temp, "%d", _globalSensorMangerTemp->sensor_id);
             cJSON_AddStringToObject(data_filed, "sensorId", temp);
             cJSON_AddNumberToObject(data_filed, "sensorType", _globalSensorMangerTemp->sensor_type);
-            if (SENSOR_TYPE_DoubleT == _globalSensorMangerTemp->sensor_type)
+            if (SENSOR_TYPE_TEMP_DOUBLE == _globalSensorMangerTemp->sensor_type)
             {
                 sprintf(temp, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product.language], 2);
                 cJSON_AddStringToObject(data_filed, "thresholdType", temp);
@@ -3889,7 +3892,7 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             break;
         case SENSOR_TYPE_SMOKE:
         case SENSOR_TYPE_WATER:
-        case SENSOR_TYPE_DOOR:
+        case SENSOR_TYPE_ACCESS:
             data_filed = cJSON_CreateObject();
             cJSON_AddStringToObject(data_filed, "connectionStatus", "");
             cJSON_AddStringToObject(data_filed, "sensorName", language_sensor_name[langID][(int)_globalSensorMangerTemp->sensor_type]);

+ 9 - 0
pro/src/language_common.c

@@ -361,6 +361,15 @@ const char language_atmosphere_pressure[LANGUAGE_TYPE][LANGUAGE_SIZE] =
     " "
 } ;
 
+const char language_leak[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "泄漏",
+    "Leak",
+    "Утечка",
+    " "
+} ;
+
+
 const char language_log_Power[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
     "电源日志",

+ 2 - 0
pro/src/language_common.h

@@ -93,6 +93,8 @@ extern const char language_atmosphere_airflow[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_atmosphere_pressure[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
+extern const char language_leak[LANGUAGE_TYPE][LANGUAGE_SIZE];
+
 extern const char language_log_Power[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_opera_log_operation[LANGUAGE_TYPE][LANGUAGE_SIZE];

+ 8 - 3
pro/src/mail.c

@@ -427,8 +427,9 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
         case ALARM_TYPE_SENSOR:
         {
             switch(subtype) {
-                case SENSOR_TYPE_DoubleT:
-                case SENSOR_TYPE_TEMPERATURE:
+                case SENSOR_TYPE_TEMP_DOUBLE:
+                case SENSOR_TYPE_TEMP_HUMI:
+                case SENSOR_TYPE_TEMP:
                 snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_temperature[langID], language_alarm[langID]);
                 break;
 
@@ -440,7 +441,7 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
                 snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_humidity[langID], language_alarm[langID]);
                 break;
 
-                case SENSOR_TYPE_DOOR:
+                case SENSOR_TYPE_ACCESS:
                 snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_access[langID], language_alarm[langID]);
                 break;
 
@@ -452,6 +453,10 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
                 snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_atmosphere_pressure[langID], language_alarm[langID]);
                 break;
 
+                case SENSOR_TYPE_LEAK:
+                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_leak[langID], language_alarm[langID]);
+                break;
+
                 default:
                 return -1;
             }

+ 9 - 3
pro/src/mqtt.c

@@ -1144,7 +1144,7 @@ static int my_recv(char *topic, char *data)
                     int id=atoi(topic+strlen(temp));
                     cmd = get_cmd(data);
                     switch(id) {
-                        case SENSOR_TYPE_TEMPERATURE:
+                        case SENSOR_TYPE_TEMP_HUMI:
                         break;
 
                         case SENSOR_TYPE_SMOKE:
@@ -1153,7 +1153,7 @@ static int my_recv(char *topic, char *data)
                         case SENSOR_TYPE_WATER:
                         break;
 
-                        case SENSOR_TYPE_DOOR:
+                        case SENSOR_TYPE_ACCESS:
                         break;
 
                         case SENSOR_TYPE_GAS:
@@ -1162,7 +1162,13 @@ static int my_recv(char *topic, char *data)
                         case SENSOR_TYPE_AIR_PRESS:
                         break;
 
-                        case SENSOR_TYPE_DoubleT:
+                        case SENSOR_TYPE_TEMP_DOUBLE:
+                        break;
+
+                        case SENSOR_TYPE_TEMP:
+                        break;
+
+                        case SENSOR_TYPE_LEAK:
                         break;
                     }
 

+ 3 - 3
pro/src/paras.c

@@ -2150,13 +2150,13 @@ static int proc_sensor(char *path, int op, GlobalSensorManger *sensor)
             }sensor_info_t;
             #define SENSOR_MAX 7
             sensor_info_t sinfo[SENSOR_MAX]={
-                { .iface = 1, .type=SENSOR_TYPE_TEMPERATURE,        .name="A", .port="COM2", .baudrate=9600, .addr=1, .vcnt=2 },
+                { .iface = 1, .type=SENSOR_TYPE_TEMP_HUMI,          .name="A", .port="COM2", .baudrate=9600, .addr=1, .vcnt=2 },
                 { .iface = 2, .type=SENSOR_TYPE_SMOKE,              .name="B", .port="IN1",  .baudrate=9600, .addr=0, .vcnt=1 },
                 { .iface = 2, .type=SENSOR_TYPE_WATER,              .name="C", .port="IN2",  .baudrate=9600, .addr=0, .vcnt=1 },
-                { .iface = 2, .type=SENSOR_TYPE_DOOR,               .name="D", .port="IN3",  .baudrate=9600, .addr=0, .vcnt=1 },
+                { .iface = 2, .type=SENSOR_TYPE_ACCESS,             .name="D", .port="IN3",  .baudrate=9600, .addr=0, .vcnt=1 },
                 { .iface = 1, .type=SENSOR_TYPE_GAS,                .name="E", .port="COM1", .baudrate=9600, .addr=2, .vcnt=1 },
                 { .iface = 1, .type=SENSOR_TYPE_AIR_PRESS,          .name="F", .port="COM3", .baudrate=9600, .addr=3, .vcnt=2 },
-                { .iface = 1, .type=SENSOR_TYPE_AIR_Conditioner,    .name="G", .port="COM4", .baudrate=9600, .addr=4, .vcnt=1 },
+                { .iface = 1, .type=SENSOR_TYPE_AIR_COND,           .name="G", .port="COM4", .baudrate=9600, .addr=4, .vcnt=1 },
             };
 
             fprintf(fp, "[sensor]\n");

+ 166 - 22
pro/src/sensor_handle.c

@@ -1,22 +1,19 @@
 #include "sensor_handle.h"
 #include "modbus_handle.h"
-
+#include "common.h"
 //#include <gpiod.h>
 
 
-#define ANDERSON_temp1 0x0400
-#define ANDERSON_temp2 0x0401
-
 /// @brief 获取温湿度值
 /// @param manger 
 /// @param saddr 
 /// @param temp 
 /// @param humi 
 /// @return 
-int _g_sensor_get_temperature_value(void* manger,int saddr,float* temp,float* humi)
+int sensor_get_temperature_value(void* manger,int saddr,float* temp,float* humi)
 {
     int ret = 0 ;
-    unsigned short data_temp[2] = {0};
+    uint16_t data_temp[2] = {0};
     ret = g_modbus_read_x_reg(manger,saddr,0,2,data_temp);
     if(ret<=0)
         return -1 ;
@@ -26,14 +23,14 @@ int _g_sensor_get_temperature_value(void* manger,int saddr,float* temp,float* hu
     *temp = data_temp[1]/10.0 ; 
     return 0;
 }
-int _g_sensor_get_temperature_value_ANDERSON(void* manger,int saddr,float* temp,float* humi)
+int sensor_get_temperature_value_anderson(void* manger,int saddr,float* temp,float* humi)
 {
     int ret = 0 ;
-    unsigned short data_temp[2] = {0};
+    uint16_t data_temp[2] = {0};
+
     ret = g_modbus_read_input_reg(manger,saddr,0,2,data_temp);
     if (ret <= 0)
     {
- 
         return -1;
     }
 
@@ -43,22 +40,21 @@ int _g_sensor_get_temperature_value_ANDERSON(void* manger,int saddr,float* temp,
     *temp = data_temp[0]/10.0 ; 
     return 0;
 }
-int _g_sensor_get_D_temperature_value_ANDERSON(void* manger,int saddr,float* temp1,float* temp2)
+int sensor_get_d_temperature_value_anderson(void* manger,int saddr,float* temp1,float* temp2)
 {
     int ret = 0 ;
-    unsigned short data_temp[1] = {0};
+    uint16_t data_temp[1] = {0};
+    #define ANDERSON_temp1 0x0400
+    #define ANDERSON_temp2 0x0401
+
     ret = g_modbus_read_input_reg(manger,saddr,ANDERSON_temp1,1,data_temp);
-    if (ret <= 0)
-    {
- 
+    if (ret <= 0) {
         return -1;
     }
     //解算湿度值
     *temp1 = data_temp[0]/10.0 ;
     ret = g_modbus_read_input_reg(manger,saddr,ANDERSON_temp2,1,data_temp);
-    if (ret <= 0)
-    {
- 
+    if (ret <= 0){
         return -1;
     }
     //解算温度值
@@ -66,11 +62,12 @@ int _g_sensor_get_D_temperature_value_ANDERSON(void* manger,int saddr,float* tem
     return 0;
 }
 
+
 /// @brief 获取IO状态
 /// @param saadr 
 /// @param sts 
 /// @return 
-int _gsensor_get_io_status(int saddr,unsigned char* sts)
+int sensor_get_io_status(int saddr,unsigned char* sts)
 {
     int val;
     struct gpiod_line *line;
@@ -86,7 +83,7 @@ int _gsensor_get_io_status(int saddr,unsigned char* sts)
 /// @param saadr 
 /// @param sts 
 /// @return 
-int _gsensor_set_io_status(int saddr,unsigned char sts)
+int sensor_set_io_status(int saddr,unsigned char sts)
 {
     int val;
 
@@ -95,7 +92,7 @@ int _gsensor_set_io_status(int saddr,unsigned char sts)
 
 
 
-// int _gsensor_io_init(char* port_name,int saddr)
+// int sensor_io_init(char* port_name,int saddr)
 // {
 //     int val;
 //     struct gpiod_chip *chip;
@@ -116,10 +113,10 @@ int _gsensor_set_io_status(int saddr,unsigned char sts)
 
 // }
 
-int _g_sensor_get_CO2_value(void* manger,int saddr,float* temp)
+int sensor_get_co2_value(void* manger,int saddr,float* temp)
 {
     int ret = 0 ;
-    unsigned short data_temp[1] = {0};
+    uint16_t data_temp[1] = {0};
     ret = g_modbus_read_x_reg(manger,saddr,19,1,data_temp);
     if(ret<=0)
         return -1 ;
@@ -129,4 +126,151 @@ int _g_sensor_get_CO2_value(void* manger,int saddr,float* temp)
 }
 
 
+int sensor_get_data(int type, int subtype, int addr, sensor_dat_t *data)
+{
+    int r=-1;
+    Modbus_Manger *mm=&__globalDeviceManage.sensor_modbus_manager;
+
+    if(!data) {
+        return -1;
+    }
+
+    switch(type) {
+        case SENSOR_TYPE_TEMP_HUMI:
+        {
+            uint16_t tmp[2] = {0};
+
+            switch(subtype) {
+                case SENSOR_TYPE_TEMP_HUMI_RSWSN01PVC:
+                {
+                    
+                    r = g_modbus_read_x_reg(mm, addr, 0, 2, tmp);
+                    if(r<=0) {
+                        return -1 ;
+                    }
+                    data->val[0] = tmp[1]/10.0f; //湿度值
+                    data->val[1] = tmp[0]/10.0f; //湿度值
+                }
+                break;
+
+                case SENSOR_TYPE_TEMP_HUMI_HKSHT301T1H536VRS485:    //anderson
+                {
+                    r = g_modbus_read_input_reg(mm, addr, 0, 2, tmp);
+                    if (r <= 0) {
+                        return -1;
+                    }
+                    data->val[0] = data_temp[0]/10.0;   //温度值
+                    data->val[1] = data_temp[1]/10.0;   //湿度值
+                }
+                break;
+            }
+        }
+        break;
+
+        case SENSOR_TYPE_SMOKE:
+        {
+
+        }
+        break;
+
+        case SENSOR_TYPE_WATER:
+        {
+
+        }
+        break;
+
+        case SENSOR_TYPE_ACCESS:
+        {
+
+        }
+        break;
+
+        case SENSOR_TYPE_GAS:
+        {
+
+        }
+        break;
+
+        case SENSOR_TYPE_AIR_PRESS:
+        {
+
+        }
+        break;
+
+        case SENSOR_TYPE_AIR_COND:
+        {
+
+        }
+        break;
+
+        case SENSOR_TYPE_TEMP_DOUBLE:
+        {
+            switch(subtype) {
+                case SENSOR_TYPE_TEMP_HUMI_RSWSN01PVC:
+                {
+                    uint16_t tmp[2]={0};
+
+                    r = g_modbus_read_input_reg(mm, addr, 0x0400, 1, &tmp[0]);
+                    if (r <= 0) {
+                        return -1;
+                    }
+
+                    r = g_modbus_read_input_reg(mm, addr, 0x0401, 1, &tmp[1]);
+                    if (r <= 0) {
+                        return -1;
+                    }
+                    data->val[0] = tmp[1]/10.0f;   //解算温度值
+                    data->val[1] = tmp[0]/10.0f;   //解算湿度值
+                }
+                break;
+            }
+        }
+        break;
+
+        case SENSOR_TYPE_TEMP:
+        {
+            switch(subtype) {
+                case SENSOR_TYPE_TEMP_BTG50H8EL3200:
+                {
+                    uint16_t tmp={0};
+                    r = g_modbus_read_x_reg(mm, addr, 0, 1, &tmp);
+                    if (r <= 0) {
+                        printf("___ sensor BTG50H8EL3200 read failed, addr: %d, %s\n", addr, modbus_strerror(errno));
+                        return -1;
+                    }
+                    data->val[0] = tmp/10.0f - 50;
+                    //printf("___ BTG50H8EL3200 read: 0x%04x, temp: %0.2f\n", tmp, data->val[0]);
+                }
+                break;
+            }
+        }
+        break;
+
+        case SENSOR_TYPE_LEAK:
+        {
+            switch(subtype) {
+                case SENSOR_TYPE_LEAK_XWDC01A:
+                {
+                    uint16_t tmp[4]={0};
+                    r = g_modbus_read_input_reg(mm, addr, 0, 4, tmp);
+                    if (r <= 0) {
+                        printf("___ sensor XWDC01A read failed, addr: %d, %s\n", addr, modbus_strerror(errno));
+                        return -1;
+                    }
+                    //printf("___ XWDC01A read: 0x%04x, 0x%04x, 0x%04x, 0x%04x\n", tmp[0],tmp[1],tmp[2],tmp[3]);
+
+                    data->flag = 0;
+                    if(tmp[0] || tmp[1]) {
+                        data->flag = 1;
+                    }
+                }
+                break;
+            }
+        }
+        break;
+    }
+
+    return r;
+}
+
 

+ 11 - 6
pro/src/sensor_handle.h

@@ -1,16 +1,21 @@
 #ifndef __SENSOR_HANDLE_H
 #define __SENSOR_HANDLE_H
 
+#include <stdint.h>
 
-int _g_sensor_get_temperature_value(void* manger,int saddr,float* temp,float* humi);
+typedef union {
+    uint32_t  flag;
+    float     val[2];
+}sensor_dat_t;
 
-int _g_sensor_get_temperature_value_ANDERSON(void* manger,int saddr,float* temp,float* humi);
 
-int _g_sensor_get_D_temperature_value_ANDERSON(void* manger,int saddr,float* temp1,float* temp2);
+int sensor_get_temperature_value(void* manger,int saddr,float* temp,float* humi);
+int sensor_get_temperature_value_anderson(void* manger,int saddr,float* temp,float* humi);
+int sensor_get_d_temperature_value_anderson(void* manger,int saddr,float* temp1,float* temp2);
+int sensor_get_co2_value(void* manger,int saddr,float* temp);
+int sensor_get_io_status(int saddr,unsigned char* sts);
 
-int _gsensor_get_io_status(int saddr,unsigned char* sts);
-
-int _g_sensor_get_CO2_value(void* manger,int saddr,float* temp);
+int sensor_get_data(int type, int subtype, int addr, sensor_dat_t *data);
 
 #endif
 

+ 17 - 2
pro/src/sqlite_handle.c

@@ -4120,7 +4120,7 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
     
     switch (__globalPowerTemp->sensor_type)
     {
-    case SENSOR_TYPE_TEMPERATURE:
+    case SENSOR_TYPE_TEMP_HUMI:
     {
         switch (_AlarmType)
         {
@@ -4142,7 +4142,22 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
         }
     }
     break;
-    case SENSOR_TYPE_DoubleT:
+
+    case SENSOR_TYPE_TEMP:
+    {
+        switch (_AlarmType)
+        {
+        case SENSOR_VAL1_UPPER:
+            sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            break;
+        case SENSOR_VAL1_LOWER:
+            sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            break;
+        }
+    }
+    break;
+
+    case SENSOR_TYPE_TEMP_DOUBLE:
     {
         switch (_AlarmType)
         {