honeybee-openstudio 2.31.14 → 2.33.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa0a8be909247d7b184dfa868ccd788e8a3ec63c4ae72c83c4645088457d7869
4
- data.tar.gz: f047d5e5ede9ad6ef62979970fe26351adf22b7aadeb3fc189bd7ac2535ef135
3
+ metadata.gz: a1ff38871fe8372492211f52eef8aaa7b35f70dd3f8b86bf0a720ca793a171cd
4
+ data.tar.gz: 75d64bfd82c639cdc2e9effffdacbed361ebf0046d090f1736a1474327fadfc5
5
5
  SHA512:
6
- metadata.gz: 22d507db51b816ac4787921b6aab068b9c0db3878ff70e6466b5a40cc3a00845c9a4b575479b833f42a7ddee90690d90b7cd5a7978509bf72889c28bd7c592ec
7
- data.tar.gz: 3ffb6bfb6485d1c5dbb5462560787d19c8d32bc4fcbabd97870ccc6b6bde26a62d7cd4d67b8942590f164c232c1855ba7342beab73bc9e012fe01f21483cec90
6
+ metadata.gz: 1e56ee08a45f9774dde6621f41f40b5f7235b5742379471758132829cea4879cfbda9caffa0bc5cf1e7f6b56003c9d4401a9b8fc77b477ac65c90284b7f80fa3
7
+ data.tar.gz: 701ceb0b859d3a0090bcb2a84576e74ad55b219fa11365f5c4fa2ed1bb762b79ab7e13a9c1198f39281d73f400e7febd0f053e6696a63db573557d08e34d3cfe
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'honeybee-openstudio'
7
- spec.version = '2.31.14'
7
+ spec.version = '2.33.0'
8
8
  spec.authors = ['Tanushree Charan', 'Dan Macumber', 'Chris Mackey', 'Mostapha Sadeghipour Roudsari']
9
9
  spec.email = ['tanushree.charan@nrel.gov', 'chris@ladybug.tools']
10
10
 
@@ -125,6 +125,17 @@ module Honeybee
125
125
  result = {type: 'Ground'}
126
126
  elsif surface_bc == 'Adiabatic'
127
127
  result = {type: 'Adiabatic'}
128
+ elsif surface_bc == 'OtherSideCoefficients'
129
+ result = {type: 'OtherSideTemperature'}
130
+ unless surface.surfacePropertyOtherSideCoefficients.empty?
131
+ srf_prop = surface.surfacePropertyOtherSideCoefficients.get
132
+ if !srf_prop.isConstantTemperatureDefaulted
133
+ result[:temperature] = srf_prop.constantTemperature
134
+ end
135
+ unless srf_prop.combinedConvectiveRadiativeFilmCoefficient.empty?
136
+ result[:heat_transfer_coefficient] = srf_prop.combinedConvectiveRadiativeFilmCoefficient.get
137
+ end
138
+ end
128
139
  else
129
140
  sun_exposure = (surface.sunExposure == 'SunExposed')
130
141
  wind_exposure = (surface.windExposure == 'WindExposed')
@@ -3,7 +3,7 @@
3
3
  "servers": [],
4
4
  "info": {
5
5
  "description": "Honeybee model schema.",
6
- "version": "1.49.0",
6
+ "version": "1.50.5",
7
7
  "title": "Honeybee Model Schema",
8
8
  "contact": {
9
9
  "name": "Ladybug Tools",
@@ -214,6 +214,11 @@
214
214
  "x-displayName": "EnergyMaterialVegetation",
215
215
  "description": "<SchemaDefinition schemaRef=\"#/components/schemas/EnergyMaterialVegetation\" />\n"
216
216
  },
217
+ {
218
+ "name": "energywindowframe_model",
219
+ "x-displayName": "EnergyWindowFrame",
220
+ "description": "<SchemaDefinition schemaRef=\"#/components/schemas/EnergyWindowFrame\" />\n"
221
+ },
217
222
  {
218
223
  "name": "energywindowmaterialblind_model",
219
224
  "x-displayName": "EnergyWindowMaterialBlind",
@@ -494,6 +499,11 @@
494
499
  "x-displayName": "OpaqueConstructionAbridged",
495
500
  "description": "<SchemaDefinition schemaRef=\"#/components/schemas/OpaqueConstructionAbridged\" />\n"
496
501
  },
502
+ {
503
+ "name": "othersidetemperature_model",
504
+ "x-displayName": "OtherSideTemperature",
505
+ "description": "<SchemaDefinition schemaRef=\"#/components/schemas/OtherSideTemperature\" />\n"
506
+ },
497
507
  {
498
508
  "name": "outdoors_model",
499
509
  "x-displayName": "Outdoors",
@@ -1007,6 +1017,7 @@
1007
1017
  "energymaterial_model",
1008
1018
  "energymaterialnomass_model",
1009
1019
  "energymaterialvegetation_model",
1020
+ "energywindowframe_model",
1010
1021
  "energywindowmaterialblind_model",
1011
1022
  "energywindowmaterialgas_model",
1012
1023
  "energywindowmaterialgascustom_model",
@@ -1063,6 +1074,7 @@
1063
1074
  "nolimit_model",
1064
1075
  "opaqueconstruction_model",
1065
1076
  "opaqueconstructionabridged_model",
1077
+ "othersidetemperature_model",
1066
1078
  "outdoors_model",
1067
1079
  "people_model",
1068
1080
  "peopleabridged_model",
@@ -1404,6 +1416,45 @@
1404
1416
  ],
1405
1417
  "additionalProperties": false
1406
1418
  },
