Просмотр исходного кода

IP表增加从机温度传感器数据显示

liyi 1 год назад
Родитель
Сommit
3d240d3212
9 измененных файлов с 552 добавлено и 175 удалено
  1. 3 0
      ip/config/cfg.h
  2. 212 18
      ip/src/app.c
  3. 88 0
      ip/src/appweb_handle.c
  4. 102 148
      ip/src/cascade_slave.c
  5. 23 6
      ip/src/json_handle.c
  6. 9 0
      ip/src/json_handle.h
  7. 112 2
      ip/src/sqlite_handle.c
  8. 2 0
      ip/src/sqlite_handle.h
  9. 1 1
      ip/src/websocket_handle.c

+ 3 - 0
ip/config/cfg.h

@@ -79,6 +79,9 @@
 
 #endif
 
+#define IS_IP               1
+
+
 
 ////////////////////////////////////////////////////
 

+ 212 - 18
ip/src/app.c

@@ -39,13 +39,13 @@ RETSIGTYPE stop_server(int __attribute__((unused)) a)
 }
 
 
-
+void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType);
 
 
 /// @brief 电源数据采集线程
 /// @param arg 
 /// @return 
-
+static uint8_t channel[32] = {0};
 
 void* power_thread(void* arg)
 {
@@ -63,14 +63,20 @@ void* power_thread(void* arg)
     struct timeval tv;
     struct timezone tz ;
     int nSaveIndex =0;
+    int sensor_nSaveIndex = 0;
     char strPower[] = "Table_PowerInfo";
     char strTacPower[] = "Table_PhasePowerInfo";
+    char strTable[] = "Table_SensorInfo";
     int nSaveTacIndex = 0;
     thread_handle_t *h=(thread_handle_t*)arg;
     GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
     dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower);       // 查询日志最大点
     dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
+
+    dev_search_last_Index(_globalDeviceManager->db, &sensor_nSaveIndex,strTable);
+
+    
     InitHashTable(_globalDeviceManager);
     unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product_samp_time;
     unsigned int usleepTime = samp_time*1000;
@@ -80,7 +86,20 @@ void* power_thread(void* arg)
     int nDeleteNumber=1000/sSaveTime*3600*24*30*10;
     bool isErrorBreak=false;
     _globalDeviceManager->_ReloadChm_flag=false;
-    int cnt = 1;
+
+
+    GlobalDeviceInfo *devInfo = &_globalDeviceManager->_globalDevInfo;
+
+
+
+    int nsensor_DeleteNumber = 1000 / 120000 * 3600 * 24 * 30 * 10; 
+
+
+
+    //channel[0] = 1;
+    dev_get_all_profuct_chid_from_power_mgr(_globalDeviceManager->db,channel);
+
+    //int cnt = 1;
 
     //采集线程
     while (h->quit==0)
@@ -104,6 +123,10 @@ void* power_thread(void* arg)
             sleep(1);
             continue;
         }
+        if (sensor_nSaveIndex > nMaxIndex)
+        {
+            dev_change_last_Index(_globalDeviceManager->db, &sensor_nSaveIndex, nsensor_DeleteNumber, strTable);
+        }
 #if (1)
 
         memset(&_globalTotalPowerInfo, 0, sizeof(GlobalPowerInfo));
