grivkees / homebridge-carrier-infinity

Standalone homebridge plugin for Carrier Infinity / Bryant Evolution / ICP Brands Ion thermostats.
MIT License
24 stars 6 forks source link

Support for zone status damper information #156

Closed Aqualung812 closed 2 years ago

Aqualung812 commented 2 years ago

I have a 4-zone system, and in one of those zones, the basement, I use a booster fan connected to a smart outlet.

My goal is to make sure the booster fan only turns on when that zone is getting air delivered to it.

I've attempted to use both the heating mode and fan status to do this, but it doesn't work completely because the Carrier system will not always be sending air to that zone based on those two statuses.

The idea solution would be to reference the "zone status" information that shows when that zone is heating or cooling. This is accessible in the Infinity module under Status, Temperature Control Status: IMG_0533

As you can see, with the above status, the basement is getting sent hot air, but nothing in the current plugin indicates this: image

I'm not sure this information is available to you over API, so I get it if you can't implement this to do that limitation.

The ideal solution would look at the damper status, which is found by holding down the service button and going to zone status: IMG_0534

This would allow fan speed to be based on damper position, with 0 being 0% fan speed, and 15 being 100%.

Thank you!

grivkees commented 2 years ago

Hey! Thanks for writing this up!

It should show per zone heat/cool/off status, though I’m not sure how that fits in with the damper reported state.

I don’t have a multi zone system, so hard for me to tell. Can you follow the instructions below to share the system state?

https://github.com/grivkees/homebridge-carrier-infinity/wiki/Development#investigating-carrier-api-responses

Separately, it doesn’t look like HomeKit even exposes the cool/heat state as an automation trigger. So might need to just make a fake switch to do this anyway. Do you actually care about the damper % state? Or just whether it’s blowing or not in the zone?

Aqualung812 commented 2 years ago

I only care if the air is blowing, but I think the damper state is critical for that. For example, if I'm just using the fan only, heat and cooling state will be off, and I can turn the fan on per-zone. It appears that the damper position is exposed in the damperposition field. If the damper state can be converted to fan speed percent, then that allows homekit enabled booster fans to be set to a speed to match. In my system, 0 is closed and 15 is fully open.

<status version="1.48" xmlns:atom="http://www.w3.org/2005/Atom"><a"/><timestamp>2022-02-15T13:38:33.851Z</timestamp><pingRate>15</pingRate><iduStatusPingRate>93600</iduStatusPingRate><iduFaultsPingRate>86400</iduFaultsPingRate><oduStatusPingRate>90000</oduStatusPingRate><oduFaultsPingRate>82800</oduFaultsPingRate><historyPingRate>75600</historyPingRate><equipEventsPingRate>79200</equipEventsPingRate><rootCausePingRate>72000</rootCausePingRate><serverHasChanges>false</serverHasChanges><configHasChanges>false</configHasChanges><dealerHasChanges>false</dealerHasChanges><dealerLogoHasChanges>false</dealerLogoHasChanges><oduConfigHasChanges>false</oduConfigHasChanges><iduConfigHasChanges>false</iduConfigHasChanges><utilityEventsHasChanges>false</utilityEventsHasChanges><sensorConfigHasChanges>false</sensorConfigHasChanges><sensorProfileHasChanges>false</sensorProfileHasChanges><sensorDiagnosticHasChanges>false</sensorDiagnosticHasChanges><name>REDACTED</name><oat>21</oat><mode>gasheat</mode><cfgem>C</cfgem><cfgtype>heatcool</cfgtype><vacatrunning>off</vacatrunning><filtrlvl>98</filtrlvl><uvlvl>100</uvlvl><humlvl>100</humlvl><ventlvl>100</ventlvl><humid>off</humid><vent/><localTime>2022-02-15T08:38:33.851</localTime><oprstsmsg/><isDisconnected>false</isDisconnected><idu><type>furnace2stg</type><opstat>low</opstat><cfm>983</cfm></idu><odu><type>proteushp</type><opstat>off</opstat><opmode>heating</opmode></odu><zones><zone id="1"><name>Upstairs</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>22.0</rt><rh>27</rh><fan>low</fan><hold>off</hold><htsp>19.0</htsp><clsp>23.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="2"><name>Suite</name><enabled>on</enabled><currentActivity>wake</currentActivity><rt>23.5</rt><rh>27</rh><fan>med</fan><hold>off</hold><htsp>23.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>active_heat</zoneconditioning><damperposition>5</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="3"><name>Main Floor</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>20.0</rt><rh>27</rh><fan>med</fan><hold>off</hold><htsp>20.0</htsp><clsp>24.0</clsp><otmr>00:00</otmr><zoneconditioning>active_heat</zoneconditioning><damperposition>15</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="4"><name>Basement</name><enabled>on</enabled><currentActivity>away</currentActivity><rt>12.0</rt><rh>27</rh><fan>off</fan><hold>on</hold><htsp>10.0</htsp><clsp>29.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="5"><name>Zone 5</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>27</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="6"><name>Zone 6</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>27</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="7"><name>Zone 7</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>27</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="8"><name>Zone 8</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>27</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone></zones></status>