1419
+ "OtherSideTemperature": {
1420
+ "title": "OtherSideTemperature",
1421
+ "description": "Base class for all objects that are not extensible with additional keys.\n\nThis effectively includes all objects except for the Properties classes\nthat are assigned to geometry objects.",
1422
+ "type": "object",
1423
+ "properties": {
1424
+ "type": {
1425
+ "title": "Type",
1426
+ "default": "OtherSideTemperature",
1427
+ "pattern": "^OtherSideTemperature$",
1428
+ "type": "string",
1429
+ "readOnly": true
1430
+ },
1431
+ "heat_transfer_coefficient": {
1432
+ "title": "Heat Transfer Coefficient",
1433
+ "description": "A value in W/m2-K to indicate the combined convective/radiative film coefficient. If equal to 0, then the specified temperature above is equal to the exterior surface temperature. Otherwise, the temperature above is considered the outside air temperature and this coefficient is used to determine the difference between this outside air temperature and the exterior surface temperature.",
1434
+ "default": 0,
1435
+ "minimum": 0,
1436
+ "type": "number",
1437
+ "format": "double"
1438
+ },
1439
+ "temperature": {
1440
+ "title": "Temperature",
1441
+ "description": "A temperature value in Celsius to note the temperature on the other side of the object. This input can also be an Autocalculate object to signify that the temperature is equal to the outdoor air temperature.",
1442
+ "default": {
1443
+ "type": "Autocalculate"
1444
+ },
1445
+ "anyOf": [
1446
+ {
1447
+ "$ref": "#/components/schemas/Autocalculate"
1448
+ },
1449
+ {
1450
+ "type": "number",
1451
+ "format": "double"
1452
+ }
1453
+ ]
1454
+ }
1455
+ },
1456
+ "additionalProperties": false
1457
+ },
1407
1458
  "ShadeEnergyPropertiesAbridged": {
1408
1459
  "title": "ShadeEnergyPropertiesAbridged",
1409
1460
  "description": "Base class for all objects that are not extensible with additional keys.\n\nThis effectively includes all objects except for the Properties classes\nthat are assigned to geometry objects.",
@@ -1667,7 +1718,7 @@
1667
1718
  },
1668
1719
  "discharge_coefficient": {
1669
1720
  "title": "Discharge Coefficient",
1670
- "description": "A number that will be multipled by the area of the window in the stack (buoyancy-driven) part of the equation to account for additional friction from window geometry, insect screens, etc. Typical values include 0.45, for unobstructed windows WITH insect screens and 0.65 for unobstructed windows WITHOUT insect screens. This value should be lowered if windows are of an awning or casement type and are not allowed to fully open.",
1721
+ "description": "A number that will be multiplied by the area of the window in the stack (buoyancy-driven) part of the equation to account for additional friction from window geometry, insect screens, etc. Typical values include 0.45, for unobstructed windows WITH insect screens and 0.65 for unobstructed windows WITHOUT insect screens. This value should be lowered if windows are of an awning or casement type and are not allowed to fully open.",
1671
1722
  "default": 0.45,
1672
1723
  "minimum": 0,
1673
1724
  "maximum": 1,
@@ -2263,6 +2314,9 @@
2263
2314
  },
2264
2315
  {
2265
2316
  "$ref": "#/components/schemas/Surface"
2317
+ },
2318
+ {
2319
+ "$ref": "#/components/schemas/OtherSideTemperature"
2266
2320
  }
2267
2321
  ]
2268
2322
  },
@@ -3517,7 +3571,7 @@
3517
3571
  },
3518
3572
  "multiplier": {
3519
3573
  "title": "Multiplier",
3520
- "description": "An integer noting how many times this Room is repeated. Multipliers are used to speed up the calculation when similar Rooms are repeated more than once. Essentially, a given simulation with the Room is run once and then the result is mutliplied by the multiplier.",
3574
+ "description": "An integer noting how many times this Room is repeated. Multipliers are used to speed up the calculation when similar Rooms are repeated more than once. Essentially, a given simulation with the Room is run once and then the result is multiplied by the multiplier.",
3521
3575
  "default": 1,
3522
3576
  "minimum": 1,
3523
3577
  "type": "integer",
@@ -3902,7 +3956,7 @@
3902
3956
  },
3903
3957
  "solar_diffusing": {
3904
3958
  "title": "Solar Diffusing",
3905
- "description": "Takes values True and False. If False (default), the beam solar radiation incident on the glass is transmitted as beam radiation with no diffuse component.If True, the beam solar radiation incident on the glass is transmitted as hemispherical diffuse radiation with no beam component.",
3959
+ "description": "If False (default), the beam solar radiation incident on the glass is transmitted as beam radiation with no diffuse component.If True, the beam solar radiation incident on the glass is transmitted as hemispherical diffuse radiation with no beam component.",
3906
3960
  "default": false,
3907
3961
  "type": "boolean"
3908
3962
  }
@@ -4065,6 +4119,13 @@
4065
4119
  "pattern": "^WindowConstructionAbridged$",
4066
4120
  "type": "string",
4067
4121
  "readOnly": true
4122
+ },
4123
+ "frame": {
4124
+ "title": "Frame",
4125
+ "description": "An optional identifier for a frame material that surrounds the window construction.",
4126
+ "maxLength": 100,
4127
+ "minLength": 1,
4128
+ "type": "string"
4068
4129
  }
4069
4130
  },
4070
4131
  "required": [
@@ -4655,7 +4716,8 @@
4655
4716
  "type": "WindowConstructionAbridged",
4656
4717
  "materials": [
4657
4718
  "Generic Clear Glass"
4658
- ]
4719
+ ],
4720
+ "frame": null
4659
4721
  },
4660
4722
  {
4661
4723
  "identifier": "Generic Shade",
@@ -4788,7 +4850,8 @@
4788
4850
  "Generic Low-e Glass",
4789
4851
  "Generic Window Air Gap",
4790
4852
  "Generic Clear Glass"
4791
- ]
4853
+ ],
4854
+ "frame": null
4792
4855
  },
4793
4856
  {
4794
4857
  "identifier": "Generic Exterior Door",
@@ -5407,7 +5470,7 @@
5407
5470
  },