@@ -163,7 +186,15 @@ void* power_thread(void* arg)
             }else
             {
                 //add 
-                cnt++;
+                //cnt++;
+                int k = 0;
+                for( ;k < 32;k++)
+                {
+                    if(!channel[k])
+                    {
+                        break;
+                    }
+                }
                 GlobalPowerManger *Temp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
                 if (Temp == NULL)
                 {
@@ -178,24 +209,76 @@ void* power_thread(void* arg)
                     return NULL;
                 }
                 memset(Temp->global_over_manager, 0, sizeof(GlobalOverManager));
+                //add a temprature and humunite
+
                 ret = dev_get_power_manage_info(_globalDeviceManager->db,dl.slave[i].addr,dl.slave[i].addr,1,Temp);
-                if(ret == -1)
+                if(ret < 0)
                 {
                     Temp->product_id = dl.slave[i].addr;
                     Temp->product_saddr   = dl.slave[i].addr;
-                    Temp->product_ch_id   = cnt;
-                    sprintf(Temp->product_ch_name, "CH%d", cnt);
+                    Temp->product_ch_id   = k;
+                    channel[k] = 1;
+                    sprintf(Temp->product_ch_name, "CH%d", k);
                     Temp->product_ch_addr = 1;
                      if (dev_insert_power_manage_info(_globalDeviceManager->db,
                                                           Temp->product_id,
                                                           Temp->product_ch_id,
                                                           Temp) != 0)
                      {
-                         log_e("address %d chn %d data inserted error.\n", i, cnt);
-                         return NULL;
+                         log_e("address %d chn %d data inserted error.\n", i, k);
+                         free(Temp->global_over_manager);
+                         free(Temp);
+                         //return NULL;
+                     }else
+                     {
+                        list_add_tail(&Temp->list, &_globalDeviceManager->_globalPowerManger.list);
                      }
+                }else
+                    list_add_tail(&Temp->list, &_globalDeviceManager->_globalPowerManger.list);
+
+                
+                GlobalSensorManger* sensor_temp = (GlobalSensorManger *)malloc(sizeof(GlobalSensorManger));
+                if(!sensor_temp)
+                {
+                    return NULL;
                 }
-                list_add_tail(&Temp->list, &_globalDeviceManager->_globalPowerManger.list);
+                ret = dev_get_sensor_info (_globalDeviceManager->db,dl.slave[i].addr,dl.slave[i].addr,sensor_temp);
+                if(ret < 0)
+                {
+                    sensor_temp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
+                    
+                    if(sensor_temp->over_manager==NULL)
+                        return NULL ;
+                    memset(sensor_temp->over_manager,0,sizeof(GlobalSensorOverManage));
+                    sensor_temp->product_id                     = dl.slave[i].addr;
+                    sensor_temp->sensor_id                      = dl.slave[i].addr;
+                    sensor_temp->sensor_type                    = 0;
+                    sensor_temp->sensor_interface_type          = 0;    
+                    strcpy(sensor_temp->sensor_name,"温湿度传感器");
+                    strcpy(sensor_temp->sensor_port_name,"COM2"); 
+                    if( sensor_temp->sensor_interface_type==1)
+                    {
+                        sensor_temp->sensor_baud =  9600;
+                        sensor_temp->sensor_addr =  1;
+                    } else {
+                        sensor_temp->sensor_baud = 0 ;
+                        sensor_temp->sensor_addr = 1;
+                        
+                    }
+                    sensor_temp->sensor_status = 1;
+                    if(dev_insert_sensor_genera_manage(_globalDeviceManager->db,sensor_temp))
+                    {
+                        log_e("sensor inserted failed error.\n");
+                        free(sensor_temp->over_manager);
+                        free(sensor_temp);
+                    }else
+                    {
+                        list_add_tail(&sensor_temp->list, &_globalDeviceManager->_globalSensorManger.list);
+                    }
+                    
+                }else
+                    list_add_tail(&sensor_temp->list, &_globalDeviceManager->_globalSensorManger.list);
+                
             }
         }
         GlobalPowerManger *tmp,*pos;
@@ -215,9 +298,27 @@ void* power_thread(void* arg)
             }
             if(!flag)
             {
-                    //current manager is not exsis!!!;
+                    //delete sensor
+                pthread_mutex_lock(&__globalDeviceManage._sensor_update);
+                GlobalSensorManger *sensor_temp,*sensor_pos;
+                list_for_each_entry_safe(sensor_temp,sensor_pos,&_globalDeviceManager->_globalSensorManger.list,list)
+                {
+                    if(tmp->product_saddr == 0 || sensor_temp == NULL)
+                        continue;
+                    if(sensor_temp->product_id == tmp->product_saddr && sensor_temp->sensor_id == tmp->product_saddr)
+                    {
+                        free(sensor_temp->over_manager);
+                        list_del(&sensor_temp->list);
+                        free(sensor_temp);
+
+                        break;
+                    }
+                }
+                pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
+                //delete power_thead
+                free(tmp->global_over_manager);
                 list_del(&tmp->list);
-                cnt --;
+                //cnt --;
                 free(tmp);
             }
         }
@@ -248,10 +349,95 @@ void* power_thread(void* arg)
             _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->voltage     = _globalDeviceManager->mmp->data[i].voltage/1000.0;
             _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->power       = _globalDeviceManager->mmp->data[i].power/1000.0;
             _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->status      = _globalDeviceManager->mmp->data[i].status;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->tempratue   = _globalDeviceManager->mmp->data[i].temprature / 100.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->humidity    = _globalDeviceManager->mmp->data[i].humidity /100.0;
         }
 
+        struct tm *t;
+        struct timeval tv;
+        struct timezone tz;
 
         //warnning 