grivkees commented 2 years ago

"zoneconditioning" in that paste is the state of the zone, and as far as I've seen can be idle/active_heat/active_cool.

Do you have an example of where the system is fan_only and a damper is open (non-0)?

Aqualung812 commented 2 years ago

In the example I started with, the Basement zone is showing idle and the damper is 9. My observation is that under normal operation, a zone will show as the fan enabled but 0 on the damper (from the zone status picture I posted). Both Upstairs and Suite show that the fan is on in my first example, with the fan on low in the Upstairs and high in the Suite. However, both of those zones have the damper set to 0. Their fans are set to low and high in the comfort profile, and that only happens when all zones are idle, and then the system will obey the fan speed settings. If this worked as I'm requesting, I could allow the Basement zone to have the comfort setting for the fan for high so extra heat from upstairs is pushed to the basement, even when I'm not directly trying to heat it.

If you'd like, I could turn the heat off for a few minutes and set the entire system to fan only to show what I'm talking about, and provide the output from the developer panel.

Aqualung812 commented 2 years ago

Putting it another way: the fan status is wrong in 3 of the 4 zones in the first example: Upstairs and Suite both show the fan as active when the damper is set to 0, and the Basement shows the fan as idle when it is active. Only the Main Floor is accurate in terms of fan activity, and none of them are accurate in terms of fan speed %.

Aqualung812 commented 2 years ago

It actually warmed up enough that the system already went into fan-only mode. Technically the heat is enabled, but all zones are warm enough that no heat is active. So the Upstairs, Suite, and Main Floor all are showing "idle" on conditioning but non-zero dampers.

<status version="1.48" xmlns:atom="http://www.w3.org/2005/Atom"><atom:link rel="self" href="dfsg"/><atom:link rel="http://www.api.ing.carrier.com/rels/system" href="hsdfg"/><timestamp>2022-02-15T19:18:50.156Z</timestamp><pingRate>15</pingRate><iduStatusPingRate>93600</iduStatusPingRate><iduFaultsPingRate>86400</iduFaultsPingRate><oduStatusPingRate>90000</oduStatusPingRate><oduFaultsPingRate>82800</oduFaultsPingRate><historyPingRate>75600</historyPingRate><equipEventsPingRate>79200</equipEventsPingRate><rootCausePingRate>72000</rootCausePingRate><serverHasChanges>false</serverHasChanges><configHasChanges>false</configHasChanges><dealerHasChanges>false</dealerHasChanges><dealerLogoHasChanges>false</dealerLogoHasChanges><oduConfigHasChanges>false</oduConfigHasChanges><iduConfigHasChanges>false</iduConfigHasChanges><utilityEventsHasChanges>false</utilityEventsHasChanges><sensorConfigHasChanges>false</sensorConfigHasChanges><sensorProfileHasChanges>false</sensorProfileHasChanges><sensorDiagnosticHasChanges>false</sensorDiagnosticHasChanges><name>sdfg</name><oat>49</oat><mode>gasheat</mode><cfgem>C</cfgem><cfgtype>heatcool</cfgtype><vacatrunning>off</vacatrunning><filtrlvl>100</filtrlvl><uvlvl>100</uvlvl><humlvl>100</humlvl><ventlvl>100</ventlvl><humid>off</humid><vent/><localTime>2022-02-15T14:18:50.156</localTime><oprstsmsg/><isDisconnected>false</isDisconnected><idu><type>furnace2stg</type><opstat>off</opstat><cfm>636</cfm></idu><odu><type>proteushp</type><opstat>off</opstat><opmode>off</opmode></odu><zones><zone id="1"><name>Upstairs</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>21.5</rt><rh>30</rh><fan>low</fan><hold>off</hold><htsp>19.0</htsp><clsp>23.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>10</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="2"><name>Suite</name><enabled>on</enabled><currentActivity>wake</currentActivity><rt>23.5</rt><rh>30</rh><fan>med</fan><hold>off</hold><htsp>23.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>15</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="3"><name>Main Floor</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>20.0</rt><rh>30</rh><fan>med</fan><hold>off</hold><htsp>20.0</htsp><clsp>24.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>14</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="4"><name>Basement</name><enabled>on</enabled><currentActivity>away</currentActivity><rt>12.5</rt><rh>30</rh><fan>off</fan><hold>on</hold><htsp>10.0</htsp><clsp>29.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="5"><name>Zone 5</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>30</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="6"><name>Zone 6</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>30</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="7"><name>Zone 7</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>30</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="8"><name>Zone 8</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>30</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone></zones></status>