5408
5471
  "u_factor": {
5409
5472
  "title": "U Factor",
5410
- "description": "The overall heat transfer coefficient for window system in W/m2-K. Note that constructions with U-values above 5.8 cannot be assigned to skylights without EnergyPlus thorwing an error.",
5473
+ "description": "The overall heat transfer coefficient for window system in W/m2-K. Note that constructions with U-values above 5.8 should not be assigned to skylights as this implies the resistance of the window is negative when air films are subtracted.",
5411
5474
  "exclusiveMinimum": 0,
5412
5475
  "maximum": 12,
5413
5476
  "type": "number",
@@ -5415,7 +5478,7 @@
5415
5478
  },
5416
5479
  "shgc": {
5417
5480
  "title": "Shgc",
5418
- "description": "Unitless quantity for the Solar Heat Gain Coefficient (solar transmittance + conduction) at normal incidence and vertical orientation.",
5481
+ "description": "Unit-less quantity for the Solar Heat Gain Coefficient (solar transmittance + conduction) at normal incidence and vertical orientation.",
5419
5482
  "exclusiveMinimum": 0,
5420
5483
  "exclusiveMaximum": 1,
5421
5484
  "type": "number",
@@ -5649,6 +5712,113 @@
5649
5712
  ],
5650
5713
  "additionalProperties": false
5651
5714
  },
5715
+ "EnergyWindowFrame": {
5716
+ "title": "EnergyWindowFrame",
5717
+ "description": "Opaque material representing a layer within an opaque construction.",
5718
+ "type": "object",
5719
+ "properties": {
5720
+ "identifier": {
5721
+ "title": "Identifier",
5722
+ "description": "Text string for a unique object ID. This identifier remains constant as the object is mutated, copied, and serialized to different formats (eg. dict, idf, osm). This identifier is also used to reference the object across a Model. It must be < 100 characters, use only ASCII characters and exclude (, ; ! \\n \\t).",
5723
+ "maxLength": 100,
5724
+ "minLength": 1,
5725
+ "pattern": "^[^,;!\\n\\t]+$",
5726
+ "type": "string"
5727
+ },
5728
+ "width": {
5729
+ "title": "Width",
5730
+ "description": "Number for the width of frame in plane of window [m]. The frame width is assumed to be the same on all sides of window..",
5731
+ "exclusiveMinimum": 0,
5732
+ "maximum": 1,
5733
+ "type": "number",
5734
+ "format": "double"
5735
+ },
5736
+ "conductance": {
5737
+ "title": "Conductance",
5738
+ "description": "Number for the thermal conductance of the frame material measured from inside to outside of the frame surface (no air films) and taking 2D conduction effects into account [W/m2-K].",
5739
+ "exclusiveMinimum": 0,
5740
+ "type": "number",
5741
+ "format": "double"
5742
+ },
5743
+ "display_name": {
5744
+ "title": "Display Name",
5745
+ "description": "Display name of the object with no character restrictions.",
5746
+ "type": "string"
5747
+ },
5748
+ "user_data": {
5749
+ "title": "User Data",
5750
+ "description": "Optional dictionary of user data associated with the object.All keys and values of this dictionary should be of a standard data type to ensure correct serialization of the object (eg. str, float, int, list).",
5751
+ "type": "object"
5752
+ },
5753
+ "type": {
5754
+ "title": "Type",
5755
+ "default": "EnergyWindowFrame",
5756
+ "pattern": "^EnergyWindowFrame$",
5757
+ "type": "string",
5758
+ "readOnly": true
5759
+ },
5760
+ "edge_to_center_ratio": {
5761
+ "title": "Edge To Center Ratio",
5762
+ "description": "Number between 0 and 4 for the ratio of the glass conductance near the frame (excluding air films) divided by the glass conductance at the center of the glazing (excluding air films). This is used only for multi-pane glazing constructions. This ratio should usually be greater than 1.0 since the spacer material that separates the glass panes is usually more conductive than the gap between panes. A value of 1 effectively indicates no spacer. Values should usually be obtained from the LBNL WINDOW program so that the unique characteristics of the window construction can be accounted for.",
5763
+ "default": 1,
5764
+ "exclusiveMinimum": 0,
5765
+ "maximum": 4,
5766
+ "type": "number",
5767
+ "format": "double"
5768
+ },
5769
+ "outside_projection": {
5770
+ "title": "Outside Projection",
5771
+ "description": "Number for the distance that the frame projects outward from the outside face of the glazing [m]. This is used to calculate shadowing of frame onto glass, solar absorbed by the frame, IR emitted and absorbed by the frame, and convection from frame.",
5772
+ "default": 0,
5773
+ "minimum": 0,
5774
+ "maximum": 0.5,
5775
+ "type": "number",
5776
+ "format": "double"
5777
+ },
5778
+ "inside_projection": {
5779
+ "title": "Inside Projection",
5780
+ "description": "Number for the distance that the frame projects inward from the inside face of the glazing [m]. This is used to calculate solar absorbed by the frame, IR emitted and absorbed by the frame, and convection from frame.",
5781
+ "default": 0,
5782
+ "minimum": 0,
5783
+ "maximum": 0.5,
5784
+ "type": "number",
5785
+ "format": "double"
5786
+ },
5787
+ "thermal_absorptance": {
5788
+ "title": "Thermal Absorptance",
5789
+ "description": "Fraction of incident long wavelength radiation that is absorbed by the frame material.",
5790
+ "default": 0.9,
5791
+ "exclusiveMinimum": 0,
5792
+ "maximum": 0.99999,
5793
+ "type": "number",
5794
+ "format": "double"
5795
+ },
5796
+ "solar_absorptance": {
5797
+ "title": "Solar Absorptance",
5798
+ "description": "Fraction of incident solar radiation absorbed by the frame material.",
5799
+ "default": 0.7,
5800
+ "minimum": 0,
5801
+ "maximum": 1,
5802
+ "type": "number",
5803
+ "format": "double"
5804
+ },
5805
+ "visible_absorptance": {
5806
+ "title": "Visible Absorptance",
5807
+ "description": "Fraction of incident visible wavelength radiation absorbed by the frame material.",
5808
+ "default": 0.7,
5809
+ "minimum": 0,
5810
+ "maximum": 1,
5811
+ "type": "number",
5812
+ "format": "double"
5813
+ }
5814
+ },
5815
+ "required": [
5816
+ "identifier",
5817
+ "width",
5818
+ "conductance"
5819
+ ],
5820
+ "additionalProperties": false
5821
+ },
5652
5822
  "WindowConstruction": {
5653
5823
  "title": "WindowConstruction",
5654
5824
  "description": "Construction for window objects (Aperture, Door).",
@@ -5704,6 +5874,15 @@
5704
5874
  "pattern": "^WindowConstruction$",
5705
5875
  "type": "string",
5706
5876
  "readOnly": true
5877
+ },
5878
+ "frame": {
5879
+ "title": "Frame",
5880
+ "description": "An optional window frame material for the frame that surrounds the window construction.",
5881
+ "allOf": [
5882
+ {
5883
+ "$ref": "#/components/schemas/EnergyWindowFrame"
5884
+ }
5885
+ ]
5707
5886
  }