+        //cascade sensor thread!!!!
+        GlobalSensorManger *_sensor_temp = NULL;
+        GlobalSensorInfo _globalSensorInfo;
+        pthread_mutex_lock(&__globalDeviceManage._sensor_update);
+        list_for_each_entry(_sensor_temp, &_globalDeviceManager->_globalSensorManger.list, list)
+        {
+
+            switch (_sensor_temp->sensor_type)
+            {
+                case SENSOR_TYPE_TEMPERATURE:
+                {
+                    gettimeofday(&tv, &tz);
+                    t = localtime(&tv.tv_sec);
+                    sprintf(_globalSensorInfo.samp_time, "%04d-%02d-%02d %02d:%02d:%02d.%03ld",
+                            t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
+                    _globalSensorInfo.product_id = _sensor_temp->product_id;
+                    _globalSensorInfo.sensor_id = _sensor_temp->sensor_id;
+                    if(devInfo->_gmodbus_info.product_modbus_type == 0 && _sensor_temp->product_id == 0)
+                    {
+                        float temperature = 0.0;
+                        float humidity = 0.0;
+                        ret = _g_sensor_get_temperature_value((void *)&_globalDeviceManager->sensor_modbus_manager,
+                                                                _sensor_temp->sensor_addr,
+                                                                &temperature,
+                                                                &humidity);
+
+                        if (ret == -1)
+                        {
+                            _sensor_temp->sensor_status = 1;
+                        }else{
+                            _sensor_temp->sensor_status = 0;
+                        }
+                        _globalSensorInfo.val1 = temperature;
+                        _globalSensorInfo.val2 = humidity;
+                        _globalDeviceManager->g_modebus_read.temprature=temperature *1000;
+                         _globalDeviceManager->g_modebus_read.humidity=humidity *1000;
+                    }else{
+                        _globalSensorInfo.val1 = _globalDeviceManager->_all_ctrl_board[(int)_sensor_temp->sensor_id]._PowerInfo->tempratue;
+                        _globalSensorInfo.val2 = _globalDeviceManager->_all_ctrl_board[(int)_sensor_temp->sensor_id]._PowerInfo->humidity;
+                        _sensor_temp->sensor_status = 0;
+                    }
+
+                    _globalSensorInfo.product_log_time=_sensor_temp->Cur_sensor_info.product_log_time;
+                    _sensor_temp->Cur_sensor_info=_globalSensorInfo;
+                }
+                break;
+                default:
+                break;
+            }
+            
+            gettimeofday(&tv, NULL);
+            time_t now;
+            time(&now);
+            t = localtime(&now);
+            char buffer[80];
+            strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
+            memset(_sensor_temp->Cur_sensor_info.samp_time, 0, sizeof(_sensor_temp->Cur_sensor_info.samp_time));
+            strftime(_sensor_temp->Cur_sensor_info.samp_time, sizeof(_sensor_temp->Cur_sensor_info.samp_time), "%Y-%m-%d %H:%M:%S", t);
+            sprintf(buffer, ".%03ld", tv.tv_usec / 1000);
+            strcat(_sensor_temp->Cur_sensor_info.samp_time, buffer);
+            if (difftime(now, _sensor_temp->Cur_sensor_info.product_log_time) > (30000 / 1000))
+            {
+                _sensor_temp->Cur_sensor_info.product_log_time = now;
+                // 插入数据库
+                 ret = dev_insert_sensor_info(_globalDeviceManager->db, &_sensor_temp->Cur_sensor_info, &sensor_nSaveIndex);
+                 if (ret != 0)
+                 {
+                     log_e("sensor_temp_write database error.");
+                 }
+            }
+            if (_sensor_temp->sensor_status == 0)
+            {
+                sensor_alarm(_sensor_temp, SENSOR_VAL1_UPPER);
+                sensor_alarm(_sensor_temp, SENSOR_VAL1_LOWER);
+                sensor_alarm(_sensor_temp, SENSOR_VAL2_UPPER);
+                sensor_alarm(_sensor_temp, SENSOR_VAL2_LOWER);
+            }
+            
+        }
+        pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
         
 
 
@@ -1196,14 +1382,22 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
 
     INIT_LIST_HEAD(&_globalDeviceManager->_globalSensorManger.list);
-    ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
-                                    _globalDeviceManager->_globalDevInfo.product_id,
-                                    &_globalDeviceManager->_globalSensorManger);
+    // ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
+    //                                 _globalDeviceManager->_globalDevInfo.product_id,
+    //                                 &_globalDeviceManager->_globalSensorManger);
                 
-    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
+    
+
+    
+    
     //创建modbus采集线程 继电器控制线程
 #if(OS_HANDWARE==1)
     _globalDeviceManager->dev_samp_flag = true;
+    sensor_or_cascade_init();
+    cascade_init();
+    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
+
+
     thread_start(THREAD_ID_POWER, power_thread, _globalDeviceManager, 10*MB, 0);
     //thread_start(THREAD_ID_SENSOR, ip_cascade_thread, _globalDeviceManager, 5*MB, 0);
     thread_start(THREAD_ID_SHMW, shm_thread, _globalDeviceManager, 5*MB, 0);
@@ -1260,9 +1454,9 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     websocket_init();
     appweb_init();
 
-    cascade_init();
+    
 
-    sensor_or_cascade_init();
+    
     
 
     //netswitch_init();

+ 88 - 0
ip/src/appweb_handle.c