grivkees commented 2 years ago

Awesome, thats perfect. Thanks! I'll take a closer look and let you know if I have any other questions.

etomnash commented 2 years ago

To chime in: I have used the accessory HTTP SWITCH to set Zone Condition cooling and heating state switches for each of my 2 zones via http calls to a local .php site. In the php code I access Infinitude status and decode the json to get the state. (See below). I then use the switch in HomeKit for automations.

It would be nice, of course, if this (very nice) homebridge plug-in could set switches for heating and cooling in each zone.

However, I would still have to use this php path for the automations I want. Mainly what I am doing is comparing indoor and outdoor temperature and triggering a notification if, for example, the cooling is on when the outside temperature is cooler than inside. The notification asks for the door/window to be opened by anyone who is home. The notification goes via the iOS app pushcut. This whole process is quite heroic, but works, and is necessitated by the fact that HomeKit does not allow for automations based on comparison of temperatures (believe it or not.)

Here's an example of the php code, here setting the switch for downstairs cooling:

<?php

$json = file_get_contents("http://172.16.1.57:3000/api/status/zones/"); $jsondec = (json_decode($json, true)); $json = file_get_contents("http://172.16.1.57:3000/api/status"); $gardendec = (json_decode($json, true));

$upstairs = $jsondec["zones"]["zone"][0]["rt"][0]; $dnstairs = $jsondec["zones"]["zone"][1]["rt"][0]; $upcoolheat = $jsondec["zones"]["zone"][0]["zoneconditioning"][0]; $dncoolheat = $jsondec["zones"]["zone"][1]["zoneconditioning"][0];

if (strpos( $dncoolheat,"cool" )!== false) { echo "true" ; } else { echo "false"; }

$garden = $gardendec["oat"][0];

$dnhotoutside = ($garden > $dnstairs); $upcooloutside = $garden < $upstairs;

?>

The code for comparisons of indoor/outdoor temps is more complicated because it has to have timers and a cache to deal with a Davis Weather Station api that provides garbage if hit too often.

grivkees commented 2 years ago

@Aqualung812 The fan currently only shows as 'active' when the fan is in an explicit low/med/high setting. It does not show as blowing when the fan is set to auto and the system is active. I think I'm ok with having the fan display as blowing anytime air is moving through the zone, but need to think on how to show it a bit more. (I can't really show how fast the fan is blowing when set to auto in a way that wouldn't be confusing in homekit). Then, since you can automate based on an active fan, you should be able to get the other fan working.

Also, if you see the situation where the basement is getting hot air, but homekit dosen't show that thermostat as heating, see if you can try to capture a status output. That is just a bug, but not sure how its happening.

grivkees commented 2 years ago

@etomnash that is indeed a heroic automation.

I'd be curious if you could use an ios shortcut to do that logic and notification. It seems to have if/else, ways to get weather and homekit status, and ways to take homekit actions. There doesn't seem to be a native way to run a shortcut continuously, or even have it trigger on its own like HK automations, but there do seem to be some hacks to run the check every min.

Aqualung812 commented 2 years ago

@grivkees

Also, if you see the situation where the basement is getting hot air, but homekit dosen't show that thermostat as heating, see if you can try to capture a status output. That is just a bug, but not sure how its happening.

I'll try to grab that, but I suspect it's related to the way the smart setback works and Carrier is to blame. When a zone is away, it doesn't report it is being heated in the normal zone display. It's pre-heating (or pre-cooling) the zone before the scheduled setting change.