5708
5887
  },
5709
5888
  "required": [
@@ -5992,7 +6171,7 @@
5992
6171
  },
5993
6172
  "diffuse_solar_transmittance": {
5994
6173
  "title": "Diffuse Solar Transmittance",
5995
- "description": "The slat transmittance for hemisperically diffuse solar radiation. Default: 0.",
6174
+ "description": "The slat transmittance for hemispherically diffuse solar radiation. Default: 0.",
5996
6175
  "default": 0,
5997
6176
  "exclusiveMaximum": 1,
5998
6177
  "minimum": 0,
@@ -6109,7 +6288,7 @@
6109
6288
  },
6110
6289
  "top_opening_multiplier": {
6111
6290
  "title": "Top Opening Multiplier",
6112
- "description": "The effective area for air flow at the top of the shade, divided by the horizontal area between glass and shade. The default value is 0.5",
6291
+ "description": "The effective area for air flow at the top of the shade, divided by the horizontal area between glass and shade.",
6113
6292
  "default": 0.5,
6114
6293
  "minimum": 0,
6115
6294
  "maximum": 1,
@@ -6118,7 +6297,7 @@
6118
6297
  },
6119
6298
  "bottom_opening_multiplier": {
6120
6299
  "title": "Bottom Opening Multiplier",
6121
- "description": "The effective area for air flow at the bottom of the shade, divided by the horizontal area between glass and shade. The default value is 0.",
6300
+ "description": "The effective area for air flow at the bottom of the shade, divided by the horizontal area between glass and shade.",
6122
6301
  "default": 0.5,
6123
6302
  "minimum": 0,
6124
6303
  "maximum": 1,
@@ -6127,7 +6306,7 @@
6127
6306
  },
6128
6307
  "left_opening_multiplier": {
6129
6308
  "title": "Left Opening Multiplier",
6130
- "description": "The effective area for air flow at the left side of the shade, divided by the vertical area between glass and shade. The default value is 0.5.",
6309
+ "description": "The effective area for air flow at the left side of the shade, divided by the vertical area between glass and shade.",
6131
6310
  "default": 0.5,
6132
6311
  "minimum": 0,
6133
6312
  "maximum": 1,
@@ -6136,7 +6315,7 @@
6136
6315
  },
6137
6316
  "right_opening_multiplier": {
6138
6317
  "title": "Right Opening Multiplier",
6139
- "description": "The effective area for air flow at the right side of the shade, divided by the vertical area between glass and shade. The default value is 0.5.",
6318
+ "description": "The effective area for air flow at the right side of the shade, divided by the vertical area between glass and shade.",
6140
6319
  "default": 0.5,
6141
6320
  "minimum": 0,
6142
6321
  "maximum": 1,
@@ -6699,7 +6878,7 @@
6699
6878
  "readOnly": true
6700
6879
  },
6701
6880
  "shade_location": {
6702
- "description": "Text to indicate where in the window assembly the shade_material is located. Note that the WindowConstruction must have at least one gas gap to use the \"Between\" option. Also note that, for a WindowConstruction with more than one gas gap, the \"Between\" option defalts to using the inner gap as this is the only option that EnergyPlus supports.",
6881
+ "description": "Text to indicate where in the window assembly the shade_material is located. Note that the WindowConstruction must have at least one gas gap to use the \"Between\" option. Also note that, for a WindowConstruction with more than one gas gap, the \"Between\" option defaults to using the inner gap as this is the only option that EnergyPlus supports.",
6703
6882
  "default": "Interior",
6704
6883
  "allOf": [
6705
6884
  {
@@ -7152,7 +7331,7 @@
7152
7331
  "readOnly": true
7153
7332
  },
7154
7333
  "shade_location": {
7155
- "description": "Text to indicate where in the window assembly the shade_material is located. Note that the WindowConstruction must have at least one gas gap to use the \"Between\" option. Also note that, for a WindowConstruction with more than one gas gap, the \"Between\" option defalts to using the inner gap as this is the only option that EnergyPlus supports.",
7334
+ "description": "Text to indicate where in the window assembly the shade_material is located. Note that the WindowConstruction must have at least one gas gap to use the \"Between\" option. Also note that, for a WindowConstruction with more than one gas gap, the \"Between\" option defaults to using the inner gap as this is the only option that EnergyPlus supports.",
7156
7335
  "default": "Interior",
7157
7336
  "allOf": [
7158
7337
  {
@@ -8249,7 +8428,8 @@
8249
8428
  "Floor",
8250
8429
  "Ceiling",
8251
8430
  "FloorWithCarpet",
8252
- "CeilingMetalPanel"
8431
+ "CeilingMetalPanel",
8432
+ "FloorWithHardwood"
8253
8433
  ],
8254
8434
  "type": "string"
8255
8435
  },
@@ -10515,7 +10695,8 @@
10515
10695
  "type": "WindowConstructionAbridged",
10516
10696
  "materials": [
10517
10697
  "Generic Clear Glass"
10518
- ]
10698
+ ],
10699
+ "frame": null
10519
10700
  },
10520
10701
  {
10521
10702
  "identifier": "Generic Shade",
@@ -10648,7 +10829,8 @@
10648
10829
  "Generic Low-e Glass",
10649
10830
  "Generic Window Air Gap",
10650
10831
  "Generic Clear Glass"
10651
- ]
10832
+ ],
10833
+ "frame": null
10652
10834
  },