@@ -491,6 +491,7 @@ static void overallStatusMonitoring(void* conn)
             cmd.cmd = CASCADE_CMD_QUERY_CH;
             cascade_request(&cmd);
             goto quit;
+
         }
         else {
             GlobalPowerInfo __globalPowerInfo;
@@ -2401,7 +2402,9 @@ char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
     char *ack_str = NULL;
     GlobalPowerManger *_globalPowerMangerSaveTemp;
     // int g_pwr_ch_id = atoi(_alarm_request_info->_pwr_info.productChId);
+
     int g_pwr_ch_id = nChID;
+    int product_id = 0;
     if (g_pwr_ch_id == 0)
     {
         _globalPowerMangerSaveTemp = &__globalDeviceManage._globalPowerManger;
@@ -2413,6 +2416,9 @@ char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
             // ID相等 记录信息
             if (_globalPowerMangerSaveTemp->product_ch_id == nChID)
             {
+#if   IS_IP
+            product_id = _globalPowerMangerSaveTemp->product_id;
+#endif
                 break;
             }
         }
@@ -2541,11 +2547,15 @@ char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
     }
     else
     {
+#if ((IS_IP) == (0))
         ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
                                                 _globalPowerMangerSaveTemp->product_ch_type,
                                                 _globalPowerMangerSaveTemp->product_saddr,
                                                 _globalPowerMangerSaveTemp->product_ch_addr,
                                                 _globalPowerMangerSaveTemp);
+#else
+    ret = 0;
+#endif
     }
 
     if (ret < 0)
@@ -2572,17 +2582,28 @@ char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
     else
     {
         // 写入数据库
+#if ((IS_IP) == (0))
         ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
                                                 __globalDeviceManage._globalDevInfo.product_id,
                                                 _globalPowerMangerSaveTemp->product_ch_id,
                                                 _globalPowerMangerSaveTemp);
+#else
+        ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
+                                                product_id,
+                                                _globalPowerMangerSaveTemp->product_ch_id,
+                                                _globalPowerMangerSaveTemp);
+#endif
         if (ret != 0)
             log_e("power threshold update error.");
     }
     char buff[100] ={0};
     get_time(buff);
+#if IS_IP
+    ret = dev_insert_alarm_info(__globalDeviceManage.db,product_id, ALARM_TYPE_OPRATION,buff,"power threshold update  !!");
+#else
     ret = dev_insert_alarm_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 
         ALARM_TYPE_OPRATION,buff,"power threshold update!!");
+#endif
     
     // 返回数据
     ack_str = ctrl_sts_ack_to_json();
@@ -2614,6 +2635,39 @@ static void alarmProtect(void *conn)
     //查询json参数
     if(strcmp(_alarm_request_info.type,"listAllQuery")==0) //告警信息查询
     {
+#if IS_IP
+    
+        GlobalPowerManger *_globalPowerMangerTemp = NULL;
+        //int ret = -1;
+        int number = 0;
+        INIT_LIST_HEAD(&_alarm_ack_info.list);
+        list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
+        {
+            
+            ret = dev_serarch_all_alarm(__globalDeviceManage.db,
+                _globalPowerMangerTemp->product_id,
+            ALARM_TYPE_POWER ,1,10,
+                &_alarm_ack_info,&nAlarmNumber);
+            number += nAlarmNumber;
+
+        }
+        if(number==0) {
+            log_e("get power alarm error.");
+        }
+        else {
+            ack_str = alarm_info_to_json(&_alarm_ack_info,number);
+
+                //释放资源
+            _AlarmAckInfo* node;
+            _AlarmAckInfo* next;
+            list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+            {
+                list_del(&node->list);
+                free(node);
+            }
+        }
+
+#else
         int i = 0 ;
         //初始化表
         INIT_LIST_HEAD(&_alarm_ack_info.list);
@@ -2622,6 +2676,8 @@ static void alarmProtect(void *conn)
             __globalDeviceManage._globalDevInfo.product_id,
            ALARM_TYPE_POWER ,1,10,
             &_alarm_ack_info,&nAlarmNumber);
+           //alarm_num = nAlarmNumber;
+
         if(ret!=0) {
             log_e("get power alarm error.");
         }
@@ -2637,10 +2693,41 @@ static void alarmProtect(void *conn)
                 free(node);
             }
         }