I think I'm ok with having the fan display as blowing anytime air is moving through the zone, but need to think on how to show it a bit more. (I can't really show how fast the fan is blowing when set to auto in a way that wouldn't be confusing in homekit)

Homekit doesn't let you pass a fan percentage value? I would think for zoned systems, you'd ignore the low/med/high settings as there is only one blower fan for the entire system, and the dampers are what control the air speed to the zone. When the damper is at 0, you'd show it off, and then calculate the percentage with ($dampervalue/15)*100 for non-zero values.

Aqualung812 commented 2 years ago

Another point about the fan status & zones: if I have upstairs and suite set to "low" and "high" on fan speed, but downstairs is calling for heat while the other two don't need heat, they're getting zero air until the downstairs is done heating. Looking at what fan speed setting for those zones would be incorrect since the system doesn't want to send hot air to the zones that are already hot enough. Homekit shouldn't show them as being low and high during that time.

etomnash commented 2 years ago

Its been a while since I immersed myself in this...

Looking at it now, I think I might be able to do json decoding in the HomeKit scripting using the Library capability, then set however many temperature Variables needed, and then use If/Then compares on them. I would still need to use the iOS app pushcut for notifications as HomeKit scripting does not allow for that (Shortcuts does).

The other issue I am not sure I could handle in HomeKit scripting is protecting outside servers like Davis Weather Station, Carrier or Infinitude from getting hammered too often and providing error codes or garbage. I do some caching in php now. Maybe HomeKit would handle this correctly, or I could use waits, etc. to do so - probably, but I'm not sure.

As for doing this in iOS Shortcuts, the problem is you need a trigger. Trigger options include HomeKit accessories, but only On/Off switches, not variables like temperatures. Somewhere you have to create an accessory that is a switch with a state based on multiple temperatures. I don't think you can create an accessory in HomeKit scripting as it assumes accessories exist. Also not possible AFAIK in Homebridge with existing plugins. So back to a .php server or HomeKit Library json decoding, if that can be made to work with outside servers....

I ended up in .php because at the time I didn't understand the Library capability allows json decoding - and I was just starting with json. One retrospective advantage about php is that it is a lot easier to read and code a text-like php file than the HomeKit or Shortcuts scripting GUI. Disadvantage is you have to read the php manuals...

I would be interested if someone sees another way to do this sort of thing.

etomnash commented 2 years ago

Looking at Shortcuts a bit more. The Shortcuts app allows for 2 kinds of automation: Home and Personal. With home automations you can trigger on accessories that are switch-like, and the list of scripting options and the GUI is just the same as in HomeKit. So there is no Notification option, which is why Pushcut exists. With personal automations you cannot trigger on accessories, but you can fire notifications. The home automations run on a HomeKit server like an AppleTV that is always on. The personal automations run on a single iOS device, which may not be at home or on. I can't see any reason why home automations can't support notifications, but maybe there is one. I also see no reason why the scripting couldn't support trigger access to conditions on multiple accessory variables like temperature.

Aqualung812 commented 2 years ago

Here it is in basically the same state as my first post. You can see that the Basement is showing the fan is off, because it is in the "away" mode, but the damper is 15. The only other thing you could go by is zoneconditioning being set to "prep_heat", and I assume in the summer, "prep_cool".