10653
10835
  {
10654
10836
  "identifier": "Generic Exterior Door",
@@ -10792,6 +10974,9 @@
10792
10974
  {
10793
10975
  "$ref": "#/components/schemas/EnergyWindowMaterialGasCustom"
10794
10976
  },
10977
+ {
10978
+ "$ref": "#/components/schemas/EnergyWindowFrame"
10979
+ },
10795
10980
  {
10796
10981
  "$ref": "#/components/schemas/EnergyWindowMaterialBlind"
10797
10982
  },
@@ -13468,12 +13653,12 @@
13468
13653
  },
13469
13654
  "Color": {
13470
13655
  "title": "Color",
13471
- "description": "A mesh in 3D space.",
13656
+ "description": "A RGB color.",
13472
13657
  "type": "object",
13473
13658
  "properties": {
13474
13659
  "r": {
13475
13660
  "title": "R",
13476
- "description": "Integer for red value.",
13661
+ "description": "Value for red channel.",
13477
13662
  "minimum": 0,
13478
13663
  "maximum": 255,
13479
13664
  "type": "integer",
@@ -13481,7 +13666,7 @@
13481
13666
  },
13482
13667
  "g": {
13483
13668
  "title": "G",
13484
- "description": "Integer for green value.",
13669
+ "description": "Value for green channel.",
13485
13670
  "minimum": 0,
13486
13671
  "maximum": 255,
13487
13672
  "type": "integer",
@@ -13489,7 +13674,7 @@
13489
13674
  },
13490
13675
  "b": {
13491
13676
  "title": "B",
13492
- "description": "Integer for blue value.",
13677
+ "description": "Value for blue channel.",
13493
13678
  "minimum": 0,
13494
13679
  "maximum": 255,
13495
13680
  "type": "integer",
@@ -13501,6 +13686,15 @@
13501
13686
  "pattern": "^Color$",
13502
13687
  "type": "string",
13503
13688
  "readOnly": true
13689
+ },
13690
+ "a": {
13691
+ "title": "A",
13692
+ "description": "Value for the alpha channel, which defines the opacity as a number between 0 (fully transparent) and 255 (fully opaque).",
13693
+ "default": 255,
13694
+ "minimum": 0,
13695
+ "maximum": 255,
13696
+ "type": "integer",
13697
+ "format": "int32"
13504
13698
  }
13505
13699
  },
13506
13700
  "required": [
@@ -13539,6 +13733,7 @@
13539
13733
  "type": "array",
13540
13734
  "items": {
13541
13735
  "type": "integer",
13736
+ "minimum": 0,
13542
13737
  "format": "int32"
13543
13738
  },
13544
13739
  "minItems": 3,
@@ -14098,7 +14293,7 @@
14098
14293
  "version": {
14099
14294
  "title": "Version",
14100
14295
  "description": "Text string for the current version of the schema.",
14101
- "default": "1.49.0",
14296
+ "default": "1.50.5",
14102
14297
  "pattern": "([0-9]+)\\.([0-9]+)\\.([0-9]+)",
14103
14298
  "type": "string",
14104
14299
  "readOnly": true
@@ -0,0 +1,42 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/model_object'
33
+
34
+ module Honeybee
35
+ class EnergyWindowFrame < ModelObject
36
+
37
+ def defaults
38
+ @@schema[:components][:schemas][:EnergyWindowFrame][:properties]
39
+ end
40
+
41
+ end # EnergyWindowFrame
42
+ end # Honeybee
data/lib/honeybee.rb CHANGED
@@ -61,13 +61,14 @@ require 'honeybee/construction/air'
61
61
  require 'honeybee/material/opaque'
62
62
  require 'honeybee/material/opaque_no_mass'
63
63
  require 'honeybee/material/vegetation'
64
+ require 'honeybee/material/window_simpleglazsys'
65
+ require 'honeybee/material/window_glazing'
66
+ require 'honeybee/material/frame'
64
67
  require 'honeybee/material/window_gas'
65
68
  require 'honeybee/material/window_gas_mixture'
66
69
  require 'honeybee/material/window_gas_custom'
67
70
  require 'honeybee/material/window_blind'
68
- require 'honeybee/material/window_glazing'
69
71
  require 'honeybee/material/window_shade'
70
- require 'honeybee/material/window_simpleglazsys'
71
72
 
72
73
  # import the load objects
73
74
  require 'honeybee/load/people'
@@ -118,15 +118,25 @@ module Honeybee
118
118
  end
119
119
 
120
120
  # assign the construction if it exists
121
- if @hash[:properties].key?(:energy) && @hash[:properties][:energy][:construction]
122
- construction_identifier = @hash[:properties][:energy][:construction]
123
- construction = openstudio_model.getConstructionByName(construction_identifier)
124
- if !construction.empty?
125
- os_construction = construction.get
126
- os_subsurface.setConstruction(os_construction)
127
- elsif $window_dynamic_hash[construction_identifier] != nil
128
- os_construction = $window_dynamic_hash[construction_identifier].constructions[0]
129
- os_subsurface.setConstruction(os_construction)
121
+ if @hash[:properties].key?(:energy)
122
+ if @hash[:properties][:energy][:construction]
123
+ construction_identifier = @hash[:properties][:energy][:construction]
124
+ construction = openstudio_model.getConstructionByName(construction_identifier)
125
+ if !construction.empty?
126
+ os_construction = construction.get
127
+ os_subsurface.setConstruction(os_construction)
128
+ elsif $window_dynamic_hash[construction_identifier] != nil
129
+ os_construction = $window_dynamic_hash[construction_identifier].constructions[0]
130
+ os_subsurface.setConstruction(os_construction)
131
+ end
132
+ end
133
+ if @hash[:properties][:energy][:frame]
134
+ frame_identifier = @hash[:properties][:energy][:frame]
135
+ frame = openstudio_model.getWindowPropertyFrameAndDividerByName(frame_identifier)
136
+ unless frame.empty?
137
+ os_frame = frame.get
138
+ os_subsurface.setWindowPropertyFrameAndDivider(os_frame)
139
+ end
130
140
  end
131
141
  end
132
142
 
@@ -118,15 +118,25 @@ module Honeybee
118
118
  end
119
119
 
120
120
  # assign the construction if it exists
121
- if @hash[:properties].key?(:energy) && @hash[:properties][:energy][:construction]
122
- construction_identifier = @hash[:properties][:energy][:construction]
123
- construction = openstudio_model.getConstructionByName(construction_identifier)
124
- if !construction.empty?
125
- os_construction = construction.get
126
- os_subsurface.setConstruction(os_construction)
127
- elsif $window_dynamic_hash[construction_identifier] != nil
128
- os_construction = $window_dynamic_hash[construction_identifier].constructions[0]
129
- os_subsurface.setConstruction(os_construction)
121
+ if @hash[:properties].key?(:energy)
122
+ if @hash[:properties][:energy][:construction]
123
+ construction_identifier = @hash[:properties][:energy][:construction]
124
+ construction = openstudio_model.getConstructionByName(construction_identifier)
125
+ if !construction.empty?
126
+ os_construction = construction.get
127
+ os_subsurface.setConstruction(os_construction)
128
+ elsif $window_dynamic_hash[construction_identifier] != nil
129
+ os_construction = $window_dynamic_hash[construction_identifier].constructions[0]
130
+ os_subsurface.setConstruction(os_construction)
131
+ end
132
+ end
133
+ if @hash[:properties][:energy][:frame]
134
+ frame_identifier = @hash[:properties][:energy][:frame]
135
+ frame = openstudio_model.getWindowPropertyFrameAndDividerByName(frame_identifier)
136
+ unless frame.empty?
137
+ os_frame = frame.get
138
+ os_subsurface.setWindowPropertyFrameAndDivider(os_frame)
139
+ end
130
140
  end
131
141
  end
132
142
 
@@ -103,7 +103,7 @@ module Honeybee
103
103
  end
104
104
 
105
105
  # assign the boundary condition
106
- boundary_condition = (@hash[:boundary_condition][:type])
106
+ boundary_condition = @hash[:boundary_condition][:type]
107
107
  case boundary_condition
108
108
  when 'Outdoors'
109
109
  if @hash[:boundary_condition][:sun_exposure] == false
@@ -129,9 +129,28 @@ module Honeybee
129
129
  surface = surface_object.get
130
130
  os_surface.setAdjacentSurface(surface)
131
131
  end
132
+ when 'OtherSideTemperature'
133
+ srf_prop = OpenStudio::Model::SurfacePropertyOtherSideCoefficients.new(openstudio_model)
134
+ srf_prop.setName(@hash[:identifier] + '_OtherTemp')
135
+ if @hash[:boundary_condition][:heat_transfer_coefficient].is_a? Numeric
136
+ srf_prop.setCombinedConvectiveRadiativeFilmCoefficient(
137
+ @hash[:boundary_condition][:heat_transfer_coefficient])
138
+ else
139
+ srf_prop.setCombinedConvectiveRadiativeFilmCoefficient(0)
140
+ end
141
+ if @hash[:boundary_condition][:temperature].is_a? Numeric
142
+ srf_prop.setConstantTemperature(@hash[:boundary_condition][:temperature])
143
+ srf_prop.setConstantTemperatureCoefficient(1)
144
+ srf_prop.setExternalDryBulbTemperatureCoefficient(0)
145
+ else
146
+ srf_prop.setConstantTemperatureCoefficient(0)
147
+ srf_prop.setExternalDryBulbTemperatureCoefficient(1)
148
+ end
149
+ os_surface.setSurfacePropertyOtherSideCoefficients(srf_prop)
132
150
  end
133
- unless @hash[:boundary_condition][:type] == 'Surface'
134
- os_surface.setOutsideBoundaryCondition(@hash[:boundary_condition][:type])
151
+
152
+ unless boundary_condition == 'Surface' || boundary_condition == 'OtherSideTemperature'
153
+ os_surface.setOutsideBoundaryCondition(boundary_condition)
135
154
  end
136
155
 
137
156
  # assign apertures if they exist
@@ -211,6 +211,11 @@ module Honeybee
211
211
  os_surface.setConstruction(interior_construction)
212
212
  end
213
213
  end
214
+ elsif face[:boundary_condition][:type] == 'OtherSideTemperature'
215
+ interior_construction = closest_interior_construction(openstudio_model, os_space, face[:face_type])
216
+ unless interior_construction.nil?
217
+ os_surface.setConstruction(interior_construction)
218
+ end
214
219
  end
215
220
  end
216
221
 
@@ -0,0 +1,102 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/material/frame'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class EnergyWindowFrame < ModelObject
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getWindowPropertyFrameAndDividerByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create frame OpenStudio material
47
+ os_frame_mat = OpenStudio::Model::WindowPropertyFrameAndDivider.new(openstudio_model)
48
+ os_frame_mat.setName(@hash[:identifier])
49
+ unless @hash[:display_name].nil?
50
+ os_frame_mat.setDisplayName(@hash[:display_name])
51
+ end
52
+ os_frame_mat.setFrameWidth(@hash[:width])
53
+ os_frame_mat.setFrameConductance(@hash[:conductance])
54
+
55
+ # assign edge_to_center_ratio if it exists
56
+ if @hash[:edge_to_center_ratio]
57
+ os_frame_mat.setRatioOfFrameEdgeGlassConductanceToCenterOfGlassConductance(
58
+ @hash[:edge_to_center_ratio])
59
+ else
60
+ os_frame_mat.setRatioOfFrameEdgeGlassConductanceToCenterOfGlassConductance(
61
+ defaults[:edge_to_center_ratio][:default])
62
+ end
63
+
64
+ # assign outside_projection if it exists
65
+ if @hash[:outside_projection]
66
+ os_frame_mat.setFrameOutsideProjection(@hash[:outside_projection])
67
+ else
68
+ os_frame_mat.setFrameOutsideProjection(defaults[:outside_projection][:default])
69
+ end
70
+
71
+ # assign inside_projection if it exists
72
+ if @hash[:inside_projection]
73
+ os_frame_mat.setFrameInsideProjection(@hash[:inside_projection])
74
+ else
75
+ os_frame_mat.setFrameInsideProjection(defaults[:inside_projection][:default])
76
+ end
77
+
78
+ # assign thermal absorptance if it exists
79
+ if @hash[:thermal_absorptance]
80
+ os_frame_mat.setFrameThermalHemisphericalEmissivity(@hash[:thermal_absorptance])
81
+ else
82
+ os_frame_mat.setFrameThermalHemisphericalEmissivity(defaults[:thermal_absorptance][:default])
83
+ end
84
+
85
+ # assign solar absorptance if it exists
86
+ if @hash[:solar_absorptance]
87
+ os_frame_mat.setFrameSolarAbsorptance(@hash[:solar_absorptance])
88
+ else
89
+ os_frame_mat.setFrameSolarAbsorptance(defaults[:solar_absorptance][:default])
90
+ end
91
+
92
+ # assign visible absorptance if it exists
93
+ if @hash[:visible_absorptance]
94
+ os_frame_mat.setFrameVisibleAbsorptance(@hash[:visible_absorptance])
95
+ else
96
+ os_frame_mat.setFrameVisibleAbsorptance(defaults[:visible_absorptance][:default])
97
+ end
98
+
99
+ os_frame_mat
100
+ end
101
+ end # EnergyWindowFrame
102
+ end # Honeybee
@@ -233,6 +233,12 @@ module Honeybee
233
233
  material_object = EnergyMaterialNoMass.new(material)
234
234
  when 'EnergyMaterialVegetation'
235
235
  material_object = EnergyMaterialVegetation.new(material)
236
+ when 'EnergyWindowMaterialSimpleGlazSys'
237
+ material_object = EnergyWindowMaterialSimpleGlazSys.new(material)
238
+ when 'EnergyWindowMaterialGlazing'
239
+ material_object = EnergyWindowMaterialGlazing.new(material)
240
+ when 'EnergyWindowFrame'
241
+ material_object = EnergyWindowFrame.new(material)
236
242
  when 'EnergyWindowMaterialGas'
237
243
  material_object = EnergyWindowMaterialGas.new(material)
238
244
  $gas_gap_hash[material[:identifier]] = material_object
@@ -242,12 +248,8 @@ module Honeybee
242
248
  when 'EnergyWindowMaterialGasCustom'
243
249
  material_object = EnergyWindowMaterialGasCustom.new(material)
244
250
  $gas_gap_hash[material[:identifier]] = material_object
245
- when 'EnergyWindowMaterialSimpleGlazSys'
246
- material_object = EnergyWindowMaterialSimpleGlazSys.new(material)
247
251
  when 'EnergyWindowMaterialBlind'
248
252
  material_object = EnergyWindowMaterialBlind.new(material)
249
- when 'EnergyWindowMaterialGlazing'
250
- material_object = EnergyWindowMaterialGlazing.new(material)
251
253
  when 'EnergyWindowMaterialShade'
252
254
  material_object = EnergyWindowMaterialShade.new(material)
253
255
  else
@@ -61,12 +61,16 @@ module Honeybee
61
61
  end
62
62
 
63
63
  # loop through day schedules and create openstudio schedule day object
64
+ day_schs = Hash.new
64
65
  def_day_id = @hash[:default_day_schedule]
65
66
  def_day_hash = nil
66
67
  @hash[:day_schedules].each do |day_schedule|
67
68
  if day_schedule[:identifier] != def_day_id
68
69
  day_schedule_new = OpenStudio::Model::ScheduleDay.new(openstudio_model)
69
- day_schedule_new.setName(day_schedule[:identifier])
70
+ exist_sch = openstudio_model.getScheduleDayByName(day_schedule[:identifier])
71
+ if exist_sch.empty? # make sure we don't overwrite an existing schedule day
72
+ day_schedule_new.setName(day_schedule[:identifier])
73
+ end
70
74
  unless @hash[:display_name].nil?
71
75
  day_schedule_new.setDisplayName(@hash[:display_name])
72
76
  end
@@ -81,53 +85,55 @@ module Honeybee
81
85
  time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
82
86
  day_schedule_new.addValue(time_until, values_day_new[i])
83
87
  end
88
+ day_schs[day_schedule[:identifier]] = day_schedule_new
84
89
  else
85
90
  def_day_hash = day_schedule
86
91
  end
87
92
  end
88
93
 
94
+ # assign default day schedule
95
+ def_day_sch = os_sch_ruleset.defaultDaySchedule
96
+ exist_sch = openstudio_model.getScheduleDayByName(def_day_id)
97
+ if exist_sch.empty? # make sure we don't overwrite an existing schedule day
98
+ def_day_sch.setName(def_day_id)
99
+ end
100
+ unless sch_type_limit_obj.nil?
101
+ def_day_sch.setScheduleTypeLimits(sch_type_limit_obj)
102
+ end
103
+ values_day_new = def_day_hash[:values]
104
+ times_day_new = def_day_hash[:times]
105
+ times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
106
+ times_day_new.push([24, 0]) # Add [24, 0] at index 0
107
+ values_day_new.each_index do |i|
108
+ time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
109
+ def_day_sch.addValue(time_until, values_day_new[i])
110
+ end
111
+ day_schs[def_day_id] = def_day_sch
112
+
89
113
  # assign holiday schedule
90
114
  if @hash[:holiday_schedule]
91
- holiday_schedule = openstudio_model.getScheduleDayByName(@hash[:holiday_schedule])
92
- unless holiday_schedule.empty?
93
- holiday_schedule_object = holiday_schedule.get
94
- os_sch_ruleset.setHolidaySchedule(holiday_schedule_object)
115
+ holiday_schedule = day_schs[@hash[:holiday_schedule]]
116
+ unless holiday_schedule.nil?
117
+ os_sch_ruleset.setHolidaySchedule(holiday_schedule)
95
118
  end
96
119
  end
97
120
 
98
121
  # assign summer design day schedule
99
122
  if @hash[:summer_designday_schedule]
100
- summer_design_day = openstudio_model.getScheduleDayByName(@hash[:summer_designday_schedule])
101
- unless summer_design_day.empty?
102
- summer_design_day_object = summer_design_day.get
103
- os_sch_ruleset.setSummerDesignDaySchedule(summer_design_day_object)
123
+ summer_design_day = day_schs[@hash[:summer_designday_schedule]]
124
+ unless summer_design_day.nil?
125
+ os_sch_ruleset.setSummerDesignDaySchedule(summer_design_day)
104
126
  end
105
127
  end
106
128
 
107
129
  # assign winter design day schedule
108
130
  if @hash[:winter_designday_schedule]
109
- winter_design_day = openstudio_model.getScheduleDayByName(@hash[:winter_designday_schedule])
110
- unless winter_design_day.empty?
111
- winter_design_day_object = winter_design_day.get
112
- os_sch_ruleset.setWinterDesignDaySchedule(winter_design_day_object)
131
+ winter_design_day = day_schs[@hash[:winter_designday_schedule]]
132
+ unless winter_design_day.nil?
133
+ os_sch_ruleset.setWinterDesignDaySchedule(winter_design_day)
113
134
  end
114
135
  end
115
136
 
116
- # assign default day schedule
117
- def_day_sch = os_sch_ruleset.defaultDaySchedule
118
- def_day_sch.setName(def_day_id)
119
- unless sch_type_limit_obj.nil?
120
- def_day_sch.setScheduleTypeLimits(sch_type_limit_obj)
121
- end
122
- values_day_new = def_day_hash[:values]
123
- times_day_new = def_day_hash[:times]
124
- times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
125
- times_day_new.push([24, 0]) # Add [24, 0] at index 0
126
- values_day_new.each_index do |i|
127
- time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
128
- def_day_sch.addValue(time_until, values_day_new[i])
129
- end
130
-
131
137
  # assign schedule rules
132
138
  if @hash[:schedule_rules]
133
139
  @hash[:schedule_rules].each do |rule|
@@ -145,12 +151,10 @@ module Honeybee
145
151
  openstudio_schedule_rule.setStartDate(start_date)
146
152
  openstudio_schedule_rule.setEndDate(end_date)
147
153
 
148
- schedule_rule_day = openstudio_model.getScheduleDayByName(rule[:schedule_day])
149
- unless schedule_rule_day.empty?
150
- schedule_rule_day_object = schedule_rule_day.get
151
-
152
- values_day = schedule_rule_day_object.values
153
- times_day = schedule_rule_day_object.times
154
+ schedule_rule_day = day_schs[rule[:schedule_day]]
155
+ unless schedule_rule_day.nil?
156
+ values_day = schedule_rule_day.values
157
+ times_day = schedule_rule_day.times
154
158
 
155
159
  values_day.each_index do |i|
156
160
  openstudio_schedule_rule.daySchedule.addValue(times_day[i], values_day[i])
data/lib/to_openstudio.rb CHANGED
@@ -61,13 +61,14 @@ require 'to_openstudio/construction/air'
61
61
  require 'to_openstudio/material/opaque'
62
62
  require 'to_openstudio/material/opaque_no_mass'
63
63
  require 'to_openstudio/material/vegetation'
64
+ require 'to_openstudio/material/window_simpleglazsys'
65
+ require 'to_openstudio/material/window_glazing'
64
66
  require 'to_openstudio/material/window_gas'
65
67
  require 'to_openstudio/material/window_gas_mixture'
66
68
  require 'to_openstudio/material/window_gas_custom'
69
+ require 'to_openstudio/material/frame'
67
70
  require 'to_openstudio/material/window_blind'
68
- require 'to_openstudio/material/window_glazing'
69
71
  require 'to_openstudio/material/window_shade'
70
- require 'to_openstudio/material/window_simpleglazsys'
71
72
 
72
73
  # extend the load objects
73
74
  require 'to_openstudio/load/people'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybee-openstudio
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.31.14
4
+ version: 2.33.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanushree Charan
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2022-08-08 00:00:00.000000000 Z
14
+ date: 2022-09-13 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -236,6 +236,7 @@ files:
236
236
  - lib/honeybee/load/setpoint_humidistat.rb
237
237
  - lib/honeybee/load/setpoint_thermostat.rb
238
238
  - lib/honeybee/load/ventilation.rb
239
+ - lib/honeybee/material/frame.rb
239
240
  - lib/honeybee/material/opaque.rb
240
241
  - lib/honeybee/material/opaque_no_mass.rb
241
242
  - lib/honeybee/material/vegetation.rb
@@ -318,6 +319,7 @@ files:
318
319
  - lib/to_openstudio/load/setpoint_humidistat.rb
319
320
  - lib/to_openstudio/load/setpoint_thermostat.rb
320
321
  - lib/to_openstudio/load/ventilation.rb
322
+ - lib/to_openstudio/material/frame.rb
321
323
  - lib/to_openstudio/material/opaque.rb
322
324
  - lib/to_openstudio/material/opaque_no_mass.rb
323
325
  - lib/to_openstudio/material/vegetation.rb