+#endif
+
     }
     else if(strcmp(_alarm_request_info.type,"powerAlarmList")==0) //电源告警信息查询
     {
         //初始化表
+#if IS_IP
+        GlobalPowerManger *_globalPowerMangerTemp = NULL;
+        INIT_LIST_HEAD(&_alarm_ack_info.list);
+        int number = 0;
+        list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
+        {
+            nAlarmNumber = 0;
+            
+            ret = dev_serarch_all_alarm(__globalDeviceManage.db,
+                _globalPowerMangerTemp->product_id,
+                ALARM_TYPE_POWER,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
+                &_alarm_ack_info,&nAlarmNumber);
+                number +=nAlarmNumber;
+        }
+        if(number == 0) {
+                log_e("get power alarm error.");
+        } else {
+            ack_str = alarm_info_to_json(&_alarm_ack_info,number);
+
+            //释放资源
+            _AlarmAckInfo* node;
+            _AlarmAckInfo* next;
+            list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+            {
+                list_del(&node->list);
+                free(node);
+            }
+        }
+#else
         INIT_LIST_HEAD(&_alarm_ack_info.list);
         //查询数据库
         ret = dev_serarch_all_alarm(__globalDeviceManage.db,
@@ -2662,6 +2749,7 @@ static void alarmProtect(void *conn)
                 free(node);
             }
         }
+#endif
     }
     else if(strcmp(_alarm_request_info.type,"sensorAlarmList")==0) //传感器告警信息查询
     {

+ 102 - 148
ip/src/cascade_slave.c

@@ -966,9 +966,19 @@ void sensor_or_cascade_init()
     GlobalDeviceInfo *devInfo = &_globalDeviceManager->_globalDevInfo;
     //uint8_t query[512] = {0};
     int ret = 0;
-    ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
-                                    _globalDeviceManager->_globalDevInfo.product_id,
-                                    &_globalDeviceManager->_globalSensorManger);
+    // ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
+    //                                 _globalDeviceManager->_globalDevInfo.product_id,
+    //                                 &_globalDeviceManager->_globalSensorManger);
+
+
+    //dev_get_sensor_info
+    GlobalSensorManger *temp = (GlobalSensorManger*)malloc(sizeof(GlobalSensorManger));
+    if(!temp)
+        return;
+    dev_get_sensor_info(_globalDeviceManager->db,0,0,temp);
+
+    list_add_tail(&temp->list,&_globalDeviceManager->_globalSensorManger.list);
+
                 
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
     cascade_slave_init();
@@ -1021,19 +1031,19 @@ void * thread_sensor_or_485(void*arg)
     int nSaveIndex = 1;
     char strTable[] = "Table_SensorInfo";
     char strTemp[64] = {0};
