机房环境和其下的烟感,水浸,温湿度等设备,在FsuOS中可以表现为2种形态,主要是为了配合B接口的要求,目前联通和电信的B接口模型中均遇到此场景。
1、默认的配置方式,就像其他电表,电池等设备一样,有个自己独立的设备数据界面,告警规则也是自己独立的规则,送B接口时作为独立的设备。
2、虚拟机房环境配置方式,此时,烟感,水浸,温湿度将不再作为独立的设备,而是将自身信号作为“虚拟机房环境”设备的信号,出告警时都出在“虚拟机房环境”下,送数据时只上送“虚拟机房环境”设备和信号。
下面我们来操作激活“虚拟机房环境”模式:
在使用网站配置设备时,确认创建了类型为venv设备,可以是自动或者手动创建,并且venv设备具备合法的B接口DeviceID。
修改SMDDevice.conf文件
添加一行
env_mode=1
激活“虚拟机房环境”模式
在添加,水浸,烟感,温湿度设备时,逻辑参数需要新增signal_index,表示我的信号是“虚拟机房环境”的第几个信号。
注意:如果不在“虚拟机房环境”模式下,不要配置”signal_index"参数,会造成无法匹配B接口告警规则。主要由于电信B接口模式下,“虚拟机房环境”模式的信号第一位是2,设备模式的信号第一位是1。
进行测试验证:
预期:
驱动的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;
}