Browse Source

1、在邮件报警信息中添加产品id
2、部分代码被git覆盖,改回去

guohui 2 years ago
parent
commit
135ca3848c

+ 10 - 0
pro/config/cfg.h

@@ -47,6 +47,7 @@
 
 #ifdef CUST_ANDERSON
     #define USE_SMTP
+    //#define USE_MQTT
     #define USE_NETSWITCH
 
     #define SW_STATIC_PORT_START
@@ -58,6 +59,15 @@
         #define SW_HOST_IP              "192.168.234.1"
         #define SW_PDU_IP               "192.168.234.132"
     #endif
+
+    #ifdef USE_SMTP
+        #define SMTP_SEND_BUILTIN
+    #endif
+
+    #ifdef USE_MQTT
+        #define MQTT_SERVER_BUILTIN
+    #endif
+
     
     #undef MAX_CHN_COUNT
     #define MAX_CHN_COUNT               24

+ 0 - 571
pro/src/app.c

@@ -1865,574 +1865,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],strLog);
     log_d("GCPDU init begin!");
     ResetChmData(0);
-/*
-    memset(&_globalDeviceManager->_all_ctrl_board, 0, sizeof(_globalDeviceManager->_all_ctrl_board));
-    for (size_t i = 1; i < MAX_CHN_COUNT; i++)
-    {
-        type = 0 ;
-        int nMaxChn=0;
-        ret = g_switch_get_type(&_globalDeviceManager->_globalRelaySampManger,
-                          i,
-                          &type,
-                          &nMaxChn,
-                          _globalDeviceManager->_globalDevInfo.product_pwr_type);
-        log_d("ret:%d saddr:%d type:%d ch_num:%d.\n",ret,i,type,nMaxChn);
-        //int i =1 ;
-        //type = AC_SINGLE_S_TYPE ;
-        //chn = i ;
-
-        if(ret==0)
-        {
-            //有效地址记录
-            _globalDeviceManager->useSlaveCount ++ ;
-            _globalDeviceManager->_all_ctrl_board[i].product_saddr=i;
-            _globalDeviceManager->_all_ctrl_board[i].product_number=nMaxChn;
-            _globalDeviceManager->_all_ctrl_board[i].product_type=type;
-            switch (type)
-            {
-                case AC_SINGLE_S_TYPE://AC单相小电流 8路继电器
-                case AC_SINGLE_B_TYPE:
-                {
-                    log_i("Address=%d AC_SINGLE_S_TYPE!\n",i);
-                    for (size_t j = 0; j < nMaxChn; j++)
-                    {
-                        GlobalPowerManger* _globalPowerMangerTemp = (GlobalPowerManger*)malloc(sizeof(GlobalPowerManger));
-                        if(_globalPowerMangerTemp==NULL)
-                        {
-                            //log_e("_globalPowerManger malloc error.\n");
-                            return -1 ;       
-                        }  
-                        memset(_globalPowerMangerTemp, 0, sizeof(GlobalPowerManger));
-                        _globalPowerMangerTemp->global_over_manager = (GlobalOverManager*)malloc(sizeof(GlobalOverManager));
-                        if(_globalPowerMangerTemp->global_over_manager==NULL)
-                        {
-                            //log_e("_globalPowerManger->global_over_manager malloc error.\n");
-                            return -1 ;       
-                        } 
-                        memset(_globalPowerMangerTemp->global_over_manager,0,sizeof(GlobalOverManager));
-                        //查询是否由通道信息
-                        ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id,
-                                                        i,
-                                                        j+1, //1*8+j
-                                                        _globalPowerMangerTemp);
-                        //未查询到信息 则插入
-                        if(ret==-1)
-                        {
-                            _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                            _globalPowerMangerTemp->product_saddr = i ;
-                            _globalPowerMangerTemp->product_ch_id = chn;
-                            _globalPowerMangerTemp->product_ch_addr = j+1;
-                            sprintf(_globalPowerMangerTemp->product_ch_name,"CH%d",_globalPowerMangerTemp->product_ch_id);
-                            _globalPowerMangerTemp->product_ch_type = type;
-                            _globalPowerMangerTemp->product_ch_status = 0;
-                            _globalPowerMangerTemp->product_ch_NF_status= 0;
- 
-                            _globalPowerMangerTemp->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-                            _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-
-                            _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
-                            _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-
-                            if(dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id,
-                                                        _globalPowerMangerTemp->product_ch_id,
-                                                        _globalPowerMangerTemp)!=0)
-                            {
-                                log_e("address %d chn %d data inserted error.\n",i,chn);
-                                return 0;
-                            }
-                        }
-                        if ( _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
-                        {
-                            // 初始化三相子通道
-                            GlobalTreeACManager *_globalTACManager = NULL;
-                            INIT_LIST_HEAD(&_globalPowerMangerTemp->list_Tree_AC);
-                            for (size_t indexT = 0; indexT < 3; indexT++)
-                            {
-                                _globalTACManager = (GlobalTreeACManager *)malloc(sizeof(GlobalTreeACManager));
-                                memset(_globalTACManager, 0, sizeof(GlobalTreeACManager));
-                                if (_globalTACManager == NULL)
-                                {
-                                    log_e("_globalTACManager malloc error.\n");
-                                    return -1;
-                                }
-                                _globalTACManager->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
-                                memset(_globalTACManager->global_over_manager, 0, sizeof(GlobalOverManager));
-                                if (_globalTACManager->global_over_manager == NULL)
-                                {
-                                    log_e("_globalTACManager->global_over_manager malloc error.\n");
-                                    return -1;
-                                }
-                                ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                     _globalDeviceManager->_globalDevInfo.product_id, i,
-                                                                     j + 1, // 1*8+j
-                                                                     nTac_chn,
-                                                                     _globalTACManager);
-                                _globalTACManager->product_ch_addr = j + 1;
-                                // 未查询到信息 则插入
-                                if (ret == -1)
-                                {
-                                    _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                                    _globalTACManager->product_saddr = i;
-                                    _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
-                                    _globalTACManager->product_ch_addr = j + 1;
-                                    _globalTACManager->product_ph_id = nTac_chn;
-                                    _globalTACManager->product_ph_type = indexT;
-                                    _globalTACManager->product_ph_outputType = 2; // 1三相2单相
-                                    if (indexT == ((nTac_chn-3)/(PHASE_GROUP_CNT*3)+3)%3)
-                                    {
-                                        _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
-                                    }
-                                    else
-                                    {
-                                        _globalTACManager->product_ph_outputStatus = 2; // 1输出2不输出
-                                    }
-
-                                    if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                          _globalDeviceManager->_globalDevInfo.product_id,
-                                                                          _globalTACManager->product_ch_id,
-                                                                          _globalTACManager) != 0)
-                                    {
-                                        log_e("address %d ph_chn %d data inserted error.\n", i, nTac_chn);
-                                        return 0;
-                                    }
-                                }
-                                // 绑定到三项通道
-                                _globalTACManager->product_saddr = i;
-                                _globalTACManager->product_ph_type = indexT;
-                                if (_globalPowerMangerTemp)
-                                {
-                                    list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
-                                }
-                                nTac_chn += 1;
-                            }
-                        }
-                        _globalPowerMangerTemp->product_saddr = i;
-                        // 添加到队尾
-                        list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
-                        chn += 1;
-                    }
-                }
-                break;
-                case AC_MULTI_S_TYPE://预留
-                {
 
-                }
-                break;
-                case AC_MULTI_B_TYPE://预留
-                {
-
-                }
-                break;
-                case DC_OUT_TYPE:   //DC输出继电器 1路
-                {
-
-                }
-                break;
-                case DC_IN_TYPE:    // DC采集
-                {
-                    log_i("Address=%d DC_IN_TYPE!\n",i);
-                    for (size_t j = 0; j < nMaxChn; j++)//AC与DC长度一致
-                    {
-                        GlobalPowerManger* _globalPowerMangerTemp = (GlobalPowerManger*)malloc(sizeof(GlobalPowerManger));
-                        if(_globalPowerMangerTemp==NULL)
-                        {
-                            //log_e("_globalPowerManger malloc error.\n");
-                            return -1 ;       
-                        }  
-                        memset(_globalPowerMangerTemp, 0, sizeof(GlobalPowerManger));
-                        _globalPowerMangerTemp->global_over_manager = (GlobalOverManager*)malloc(sizeof(GlobalOverManager));
-                        if(_globalPowerMangerTemp->global_over_manager==NULL)
-                        {
-                            //log_e("_globalPowerManger->global_over_manager malloc error.\n");
-                            return -1 ;       
-                        } 
-                        memset(_globalPowerMangerTemp->global_over_manager,0,sizeof(GlobalOverManager));
-                        //查询是否由通道信息
-                        ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id,i,
-                                                        j+1, //1*8+j
-                                                        _globalPowerMangerTemp);
-                        //未查询到信息 则插入
-                        if(ret==-1)
-                        {
-                            _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                            _globalPowerMangerTemp->product_saddr = i ;
-                            _globalPowerMangerTemp->product_ch_id = chn;
-                            _globalPowerMangerTemp->product_ch_addr = j+1;
-                            sprintf(_globalPowerMangerTemp->product_ch_name,"CH%d",_globalPowerMangerTemp->product_ch_id);
-                            _globalPowerMangerTemp->product_ch_type = type;
-                            _globalPowerMangerTemp->product_ch_status = 0;
-                            _globalPowerMangerTemp->product_ch_NF_status= 0;
-                            _globalPowerMangerTemp->product_ch_start_delay = 1000;
-                            _globalPowerMangerTemp->product_ch_stop_delay = 1000;
-
-                            _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
-                            _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-
-                            if(dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id,
-                                                        _globalPowerMangerTemp->product_ch_id,
-                                                        _globalPowerMangerTemp)!=0)
-                            {
-                                log_e("address %d chn %d data inserted error.\n",i,chn);
-                                return 0;
-                            }
-
-                        }
-                        _globalPowerMangerTemp->product_saddr = i ;
-                        //添加到队尾
-                        list_add_tail(&_globalPowerMangerTemp->list,&_globalDeviceManager->_globalPowerManger.list);
-                        chn+=1;
-                    }
-
-                }
-                break;
-                case DCPDU_TYPE:    // DCPDU
-                {
-                    log_i("DCPDU_TYPE!\n");
-                    //unsigned int start_delay[8], stop_delay[8];
-                    //g_switch_get_dcpdu_start_time_delay(&_globalDeviceManager->_globalRelaySampManger,i, start_delay);
-                    //g_switch_get_dcpdu_stop_time_delay(&_globalDeviceManager->_globalRelaySampManger,i, stop_delay);
-                    for (size_t j = 0; j < nMaxChn; j++)
-                    {
-                        GlobalPowerManger* _globalPowerMangerTemp = (GlobalPowerManger*)malloc(sizeof(GlobalPowerManger));
-                        if(_globalPowerMangerTemp==NULL)
-                        {
-                            //log_e("_globalPowerManger malloc error.\n");
-                            return -1 ;       
-                        }  
-                        memset(_globalPowerMangerTemp, 0, sizeof(GlobalPowerManger));
-                        _globalPowerMangerTemp->global_over_manager = (GlobalOverManager*)malloc(sizeof(GlobalOverManager));
-                        if(_globalPowerMangerTemp->global_over_manager==NULL)
-                        {
-                            //log_e("_globalPowerManger->global_over_manager malloc error.\n");
-                            return -1 ;       
-                        } 
-    
-                        memset(_globalPowerMangerTemp->global_over_manager,0,sizeof(GlobalOverManager));
-                        //查询是否由通道信息
-                        ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id,i,
-                                                        j+1, //1*8+j
-                                                        _globalPowerMangerTemp);
-                        _globalPowerMangerTemp->product_ch_addr = j+1;
-                        //未查询到信息 则插入
-                        if(ret==-1)
-                        {
-                            _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                            _globalPowerMangerTemp->product_saddr = i ;
-                            _globalPowerMangerTemp->product_ch_id = chn;
-                            _globalPowerMangerTemp->product_ch_addr = j+1;
-                            sprintf(_globalPowerMangerTemp->product_ch_name,"CH%d",_globalPowerMangerTemp->product_ch_id);
-                            _globalPowerMangerTemp->product_ch_type = type;
-                            _globalPowerMangerTemp->product_ch_status = 0;
-                            _globalPowerMangerTemp->product_ch_NF_status= 0;
-
-                            _globalPowerMangerTemp->product_ch_start_delay =1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-                            _globalPowerMangerTemp->product_ch_stop_delay =1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-
-                            _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
-                            _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl =ALARM_CTRL_ALARM_ONLY;
-                            _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-
-                            if(dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id,
-                                                        _globalPowerMangerTemp->product_ch_id,
-                                                        _globalPowerMangerTemp)!=0)
-                            {
-                                log_e("address %d chn %d data inserted error.\n",i,chn);
-                                return 0;
-                            }
-
-                        }
-                        _globalPowerMangerTemp->product_saddr = i ;
-                        _globalPowerMangerTemp->product_ch_type = type;
-                        _globalPowerMangerTemp->product_ch_id = chn;
-                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
-                        {
-                            log_e("update pwr general data err.");
-                        }
-                        //添加到队尾
-                        list_add_tail(&_globalPowerMangerTemp->list,&_globalDeviceManager->_globalPowerManger.list);
-                        chn+=1;
-                    }
-                }
-                break;
-                case TREE_AC_TYPE:    // 三相供电
-                {
-                    log_i("TreeAC_TYPE!\n");
-                    GlobalPowerManger *_globalPowerMangerTemp=NULL;                 
-                    for (size_t j = 0; j < nMaxChn; j++)
-                    {
-                        if (_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
-                        {
-                            log_i("TreeAC_TYPE_3-1!\n");
-                            _globalPowerMangerTemp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
-                            if (_globalPowerMangerTemp == NULL)
-                            {
-                                log_e("_globalPowerManger malloc error.\n");
-                                return -1;
-                            }
-                            memset(_globalPowerMangerTemp, 0, sizeof(GlobalPowerManger));
-                            INIT_LIST_HEAD(&_globalPowerMangerTemp->list_Tree_AC);
-                            _globalPowerMangerTemp->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
-                            if (_globalPowerMangerTemp->global_over_manager == NULL)
-                            {
-                                log_e("_globalPowerManger->global_over_manager malloc error.\n");
-                                return -1;
-                            }
-                            memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
-                            // 查询是否由通道信息
-                            ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                            _globalDeviceManager->_globalDevInfo.product_id, i,
-                                                            j + 1, // 1*8+j
-                                                            _globalPowerMangerTemp);
-                            _globalPowerMangerTemp->product_ch_addr = j + 1;
-                            // 未查询到信息 则插入
-                            if (ret == -1)
-                            {
-                                _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                                _globalPowerMangerTemp->product_saddr = i;
-                                _globalPowerMangerTemp->product_ch_id = chn;
-                                _globalPowerMangerTemp->product_ch_addr = j + 1;
-                                sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                                _globalPowerMangerTemp->product_ch_type = type;
-                                _globalPowerMangerTemp->product_ch_status = 0;
-                                _globalPowerMangerTemp->product_ch_NF_status= 0;
-
-                                _globalPowerMangerTemp->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-                                _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-
-                                _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
-                                _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl =ALARM_CTRL_ALARM_ONLY;
-
-                                if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                                 _globalDeviceManager->_globalDevInfo.product_id,
-                                                                 _globalPowerMangerTemp->product_ch_id,
-                                                                 _globalPowerMangerTemp) != 0)
-                                {
-                                    log_e("address %d chn %d data inserted error.\n", i, chn);
-                                    return 0;
-                                }
-                            }
-                            _globalPowerMangerTemp->product_saddr = i;
-                            _globalPowerMangerTemp->product_ch_type = type;
-                            _globalPowerMangerTemp->product_ch_id = chn;
-                            if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
-                            {
-                                log_e("update pwr general data err.");
-                            }
-                            // 添加到队尾
-                            list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
-                            chn += 1;
-                            // 初始化三相子通道三进1出
-                            GlobalTreeACManager *_globalTACManager = NULL;
-                            for (size_t indexT = 0; indexT < 3; indexT++)
-                            {
-                                _globalTACManager = (GlobalTreeACManager *)malloc(sizeof(GlobalTreeACManager));
-                                memset(_globalTACManager, 0, sizeof(GlobalTreeACManager));
-                                if (_globalTACManager == NULL)
-                                {
-                                    log_e("_globalTACManager malloc error.\n");
-                                    return -1;
-                                }
-                                _globalTACManager->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
-                                memset(_globalTACManager->global_over_manager, 0, sizeof(GlobalOverManager));
-                                if (_globalTACManager->global_over_manager == NULL)
-                                {
-                                    log_e("_globalTACManager->global_over_manager malloc error.\n");
-                                    return -1;
-                                }
-                                ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                     _globalDeviceManager->_globalDevInfo.product_id, i,
-                                                                     j + 1, // 1*8+j
-                                                                     nTac_chn,
-                                                                     _globalTACManager);
-                                _globalTACManager->product_ch_addr = j + 1;
-                                // 未查询到信息 则插入
-                                if (ret == -1)
-                                {
-                                    _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                                    _globalTACManager->product_saddr = i;
-                                    _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
-                                    _globalTACManager->product_ch_addr = j + 1;
-                                    _globalTACManager->product_ph_id = nTac_chn;
-                                    _globalTACManager->product_ph_type = indexT;
-                                    _globalTACManager->product_ph_outputType = 2; // 1三相2单相
-                                    if (indexT == (j + 3) % 3)
-                                    {
-                                        _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
-                                    }
-                                    else
-                                    {
-                                        _globalTACManager->product_ph_outputStatus = 2; // 1输出2不输出
-                                    }
-
-                                    if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                          _globalDeviceManager->_globalDevInfo.product_id,
-                                                                          _globalTACManager->product_ch_id,
-                                                                          _globalTACManager) != 0)
-                                    {
-                                        log_e("address %d ph_chn %d data inserted error.\n", i, nTac_chn);
-                                        return 0;
-                                    }
-                                }
-                                // 绑定到三项通道
-                                _globalTACManager->product_saddr = i;
-                                _globalTACManager->product_ph_type = indexT;
-                                if (_globalPowerMangerTemp)
-                                {
-                                    list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
-                                }
-                                nTac_chn += 1;
-                            }
-                        }
-                        else
-                        {
-                            log_i("TreeAC_TYPE_3-3!\n");
-                            if ((j + 3) % 3 == 0) // 线路段初始化
-                            {
-                                _globalPowerMangerTemp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
-                                if (_globalPowerMangerTemp == NULL)
-                                {
-                                    log_e("_globalPowerManger malloc error.\n");
-                                    return -1;
-                                }
-                                memset(_globalPowerMangerTemp, 0, sizeof(GlobalPowerManger));
-                                INIT_LIST_HEAD(&_globalPowerMangerTemp->list_Tree_AC);
-                                _globalPowerMangerTemp->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
-                                if (_globalPowerMangerTemp->global_over_manager == NULL)
-                                {
-                                    log_e("_globalPowerManger->global_over_manager malloc error.\n");
-                                    return -1;
-                                }
-                                memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
-                                // 查询是否由通道信息
-                                ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                                _globalDeviceManager->_globalDevInfo.product_id, i,
-                                                                j / 3 + 1, // 1*8+j
-                                                                _globalPowerMangerTemp);
-                                _globalPowerMangerTemp->product_ch_addr = j / 3 + 1;
-                                // 未查询到信息 则插入
-                                if (ret == -1)
-                                {
-                                    _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                                    _globalPowerMangerTemp->product_saddr = i;
-                                    _globalPowerMangerTemp->product_ch_id = chn;
-                                    _globalPowerMangerTemp->product_ch_addr = j / 3 + 1;
-                                    sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                                    _globalPowerMangerTemp->product_ch_type = type;
-                                    _globalPowerMangerTemp->product_ch_status = 0;
-                                    _globalPowerMangerTemp->product_ch_NF_status= 0;
-
-                                    _globalPowerMangerTemp->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-                                    _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-
-                                    _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
-                                    _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                    _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                    _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                    _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
-                                    
-                                    if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                                     _globalDeviceManager->_globalDevInfo.product_id,
-                                                                     _globalPowerMangerTemp->product_ch_id,
-                                                                     _globalPowerMangerTemp) != 0)
-                                    {
-                                        log_e("address %d chn %d data inserted error.\n", i, chn);
-                                        return 0;
-                                    }
-                                }
-                                _globalPowerMangerTemp->product_saddr = i;
-                                _globalPowerMangerTemp->product_ch_type = type;
-                                 _globalPowerMangerTemp->product_ch_id = chn;
-                                if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
-                                {
-                                    log_e("update pwr general data err.");
-                                }
-                                // 添加到队尾
-                                list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
-                                chn += 1;
-                            }
-                            // 初始化三相子通道三进三出
-                            GlobalTreeACManager *_globalTACManager = NULL;
-                            _globalTACManager = (GlobalTreeACManager *)malloc(sizeof(GlobalTreeACManager));
-                            memset(_globalTACManager, 0, sizeof(GlobalTreeACManager));
-                            if (_globalTACManager == NULL)
-                            {
-                                log_e("_globalTACManager malloc error.\n");
-                                return -1;
-                            }
-                            _globalTACManager->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
-                            memset(_globalTACManager->global_over_manager, 0, sizeof(GlobalOverManager));
-                            if (_globalTACManager->global_over_manager == NULL)
-                            {
-                                log_e("_globalTACManager->global_over_manager malloc error.\n");
-                                return -1;
-                            }
-                            ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                 _globalDeviceManager->_globalDevInfo.product_id, i,
-                                                                 j + 1, // 1*8+j
-                                                                 nTac_chn,
-                                                                 _globalTACManager);
-                            _globalTACManager->product_ch_addr = j + 1;
-                            // 未查询到信息 则插入
-                            if (ret == -1)
-                            {
-                                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
-                                _globalTACManager->product_saddr = i;
-                                _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
-                                _globalTACManager->product_ch_addr = j + 1;
-                                _globalTACManager->product_ph_id = nTac_chn;
-                                _globalTACManager->product_ph_type = (j + 3) % 3;
-                                _globalTACManager->product_ph_outputType = 1;   // 1三相2单相
-                                _globalTACManager->product_ph_outputStatus = 1; // 1输出
-                                if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                      _globalDeviceManager->_globalDevInfo.product_id,
-                                                                      _globalTACManager->product_ch_id,
-                                                                      _globalTACManager) != 0)
-                                {
-                                    log_e("address %d ph_chn %d data inserted error.\n", i, nTac_chn);
-                                    return 0;
-                                }
-                            }
-                            // 绑定到三项通道
-                            _globalTACManager->product_saddr = i;
-                            _globalTACManager->product_ph_type = (j + 3) % 3;
-                            if (_globalPowerMangerTemp)
-                            {
-                                list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
-                            }
-                            nTac_chn += 1;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-
-    sprintf(strLog,"%s$|$通道",language_alarm_Init_Success[0]);
-    char number[10];
-    sprintf(number,"%d",chn-1);
-    dev_Alarm_Run_message(_globalDeviceManager,strLog,number);
-    //获取数据库中的定时数据
-    ret=dev_get_power_ds(_globalDeviceManager->db,&_globalDeviceManager->_globalPowerManger,NULL);
-
-*/    
 #if 1
     //初始化传感器列表
     INIT_LIST_HEAD(&_globalDeviceManager->_globalSensorManger.list);
