OptionalModelObject ReverseTranslator::translateEnergyManagementSystemConstructionIndexVariable(const WorkspaceObject & workspaceObject) { if (workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_ConstructionIndexVariable) { LOG(Error, "WorkspaceObject is not IddObjectType: EnergyManagementSystem_ConstructionIndexVariable"); return boost::none; } OptionalString s1 = workspaceObject.getString(EnergyManagementSystem_ConstructionIndexVariableFields::Name); if(!s1){ LOG(Error, "WorkspaceObject EnergyManagementSystem_ConstructionIndexVariable has no Name"); return boost::none; } OptionalString s = workspaceObject.getString(EnergyManagementSystem_ConstructionIndexVariableFields::ConstructionObjectName); if (!s) { LOG(Error, workspaceObject.nameString() + ": has no ConstructionObjectName"); return boost::none; } Workspace workspace = workspaceObject.workspace(); if (s) { //std::vector<WorkspaceObject> wsObjects = workspace.getObjectsByTypeAndName(IddObjectType::Construction, *s); std::vector<WorkspaceObject> wsObjects = workspace.getObjectsByName(*s); if (wsObjects.size() > 1) { LOG(Error, workspaceObject.nameString() + ": Construction is not unique. More than 1 object with that name."); return boost::none; } if (wsObjects.size() == 0) { LOG(Error, workspaceObject.nameString() + ": Construction not found."); return boost::none; } else { boost::optional<model::ModelObject> modelObject = translateAndMapWorkspaceObject(wsObjects[0]); if (modelObject) { openstudio::model::EnergyManagementSystemConstructionIndexVariable emsConstructionIndexVariable(m_model); emsConstructionIndexVariable.setName(*s1); emsConstructionIndexVariable.setConstructionObject(modelObject.get()); return emsConstructionIndexVariable; } } } return boost::none; }
OptionalModelObject ReverseTranslator::translateEnergyManagementSystemOutputVariable(const WorkspaceObject & workspaceObject) { if (workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_OutputVariable) { LOG(Error, "WorkspaceObject is not IddObjectType: EnergyManagementSystem_OutputVariable"); return boost::none; } //make sure all other objects are translated first except below for (const WorkspaceObject& workspaceObject : m_workspace.objects()) { if ((workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_Program) && (workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_Subroutine) && (workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_ProgramCallingManager) && (workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_MeteredOutputVariable) && (workspaceObject.iddObject().type() != IddObjectType::EnergyManagementSystem_OutputVariable)) { translateAndMapWorkspaceObject(workspaceObject); } } OptionalString s = workspaceObject.getString(EnergyManagementSystem_OutputVariableFields::Name); if (!s) { LOG(Error, "EnergyManagementSystem_OutputVariable has no Name"); return boost::none; } openstudio::model::EnergyManagementSystemOutputVariable emsOutputVariable(m_model); emsOutputVariable.setName(*s); s = workspaceObject.getString(EnergyManagementSystem_OutputVariableFields::EMSVariableName); if (!s) { LOG(Error, emsOutputVariable.nameString() + ": EMSVariableName not set"); return boost::none; } else { Workspace workspace = workspaceObject.workspace(); //look for GlobalVariables, translate and check if there is a name match since GV's dont have name field. boost::optional<WorkspaceObject> wsObject = workspace.getObjectByTypeAndName(IddObjectType::EnergyManagementSystem_GlobalVariable, *s); //for (WorkspaceObject& wsObject : workspace.getObjectsByType(IddObjectType::EnergyManagementSystem_GlobalVariable)) { if (wsObject) { boost::optional<model::ModelObject> modelObject = translateAndMapWorkspaceObject(wsObject.get()); if (modelObject) { if (modelObject.get().cast<EnergyManagementSystemGlobalVariable>().name() == s) { emsOutputVariable.setEMSVariableName(*s); } } } //look for name match on other (EMS) objects. for (WorkspaceObject& wsObject : workspace.getObjectsByName(*s)) { boost::optional<model::ModelObject> modelObject = translateAndMapWorkspaceObject(wsObject); if (modelObject) { emsOutputVariable.setEMSVariableName(*s); break; } } } s = workspaceObject.getString(EnergyManagementSystem_OutputVariableFields::UpdateFrequency); if (!s) { LOG(Error, emsOutputVariable.nameString() + ": UpdateFrequency not set"); return boost::none; } else { emsOutputVariable.setUpdateFrequency(*s); } s = workspaceObject.getString(EnergyManagementSystem_OutputVariableFields::TypeofDatainVariable); if (!s) { LOG(Error, emsOutputVariable.nameString() + ": TypeofDatainVariable not set"); return boost::none; } else { emsOutputVariable.setTypeOfDataInVariable(*s); } s = workspaceObject.getString(EnergyManagementSystem_OutputVariableFields::Units); if (s) { emsOutputVariable.setUnits(*s); } s = workspaceObject.getString(EnergyManagementSystem_OutputVariableFields::EMSProgramorSubroutineName); if (s) { Workspace workspace = workspaceObject.workspace(); for (WorkspaceObject& wsObject : workspace.getObjectsByName(*s)) { boost::optional<model::ModelObject> modelObject = translateAndMapWorkspaceObject(wsObject); if (modelObject) { if (modelObject.get().iddObjectType() == IddObjectType::OS_EnergyManagementSystem_Program) { emsOutputVariable.setEMSProgramOrSubroutineName(modelObject.get().cast<EnergyManagementSystemProgram>()); } else if (modelObject.get().iddObjectType() == IddObjectType::OS_EnergyManagementSystem_Subroutine) { emsOutputVariable.setEMSProgramOrSubroutineName(modelObject.get().cast<EnergyManagementSystemSubroutine>()); } return emsOutputVariable; } } } return emsOutputVariable; }