-    dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strTable); // 查询日志最大点
-    int nMaxIndex = 2000000000;
-    int nDeleteNumber = 1000 / 120000 * 3600 * 24 * 30 * 10; // 1/60s;
+   // dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strTable); // 鏌ヨ�鏃ュ織鏈€澶х偣
+   // int nMaxIndex = 2000000000;
+   // int nDeleteNumber = 1000 / 120000 * 3600 * 24 * 30 * 10; // 1/60s;
 
     while(_globalDeviceManager->dev_samp_flag)
     {
         if(devInfo->_gmodbus_info.product_modbus_type > 0)
         {
             //printf("12323451541545135435\n");
-            dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strTable);
-            pthread_mutex_lock(&__globalDeviceManage._sensor_update);
+            //dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strTable);
+            // pthread_mutex_lock(&__globalDeviceManage._sensor_update);
 
-            pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
+            // pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
             list_for_each_entry(_globalSensorMangerTemp, &_globalDeviceManager->_globalSensorManger.list, list)
             {
                 switch (_globalSensorMangerTemp->sensor_type)
@@ -1067,145 +1077,89 @@ void * thread_sensor_or_485(void*arg)
         }else
         {
             //printf("--------------------------\n");
-            if (nSaveIndex > nMaxIndex)
-            {
-                dev_change_last_Index(_globalDeviceManager->db, &nSaveIndex, nDeleteNumber, strTable);
-            }
-            pthread_mutex_lock(&__globalDeviceManage._sensor_update);
-            list_for_each_entry(_globalSensorMangerTemp, &_globalDeviceManager->_globalSensorManger.list, list)
-            {
-                switch (_globalSensorMangerTemp->sensor_type)
-                {
-                    case SENSOR_TYPE_TEMPERATURE: // 温湿度
-                    {
-                        // printf("get \n");
-                        float temperature = 0.0;
-                        float humidity = 0.0;
-#ifdef CUST_ANDERSON
-                        ret = _g_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,
-                                                            _globalSensorMangerTemp->sensor_addr,
-                                                            &temperature,
-                                                            &humidity);
-#endif
-                        if (ret == -1)
-                        {
-                            _globalSensorMangerTemp->sensor_status = 1;
-                        }
-                        else
-                        {
-                            _globalSensorMangerTemp->sensor_status = 0;
-                        }
-                        // log_d("sensor val:%0.2f %0.2f\n",temperature,humidity);
-                        // printf("get temperature=%f   humidity=%f\n",temperature,humidity);
-                        gettimeofday(&tv, &tz);
-                        t = localtime(&tv.tv_sec);
-                        sprintf(_globalSensorInfo.samp_time, "%04d-%02d-%02d %02d:%02d:%02d.%03ld",
-                                t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
-                        _globalSensorInfo.product_id = __globalDeviceManage._globalDevInfo.product_id;
-                        _globalSensorInfo.sensor_id = _globalSensorMangerTemp->sensor_id;
-                        _globalSensorInfo.val1 = temperature;
-                        _globalSensorInfo.val2 = humidity;
-
-                        _globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;
-                        _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
-                        _globalDeviceManager->g_modebus_read.temprature=temperature *1000;
-                        _globalDeviceManager->g_modebus_read.humidity=humidity *1000;
-                    }
-                    break;
-                    case SENSOR_TYPE_SMOKE: // 烟雾
-                    case SENSOR_TYPE_WATER: // 水浸
-                    case SENSOR_TYPE_DOOR: // 门禁 IO信号
-                    {
-                        if (_globalSensorMangerTemp->sensor_interface_type==2)//干节点传感器
-                        {
-                            int nStatus=0;
-                            g_switch_get_gpio_status(_globalSensorMangerTemp->sensor_addr+GPIO_PD11,&nStatus);
-                            _globalSensorMangerTemp->Cur_sensor_info.val1=nStatus;
-                        }                
-                    }
-                    break;
-                    case SENSOR_TYPE_GAS: // 气体
-                    {
-
-                    }
-                    break;
-                    case SENSOR_TYPE_AIR_PRESS: // 气流
-                    {
-
-                    }
-                    break;
-                    case SENSOR_TYPE_DoubleT://双头传感器
-                    {
-                        float temperature = 0.0;
-                        float temperature2 = 0.0;
-                        ret = _g_sensor_get_D_temperature_value_ANDERSON((void *)&_globalDeviceManager->sensor_modbus_manager,
-                                                            _globalSensorMangerTemp->sensor_addr,
-                                                            &temperature,
-                                                            &temperature2);
-
-                        if (ret == -1)
-                        {
-                            //log_w("Relay modbus Error:%s\n", modbus_strerror(errno));
-                            _globalSensorMangerTemp->sensor_status = 1;
-                        }
-                        else
-                        {
-                            _globalSensorMangerTemp->sensor_status = 0;
-                        }
-                        // log_d("sensor val:%0.2f %0.2f\n",temperature,humidity);
-                        // printf("get temperature=%f   humidity=%f\n",temperature,humidity);
-                        gettimeofday(&tv, &tz);
-                        t = localtime(&tv.tv_sec);
-                        sprintf(_globalSensorInfo.samp_time, "%04d-%02d-%02d %02d:%02d:%02d.%03ld",
-                                t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
-                        _globalSensorInfo.product_id = __globalDeviceManage._globalDevInfo.product_id;
-                        _globalSensorInfo.sensor_id = _globalSensorMangerTemp->sensor_id;
-                        _globalSensorInfo.val1 = temperature;
-                        _globalSensorInfo.val2 = temperature2;
-                        _globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;;
-                        _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
-                        _globalDeviceManager->g_modebus_read.temprature=temperature;
-                        _globalDeviceManager->g_modebus_read.temprature2=temperature2;
-                    }
-                    break;
-                    }
-                    // 通用功能
-                    //  写入数据库
-                    gettimeofday(&tv, NULL);
-                    time_t now;
-                    time(&now);
-                    t = localtime(&now);
-                    char buffer[80];
-                    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
-                    memset(_globalSensorMangerTemp->Cur_sensor_info.samp_time, 0, sizeof(_globalSensorMangerTemp->Cur_sensor_info.samp_time));
-                    strftime(_globalSensorMangerTemp->Cur_sensor_info.samp_time, sizeof(_globalSensorMangerTemp->Cur_sensor_info.samp_time), "%Y-%m-%d %H:%M:%S", t);
-                    sprintf(buffer, ".%03ld", tv.tv_usec / 1000);
-                    strcat(_globalSensorMangerTemp->Cur_sensor_info.samp_time, buffer);
-                    if (difftime(now, _globalSensorMangerTemp->Cur_sensor_info.product_log_time) > (30000 / 1000))
-                    {
-                        _globalSensorMangerTemp->Cur_sensor_info.product_log_time = now;
-                        // 插入数据库
-                        ret = dev_insert_sensor_info(_globalDeviceManager->db, &_globalSensorMangerTemp->Cur_sensor_info, &nSaveIndex);
-                        if (ret != 0)
-                        {
-                            log_e("sensor_temp_write database error.");
-                        }
-                    }
-                    if (_globalSensorMangerTemp->sensor_status == 0)
-                    {
-                        sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_UPPER);
-                        sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_LOWER);
-                        sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_UPPER);
-                        sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_LOWER);
-                    }
-                }
-                pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
-                sleep(3);
+            // if (nSaveIndex > nMaxIndex)
+            // {
+            //     dev_change_last_Index(_globalDeviceManager->db, &nSaveIndex, nDeleteNumber, strTable);
+            // }
+            // pthread_mutex_lock(&__globalDeviceManage._sensor_update);
+            //list_for_each_entry(_globalSensorMangerTemp, &_globalDeviceManager->_globalSensorManger.list, list)
+            //{
+            //     if(_globalSensorMangerTemp->product_id == 0)
+            //     {
+            //         switch (_globalSensorMangerTemp->sensor_type)
+            //         {
+            //             case SENSOR_TYPE_TEMPERATURE: // 温湿度
+            //             {
+            //                 // printf("get \n");
+            //                 float temperature = 0.0;
+            //                 float humidity = 0.0;
+            //                 ret = _g_sensor_get_temperature_value((void *)&_globalDeviceManager->sensor_modbus_manager,
+            //                                                     _globalSensorMangerTemp->sensor_addr,
+            //                                                     &temperature,
+            //                                                     &humidity);
+
+            //                 if (ret == -1)
+            //                 {
+            //                     _globalSensorMangerTemp->sensor_status = 1;
+            //                 }
+            //                 else
+            //                 {
+            //                     _globalSensorMangerTemp->sensor_status = 0;
+            //                 }
+            //                 // log_d("sensor val:%0.2f %0.2f\n",temperature,humidity);
+            //                 // printf("get temperature=%f   humidity=%f\n",temperature,humidity);
+            //                 gettimeofday(&tv, &tz);
+            //                 t = localtime(&tv.tv_sec);
+            //                 sprintf(_globalSensorInfo.samp_time, "%04d-%02d-%02d %02d:%02d:%02d.%03ld",
+            //                         t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
+            //                 _globalSensorInfo.product_id = __globalDeviceManage._globalDevInfo.product_id;
+            //                 _globalSensorInfo.sensor_id = _globalSensorMangerTemp->sensor_id;
+            //                 _globalSensorInfo.val1 = temperature;
+            //                 _globalSensorInfo.val2 = humidity;
+
+            //                 _globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;
+            //                 _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
+            //                 _globalDeviceManager->g_modebus_read.temprature=temperature *1000;
+            //                 _globalDeviceManager->g_modebus_read.humidity=humidity *1000;
+            //             }
+            //             break;
+            //             default:
+            //             break;
+            //         }
+            //             // 閫氱敤鍔熻兘
+            //             //  写入数据库
+            //             gettimeofday(&tv, NULL);
+            //             time_t now;
+            //             time(&now);
+            //             t = localtime(&now);
+            //             char buffer[80];
+            //             strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
+            //             memset(_globalSensorMangerTemp->Cur_sensor_info.samp_time, 0, sizeof(_globalSensorMangerTemp->Cur_sensor_info.samp_time));
+            //             strftime(_globalSensorMangerTemp->Cur_sensor_info.samp_time, sizeof(_globalSensorMangerTemp->Cur_sensor_info.samp_time), "%Y-%m-%d %H:%M:%S", t);
+            //             sprintf(buffer, ".%03ld", tv.tv_usec / 1000);
+            //             strcat(_globalSensorMangerTemp->Cur_sensor_info.samp_time, buffer);
+            //             if (difftime(now, _globalSensorMangerTemp->Cur_sensor_info.product_log_time) > (30000 / 1000))
+            //             {
+            //                 _globalSensorMangerTemp->Cur_sensor_info.product_log_time = now;
+            //                 // 插入数据库
+            //                 ret = dev_insert_sensor_info(_globalDeviceManager->db, &_globalSensorMangerTemp->Cur_sensor_info, &nSaveIndex);
+            //                 if (ret != 0)
+            //                 {
+            //                     log_e("sensor_temp_write database error.");
+            //                 }
+            //             }
+            //             if (_globalSensorMangerTemp->sensor_status == 0)
+            //             {
+            //                 sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_UPPER);
+            //                 sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_LOWER);
+            //                 sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_UPPER);
+            //                 sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_LOWER);
+            //             }
+            //             break;
+            //     }
+            // }
+            // pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
+            sleep(1);
 
         }
     }