<status version="1.48" xmlns:atom="http://www.w3.org/2005/Atom"><atom:link rel="self" href="https://www.app-api.ing.carrier.com/systems/snip/status"/><atom:link rel="http://www.api.ing.carrier.com/rels/system" href="https://www.app-api.ing.carrier.com/systems/snip"/><timestamp>2022-03-09T21:02:36.761Z</timestamp><pingRate>15</pingRate><iduStatusPingRate>93600</iduStatusPingRate><iduFaultsPingRate>86400</iduFaultsPingRate><oduStatusPingRate>90000</oduStatusPingRate><oduFaultsPingRate>82800</oduFaultsPingRate><historyPingRate>75600</historyPingRate><equipEventsPingRate>79200</equipEventsPingRate><rootCausePingRate>72000</rootCausePingRate><serverHasChanges>false</serverHasChanges><configHasChanges>false</configHasChanges><dealerHasChanges>false</dealerHasChanges><dealerLogoHasChanges>false</dealerLogoHasChanges><oduConfigHasChanges>false</oduConfigHasChanges><iduConfigHasChanges>false</iduConfigHasChanges><utilityEventsHasChanges>false</utilityEventsHasChanges><sensorConfigHasChanges>false</sensorConfigHasChanges><sensorProfileHasChanges>false</sensorProfileHasChanges><sensorDiagnosticHasChanges>false</sensorDiagnosticHasChanges><name>2800 HVAC</name><oat>50</oat><mode>hpheat</mode><cfgem>C</cfgem><cfgtype>heatcool</cfgtype><vacatrunning>off</vacatrunning><filtrlvl>17</filtrlvl><uvlvl>100</uvlvl><humlvl>100</humlvl><ventlvl>100</ventlvl><humid>off</humid><vent/><localTime>2022-03-09T16:02:36.761</localTime><oprstsmsg/><isDisconnected>false</isDisconnected><idu><type>furnace2stg</type><opstat>off</opstat><cfm>1000</cfm></idu><odu><type>proteushp</type><opstat>Stage 1</opstat><opmode>heating</opmode></odu><zones><zone id="1"><name>Upstairs</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>22.0</rt><rh>38</rh><fan>low</fan><hold>off</hold><htsp>19.0</htsp><clsp>23.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="2"><name>Suite</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>23.0</rt><rh>38</rh><fan>low</fan><hold>off</hold><htsp>20.0</htsp><clsp>24.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="3"><name>Main Floor</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>20.0</rt><rh>38</rh><fan>med</fan><hold>off</hold><htsp>20.0</htsp><clsp>24.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="4"><name>Basement</name><enabled>on</enabled><currentActivity>away</currentActivity><rt>15.5</rt><rh>38</rh><fan>off</fan><hold>off</hold><htsp>10.0</htsp><clsp>29.0</clsp><otmr>00:00</otmr><zoneconditioning>prep_heat</zoneconditioning><damperposition>15</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="5"><name>Zone 5</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>38</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="6"><name>Zone 6</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>38</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="7"><name>Zone 7</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>38</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="8"><name>Zone 8</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>38</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone></zones></status>

grivkees commented 2 years ago

@Aqualung812 Ah, prep_heat is what I was missing here. Awesome. Fixing it so it gives a better error as well if theres any others I'm missing like this, so hopefully this is clearer if theres another one of these.

grivkees commented 2 years ago

@Aqualung812 I think the version that pushes on the next channel from this commit should fix the issues. If not, please reopen the issue and I'll take another look.

github-actions[bot] commented 2 years ago

:tada: This issue has been resolved in version 1.5.8 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

Aqualung812 commented 2 years ago

This didn't solve the exact issue, I'm sorry.

Right now, my downstairs is getting heat delivered and the damper for it is open. My suite is also set to heat and have the fan on, but it is not in the active heat state since it is warm enough in there, and doesn't have its damper open.

It shows the fan as active at 33% in HomeKit in the Suite, even though no air is actually be sent there. I think that is because the fan is still based on the auto/high/med/low setting, not the damper setting. Is that right?

grivkees commented 2 years ago

Can you send a picture of what you see?

There is a difference between the currently configured speed, which it sounds like you do have as low/33%. And how it shows the “active state”, which would be off here. HomeKit should show the fan as “off”, but the speed setting will still show as 33%. (This generally looks like a non spinning fan in the UI, as opposed to a spinning fan. And the thermostats will not show “all on” on its tile)

Aqualung812 commented 2 years ago

078495C0-80AF-4960-8D15-AE6A7B478839 EB4D4023-7B92-4620-8772-DCD2B00BD1FA 5B89ACD8-3CED-4D1E-8CEC-BC2FE42E9078

Currently, the Upstairs (aka hallway) is not getting air, but the fan shows on.

grivkees commented 2 years ago

Can you share the status api output while this is occurring?

grivkees commented 2 years ago

Actually no need. I think I know what it is.

grivkees commented 2 years ago

I think that will do it. I finally gave up and took the damper into account 😄

New build should be ready in the next few min. Let me know if that does it or not.

github-actions[bot] commented 2 years ago

:tada: This issue has been resolved in version 1.5.10 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

Aqualung812 commented 2 years ago

F82DAAEF-8A03-414E-9823-20598F4DB179 1343E2AF-4123-4101-8A8A-5698956A9E91