@@ -2527,9 +1960,5 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     //通知smartUPG,app已经运行起来
     upg_init();
     
-    while(1)
-    {
-        sleep(1);
-    }
     return 0;
 }

+ 35 - 14
pro/src/appweb_handle.c

@@ -3051,26 +3051,47 @@ static void serviceManagement(void *conn)
         smtp_recv_t *recv=gdm->smtpInfo.recv;
         _SMTP_ServerRequestInfo *info=&_serviceManageRequestInfo._smtp_info;
 
-        if(info->mode && info->account && info->password && info->server && info->port && info->auth)  {
-            send->product_id = gdm->_globalDevInfo.product_id;
+        if(info->mode) {
+            int save_flag=0;
             send->mode = atoi(info->mode);
-            strcpy(send->account, info->account);
-            strcpy(send->password, info->password);
-            strcpy(send->server, info->server);
-            strcpy(send->port, info->port);
-            strcpy(send->auth, info->auth);
+            if(send->mode) {
+                if(info->account && info->password && info->server && info->port && info->auth)  {
+                    if(strcmp(send->account, info->account)) {
+                        strcpy(send->account, info->account); save_flag = 1;
+                    }
+
+                    if(strcmp(send->password, info->password)) {
+                        strcpy(send->password, info->password); save_flag = 1;
+                    }
+
+                    if(strcmp(send->server, info->server)) {
+                        strcpy(send->server, info->server); save_flag = 1;
+                    }
+
+                    if(strcmp(send->port, info->port)) {
+                        strcpy(send->port, info->port); save_flag = 1;
+                    }
 
-            dev_smtp_update_send(gdm->db, send);
+                    if(strcmp(send->auth, info->auth)) {
+                        strcpy(send->auth, info->auth); save_flag = 1;
+                    }
+                }
+            }
+            else {
+                memset(send, 0, sizeof(smtp_send_t));  save_flag = 1;
+            }
+            
+            if(save_flag) {
+                dev_smtp_update_send(gdm->db, send);
+            }
         }
 
-        smtp_recv_t *pv=NULL;
         for(int i=0; i<SMTP_RECV_MAX; i++) {
             if(info->recvAccount[i]) {
-                pv = &recv[i];
-                pv->idx = i;
-                pv->use = 1;
-                strcpy(pv->account, info->recvAccount[i]);
-                dev_smtp_update_recv(gdm->db, pv);
+                recv[i].idx = i;
+                recv[i].use = 1;
+                strcpy(recv[i].account, info->recvAccount[i]);
+                dev_smtp_update_recv(gdm->db, &recv[i]);
             }
         }
     }   