+ 23 - 6
ip/src/json_handle.c

@@ -1343,8 +1343,19 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
                          sprintf(temp, "%d", dl.slave[i].addr);
                         cJSON_AddStringToObject(data_filed, "productId", temp);
                         //cJSON_AddNumberToObject(data_filed, "productId", dl.slave[i].addr);
+                        if(dl.slave[i].addr > 0)
+                        {
+                            sprintf(temp,"X000001-%d",dl.slave[i].addr);
+                            cJSON_AddStringToObject(data_filed, "productNumber", temp);
+                            sprintf(temp, "%d", 1);
+                            cJSON_AddStringToObject(data_filed, "productType", temp);
 
-                        cJSON_AddStringToObject(data_filed, "productNumber", _over_back_sts_info->product_number);
+                        }else{
+                            sprintf(temp, "%d", _over_back_sts_info->product_type_id);
+                            cJSON_AddStringToObject(data_filed, "productType", temp);
+                            cJSON_AddStringToObject(data_filed, "productNumber", _over_back_sts_info->product_number);
+                        }
+                        
                         cJSON_AddStringToObject(data_filed, "productCode", _over_back_sts_info->product_Code);
                         cJSON_AddStringToObject(data_filed, "productModel", _over_back_sts_info->product_type);
 
@@ -1356,9 +1367,9 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
                             cJSON_AddStringToObject(data_filed, "MACadress", _over_back_sts_info->product_mac);
                         }
                         else {
-                            cJSON_AddStringToObject(data_filed, "productVersion", "");
-                            cJSON_AddStringToObject(data_filed, "systemTime", "");
-                            cJSON_AddStringToObject(data_filed, "runTime", "");
+                            cJSON_AddStringToObject(data_filed, "productVersion", _over_back_sts_info->productVersion);
+                            cJSON_AddStringToObject(data_filed, "systemTime", _over_back_sts_info->product_sysTime);
+                            cJSON_AddStringToObject(data_filed, "runTime", _over_back_sts_info->product_runTime);
                             cJSON_AddStringToObject(data_filed, "IPadress", "");
                             cJSON_AddStringToObject(data_filed, "MACadress", "");
                         }
