Skip to content

Project Haystack Conformance

Anya Petersen edited this page Mar 23, 2021 · 2 revisions

By default, Alfalfa is configured to conform to Project Haystack standards in two ways. Kicking off a fully Haystack-tagged and interactive virtual building is as simple as uploading and hitting "Run". Both actions can be triggered either via API or GUI.

REST API

Alfalfa implements the Project Haystack REST API endpoints for reading and writing data from building energy models as they run. This enables Haystack-enabled controllers to run seamlessly against a fully virtual building.

OpenStudio Objects into Haystack Points

Alfalfa enables automated generation of Project Haystack metadata for OpenStudio haystack-measure, when run after creating a typical OpenStudio model (via Create DOE Prototype), will generate the following:

  • model.getBuilding -> 'site' entity
  • model.weatherFile.get -> 'weather' entity
  • airloop = model.getAirLoopHVACs -> 'ahu' entity
    • discharge_air_node = airloop.supplyOutletNode -> Node Points added to 'ahu'
    • sc = airloop.supplyComponents
      • If not UnitarySystem:
        • oa_damper = sc.getControllerOutdoorAir -> Add OA damper points to 'ahu'
        • mixed_air_node = sc.mixedAirModelObject -> Node Points added to 'ahu'
        • outdoor_air_node = sc.outdoorAirModelObject -> Node Points added to 'ahu'
        • return_air_node = sc.returnAirModelObject -> Node Points added to 'ahu'
        • relief_air_node = sc.reliefAirModelObject -> Node Points added to 'ahu'
        • if sc.to_Fan_ConstantVolume -> Constant Volume Fan added to 'ahu'
        • if sc.to_FanVariableVolume -> Variable Volume Fan added to 'ahu'
        • if sc.to_FanOnOff -> Variable Volume Fan added to 'ahu'
        • if sc.to_CoilCoolingWater -> 'ahu' typed as chilledWaterCool, ref to plant loop created
        • if sc.to_CoilHeatingWater -> 'ahu' typed as hotWaterHeat, ref to plant loop created
        • if sc.to_CoilHeatingWater -> 'ahu' typed as hotWaterHeat, ref to plant loop created
        • if sc.to_CoilHeatingElectric -> 'ahu' typed as elecHeat, ref to plant loop created
      • If UnitarySystem:
        • Similar to if not UnitarySystem
    • dc = airloop.demandComponents
      • tz = dc.to_ThermalZone -> 'zone' entity created, zone points created
      • equip = tz.equipment ->
        • equip.to_AirTerminalSingleDuctVAVReheat -> 'vav' entity created, 'ahu' typed as 'vavZone', equipRef to 'ahu' created
        • rc = equip.to_AirTerminalSingleDuctVAVReheat.get.reheatCoil
          • if rc.to_CoilHeatingWater -> 'vav' typed as 'hotWaterReheat'
          • if rc.to_CoilHeatingElectric -> 'vav' typed as 'elecReheat'
        • equip.to_AirTerminalSingleDuctUncontrolled -> 'ahu' typed as 'directZone', equipRef to 'ahu' created

Node Points

  • Air Temp Sensor (READ)
  • Air Pressure Sensor (READ)
  • Air Humidity Sensor (READ)
  • Air Flow Sensor (READ)

Outdoor Air Points

  • Outside Air Damper CMD (WRITE)
  • Outdoor Air Damper Sensor Position (READ)
  • Outside Air Mass Flow Rate

Zone Points

  • Zone Air Temp Sensor (READ)
  • Zone Air Humidity Sensor (READ)
  • Zone Air Heating Sp
  • Zone Air Cooling Sp

Zone Equipment Points

  • Entering Air Temp Sensor (READ)
  • Discharge Air Temp Sensor (READ)

See the SmallOffice and MediumOffice files for more information.


Model Configuration

Openstudio

Tutorials

Guides

Reference

Modelica

Guides

Alfalfa Interaction

Tutorials

Guides

Reference

Explanation

Alfalfa Development

Guides

General

Reference

Explanation

Clone this wiki locally