+ 18 - 2
pro/src/common.h

@@ -617,8 +617,8 @@ typedef struct
 }smtp_recv_t;
 typedef struct 
 {
-    int                 product_id;
-    int                 mode;    				        //状态
+    int                 id;
+    int                 mode;    				        //0: open   1: close
     char                account[64];                    //用户账号
     char                password[24]; 		            //用户密码
     char                server[64]; 			        //服务器
@@ -633,6 +633,21 @@ typedef struct
     smtp_recv_t         recv[SMTP_RECV_MAX];      //接收账号列表
 }smtp_info_t;
 
+typedef struct {
+    int                 id;    		                    //id
+    int                 mode;    				        //0: open   1: close
+    char                server[512];                    //server
+    char                ip[48]; 		                //server ip
+    char                port[10]; 			            //server port
+    char                cid[32];    		            //client ID
+    char                user[32];    			        //认证方式  
+    char                password[32];
+}mqtt_server_t;
+typedef struct {
+    #define MQTT_SERV_MAX   10
+    mqtt_server_t       serv[MQTT_SERV_MAX];
+}mqtt_info_t;
+
 typedef struct 
 {
     int                 product_id;
@@ -946,6 +961,7 @@ typedef struct
 	GlobalBreakerManager g_new_global_breaker;
 
     smtp_info_t          smtpInfo;
+    mqtt_info_t          mqttInfo;
 }GlobalDeviceManager;
 
 extern GlobalDeviceManager __globalDeviceManage;