@@ -1380,7 +1391,7 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
                             sprintf(temp, "%d", _over_back_sts_info->product_type_id);
                         }
 
-                        cJSON_AddStringToObject(data_filed, "productType", temp);
+                       
                         cJSON_AddStringToObject(data_filed, "productStatus", "online");
                         cJSON_AddItemToArray(root_array, data_filed);
                     }
@@ -3751,8 +3762,14 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
         cJSON_AddItemToObject(sub_data_root_array, "data", data_filed);
         sprintf(temp, "%d", _chnPwrTemp->status);
         cJSON_AddStringToObject(data_filed,"productChStatus",temp);
-         sprintf(temp, "%d", _chnPwrTemp->NF_status);
+        sprintf(temp, "%d", _chnPwrTemp->NF_status);
         cJSON_AddStringToObject(data_filed,"productChZeroStatus",temp);
+#if IS_IP
+        sprintf(temp,"%0.2f",_chnPwrTemp->temperature);
+        cJSON_AddStringToObject(data_filed,"temperature",temp);
+        sprintf(temp,"%0.2f",_chnPwrTemp->humidity);
+        cJSON_AddStringToObject(data_filed,"humidity",temp);
+#endif
 
 #ifdef USE_NETSWITCH
         cJSON_AddStringToObject(data_filed, "MACadress",_chnPwrTemp->mac_addr);

+ 9 - 0
ip/src/json_handle.h

@@ -187,6 +187,10 @@ typedef struct
     float           ph_consumption                                 ;//耗电量  
     int             ph_outputType   ;//输出类型
     int             ph_outputStatus ;//输出状态-该通道是否输出  
+#if IS_IP
+    float           temperature;
+    float              humidity;
+#endif
     struct list_head   list;   
 }_OverChnPwrAckInfo;
 
@@ -626,5 +630,10 @@ char* over_breaker_product_list_info_to_json(GlobalDeviceManager *dm,_OverBackBr
 char* over_all_breaker_chn_info_to_json(_OverBreakerChnInfo* _over_all_breaker_back_info,int nWSType);
 char* over_all_breaker_switch_info_to_json(_OverBreakerSwitchInfo* _over_all_breaker_switch_info,int nWSType);
 char *breaker_status_ack_to_json(GlobalDeviceManager *gm,int slave);
+
+
+int dev_get_all_profuct_chid_from_power_mgr(sqlite3 *db,uint8_t *cannnel);
+
+
 #endif
 

Разница между файлами не показана из-за своего большого размера
+ 112 - 2
ip/src/sqlite_handle.c


+ 2 - 0
ip/src/sqlite_handle.h

@@ -158,4 +158,6 @@ int dev_sql_set_overwrite(int flag);
 
 int dev_search_latest_power_all_info_ip(GlobalDeviceManager* globalDeviceManger,_OverChnPwrAckInfo* __overChnPwrAckInfo, int dev_addr);
 
+int dev_get_sensor_info (sqlite3 *db,int product_id,int sensor_id, GlobalSensorManger* sensor_temp);
+
 #endif

+ 1 - 1
ip/src/websocket_handle.c

@@ -193,7 +193,7 @@ static void web_update(ws_handle_t *wh)
         {
             pthread_mutex_lock(&__globalDeviceManage._sensor_update);
             json_str = ws_sensor_status_ack_to_json(&gdm->_globalSensorManger);
-           pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
+            pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
             ws_send_data(wh, json_str, strlen(json_str));
             cJSON_free(json_str);
         }