From 98fb811a4ebe9224519fc08512e2f2897cfd5c40 Mon Sep 17 00:00:00 2001 From: Chris Mackey Date: Tue, 28 Feb 2023 14:33:59 -0500 Subject: [PATCH] fix(loads): Add better default daylight sensor position --- .../icon/HB Apply Daylight Control.png | Bin 973 -> 974 bytes .../json/HB_Apply_Daylight_Control.json | 4 ++-- .../src/HB Apply Daylight Control.py | 7 ++++--- .../HB Apply Daylight Control.ghuser | Bin 6194 -> 6215 bytes .../HB Room Energy Attributes.ghuser | Bin 3856 -> 3928 bytes 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/honeybee_grasshopper_energy/icon/HB Apply Daylight Control.png b/honeybee_grasshopper_energy/icon/HB Apply Daylight Control.png index 68797e3fc9ebb5830c8076202bf687efce8df93d..64320835876cf52605b3c8c95f64fe0581c0e4be 100644 GIT binary patch delta 916 zcmV;F18e-v2hInONPiB)000id0mpBsWB>pIV@X6oR7gv$m0yTdRUF69ICthwHj7FP z^Y5Pj=gw>k+dOP9Wy=;(5NZ!CLJx(gv>>=kfzW&OqK_HWTS%o#MYTZ$zSNsNq(V=M zOCpJwJC3_My8cUl{eE}O?5?I`Bm03bbME(^^ZU;E&AE42pMRvKlqEl2d#sc%xpH}4 zYhCo#+MmeU;d#K@v#7CTB4Zi<**{?reD_2)1KA)=Md9?RQ$T!j@F1*9 zrIyf(lZlT*7^YvQ;<;4;za2Z41Q1hu_mVfAOzuUkTz`AoNxcjEK0(6Mvb)h}Yz#B$ zk9r0Ce*8Fj=aV80y_Wcd=6V!=(ChdB-6qAQ@{Qra;gL)_wZB(D z^Ut&JUOs>AucG?kK-FE`7)#%Ck^{j-&+p7ako;Z;dpIexRHyRB%x2X*Ck%POU4h!5K z?yT&CY&JbkyPzY=QYkn*^8-x(I0NF@Vc5jjFKuD2QUGAU6>h%p%N~sp;uR~^mo&}= z!6-flKUZ_Ph0zTg!7z4fGh?5(bbZ^!a&+qo27lbfHeIgTqjSQJ%yIJ^=^832c0Zc) z(Hg#UFyz;@0VCAd2Bq|0|nI?f8$Be$CZy1GMc!9t`a zihsWO>iZxEAFu=GLO=Wu(=vYRh^fOFZog_q_OoWy9_fB_YDu%KW)mOPLM@^E(*MVR z5L*h?0_&V}cA?}7=OcG_`4mO&P%`mx!9SFWlk)xUE-zJdts6kkL96N>{a)$^3ZV8Z q`W@i-YkzBPpa42C?S}?1_Af>0l7Zm5Ee)Cg0000Mn|~ywlzBg1eyo)5I4-8N z);Vu2FItHABW(b8p}f^TRK!U6p}+hW=)dQb24jry)&ee{&pNFSJI<}QUJSP3%e5{7 z4Eoqx3t)lmWn)1pCA}3>C=}j`q`Yo~oUzt&Z@(NZ_16^}f#K>?Z^ev^jD+Za?k{6# zH<3~kk&yp9AAj5utJJsDj(%fS(RC&hY|NyC{Wu&&?Lc*quch3L#c!&78^xPAA$qgf zY)6<5#xkh@Le!3-A=tEGJ>cyL)L=Z3v6TO9pD+l1cq5&HbdaQ?@Y}U(KzwuP5UfZf z?x7dO6JLigOm3#)nI!=iFIRjpRL!c_7= ztAIlSe0FKTuUD?b#V4ny;Dc%vZm#ZzsiK3Yq72jA z9&fB{gLFDMM7y9P$`T1UKK>Jo{X7oh?LJt|*tt33?ot3?z#VRm_+_ug2=T6!>L`sf zK`?;t!7n|T%=EyjE~qf}Xd`3a*L8V&y*fwvFFj8 z50vnmgCXY!2L}Uhvm4y)hGIl5dGeUM*%=@p?>Kictp2Qai`Q7 zyj;<68$1-HPvTbiVx*-3b?=d=Z4WTSFI@zW*D3rm(h*BEoJH;z-7X4f>It<43z2Fl z`hVw3?}MzoUK@83{eN@{ zu`O#Yu*NxOf8|~FR?$6OI7LNwIG*^raLx-(%6-jU-YV!)Gl1TMdXIbccc~pHfZ8+T pcYx!Q{?_t90d!(!UmC#JGZkr)?1E{!*bD#w002ovPDHLkV1mK5$qoPj diff --git a/honeybee_grasshopper_energy/json/HB_Apply_Daylight_Control.json b/honeybee_grasshopper_energy/json/HB_Apply_Daylight_Control.json index 60d57b19..7bc58430 100644 --- a/honeybee_grasshopper_energy/json/HB_Apply_Daylight_Control.json +++ b/honeybee_grasshopper_energy/json/HB_Apply_Daylight_Control.json @@ -1,5 +1,5 @@ { - "version": "1.6.0", + "version": "1.6.1", "nickname": "DaylightControl", "outputs": [ [ @@ -64,7 +64,7 @@ } ], "subcategory": "3 :: Loads", - "code": "\ntry: # import the honeybee-energy extension\n from honeybee_energy.load.daylight import DaylightingControl\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.togeometry import to_point3d\n from ladybug_{{cad}}.config import conversion_to_meters\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, longest_list, \\\n give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n\nif all_required_inputs(ghenv.Component):\n # duplicate the initial objects\n rooms = [room.duplicate() for room in _rooms]\n\n # set default values and perform checks\n dist_from_floor = 0.8 / conversion_to_meters()\n if len(_sensor_points_) != 0:\n assert len(_sensor_points_) == len(_rooms), 'Number of sensor points ({}) ' \\\n 'must align exactly with the number of rooms ({}).'.format(\n len(_sensor_points_), len(_rooms))\n _ill_setpoint_ = [300] if len(_ill_setpoint_) == 0 else _ill_setpoint_\n _control_fract_ = [1] if len(_control_fract_) == 0 else _control_fract_\n _min_power_in_ = [0.3] if len(_min_power_in_) == 0 else _min_power_in_\n _min_light_out_ = [0.2] if len(_min_light_out_) == 0 else _min_light_out_\n off_at_min_ = [False] if len(off_at_min_) == 0 else off_at_min_\n\n # loop through the rooms and assign daylight sensors\n unassigned_rooms = []\n if len(_sensor_points_) == 0:\n for i, room in enumerate(rooms):\n dl_control = room.properties.energy.add_daylight_control_to_center(\n dist_from_floor, longest_list(_ill_setpoint_, i),\n longest_list(_control_fract_, i), longest_list(_min_power_in_, i),\n longest_list(_min_light_out_, i), longest_list(off_at_min_, i))\n if dl_control is None:\n unassigned_rooms.append(room.display_name)\n else:\n for i, room in enumerate(rooms):\n sensor_pt = to_point3d(_sensor_points_[i])\n if room.geometry.is_point_inside(sensor_pt):\n dl_control = DaylightingControl(\n sensor_pt, longest_list(_ill_setpoint_, i),\n longest_list(_control_fract_, i), longest_list(_min_power_in_, i),\n longest_list(_min_light_out_, i), longest_list(off_at_min_, i))\n room.properties.energy.daylighting_control = dl_control\n else:\n unassigned_rooms.append(room.display_name)\n\n # give a warning about any rooms to which a sensor could not be assinged\n for room in unassigned_rooms:\n msg = 'Sensor point for room \"{}\" does not lie within the room volume.\\n' \\\n 'No daylight sensors have been added to this room.'.format(room)\n print(msg)\n give_warning(ghenv.Component, msg)\n", + "code": "\ntry: # import the honeybee-energy extension\n from honeybee_energy.load.daylight import DaylightingControl\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.togeometry import to_point3d\n from ladybug_{{cad}}.config import conversion_to_meters, tolerance\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, longest_list, \\\n give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n\nif all_required_inputs(ghenv.Component):\n # duplicate the initial objects\n rooms = [room.duplicate() for room in _rooms]\n\n # set default values and perform checks\n dist_from_floor = 0.8 / conversion_to_meters()\n if len(_sensor_points_) != 0:\n assert len(_sensor_points_) == len(_rooms), 'Number of sensor points ({}) ' \\\n 'must align exactly with the number of rooms ({}).'.format(\n len(_sensor_points_), len(_rooms))\n _ill_setpoint_ = [300] if len(_ill_setpoint_) == 0 else _ill_setpoint_\n _control_fract_ = [1] if len(_control_fract_) == 0 else _control_fract_\n _min_power_in_ = [0.3] if len(_min_power_in_) == 0 else _min_power_in_\n _min_light_out_ = [0.2] if len(_min_light_out_) == 0 else _min_light_out_\n off_at_min_ = [False] if len(off_at_min_) == 0 else off_at_min_\n\n # loop through the rooms and assign daylight sensors\n unassigned_rooms = []\n if len(_sensor_points_) == 0:\n for i, room in enumerate(rooms):\n dl_control = room.properties.energy.add_daylight_control_to_center(\n dist_from_floor, longest_list(_ill_setpoint_, i),\n longest_list(_control_fract_, i), longest_list(_min_power_in_, i),\n longest_list(_min_light_out_, i), longest_list(off_at_min_, i),\n tolerance)\n if dl_control is None:\n unassigned_rooms.append(room.display_name)\n else:\n for i, room in enumerate(rooms):\n sensor_pt = to_point3d(_sensor_points_[i])\n if room.geometry.is_point_inside(sensor_pt):\n dl_control = DaylightingControl(\n sensor_pt, longest_list(_ill_setpoint_, i),\n longest_list(_control_fract_, i), longest_list(_min_power_in_, i),\n longest_list(_min_light_out_, i), longest_list(off_at_min_, i))\n room.properties.energy.daylighting_control = dl_control\n else:\n unassigned_rooms.append(room.display_name)\n\n # give a warning about any rooms to which a sensor could not be assinged\n for room in unassigned_rooms:\n msg = 'Sensor point for room \"{}\" does not lie within the room volume.\\n' \\\n 'No daylight sensors have been added to this room.'.format(room)\n print(msg)\n give_warning(ghenv.Component, msg)\n", "category": "HB-Energy", "name": "HB Apply Daylight Control", "description": "Apply simple daylight controls to Rooms.\n_\nSuch simple controls will dim the lights in the energy simulation according to\nwhether the illuminance at a sensor location is at a target illuminance setpoint.\nThe method used to estimate illuiminance is fairly simple and, for more detailed\ncontrol over the parameters used to compute illuminance, the \"HB Daylight Control\nSchedule\" component under HB-Radiance should be used.\n-" diff --git a/honeybee_grasshopper_energy/src/HB Apply Daylight Control.py b/honeybee_grasshopper_energy/src/HB Apply Daylight Control.py index 1b11be11..6425371e 100644 --- a/honeybee_grasshopper_energy/src/HB Apply Daylight Control.py +++ b/honeybee_grasshopper_energy/src/HB Apply Daylight Control.py @@ -61,7 +61,7 @@ ghenv.Component.Name = 'HB Apply Daylight Control' ghenv.Component.NickName = 'DaylightControl' -ghenv.Component.Message = '1.6.0' +ghenv.Component.Message = '1.6.1' ghenv.Component.Category = 'HB-Energy' ghenv.Component.SubCategory = '3 :: Loads' ghenv.Component.AdditionalHelpFromDocStrings = '2' @@ -73,7 +73,7 @@ try: from ladybug_rhino.togeometry import to_point3d - from ladybug_rhino.config import conversion_to_meters + from ladybug_rhino.config import conversion_to_meters, tolerance from ladybug_rhino.grasshopper import all_required_inputs, longest_list, \ give_warning except ImportError as e: @@ -103,7 +103,8 @@ dl_control = room.properties.energy.add_daylight_control_to_center( dist_from_floor, longest_list(_ill_setpoint_, i), longest_list(_control_fract_, i), longest_list(_min_power_in_, i), - longest_list(_min_light_out_, i), longest_list(off_at_min_, i)) + longest_list(_min_light_out_, i), longest_list(off_at_min_, i), + tolerance) if dl_control is None: unassigned_rooms.append(room.display_name) else: diff --git a/honeybee_grasshopper_energy/user_objects/HB Apply Daylight Control.ghuser b/honeybee_grasshopper_energy/user_objects/HB Apply Daylight Control.ghuser index b5da155f9dd332626ba591f954d0885558e6be55..7242a8427d2a4358361fe2e85a3b7a5d97b3796f 100644 GIT binary patch literal 6215 zcmV-N7`W$MS#?-c-S(y%36U5Sh7<%GhHgn|Bn2rMV1S_pW`=H%lF!2Kfk8nj z1*AJf8h-eF_q+FZ?|zIvH2DJkGF1|~JEnfmT2nuQqM|k|>L#QOnqu>ZdSbGr5Ly;B;m=g*H zcl_sV1-6Wnlf4HJ33G6=hXO4j9`-P68x+t2?ubIb?U6tf9HMg?pWcLKo=y`@=pR#BnswmSC+qAVE_2s(OE%Yi2o!HakS(HTHQr-fFtfo0YyPz z_E1YwqJJd{guDLhq)re7Qe>2_H(ZU95 z>0%FM{>u^W2z5jOT^ud%`0u)<4Y7p%os|vT#oiKV4*e_4U2Z%C3hqvDqzeN2r+?UY z{locV$`*e&l-%GvgYXhd3=C`wWqBE0CDn?g*I~MP4+qCZ z+}1RN-l~uu?`PevkJ%H?N!Wv+qtsgDwq!iAWWgo%z-HBe39nyyF?3&ylnPZ98f0)f zzhp=j$i9eBWe!gjk8Trhy;1eM_H`TEsVuT!xeNdy_fE5pFUQV5wYV8%7ZfJ4Ju~$x zPXx6fJWTCOeofEj1%CtBVK)=6R@~$=KOYgkUX{$bZPfupf_sfdo3%?9>!nsin!bDT zehVSXb_SbG%zZb+Bes7}PprbZS@A}t@JN??m2T`juOZp%a>=Ij8ACmow$jy|3xYuK z$={mzrAfDiC#6T_Z|q+Nd6_3&B+i1(KjO8Htpz2kW zn`Dy91M@{7!98p~Bc}R=I=tQc9-xb8Q>i z#-49W{$woxKpHmM4j$VbN-g~|5Y9W4VZ=9|A%7W{pSnwM?RD& zF)(%wiBVK~>3ih8`4*wY*d>aUGLH#a)n)Mr<9JzNM-#05tQ)|9qDhy}CYmNwx_ZU; z$x|qTmuh$e2_hl`Eqy*RzYpVx3@ibLQeaYe5cWJs{yGvE*uHT4y=+U@#Vs(leBFKQ zx2XC?>+SXa?b*#>hf4(ulsl>f5Mwejeo*s@J6Y&pHXRm-9@PnL}hV!=xT2YHLnF*Ocx zf;})EykwEljgN~21D3U@UR&MX1W0%9QD3=gAx_t)&Jnk{x(r8;iX`P`a-39JB?T1{ zwcVfh#E;0}QP;*)2#%AnFxb}3mLDD-3fVP|4}N7zJHF_){^D4%clq|mS$das_Gh&+MqrUbfE^W-{d+GOG}M;UP{gKeNh=qPA>l>n&t@ZqtQh! zO^i{Zb=-C95qQB>y|bS}cSoc9q}tD8d6g2hmYwpjY^U>pz!9pjnM3pCcl7b%58ABW3jCBP)m zib@4>B-`#`ul*ZxurfUp-qf+v*4VQc9ck(7L~)Khbg80Nmthh-y&nxo4}0m#&jQ#j z6G(q55h}Ny1E6S^eME9V$Q$2{HdyiC=jRPtj_dcA=EMaD_MrH+GI?d+H44@Er_qEl zv7oDl9=6QGT%;*3K~dsVJBNy^F7p!umn^mAbo6gxNG*z7ZQf&2~B8@m0f z;MJ|}2e#g+g*_7fhJia3g?xFBEQLWs16p#b0&YV$wwfs{aqr*L1b#xGRp<9ku$oU+ z^;}sac?rc$Nxo_2Ve9kznhwivmX^vl7mz>aT+7Dhq)-V!F)KghQW5CRkw5hIFHMkR zFQyxUMPrGCPvWp%($Yu^Xt^rWYKC~n8^~3c(MR=LmH^YeyWb}s2J^-9%H^8yV3I() zbk!Mk{0UNNtLQ#p2StwB%uc1nTavVlzmO)+yl3ZLvvTA=nHhO07rt)B!=`rl1^Af) zSS|)mjValQ<@46;DpA$*53~rcHuN7=6MVU~<2hZJ^BK5Po@}PhvQ<`1iJ_XOJ0hh% zW!x(j=E*(5O&FlaUOGI+ZO^L*%OU=d6e1C;6{gEJ%p$0qdX8IHW+=d!mSr6&u><75 zcYQH=j*Sx%z#e0NuAE|O{bla^fR?oa@@hq%F4DTM!*J~^p$L5k7B z%lhcJ#vZcVqEI2slvYcFF#$KAUZh=M7Lc=qoGZTQtq`|#{+gwdV0GBeIu$cKY|Qg$ za);oIn#y8K@VQeu#f%0opY99I5yD#--jmjs^#NF(9JMGz3q{;-q%}s53dlhP@&UHJ z@nwZ!!vtR`yW=X~U_PeB3~g8A`2{iMXKc{;JQe9#F#EYrAU9AXmsTL=B8RATvA{Q0 z;buQc>$>2n^|Y107JW_Y>@bIJv05Vbu9Ve~Ck{2vjIC-}k5XST2@h_fQmV4J5W@&p zq9|n&#MwAh$*oM!#vmxHv?T#B$6>(GH!8xJY6d(%XY2VkBXdK}2IS87gYt&6%JjaN zZlgVtccw#q7VC*HBQ9zTtOwcEl9F(?7YyflVP{N{0;azqPuQnSv7$gDvV;>;W%QvF z--VcZAC3viWEUq0tDBJAvz|{B`Q+Or$%Cc*l=Wc~$5d%x0ZDO2Bmrvm<_QZ-Y~-W7 z0(0L8g-zY7WOlU>PTR(a~foq}4Ef!Hj8#5l36%_o1i% zjS5rDo?+Ny!A_>P)-Q>YMpifpU6sVDIaT_Vm0PXw!aZF0cM@}AsCOeaK1_VXP}f9i zEl?NKscT@N^pK7|SXY6&_iNtXUn|??6lf>+qAZnDM>wluXmETk@U|(>krri>K#wb@ zx@gB@Kd$WvDfr1+p~qKdPeLHP^X;8seSNfyI+hSbBjbVR06`#o$l_CFqZTsrYpJYc zZHG%78%uYew}s(~a-zghMS71#n84xGu_x2l`-gSnH3QKdD+w5qd7YR84Vo-Uw$s9Svaw0FQoX$l zsFXB{3ML91HKB;&Qitz8y2cch zR=N#r&q)eXwXE`zS_Xk=BU&5pQV_uZOIpd1v;9}QLOMks1*;BjI@&^h*xQU= z;>s1hfIm}ZyKa%w`5i%L>s!K&=iE`7@vCYzL~K?>(Dx|O{hOnVqI5EWs8|vpMq@Wg z)_sbHqOZ2RHKvN0URKHOA_Pk|5x{2PG7Ji8@}7Wlg#$~L(rO%t9n$0DROq+6YgL!M z3*cXWJgkVkxupSg<!(6y6nEPNKqu2~0RK?9Yw3v+ElS z#HgJ@QbM$NDWPmJ&nFhTZayN6m~6zcsFKVgB|69$9I+VqRaK81ro{=Y?1OQm`OfAN zyv6H-{OGY>(JZ|%a&vWV95|Y8|Mp&u#6xS7ibgkl?9G?R&e>-RI!4y(hm?hrY~u&yQ_KHGtJ_Ynyx`Eim(WZU5P)&N5Z$5(yd zT;}rzT_ZR7X4iZqtBw^1w!6GrPosnN3b~$lqU}aIs_e7ej&|M#VI8|=OPC(?-!^x3 z)k2PFZjY{y_3uI5+kOw7@1b^Q-ih93xo&RNL46*VU!l(W$v!{H1MF~3?_`7DJKVdS z&dbiPoH@F1bw_M%5IPe#E{Q_Vn_7N9Yb?7CxILShs!$i-PnUGNh8dqPJ}T+F%z72R zP|;DmuG_liz4z+;D!mWcn)R@eV=v2j@2MxcAJ>XODY4R|m}a>3X}7rSNfDOjq00E7{W{PMTteTcL|V(S?|Sv5a=d$pS~~ z(@K+>wWz9rsL;ew#mxNg&+2^7*-ov;H5S|k2mCrWDhx&|zlX-C?7u)Zk9`7>wDTi= zsuE_T?0T@5EpEJU8bV*+C9JIMMO5 zyaKL!zTE5r5}ikG>qq`8!U zhnM+IABgAL(ZtO6qpDwr*ZEPI-l$jBmfK3e@0PDI*`oIi&VS$!>XEg&zd)~Aq{O$q z+dpYje>EK1I_TX{_hP!*t}bONlU95C>|!b0CmL~EGQZk}9E$VY@4G&$H_0gKbm}xa zZ8P$G$uleEFj~qGQ@p>$=e79OWlHBI$mY1WfO20^l2M`yhO*Y}sbVm^KvnbG%Sue$aVopGD(5Ocnq#15iq z_d_X@ollM9t%9;W*neNt?jgm*@$t5%JFgbkla-x+hTb|Y71!dc@Yu~~bT!$Z{|rFa zGGc_miJ`AqIvB{!~I zser&8=@M64IgBow1@C0X+RA4ln4R@v4LIS5^8oMJ)v#FZ&3vhq(=TlIM!z&6d8oy` z#n(S1A_SS$VI7?3^t`Q)zrHN9cEHc)wG>D$;D{G2g&>9lL_J7`$0oD9^}K4RqjnCh zpFV3i-J2Syi&2w01GYJ}NHMqs9SRB4#&q_$&(TK?&YQKH-2Yi)yCuA-Zn>Ky1=np~ z*_4wTZOR1v{?h1H2hf21Z5Axw^X#I!uf^r#eya;QkJ!~2yi0w+0>u;g zvHv9G$moG1gsaj@j=tHi4&xy4aD$qP zm9dLPo;DylPnCkFlK?$AO4j7Nlsk~}(9pLgH#mjPaSKbX-(NC7>Smc@KYxH8Z@i=` z>hcU!w75fsh#)t$k|p##aq_V|3S_zbv1KUWweOewa6is%&8qh#$g0mJ0c<>1Z{BPg z;n))#M{Pn0Ll4AKWt@DVkv8<)%+~{X)=#fSPq$4_fN|XL`CRcr+OsYjt2X*tLSJwT z2AgG`+jDbc$qo9QU|e0VaRueGUrWMg=0CeFB=6Gs@MAU?&R|>>gE8`rz!*)>e_Sl2 zO*ex+N4QxUuA8cD&j-VzEul!IQxzcbR^&l%{7g&J=?f_lTW=+Genxu55*QOs zS843*jJ?t>I7D~uB}wUk7Eg!8m-zQ0pBC66!eTAvQjDEGdS2vOlero-G$dTE#wOZ% zI*>E1rVsk*oQX_uO93L!!e9#C+%N!R*V*z*Rr1Ll+=?*rmUgbzUw~}@c>m@F-?HnY z5mII5H8**RcqM`!I1#I22JWyji_&ZZvy!cmFWcU9Wsd@mbjIOvY6+$|a;LPR8WV{pp<&(&bT3z%lSYLdTh(W30b3ydV zr|-heVzlUu(=o=DUBh9MK5CR`_1T$S-*`qO18E$UuV%q_U6Q)GLgj>OJ}-eQ6Y+@_ znjP@t$NdbQ!jGs&i`l*87rGhz?3bp7!hV;XN*amrSW6!+Z*slZF@2Y1R;#bJlHZUz l^w_S#yjt=TV8?y$7K>QN#r%K&MiB7>#l(PWaEK-H{{Wq;PDB6z literal 6194 zcmV-27|rKhS$8;G-S*bYjGj>wGJ0|qQFoT3W*V;2G~;r zOnjZ){=xnmfU$HUjt@lRZ^qq8##4MTXjUNKVx zaBlD`82T^l6^kzt;pOP%3j~%j%Ms-T_rijGyS#c(W|lujL3Z_A#3`R%O@tVzwi>~U z;Ts!&7+h5iRIlz*GVt7y^v|8~*0I765YTk}F~VL{IgEgS7^bVCYN~UuCey&p)B@DI zAcy*9;2R$0ms5*-H{XWhqwcmUx$dDZQUo?*j=IYn$07;NaVT80Ye8gNkKU)Zp+;6{ z(RCWMPCU9fn(1UzVphr8%TwHwyt)5G7MC`;xvul@hwJXIcMnEFc5{Et%OM$<)mFFt z_s7(#CGqDOP$7?+51KyhlBR@mwJ(rcv5&p|(xK+A4@a zf>2I!d&96>2=R@iQU)>q^3E{A)9nef(AWG%7h@W|y3-@a`?e>qY11fmT6}~67PYp7 z%fBMX9d$*HDcU6RPVe~JonwTaTGM&|{?aTE%JQ`#`fa@%T38Q1uB}zhx&2Fm(r|EC zuk_{nd)@C4jNVJjng_p=;@sx9NIR2K2A7OB9lKV~`uIU6!KV?!%fyEXpl`tB2Q7ht z*Y>Ah*AP{HMs>_%&z9`1n)h0Z@UDFsp)+i!AD)vyKA( zp2DeA!bM(FW+lg^S_lr8=f3zw?vq>pcqxP?{xdU~Z97&_=#IQH>0@EWH#51>f(so$ zyC_6ivb1@V>Mhor&+d=X`#MR=$vkA}fg}>!&k*M){d|y5PAfnlv3LiVGz&-ZF9y{x z9cZ&Xw|z}p5Fz!!)V&3T2Xtf)O?*oFscw)d`?bH}`HAErYtx3EaY6oS3oebcAcdo- z$f>r7WlMNTkzD=v`raO{X6K88i|i?<{@FLY$h9L@ruWJs^B~esW8BJjFX9XRHkAA| zJ{$XRuOZ&rj(cBMS}H{v3wuhAzYonj(wS`PWpTao3d==jXaWpdh^<2X3Xc&`Py(I3G%n!vGrb{#KpJ<=pT{Rq zMI(Yn*PdO1UX?kUcw*Ag*ot?O9X@tM4hv~y_yIt?U0QJrodxv&a935|I7p6Z1zu zZZi-N>{wG`L1rzxbQGhUB2uT8kM8-WB=H$o!VuK6x)iZ4Qj|_Qbrsl!-50vPW;SN| zC664YHO%*yZqaZ9SRN6NIf7XIurA(9F#`g$M&=8|9OW@IF}H~K-o36=F#DPh=2?+{ zDisW&Xg+y&d6B(mzq{k{l*h5Y?m%{0&_2R2ydUOHu97cB$~?SwL8#y!l`70lUVJ00 zw^J_x*_RaeCNz32)rM}2q&<(3bUr#DcPS;`_06+xy}n!Z0^;(WN-UXyOX9MFjwJ6c z5(KzA*_Yv@0JRLk(+IAu{eiw^eJ$>Btpt75fCOPn)*sKHs*60rbeWWdJOPggzN^`l zv2oKYO4=mek5PqK8lDc=CGauntNFdY9#51P6Ce_9su`x2ZRXTM zy`H7_HfqtCSvk!BFOHYfSmv^!u!UU0^N6v<&@=SG2+*h+@B$q3P^O94l zCuO?HjdAjf-i-==+b!OaXF&jI(=D=MOt5T<6~zm*3ig0_vRW(>%TiJ*e^F{P8fXYt zrP5RTX|kCyCw*A*Flr>QE2JSios{4j8Mj=OU|is1h7=Wp#W8op+0wGh7nd9XRuExzxuK_4M(=h+`!3(_>r(4LhhE zv>I2mQ5DKH8CpppvY1?NCp&WezvRg&$Fxi`ZAE4^-w{bdzvgLzmeV-(d*R|a5117wvA9w&%k_~0Y0 zZv?PWvekxQKpnbtRVk~kPY8_TS3#1`sPLMFc@Ab$Y_a{`s;2l*3;GpWS01M*wK-8D zs?yN)vMvxpZ0V%ON}c=U?5 zqlNS0r)iCo1M+w|fAn$j&aghBE)`Ti5 zT{ROoB{?ob0-k&|%C`t@O6be&p(#o8F-K6Qg#(&N#<62jq;45cs4B>0Qi-bdSE(ng z?%7qc6E3{19%(+K;CP|kM4UkN=~@Q5Bg8s1u8a}+ER-WoMIU=La z#K5-1yEpW$go9KB=U5wA3qNalx3VYb`@SrsT0fRlKjy9j_nBKm8MTD&@VW^;(|E5pTkm6J zSNJitJRxQU%=NXxy3mo9t85eE?%C!rL&d+eY7`!}%1jp!>`IPTrwgmg`JL6lQ$#_j zqPgYN7qdONQRWw3TF9i2AVt_ud0uBR_t#C=93i80p>?xF4o&8ndJx`j7hvaAwWzvr z39<>&aj;MtLazsFW56!W*WiyrBbY zC{zmb(KUA45n~?8rpk_x50S~J6X~=fLK5WUh;XE8RCC6wURR5tpQeAS%D!!8vuk=( z9^nDk>Fv<+40eaKxplchizv(zo6KO@{`d zOQJMZz&oaZN;d!z?UQkK_sCa?jMPLj&Rrx@htb9)jgeuZR$l`o(4^-#L<=@kDZzc- zv-Nt6$x$c;q34-=uR7B7zl78^;t?+oxuOzeJ9YT0w)71M)N zP=@I<5U6iwvqBr0BRa8_W}G(Pwwg{7Tea&@a z68*9G=aon$AG+GR+Dg(e>MoH_64a1up<*iu1B25#3@%-dEm`@g-zJy{NvS_q^;acC zExY7MOGtfO_m}<@_-KZLyP<4@!ppz}pm@KYx7zIkP;$axlXWBNF_?PsaN=h`#|rh4 z9iaNtR%BfjG2;TEoiHlNNWuWg+Owg>lCI-yqShHjXt$~qCJK=A)VkX&H>6p2Ezw%e zT6M8sB&*t;)WKFPnh)7mNCzJvR061Vg-_=EdY_UVKE0YD0G6$mD2frIES9*t!oPpJ zMFn7(Z{P2UwiMo+nxml+BTW%Qraq2RoE*4Yx_F<7SN&yLfpa(w2OCYMO4y{q1Cxj- zs$tK{z@-#H*XLS7>T6?HP09p0)$uj!*GIBM@3Djx_6>spcd1^^Qz`v6qeEbFQVgXW z*W6!b3_mpJp?bHTY7G<@l}(LO$2InuhPxaF8r`<*juLCkKQvVxF5GNmF0Va;wzP1F z#Y1chRyh+9u`kSJL=B$UWmEJDl%K)k>x7N#H}od0JGITHh&Z{@g}(pPLytyGma>Du z8WqNBnVILMKeKMmy3P=VZ}uG4Sou3=go9>JMMUH^rwrN9JHW!8>5vfPec)M9(H4oE zA*It(cZTH;go_{cCHW=Z+i5soB{*GQc&$CN#`HY zdejgb3eR+_+ zg5L?*%UAm5z^hogiO(bcWiis~Iis@v=BVQH>tTDj*Z$vhw}6tD+f9xkC%xu)+Al{g zW3BK+!;Br9gERH}^Gfx&gxcUe**gNiyk@Iu?_89(pW4msh-c3?6>ED*EU2`*@5cs9 z^%}@OZgyVZhHt5yUx;!en;Ja)cJf=kbKj|VTxY}L2WWeAPF^%AFR#ndHc-qTD|K#c1 zHa!2g}>G3%9TRo%w z?K{f8R;uGcP1#S(vRHmXpq&NcDxaHwHQ&r7`M$vzJGU2Kkz7&H_O|4F9CeEb74CbDwe)(Iy8WyS>iXenJTVQQE+fuAd`A{lExL!-ow|mujsMCq zH%k}tR{JXuIC$Nqy^Z;~*Kdz+7b*$M-@iUpF1^(LO$ek(eyS34`OdF#&UKeV=5#92 z>cL>r-1ASM1rxhBGDn@g-@R;3-zNZl2mPoNaA6k4@`O=#`zY=yWxcA1d+vb5A zg=4zWKp^z<(b?qDT3)+Ht)4G$;UedY#!*TFwjE6f!G=L`(30s^W+ z7J_Nts%-yg+DSiFxsRM3^Xb32B{o&Pw#-L&+&A&!8^O4nUm7P* z>_>w5M-&Z-6mV*)Q&p@JF1-`eBbjk5Gga|^c4@kmxhxL%VXvg9%9uI)@hhCTZz6X1 zi*p~}?+SiHncFYi)z$`>GfM6<;|5(d`UkyJRQu3^85XnYHi9)Bhlpdns&v1w(o{cS z>xWx&a4VQFXAN|IRg)Os4W~#E+8A|EsFNZ7-G4i``p1NFgF3y9=xC%&%J4T>T0tb2 zsH>~wEp?X_-Ec1XbT+r8aj_mm=w^=_< zZXOP5-TK&T=h}YZ`%Tf-_0Ef2yg%>$^+Udwe$bxBAn_a=HmG0m`)+RQN#YrV8K6Q* z@0OR{Jb$09p$aoKRr_F#|I6>KWKab3fk^_r4&CdSe29qdtR1ZUasEnV9+ZBiOg`?J zTfUyTO%U)V;}6Db_T|&B$}z)x>Bq_bNBD>6-XJ%FLiMqD_YUlnacM0A%j@EY!nmiL z!GRe@$Z`X&p%kNKQelz{x#$~#c?m{bBpUoO{xLxx*$`e?Wu3M01#g`vOY#z|LN-tE zdWhlQ1#I%y!RT4lpzW{)@!2l!=j0!;{gchGYY$Gv}! zuvlMU3y($^t??R5QBQd_sHY9tFfW4JmkPscJ{5=j8o2lQw1 zZ1(vLzG8aX7YPUV~E(Q^AA%Q$SC`H<}z8V5%H~D`; z7mHgJkxeG|tJ7Lym_S}J8!g9kKgG?XKHXj^^~uO%()tk(sMr^cGEKTuGW*(5=R&5e zQ9RoEXGd8nvzjse0dzj+M9h9*IHy54_|r$+HQA_A+pcUfW9SQ?-^`DamznmB3wyPr zWx9LgzU}X)7dSVPaf;q)jRT|>HB&boY16`ym+pv*isWB0j=J5a)W#V+3|BFUVp}y+ zPLIH`9_lHRO}`80hLpYH0io)1Ez}!`-H?&J`M|Pd%-92BDuS5L!GtVJL0zjOyQlHG z>@;tiHlUqE?^bfFjyd77%ct7b*z;}uqcUMEC*yNH_MykbwLifUm1Bl)EgA>v7i(hY zda^E2kdyIdvf^Gf9!)!t;2tgawx|0POl6ECT`Cipe@XH{WSF8sJDBk!mE<({H-+Oj zt(mkO#j_qQLjj*8VcN%gOrR%uey77I>f=qi3-=oJ!^e#>l9rHovZ{ge5TJ>#)BpZ@ Q07!uq6u|l@M;PY+0OPPpr~m)} diff --git a/honeybee_grasshopper_energy/user_objects/HB Room Energy Attributes.ghuser b/honeybee_grasshopper_energy/user_objects/HB Room Energy Attributes.ghuser index 67e8e059b03344ec3cf7859961f9236dac669386..bdbeea28641bcbf0b5ef7c9015dfcee6066c30d2 100644 GIT binary patch literal 3928 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 S#Bg_z1qy+LqA+kM`hNgc!j*~u