+ 12 - 0
pro/src/dflt.c

@@ -51,3 +51,15 @@ smtp_send_t DFLT_SMTP_SEND={
     .password = "UODRIFWDFBTJTVLW",
     .auth = "PLAIN",
 };
+
+mqtt_server_t DFLT_MQTT={
+    .id = 0,
+    .mode = 1,
+    .server = "smtp.163.com",
+    .ip = "rcp064867@163.com",
+    .port = "25",
+    .cid = ",",
+    .user = "UODRIFWDFBTJTVLW",
+    .password = "PLAIN",
+};
+

+ 79 - 0
pro/src/json_handle.c

@@ -4263,6 +4263,30 @@ cJSON* json_to_service_manage(const char* str,_ServiceManageRequestInfo* _servic
             }
         }
     }
+    else if(strcmp(_serviceManageRequestInfo->type,"listMqttQuery")==0)
+    {
+        //
+    }
+    else if(strcmp(_serviceManageRequestInfo->type,"mqttSave")==0)
+    {
+        //
+    }
+    else if(strcmp(_serviceManageRequestInfo->type,"mqttOpen")==0)
+    {
+        //
+    }
+    else if(strcmp(_serviceManageRequestInfo->type,"mqttClose")==0)
+    {
+        //
+    }
+    else if(strcmp(_serviceManageRequestInfo->type,"mqttZtQuery")==0)
+    {
+        //
+    }
+    else if(strcmp(_serviceManageRequestInfo->type,"mqttZtSave")==0)
+    {
+        //
+    }
     //SNMP上传参数
     else if(strcmp(_serviceManageRequestInfo->type,"SnmpSave")==0)
     {
@@ -4787,6 +4811,61 @@ char* service_smtp_ack_to_json(smtp_info_t* info)
     return str;
 }
 
