|
@@ -39,13 +39,13 @@ RETSIGTYPE stop_server(int __attribute__((unused)) a)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType);
|
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 电源数据采集线程
|
|
/// @brief 电源数据采集线程
|
|
|
/// @param arg
|
|
/// @param arg
|
|
|
/// @return
|
|
/// @return
|
|
|
-
|
|
|
|
|
|
|
+static uint8_t channel[32] = {0};
|
|
|
|
|
|
|
|
void* power_thread(void* arg)
|
|
void* power_thread(void* arg)
|
|
|
{
|
|
{
|
|
@@ -63,14 +63,20 @@ void* power_thread(void* arg)
|
|
|
struct timeval tv;
|
|
struct timeval tv;
|
|
|
struct timezone tz ;
|
|
struct timezone tz ;
|
|
|
int nSaveIndex =0;
|
|
int nSaveIndex =0;
|
|
|
|
|
+ int sensor_nSaveIndex = 0;
|
|
|
char strPower[] = "Table_PowerInfo";
|
|
char strPower[] = "Table_PowerInfo";
|
|
|
char strTacPower[] = "Table_PhasePowerInfo";
|
|
char strTacPower[] = "Table_PhasePowerInfo";
|
|
|
|
|
+ char strTable[] = "Table_SensorInfo";
|
|
|
int nSaveTacIndex = 0;
|
|
int nSaveTacIndex = 0;
|
|
|
thread_handle_t *h=(thread_handle_t*)arg;
|
|
thread_handle_t *h=(thread_handle_t*)arg;
|
|
|
GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
|
|
GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
|
|
|
_PowerDSManage_t* _powerDsManageTemp = NULL ;
|
|
_PowerDSManage_t* _powerDsManageTemp = NULL ;
|
|
|
dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower); // 查询日志最大点
|
|
dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower); // 查询日志最大点
|
|
|
dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
|
|
dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
|
|
|
|
|
+
|
|
|
|
|
+ dev_search_last_Index(_globalDeviceManager->db, &sensor_nSaveIndex,strTable);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
InitHashTable(_globalDeviceManager);
|
|
InitHashTable(_globalDeviceManager);
|
|
|
unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product_samp_time;
|
|
unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product_samp_time;
|
|
|
unsigned int usleepTime = samp_time*1000;
|
|
unsigned int usleepTime = samp_time*1000;
|
|
@@ -80,7 +86,20 @@ void* power_thread(void* arg)
|
|
|
int nDeleteNumber=1000/sSaveTime*3600*24*30*10;
|
|
int nDeleteNumber=1000/sSaveTime*3600*24*30*10;
|
|
|
bool isErrorBreak=false;
|
|
bool isErrorBreak=false;
|
|
|
_globalDeviceManager->_ReloadChm_flag=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)
|
|
while (h->quit==0)
|
|
@@ -104,6 +123,10 @@ void* power_thread(void* arg)
|
|
|
sleep(1);
|
|
sleep(1);
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
|
|
+ if (sensor_nSaveIndex > nMaxIndex)
|
|
|
|
|
+ {
|
|
|
|
|
+ dev_change_last_Index(_globalDeviceManager->db, &sensor_nSaveIndex, nsensor_DeleteNumber, strTable);
|
|
|
|
|
+ }
|
|
|
#if (1)
|
|
#if (1)
|
|
|
|
|
|
|
|
memset(&_globalTotalPowerInfo, 0, sizeof(GlobalPowerInfo));
|
|
memset(&_globalTotalPowerInfo, 0, sizeof(GlobalPowerInfo));
|
|
@@ -163,7 +186,15 @@ void* power_thread(void* arg)
|
|
|
}else
|
|
}else
|
|
|
{
|
|
{
|
|
|
//add
|
|
//add
|
|
|
- cnt++;
|
|
|
|
|
|
|
+ //cnt++;
|
|
|
|
|
+ int k = 0;
|
|
|
|
|
+ for( ;k < 32;k++)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!channel[k])
|
|
|
|
|
+ {
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
GlobalPowerManger *Temp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
|
|
GlobalPowerManger *Temp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
|
|
|
if (Temp == NULL)
|
|
if (Temp == NULL)
|
|
|
{
|
|
{
|
|
@@ -178,24 +209,76 @@ void* power_thread(void* arg)
|
|
|
return NULL;
|
|
return NULL;
|
|
|
}
|
|
}
|
|
|
memset(Temp->global_over_manager, 0, sizeof(GlobalOverManager));
|
|
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);
|
|
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_id = dl.slave[i].addr;
|
|
|
Temp->product_saddr = 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;
|
|
Temp->product_ch_addr = 1;
|
|
|
if (dev_insert_power_manage_info(_globalDeviceManager->db,
|
|
if (dev_insert_power_manage_info(_globalDeviceManager->db,
|
|
|
Temp->product_id,
|
|
Temp->product_id,
|
|
|
Temp->product_ch_id,
|
|
Temp->product_ch_id,
|
|
|
Temp) != 0)
|
|
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;
|
|
GlobalPowerManger *tmp,*pos;
|
|
@@ -215,9 +298,27 @@ void* power_thread(void* arg)
|
|
|
}
|
|
}
|
|
|
if(!flag)
|
|
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);
|
|
list_del(&tmp->list);
|
|
|
- cnt --;
|
|
|
|
|
|
|
+ //cnt --;
|
|
|
free(tmp);
|
|
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->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->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->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
|
|
//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);
|
|
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采集线程 继电器控制线程
|
|
//创建modbus采集线程 继电器控制线程
|
|
|
#if(OS_HANDWARE==1)
|
|
#if(OS_HANDWARE==1)
|
|
|
_globalDeviceManager->dev_samp_flag = true;
|
|
_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_POWER, power_thread, _globalDeviceManager, 10*MB, 0);
|
|
|
//thread_start(THREAD_ID_SENSOR, ip_cascade_thread, _globalDeviceManager, 5*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);
|
|
thread_start(THREAD_ID_SHMW, shm_thread, _globalDeviceManager, 5*MB, 0);
|
|
@@ -1260,9 +1454,9 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
|
|
|
websocket_init();
|
|
websocket_init();
|
|
|
appweb_init();
|
|
appweb_init();
|
|
|
|
|
|
|
|
- cascade_init();
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- sensor_or_cascade_init();
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
//netswitch_init();
|
|
//netswitch_init();
|