That did it! You can see how the Upstairs and Suite fans now show off when the main floor kicked on and called for heat, and the dampers closed for those two zones so only the main floor is getting air.

One it hit the set point, the fan, which was set to auto on main floor, correctly went to off and the other two showed on, on low as matches the actual state.

Aqualung812 commented 2 years ago

It appears this may have introduced a bug. The fans now show active even when the state of the system is off / idle, since the dampers are apparently left open when you shut the system off:

<status version="1.48" xmlns:atom="http://www.w3.org/2005/Atom"><atom:link rel="self" href="https://www.app-api.ing.carrier.com/systems/"/><atom:link rel="http://www.api.ing.carrier.com/rels/system" href="https://www.app-api.ing.carrier.com/systems/5219W100803"/><timestamp>2022-03-21T12:24:11.122Z</timestamp><pingRate>15</pingRate><iduStatusPingRate>93600</iduStatusPingRate><iduFaultsPingRate>86400</iduFaultsPingRate><oduStatusPingRate>90000</oduStatusPingRate><oduFaultsPingRate>82800</oduFaultsPingRate><historyPingRate>75600</historyPingRate><equipEventsPingRate>79200</equipEventsPingRate><rootCausePingRate>72000</rootCausePingRate><serverHasChanges>false</serverHasChanges><configHasChanges>false</configHasChanges><dealerHasChanges>false</dealerHasChanges><dealerLogoHasChanges>false</dealerLogoHasChanges><oduConfigHasChanges>false</oduConfigHasChanges><iduConfigHasChanges>false</iduConfigHasChanges><utilityEventsHasChanges>false</utilityEventsHasChanges><sensorConfigHasChanges>false</sensorConfigHasChanges><sensorProfileHasChanges>false</sensorProfileHasChanges><sensorDiagnosticHasChanges>false</sensorDiagnosticHasChanges><name>2800 HVAC</name><oat>38</oat><mode>off</mode><cfgem>C</cfgem><cfgtype>heatcool</cfgtype><vacatrunning>off</vacatrunning><filtrlvl>26</filtrlvl><uvlvl>100</uvlvl><humlvl>100</humlvl><ventlvl>100</ventlvl><humid>off</humid><vent/><localTime>2022-03-21T08:24:11.122</localTime><oprstsmsg/><isDisconnected>false</isDisconnected><idu><type>furnace2stg</type><opstat>off</opstat><cfm>0</cfm></idu><odu><type>proteushp</type><opstat>off</opstat><opmode>off</opmode></odu><zones><zone id="1"><name>Upstairs</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>19.5</rt><rh>42</rh><fan>low</fan><hold>off</hold><htsp>19.0</htsp><clsp>23.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>8</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="2"><name>Suite</name><enabled>on</enabled><currentActivity>away</currentActivity><rt>18.5</rt><rh>42</rh><fan>off</fan><hold>off</hold><htsp>13.0</htsp><clsp>29.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>8</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="3"><name>Main Floor</name><enabled>on</enabled><currentActivity>home</currentActivity><rt>17.0</rt><rh>42</rh><fan>med</fan><hold>off</hold><htsp>20.0</htsp><clsp>24.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>12</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="4"><name>Basement</name><enabled>on</enabled><currentActivity>wake</currentActivity><rt>16.0</rt><rh>42</rh><fan>high</fan><hold>off</hold><htsp>15.0</htsp><clsp>25.0</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>15</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="5"><name>Zone 5</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>42</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="6"><name>Zone 6</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>42</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="7"><name>Zone 7</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>42</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone><zone id="8"><name>Zone 8</name><enabled>off</enabled><currentActivity>away</currentActivity><rt/><rh>42</rh><fan>off</fan><hold>off</hold><htsp>15.5</htsp><clsp>26.5</clsp><otmr>00:00</otmr><zoneconditioning>idle</zoneconditioning><damperposition>0</damperposition><occupancy/><occupancyOverride>off</occupancyOverride></zone></zones></status>

image

@grivkees, I don't know how to re-open this, or if I should open this as a new bug.

grivkees commented 2 years ago

Made a few more changes. If the system is off, the fan will definitely show off now. I did also make a change to make setting the fan speed from homekit appear to stick better while the updates push to the thermostat. This will still take into account the damper being closed though. But let me know if you see any issues with it.

Aqualung812 commented 2 years ago

Looks good so far!