+
+char* service_mqtt_ack_to_json(mqtt_info_t* info)
+{
+    int idx=0;
+    char buf[30];
+    char* str = NULL;
+    
+    cJSON* root = cJSON_CreateObject();
+    cJSON_AddNumberToObject(root, "code", 200); 
+
+    cJSON* data_filed = cJSON_CreateObject();
+
+#if 0
+    cJSON* array=NULL;
+    for(int i=0; i<MQTT_SERV_MAX; i++) {
+
+            cJSON* tmp = cJSON_CreateObject();
+            if(tmp) {
+                cJSON_AddStringToObject(data_filed,"id", ser->id);
+
+                sprintf(buf, "%d", info->mode);
+                cJSON_AddStringToObject(data_filed,"mode", buf);
+                cJSON_AddStringToObject(data_filed,"serverName", ser->server);
+                cJSON_AddStringToObject(data_filed,"ip", ser->ip);
+                cJSON_AddStringToObject(data_filed,"port", ser->port);
+                cJSON_AddStringToObject(data_filed,"zh", ser->user);
+                cJSON_AddStringToObject(data_filed,"mm", ser->password);
+                cJSON_AddStringToObject(data_filed,"rzfs", ser->cid);
+
+
+                if(array==NULL) {
+                    array = cJSON_CreateArray();
+                }
+
+                if(array) {
+                    cJSON_AddItemToArray(array, tmp);
+                }
+            }
+    }
+    if(array) {
+        cJSON_AddItemToObject(data_filed, "data", array);
+    }
+#endif
+    //添加汇总
+    cJSON_AddItemToObject(root, "data", data_filed);
+    //添加结果
+    cJSON_AddStringToObject(root, "msg", "操作成功");
+    //转换
+    str = cJSON_Print(root);    
+    //释放资源
+    cJSON_Delete(root);
+    return str;
+}
+
+
 // @brief 返回分组设置
 char* service_group_ack_to_json(GroupInfo* _globalgroupInfo)
 {

+ 1 - 0
pro/src/json_handle.h

@@ -592,6 +592,7 @@ char* service_sx_ack_to_json(int product_id, GlobalPowerManger * __PowerManage_t
 char* service_ntp_ack_to_json(NTPManager* __NTPManager_t);
 char* service_snmp_ack_to_json(SNMPManager* __SNMPManager_t);
 char* service_smtp_ack_to_json(smtp_info_t* info);
+char* service_mqtt_ack_to_json(mqtt_info_t* info);
 char* service_group_ack_to_json(GroupInfo* _globalgroupInfo);
 ///请求管理
 cJSON* json_to_sensor_manage(const char* str,_OverSensorRequest* _overSensorRequest);

+ 42 - 1
pro/src/language_common.c

@@ -379,7 +379,7 @@ const char language_alarm_Type_Sensor[LANGUAGE_TYPE][LANGUAGE_SIZE] =
 
 const char language_alarm_Type_Network[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
-    "网络类警告",
+    "网络告警",
     " Network alarm",
     "Сетевое предупреждение",
     " "
@@ -524,6 +524,15 @@ const char language_alarm_NULL_ERROR[LANGUAGE_TYPE][LANGUAGE_SIZE] =
     " "
 } ;
 
+
+const char language_alarm_phase_lose[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "相位缺失",
+    " Phase Loss! ",
+    " Фаза отсутствует!",
+    " "
+} ;
+
 const char language_alarm_phaseA_lose[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
     "相位A缺失",
@@ -597,3 +606,35 @@ const char language_Role_User[LANGUAGE_TYPE][LANGUAGE_SIZE] =
 } ;
 
 
+const char language_alarm[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "报警",
+    "Alarm",
+    "Предупреждение",
+    " "
+} ;
+
+const char language_exceed[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "超限",
+    "Exceed",
+    "Превышение пределов",
+    " "
+} ;
+
+
+const char language_sensor_smoke[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "烟雾",
+    "Smoke",
+    "Дым",
+    " "
+} ;
+
+const char language_sensor_access[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "门禁",
+    "Access",
+    "Вход",
+    " "
+} ;

+ 7 - 0
pro/src/language_common.h

@@ -129,6 +129,8 @@ extern const char language_alarm_Init_Success[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_alarm_NULL_ERROR[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
+extern const char language_alarm_phase_lose[LANGUAGE_TYPE][LANGUAGE_SIZE];
+
 extern const char language_alarm_phaseA_lose[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
 
 extern const char language_alarm_phaseB_lose[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
@@ -153,4 +155,9 @@ extern const char language_alarm_Type_Sensor[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
 
 extern const char language_alarm_Type_Network[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
 
+extern const char language_alarm[LANGUAGE_TYPE][LANGUAGE_SIZE];
+extern const char language_exceed[LANGUAGE_TYPE][LANGUAGE_SIZE];
+extern const char language_sensor_smoke[LANGUAGE_TYPE][LANGUAGE_SIZE];
+extern const char language_sensor_access[LANGUAGE_TYPE][LANGUAGE_SIZE];
+
 #endif

+ 4 - 30
pro/src/main.c

@@ -1,17 +1,6 @@
 #include <stdio.h>
-#include "common.h"
-#include "appweb_handle.h"
-#include "modbus_handle.h"
-#include "sqlite_handle.h"
-
-#include "list.h"
-#include "switch_ctrl.h"
 #include "app.h"
-#include "shell.h"
 #include "sys.h"
-#include "json_handle.h"
-
-//static GlobalDeviceManager* _globalDeviceManager;
 
 
 //get dev 
@@ -50,26 +39,11 @@ static void dev_ctrl_main(void* arg)
 //主函数
 int main(int argc,char* argv[])
 {
-    int ret = 0 ;
-    int type = 0 ;
-    int chn = 0 ;
-
-    //if (1==is_process_running("smartPDU"))
-  //  {
-    //    log_e("main service is running!\n");
-     //    return 0;
-   // }
-    
-
-    //初始化shell
-    //userShellInit();
-    //初始化日志组件
-    initLogger();
-    //初始化系统
-
-    //sys_init();
-
+    sys_init();
     _global_device_manage_init(&__globalDeviceManage);
+    while(1) {
+        sleep(1);
+    }
 
     return 0;
 }

+ 394 - 83
pro/src/mqtt.c

@@ -1,8 +1,12 @@
+#include <regex.h>
+#include "common.h"
+#include "cJSON.h"
 #include "mqtt.h"
 #include "thread.h"
 #include "mongoose.h"
 #include "elog.h"
 #include "lock.h"
+#include "cfg.h"
 
 #if 0
     #define LOGD            log_d
@@ -15,19 +19,17 @@
 #endif
 
 
-#define MQTT_SERVER_URL     "XXXXXXXX"
+#ifdef USE_MQTT
 
-
-char *topic_sub[]={
+char *topic_sub[MQTT_SUB_MAX]={
     "/pdu/%d/control/power/all_channel",
     "/pdu/%d/control/power/%d",
     "/pdu/%d/control/sensor/%d",
     "/pdu/%d/control/device/restart",
     "/pdu/%d/control/device/reset",
     "/PDU/%d/control/service",
-    NULL,
 };
-char *topic_pub[]={
+char *topic_pub[MQTT_PUB_MAX]={
     "/pdu/%d/info/device",
     "/PDU/%d/status/network",
     "/pdu/%d/status/power/all_channel",
@@ -37,27 +39,45 @@ char *topic_pub[]={
     "/pdu/%d/alarm/power",
     "/pdu/%d/alarm/sensor",
     "/PDU/%d/status/service",
-    NULL,
 };
 
 
-
-
 typedef struct mg_mgr mgr_t;
 typedef struct mg_mqtt_opts mg_opts_t;
 typedef struct mg_connection mg_conn_t;
 typedef struct {
-    mgr_t         mgr;
+    uint8_t     qos;
+    uint8_t     ver;
+    uint8_t     clean;
+    uint8_t     retain;
+}mqtt_para_t;
+typedef struct _mqtt_conn_t{
+    mg_conn_t     *c;
     mg_opts_t     opts;
-    mg_conn_t     *conn;
     mqtt_para_t   para;
-    
-    lock_t        lck;
-    int           inited;
+    mqtt_info_t   *info;
     bool          isover;
-    
+    struct _mqtt_conn_t *next;
+}mqtt_conn_t;
+typedef struct {
+    mgr_t         mgr;
+    mqtt_conn_t   *conn;
+    int           inited;
+    int           prod_id;
+    GlobalDeviceManager *dm;
 }mqtt_handle_t;
-static mqtt_handle_t mqHandle;
+static mqtt_handle_t mqHandle={0};
+
+
+
+static int my_conn(mqtt_handle_t *h, mqtt_info_t *info);
+static int my_recv(char *topic, char *data);
+
+static int info_cmp(mqtt_info_t *a, mqtt_info_t *b)
+{
+    return memcmp(a, b, sizeof(mqtt_info_t)-sizeof(mqtt_info_t*));
+}
+
 
 static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
 {
@@ -88,9 +108,7 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
         // When we receive MQTT message, print it
         struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data;
         //MG_INFO(("Received on %.*s : %.*s", (int) mm->topic.len, mm->topic.buf, (int) mm->data.len, mm->data.buf));
-        
-
-
+        my_recv(mm->topic.buf, mm->data.buf);
     }
 
     if (ev == MG_EV_ERROR || ev == MG_EV_CLOSE) {
@@ -106,96 +124,175 @@ static void* mqtt_thread(void *arg)
     
     while(th->quit==0) {
         if(h->inited) {
+            
+            my_conn_check(h);
+
             lock_s_hold(LOCK_ID_MQTT);
-            if (h->isover) {
-                h->conn = mg_mqtt_connect(&h->mgr, h->para.user.url, &h->opts, mqtt_fn, &h->isover);
-            }
-            else {
-                mg_mgr_poll(&h->mgr, 300);
-            }
-            lock_s_release(LOCK_ID_MQTT);
+            mg_mgr_poll(&h->mgr, 300);
             lock_s_release(LOCK_ID_MQTT);
         }
-        
-        if(h->isover) usleep(1000);
     }
     pthread_exit(NULL);
 }
 
-static int sub_all(mqtt_handle_t *h, int id, int qos)
+static int my_sub(mg_conn_t *c, int prod_id, int qos)
 {
     int i;
     mg_opts_t opts;
     char temp[512];
     
     memset(&opts, 0, sizeof(opts));
-    
     opts.qos = qos;
     for(i=0; topic_sub[i]; i++) {
-        sprintf(temp, topic_sub[i], id);
+        sprintf(temp, topic_sub[i], prod_id);
         opts.topic = mg_str(temp);
-        mg_mqtt_sub(h->conn, &opts);
+        mg_mqtt_sub(c, &opts);
     }
     
     return 0;
 }
+
+static int find_conn(mqtt_handle_t *h, mqtt_info_t *info)
+{
+    //
+    return 0;
+}
+static int my_conn(mqtt_handle_t *h, mqtt_info_t *info)
+{
+    int r=-1;
+    mqtt_conn_t *conn,*c;
+    
+    h->opts.clean = true,
+    h->opts.qos = h->para.conn.qos,
+    h->opts.topic = mg_str(""),
+    h->opts.version = h->para.conn.ver,
+    h->opts.message = mg_str("bye");
+
+    conn = h->conn;
+    while(info) {
+        if(!conn==NULL) {
+            conn = calloc(1, sizeof(mqtt_conn_t));
+            if(!conn) {
+                LOGE("___my_conn calloc failed\n");
+                break;
+            }
+        }
+
+        conn->c = mg_mqtt_connect(&h->mgr, conn->para.user.url, &conn->opts, mqtt_fn, &conn->isover);
+        if(conn>c) {
+            my_sub(conn>c, h->prod_id, 1);
+        }
+
+        info = info->next;
+        if(!info) {
+            r = 0; break;
+        }
+    }
+
+    return r;
+}
+static int my_disconn(mqtt_handle_t *h, mqtt_conn_t *c)
+{
+    mqtt_conn_t *c1,*c2;
+    
+    c1 = c2 = h->conn;
+    while(c1) {
+        if(c1==c) {
+            mg_mqtt_disconnect(c1, &c1->opts);
+            break;
+        }
+        c1 = c1->next;
+    }
+    h->conn = NULL;
+}
+
+static int my_disconn_all(mqtt_handle_t *h)
+{
+    mqtt_conn_t *c,*conn=h->conn;
+    while(conn) {
+        c = conn;
+        mg_mqtt_disconnect(c, &c->opts);
+        conn = conn->next;
+        free(c);
+    }
+    h->conn = NULL;
+}
+
+
+
+static int my_conn_check(mqtt_handle_t *h)
+{
+    int r=-1;
+    mqtt_conn_t *conn=h->conn;
+
+    while(conn) {
+        if(conn->c && conn->isover) {
+            conn->c = mg_mqtt_connect(&h->mgr, conn->para.user.url, &conn->opts, mqtt_fn, &conn->isover);
+            if(conn>c) {
+                my_sub(conn>c, h->prod_id, 1); r = 0;
+            }
+        }
+        conn = conn->next;
+    }
+    return r;
+}
+
+
+
+
+#endif
+
+
 //////////////////////////////////////////////////////////////////////////
 int mqtt_init(void)
 {
-    int r;
+    int r=-1;
+
+#ifdef USE_MQTT
     mqtt_handle_t *h=&mqHandle;
     
-    memset(h, 9, sizeof(mqtt_handle_t));
+    memset(h, 0, sizeof(mqtt_handle_t));
     mg_mgr_init(&h->mgr);
     
+    h->dm = &__globalDeviceManage;
+    h->prod_id = h->dm->_globalDevInfo.product_id;
     //h->para.user = ;
 
     h->para.conn.ver = 4;
     h->para.conn.qos = 1;
     
+
     thread_start(THREAD_ID_MQTT, mqtt_thread, h, 4*MB, 0);
     h->inited = 1;
-    
-    return 0;
+    r = 0;
+#endif
+
+    return r;
 }
 
 
 int mqtt_deinit(void)
 {
+    int r=-1;
+
+#ifdef USE_MQTT
     mqtt_handle_t *h=&mqHandle;
     
     thread_stop(THREAD_ID_MQTT);
     mg_mgr_free(&h->mgr);
     h->inited = 0;
-    
-    return 0;
-}
-
-
-int mqtt_set(mqtt_para_t *para)
-{
-    int r=0;
-    mqtt_handle_t *h=&mqHandle;
-    
-    if(!para) {
-        return -1;
-    }
+    r = 0;
+#endif
 
-    lock_s_hold(LOCK_ID_MQTT);
-    if(para->conn.ver<3 || para->conn.ver>5) {
-        r = -1;
-    }
-    else {
-        h->para = *para;
-    }
-    lock_s_release(LOCK_ID_MQTT);
-    
-    return 0;
+    return r;
 }
 
 
 int mqtt_conn(void)
 {
+    int r=-1;
+
+#ifdef USE_MQTT
     mqtt_handle_t *h=&mqHandle;
     
     lock_s_hold(LOCK_ID_MQTT);
@@ -203,29 +300,26 @@ int mqtt_conn(void)
         goto quit;
     }
     
-    memset(&h->opts, 0, sizeof(h->opts));
-    h->opts.clean = true,
-    h->opts.qos = h->para.conn.qos,
-    h->opts.topic = mg_str(""),
-    h->opts.version = h->para.conn.ver,
-    h->opts.message = mg_str("bye");
-    
     if(h->conn) {
         mg_mqtt_disconnect(h->conn, NULL);
     }
-    
-    h->isover = false;
-    h->conn = mg_mqtt_connect(&h->mgr, h->para.user.url, &h->opts, mqtt_fn, &h->isover);
+    my_conn(h);
     
 quit:
     lock_s_release(LOCK_ID_MQTT);
-    return h->conn?0:-1;
+
+    r = h->conn?0:-1;
+#endif
+
+    return r;
 }
 
 
 int mqtt_disconn(void)
 {
-    int r=0;
+    int r=-1;
+
+#ifdef USE_MQTT
     mqtt_handle_t *h=&mqHandle;
 
     lock_s_hold(LOCK_ID_MQTT);
@@ -234,16 +328,20 @@ int mqtt_disconn(void)
         goto quit;
     }
     mg_mqtt_disconnect(h->conn, NULL);
-    
+    r = 0;
 quit:
     lock_s_release(LOCK_ID_MQTT);
+#endif
+
     return r;
 }
 
 
 int mqtt_sub(char *topic, int qos)
 {
-    int r=0;
+    int r=-1;
+
+#ifdef USE_MQTT
     mg_opts_t opts;
     mqtt_handle_t *h=&mqHandle;
 
@@ -257,36 +355,249 @@ int mqtt_sub(char *topic, int qos)
     opts.topic = mg_str(topic);
     opts.qos = qos;
     mg_mqtt_sub(h->conn, &opts);
-    
+    r = 0;
 quit:
     lock_s_release(LOCK_ID_MQTT);
+#endif
+
     return r;
 }
 
 
 int mqtt_pub(char *topic, int qos, char *data, int dlen)
 {
-    int r=0;
+    int r=-1;
+
+#ifdef USE_MQTT
     mg_opts_t opts;
     mqtt_handle_t *h=&mqHandle;
 
-    lock_s_hold(LOCK_ID_MQTT);
-    if(!h->inited || !h->conn) {
-        r = -1;
-        goto quit;
+    if(!h->inited) {
+        return -1;
     }
-    
+
     memset(&opts, 0, sizeof(opts));
     opts.topic = mg_str(topic);
     opts.qos = qos;
     opts.message.buf = data;
     opts.message.len = dlen;
     opts.retain = false;
-    r = mg_mqtt_pub(h->conn, &opts);
-    
-quit:
-    lock_s_release(LOCK_ID_MQTT);
+    while(1) {
+        lock_s_hold(LOCK_ID_MQTT);
+        mg_mqtt_pub(h->conn, &opts);
+        lock_s_release(LOCK_ID_MQTT);
+    }
+#endif
+
     return r;
 }
 
 
+int mqtt_send(int type, int id, void *data)
+{
+    int r=-1;
+
+#ifdef USE_MQTT
+    char topic[512];
+    char content[4096];
+    mqtt_handle_t *h=&mqHandle;
+
+    if(type<0 || type>=MQTT_PUB_MAX || !data) {
+        return -1;
+    }
+
+    if(type==MQTT_PUB_STAT_POWER_CHN || type==MQTT_PUB_STAT_SENSOR) {
+        snprintf(topic, sizeof(topic), topic_pub[type], h->prod_id, id);
+    }
+    else {
+        snprintf(topic, sizeof(topic), topic_pub[type], h->prod_id);
+    }
+
+    switch(type) {
+        case MQTT_PUB_INFO_DEVICE:
+        {
+            //
+        }
+        break;
+
+        case MQTT_PUB_STAT_NETWORK:
+        {
+
+        }
+        break;
+
+        case MQTT_PUB_STAT_POWER_ALL:
+        {
+            
+        }
+        break;
+
+        case MQTT_PUB_STAT_POWER_CHN:
+        {
+            
+        }
+        break;
+
+        case MQTT_PUB_STAT_SENSOR:
+        {
+            
+        }
+        break;
+
+        case MQTT_PUB_ALARM_NETWORK:
+        {
+            
+        }
+        break;
+
+        case MQTT_PUB_ALARM_POWER:
+        {
+            
+        }
+        break;
+
+        case MQTT_PUB_ALARM_SENSOR:
+        {
+            
+        }
+        break;
+    }
+
+    //r = mqtt_pub(topic, );
+#endif
+
+    return r;
+}
+
+//////////////////////////////////////////////////////////
+static int get_cmd(char *json)
+{
+    int cmd=-1;
+
+    cJSON* cjson=cJSON_Parse(json);
+    if(cjson) {
+        cJSON* order=cJSON_GetObjectItem(cjson,"order");
+        if(order && order->valuestring) {
+            cmd = atoi(order->valuestring);
+        }
+
+        cJSON_Delete(cjson);
+    }
+
+    return cmd;
+}
+
+enum {
+    SERV_NTP=0,
+    SERV_SMTP,
+    SERV_MESG,
+    SERV_MQTT,
+    SERV_CLOUD,
+    SERV_TELNET,
+    SERV_SNMP_V1,
+    SERV_SNMP_V2C,
+    SERV_SNMP_V3,
+    SERV_SNMP_TRAP,
+    
+    SERV_MAX
+};
+const char *serv_str[SERV_MAX]={
+    "ntp",
+    "smtp",
+    "message",
+    "mqtt",
+    "cloud",
+    "telnet",
+    "snmp_v1",
+    "snmp_v2c",
+    "snmp_v3",
+    "snmp_trap",
+};
+static uint32_t get_serv(char *json)
+{
+    int i;
+    cJSON* tmp=NULL;
+    uint32_t flag=0;
+
+    cJSON* cjson=cJSON_Parse(json);
+    if(cjson) {
+        for(i=0; i<SERV_MAX; i++) {
+            tmp = cJSON_GetObjectItem(cjson, serv_str[i]);
+            if(tmp && tmp->valuestring) {
+                flag |= (atoi(tmp->valuestring)<<i);
+            }
+        }
+
+        cJSON_Delete(cjson);
+    }
+
+    return flag;
+}
+
+
+static int my_recv(char *topic, char *data)
+{
+    int i,r,cmd;
+
+#ifdef USE_MQTT
+    char temp[2000];
+    mqtt_handle_t *h=&mqHandle;
+
+    for(i=0; i<MQTT_SUB_MAX; i++) {
+        snprintf(temp, sizeof(temp), topic_sub[i], h->prod_id);
+        if(strstr(topic, temp)) {
+            switch(i) {
+                case MQTT_SUB_CMD_POWER_ALL:
+                {
+                    LOGD("___ MQTT_SUB_CMD_POWER_ALL\n");
+                    cmd = get_cmd(data);
+                }
+                break;
+
+                case MQTT_SUB_CMD_POWER_CHN:
+                {
+                    int ch=atoi(topic+strlen(temp));
+                    cmd = get_cmd(data);
+
+                    LOGD("___ MQTT_SUB_CMD_POWER_CHN, %d\n", ch);
+                }
+                break;
+
+                case MQTT_SUB_CMD_SENSOR:
+                {
+                    int id=atoi(topic+strlen(temp));
+                    cmd = get_cmd(data);
+
+                    LOGD("___ MQTT_SUB_CMD_POWER_CHN, %d\n", id);
+                }
+                break;
+
+                case MQTT_SUB_CMD_RESTART:
+                {
+                    LOGD("___ MQTT_SUB_CMD_RESTART\n");
+                    cmd = get_cmd(data);
+                    
+                }
+                break;
+
+                case MQTT_SUB_CMD_RESET:
+                {
+                    LOGD("___ MQTT_SUB_CMD_RESET\n");
+                    cmd = get_cmd(data);
+                }
+                break;
+
+                case MQTT_SUB_CMD_SERVICE:
+                {
+                    LOGD("___ MQTT_SUB_CMD_SERVICE\n");
+                    uint32_t flag=get_serv(data);
+                }
+                break;
+            }
+        }
+    }
+#endif
+
+    return 0;
+}
+

+ 25 - 17
pro/src/mqtt.h

@@ -3,31 +3,39 @@
 
 #include <stdint.h>
 
-typedef struct {
-    char  url[1024];        //
-    char  cid[64];          //clientID
-    char  name[64];         //user name
-    char  pass[64];         //password
-}mqtt_user_t;
-typedef struct {
-    uint8_t qos;
-    uint8_t ver;
-    uint8_t clean;
-    uint8_t retain;
-}mqtt_conn_t;
-typedef struct {
-    mqtt_user_t  user;
-    mqtt_conn_t  conn;
-}mqtt_para_t;
+enum {
+    MQTT_SUB_CMD_POWER_ALL=0,
+    MQTT_SUB_CMD_POWER_CHN,
+    MQTT_SUB_CMD_SENSOR,
+    MQTT_SUB_CMD_RESTART,
+    MQTT_SUB_CMD_RESET,
+    MQTT_SUB_CMD_SERVICE,
+
+    MQTT_SUB_MAX
+};
+enum {
+    MQTT_PUB_INFO_DEVICE=0,
+    MQTT_PUB_STAT_NETWORK,
+    MQTT_PUB_STAT_POWER_ALL,
+    MQTT_PUB_STAT_POWER_CHN,
+    MQTT_PUB_STAT_SENSOR,
+    MQTT_PUB_STAT_SERVICE,
+    MQTT_PUB_ALARM_NETWORK,
+    MQTT_PUB_ALARM_POWER,
+    MQTT_PUB_ALARM_SENSOR,
+
+    MQTT_PUB_MAX
+};
 
 int mqtt_init(void);
 int mqtt_deinit(void);
 
-int mqtt_set(mqtt_para_t *para);
 int mqtt_conn(void);
 int mqtt_disconn(void);
 
 int mqtt_sub(char *topic, int qos);
 int mqtt_pub(char *topic, int qos, char *data, int dlen);
 
+int mqtt_send(int type, int id, void *data);
+
 #endif

+ 90 - 40
pro/src/smtp.c

@@ -4092,6 +4092,7 @@ typedef struct {
     smtp_info_t   *info;
 
     GlobalDeviceManager *dm;
+    int           inited;
 }smtp_handle_t;
 static smtp_handle_t smHandle;
 
@@ -4114,12 +4115,9 @@ static void* smtp_thread(void *arg)
         if(r==0) {
             pkt = (smtp_pkt_t*)ln->data.buf;
             send_mail(send, recv, pkt->sub, pkt->body, 1);
+            xlist_back_node(h->list, ln);
         }
-        xlist_back_node(h->list, ln);
-
-        if(r) {
-            sleep_ms(300);
-        }
+        sleep_ms(100);
     }
 
     pthread_exit(NULL);
@@ -4144,6 +4142,7 @@ int smtp_init(void)
 
     dev_smtp_init(dm->db, h->info);
     thread_start(THREAD_ID_SMTP, smtp_thread, h, 5*MB, 0);
+    h->inited = 1;
 
     //smtp_test();
 #endif
@@ -4159,6 +4158,7 @@ int smtp_deinit(void)
 
     thread_stop(THREAD_ID_SMTP);
     xlist_free(h->list);
+    h->inited = 0;
 #endif
 
     return 0;
@@ -4184,11 +4184,14 @@ static int post_data(char *sub, char *body)
 
 int smtp_send(char *sub, char *body)
 {
-    int r=0;
+    int r=-1;
 
 #ifdef USE_SMTP
     smtp_handle_t *h=&smHandle;
 
+    if(!h->inited) {
+        return -1;
+    }
     r = send_mail(&h->info->send, h->info->recv, sub, body, 1);
 #endif
 
@@ -4197,9 +4200,14 @@ int smtp_send(char *sub, char *body)
 
 int smtp_post(char *sub, char *body)
 {
-    int r=0;
+    int r=-1;
 
 #ifdef USE_SMTP
+    smtp_handle_t *h=&smHandle;
+
+    if(!h->inited) {
+        return -1;
+    }
     r = post_data(sub, body);
 #endif
 
@@ -4213,33 +4221,72 @@ int smtp_post_alarm(int type, int subtype, int alarm_type, char *content)
 
 #ifdef USE_SMTP
     smtp_pkt_t pkt;
+    char temp[128];
+    smtp_handle_t *h=&smHandle;
+
+    if(!h->inited) {
+        return -1;
+    }
+    int prod_id=h->dm->_globalDevInfo.product_id;
+    int langID=h->dm->_globalDevInfo.product_language;
 
-    pkt.sub[0] = pkt.body[0] = 0;
     switch(type) {
         case ALARM_TYPE_POWER:
         {
-            switch(alarm_type) {
-                case WARNING_V_UP:
-                //strcpy(pkt.sub, "");
-                break;
-
-                case WARNING_V_DOWN:
-                break;
-
-                case WARNING_A_UP:
-                break;
-
-                case WARNING_W_UP:
-                break;
-
-                case WARNING_P_UP:
-                break;
-
-                case 0 ... 2:
-                break;
-
-                default:
-                return -1;
+            if(subtype) {
+                switch(alarm_type) {
+                    case ENABLE_TAC_V_UP:
+                    case ENABLE_TAC_V_DOWN:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case ENABLE_TAC_A_UP:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case ENABLE_TAC_W_UP:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case ENABLE_TAC_P_UP:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case ENABLE_TAC_STIME:
+                    case ENABLE_TAC_ETIME:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
+                    break;
+
+                    default:
+                    return -1;
+                }
+            }
+            else {
+                switch(alarm_type) {
+                    case WARNING_V_UP:
+                    case WARNING_V_DOWN:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case WARNING_A_UP:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case WARNING_W_UP:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case WARNING_P_UP:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s %s", prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
+                    break;
+
+                    case 0 ... 2:
+                    snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
+                    break;
+
+                    default:
+                    return -1;
+                }
             }
         }
         break;
@@ -4247,25 +4294,29 @@ int smtp_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:
+                snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_temperature[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_SMOKE:
+                snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_sensor_smoke[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_WATER:
+                snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_humidity[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_DOOR:
+                snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_sensor_access[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_GAS:
+                snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_atmosphere_gas[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_AIR_PRESS:
-                break;
-
-                case SENSOR_TYPE_DoubleT:
+                snprintf(temp, sizeof(temp), "PDU %d %s %s", prod_id, language_atmosphere_pressure[langID], language_alarm[langID]);
                 break;
 
                 default:
@@ -4276,7 +4327,7 @@ int smtp_post_alarm(int type, int subtype, int alarm_type, char *content)
 
         case ALARM_TYPE_NETWORK:
         {
-            //
+            snprintf(temp, sizeof(temp), "PDU %d %s", prod_id, language_alarm_Type_Network[langID]);
         }
         break;
 
@@ -4284,10 +4335,8 @@ int smtp_post_alarm(int type, int subtype, int alarm_type, char *content)
         return -1;
     }
 
-    snprintf(pkt.sub, sizeof(pkt.sub), "ALARM");
-    snprintf(pkt.body, sizeof(pkt.body), content);
-
-    r = post_data(pkt.sub, pkt.body);
+    replace_sequences(content, h->dm->alarmTab);
+    r = post_data(temp, content);
 #endif
 
     return r;
@@ -4298,13 +4347,14 @@ int smtp_post_alarm(int type, int subtype, int alarm_type, char *content)
 int smtp_test(void)
 {
     int r=0,cnt=0;
+    
+#ifdef USE_SMTP
     char temp[200];
     smtp_handle_t *h=&smHandle;
 
-#ifdef USE_SMTP
     smtp_info_t info={
     .send = {
-      .product_id = 0,
+      .id = 0,
       .mode = 1,
 
       .account = "rcp064867@163.com",

+ 123 - 8
pro/src/sqlite_handle.c

@@ -3523,7 +3523,7 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
     strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
     dev_insert_alarm_info(globalDeviceManger->db,__globalPowerTemp->product_id,0,buffer,AlarmText);
 
-    smtp_post_alarm(ALARM_TYPE_POWER, 0, _AlarmType, AlarmText);
+    smtp_post_alarm(ALARM_TYPE_POWER, 1, _AlarmType, AlarmText);
 
     return 0;
 }
@@ -3833,7 +3833,7 @@ int dev_smtp_init(sqlite3 *db, smtp_info_t *info)
     table = SMTP_MANAGER_TABLE;
     if(!tab_exists(db, table)) {
         sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
-                            "product_id INTEGER PRIMARY KEY,"
+                            "id INTEGER PRIMARY KEY,"
                             "mode INTEGER,"
                             "account TEXT,"
                             "password TEXT,"
@@ -3846,8 +3846,10 @@ int dev_smtp_init(sqlite3 *db, smtp_info_t *info)
             return -1;
         }
 
+#ifdef SMTP_SEND_BUILTIN
         extern smtp_send_t DFLT_SMTP_SEND;
         dev_smtp_update_send(db, &DFLT_SMTP_SEND);
+#endif
     }
 
     if(info) {
@@ -3865,7 +3867,7 @@ int dev_smtp_init(sqlite3 *db, smtp_info_t *info)
     if(info && ncol>0) {
         smtp_send_t *send=&info->send; 
         memset(send, 0, sizeof(smtp_send_t));
-        send->product_id = atoi(pResult[ncol+0]);
+        send->id = atoi(pResult[ncol+0]);
         send->mode = atoi(pResult[ncol+1]);
         strcpy(send->account, pResult[ncol+2]);
         strcpy(send->password, pResult[ncol+3]);
@@ -3920,8 +3922,8 @@ int dev_smtp_update_send(sqlite3 *db, smtp_send_t *send)
 
     cnt = get_count(db, table);
     if(cnt>0) {
-        sprintf(temp, "UPDATE %s SET product_id=%d, mode=%d, account='%s', password='%s', server='%s', port='%s', auth='%s' WHERE product_id=%d;", 
-                table, send->product_id, send->mode, send->account, send->password, send->server, send->port, send->auth, send->product_id);
+        sprintf(temp, "UPDATE %s SET id=%d, mode=%d, account='%s', password='%s', server='%s', port='%s', auth='%s' WHERE id=%d;", 
+                table, send->id, send->mode, send->account, send->password, send->server, send->port, send->auth, send->id);
         r = sqlite3_exec(db, temp, NULL, 0, &err_msg);
         if(r != SQLITE_OK) {
             log_e("___sw_update_port failed, %s, %s\n\n", temp, err_msg);
@@ -3933,14 +3935,14 @@ int dev_smtp_update_send(sqlite3 *db, smtp_send_t *send)
     }
 
     if(exist==0) {
-        sprintf(temp, "INSERT INTO %s (product_id,mode,account,password,server,port,auth) VALUES (?,?,?,?,?,?,?);", table);
+        sprintf(temp, "INSERT INTO %s (id,mode,account,password,server,port,auth) VALUES (?,?,?,?,?,?,?);", table);
         r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
         if (r != SQLITE_OK) {
             log_e("___dev_smtp_update_man, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
             r = -1; goto quit;
         }
 
-        sqlite3_bind_int(stmt,  1, send->product_id);
+        sqlite3_bind_int(stmt,  1, send->id);
         sqlite3_bind_int(stmt,  2, send->mode);
         sqlite3_bind_text(stmt, 3, send->account,  -1, NULL);
         sqlite3_bind_text(stmt, 4, send->password, -1, NULL);
@@ -4007,4 +4009,117 @@ int dev_smtp_update_recv(sqlite3 *db, smtp_recv_t *recv)
 
 quit:
     return r;
-}
+}
+
+
+////////////////mqtt/////////////////////////////////////////////
+#define MQTT_MANAGER_TABLE   "Table_MQTTManage"
+int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
+{
+    int i,r;
+    char temp[1024];
+    char *errmsg=NULL;
+    char *table=NULL;
+    int nrow,ncol;
+    char** pResult = NULL;
+    
+    table = MQTT_MANAGER_TABLE;
+    if(!tab_exists(db, table)) {
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "id INTEGER PRIMARY KEY,"
+                            "mode INTEGER,"
+                            "server TEXT,"
+                            "ip TEXT,"
+                            "port TEXT,"
+                            "cid TEXT,"
+                            "user TEXT,"
+                            "password TEXT);", table);
+        r = sqlite3_exec(db, temp, 0, 0, &errmsg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, errmsg); sqlite3_free(errmsg);
+            return -1;
+        }
+
+#ifdef MQTT_SERVER_BUILTIN
+        extern mqtt_server_t DFLT_MQTT;
+        dev_mqtt_update(db, &DFLT_MQTT);
+#endif
+    }
+
+    nrow = ncol = 0;
+    sprintf(temp, "SELECT * FROM %s;", table);
+    r = sqlite3_get_table(db, temp, &pResult, &nrow, &ncol, &errmsg);
+    if(r != SQLITE_OK) {
+        log_e("sqlite handle error: %s \n%s\n", temp, errmsg); sqlite3_free(errmsg);
+        return -1 ;
+    }
+
+    if(ser && ncol>0) {
+        memset(ser, 0, sizeof(mqtt_server_t));
+        
+        ser->id = atoi(pResult[ncol+0]);
+        ser->mode = atoi(pResult[ncol+1]);
+        strcpy(ser->server, pResult[ncol+2]);
+        strcpy(ser->ip, pResult[ncol+3]);
+        strcpy(ser->port, pResult[ncol+4]);
+        strcpy(ser->cid, pResult[ncol+5]);
+        strcpy(ser->user, pResult[ncol+6]);
+        strcpy(ser->password, pResult[ncol+7]);
+    }
+    
+    return 0;
+}
+
+int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
+{
+    int i,r=0,exist=0,cnt=0;
+    char temp[1024];
+    sqlite3_stmt *stmt;
+    char *errmsg=NULL;
+    char *table=MQTT_MANAGER_TABLE;
+
+    cnt = get_count(db, table);
+    if(cnt>0) {
+        sprintf(temp, "UPDATE %s SET id=%d, mode=%d, server='%s', ip='%s', port='%s', cid='%s', user='%s', password='%s', WHERE id=%d;", 
+                table, ser->id, ser->mode, ser->server, ser->ip, ser->port, ser->cid, ser->user, ser->password, ser->id);
+        r = sqlite3_exec(db, temp, NULL, 0, &errmsg);
+        if(r != SQLITE_OK) {
+            log_e("___sw_update_port failed, %s, %s\n\n", temp, errmsg);
+            sqlite3_free(errmsg);
+        }
+        else {
+            exist = sqlite3_changes(db);
+        }
+    }
+
+    if(exist==0) {
+        sprintf(temp, "INSERT INTO %s (id,mode,server,ip,port,cid,user,password) VALUES (?,?,?,?,?,?,?,?);", table);
+        r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
+        if (r != SQLITE_OK) {
+            log_e("___dev_smtp_update_man, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
+            r = -1; goto quit;
+        }
+
+        sqlite3_bind_int(stmt,  1, ser->id);
+        sqlite3_bind_int(stmt,  2, ser->mode);
+        sqlite3_bind_text(stmt, 3, ser->server,   -1, NULL);
+        sqlite3_bind_text(stmt, 4, ser->port,     -1, NULL);
+        sqlite3_bind_text(stmt, 5, ser->ip,       -1, NULL);
+        sqlite3_bind_text(stmt, 6, ser->cid,      -1, NULL);
+        sqlite3_bind_text(stmt, 7, ser->user,     -1, NULL);
+        sqlite3_bind_text(stmt, 8, ser->password, -1, NULL);
+
+        r = sqlite3_step(stmt);
+        sqlite3_finalize(stmt);
+
+        if (r != SQLITE_DONE) {
+            log_e("___sw_update_all, sqlite3_step failed\n");
+            r = -1;
+        }
+    }
+
+quit:
+    return r;
+}
+
+

+ 2 - 0
pro/src/sqlite_handle.h

@@ -144,5 +144,7 @@ int dev_smtp_init(sqlite3 *db, smtp_info_t *info);
 int dev_smtp_update_send(sqlite3 *db, smtp_send_t *send);
 int dev_smtp_update_recv(sqlite3 *db, smtp_recv_t *recv);
 
+int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser);
+int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser);
 
 #endif

+ 4 - 0
pro/src/sys.c

@@ -12,6 +12,8 @@
 #include "file.h"
 #include "lock.h"
 #include "thread.h"
+#include "shell.h"
+#include "common.h"
 #include "sqlite_handle.h"
 
 #if 0
@@ -1015,6 +1017,8 @@ quit:
 
 int sys_init(void)
 {
+    //userShellInit();
+    initLogger();
     lock_s_init();
     
     //thread_start(THREAD_ID_PLUG, plug_thread, NULL, 4*MB, 0);