虚拟机房环境配置

机房环境和其下的烟感,水浸,温湿度等设备,在FsuOS中可以表现为2种形态,主要是为了配合B接口的要求,目前联通和电信的B接口模型中均遇到此场景。

1、默认的配置方式,就像其他电表,电池等设备一样,有个自己独立的设备数据界面,告警规则也是自己独立的规则,送B接口时作为独立的设备。

2、虚拟机房环境配置方式,此时,烟感,水浸,温湿度将不再作为独立的设备,而是将自身信号作为“虚拟机房环境”设备的信号,出告警时都出在“虚拟机房环境”下,送数据时只上送“虚拟机房环境”设备和信号。

下面我们来操作激活“虚拟机房环境”模式:

  1. 在使用网站配置设备时,确认创建了类型为venv设备,可以是自动或者手动创建,并且venv设备具备合法的B接口DeviceID。

  2. 修改SMDDevice.conf文件
    添加一行
    env_mode=1
    激活“虚拟机房环境”模式

  3. 在添加,水浸,烟感,温湿度设备时,逻辑参数需要新增signal_index,表示我的信号是“虚拟机房环境”的第几个信号。
    注意:如果不在“虚拟机房环境”模式下,不要配置”signal_index"参数,会造成无法匹配B接口告警规则。主要由于电信B接口模式下,“虚拟机房环境”模式的信号第一位是2,设备模式的信号第一位是1。

  4. 进行测试验证:
    预期:

  • 网站,虚拟机房环境下,传感器数据显示为信号。
  • 告警显示在虚拟机房环境下,并由最后的索引区分是第几路信号。

驱动的void GeneralTempHumid::RunCheckThreshold()需要特别处理支持此模式

case 2:
        {
            //电信
            if(signal_index_){
                //信号集成到虚拟机房环境的模式
                if(levelMap_["211200070010"])
                    CheckThresholdBool(levelMap_["211200070010"] , "211200070010", "211200070010", "环境温度过低告警", "环境温度过低告警 当前值:" + 
                    boost::lexical_cast<std::string>(cData.temperature), cData.temperature < valueMap_["211200070010"], 1);
                if(levelMap_["211200060010"])
                    CheckThresholdBool(levelMap_["211200060010"] , "211200060010", "211200060010", "环境温度超高告警", "环境温度超高告警 当前值:" + 
                    boost::lexical_cast<std::string>(cData.temperature), cData.temperature > valueMap_["211200060010"], 1);
                    
                if(levelMap_["211200080010"])
                    CheckThresholdBool(levelMap_["211200080010"] , "211200080010", "211200080010", "环境湿度过高告警", "环境湿度过高告警 当前值:"
     + boost::lexical_cast<std::string>(cData.humid), cData.humid > valueMap_["211200080010"], 1);
                
                if(levelMap_["211200090010"])
                    CheckThresholdBool(levelMap_["211200090010"] , "211200090010", "211200090010", "环境湿度过低告警", "环境湿度过低告警 当前值:" +
     boost::lexical_cast<std::string>(cData.humid), cData.humid < valueMap_["211200090010"], 1);
                if(levelMap_["211200050010"])
                    CheckThresholdBool(levelMap_["211200050010"] , "211200050010", "211200050010", "环境温度过高告警", "环境温度过高告警 当前值:" +
                    boost::lexical_cast<std::string>(cData.temperature), cData.temperature > valueMap_["211200050010"], 1);
            } else{
                if(levelMap_["111200070010"])
                    CheckThresholdBool(levelMap_["111200070010"] , "111200070010", "111200070010", "环境温度过低告警", "环境温度过低告警 当前值:" + 
                    boost::lexical_cast<std::string>(cData.temperature), cData.temperature < valueMap_["111200070010"], 1);
                if(levelMap_["111200060010"])
                    CheckThresholdBool(levelMap_["111200060010"] , "111200060010", "111200060010", "环境温度超高告警", "环境温度超高告警 当前值:" + 
                    boost::lexical_cast<std::string>(cData.temperature), cData.temperature > valueMap_["111200060010"], 1);
                    
                if(levelMap_["111200080010"])
                    CheckThresholdBool(levelMap_["111200080010"] , "111200080010", "111200080010", "环境湿度过高告警", "环境湿度过高告警 当前值:"
     + boost::lexical_cast<std::string>(cData.humid), cData.humid > valueMap_["111200080010"], 1);
                
                if(levelMap_["111200090010"])
                    CheckThresholdBool(levelMap_["111200090010"] , "111200090010", "111200090010", "环境湿度过低告警", "环境湿度过低告警 当前值:" +
     boost::lexical_cast<std::string>(cData.humid), cData.humid < valueMap_["111200090010"], 1);
                if(levelMap_["111200050010"])
                    CheckThresholdBool(levelMap_["111200050010"] , "111200050010", "111200050010", "环境温度过高告警", "环境温度过高告警 当前值:" +
                    boost::lexical_cast<std::string>(cData.temperature), cData.temperature > valueMap_["111200050010"], 1);
            }
            
            break;
        }