dahlb / ha_carrier

Carrier Infinity Integration for Home Assistant
MIT License
45 stars 4 forks source link

Setting Preset mode and HVAC mode in same automation doesn't work consistently #11

Closed jspadea closed 1 year ago

jspadea commented 1 year ago

System Health details

I can't find the system health details...

Checklist

Describe the issue

I have an automation that sets the preset mode, then the HVAC mode. I have 2 zones and most of the time only zone 1's preset mode changes. Sometimes neither zone 1 or 2 changes and sometimes both zones change. I noticed in the logs, that most of the time the system status doesn't match the actual system either. I think it is a timing issue with setting the hvac mode right after preset mode. I put a 3 minute delay between the two service calls and it seems to be working now.

Another thing to note, I am setting the device, not the entity for preset mode. Setting the zones separately (entities) always worked for zone 1 but zone 2 never worked - I didn't think of putting a 3 minute delay between the zones at the time so maybe that would have fixed that as well but it is cleaner to simply set the device in my case.

Reproduction steps

1.Call the service to set the preset mode 2.Call the service to set the hvac mode 3.View the thermostat to see if the preset mode is set in both zones 4.If not, wait 3 minutes and check again 5.check logs to confirm both zones were set correctly then shortly after one or two zones were restored 6.workaround: put a 3 minute delay between calls and confirm expected results ...

Debug logs

This is an example where the status doesn't match what was set a few milliseconds later.  In this particular instance, I was delayed a few minutes before checking the thermostat and to my surprise both zones were correct even though the status below is clearly wrong!  This is how I figured out that calling the two services too close together might be restoring the second zone.

2023-04-12 16: 35: 21.926 DEBUG (SyncWorker_7) [custom_components.ha_carrier
] set_preset_mode; preset_mode:Home<========@@@@@@@@
2023-04-12 16: 35: 21.926 DEBUG (SyncWorker_7) [custom_components.ha_carrier
] infinite_hold:True; holding until:'None'
2023-04-12 16: 35: 21.928 DEBUG (SyncWorker_4) [custom_components.ha_carrier
] set_preset_mode; preset_mode:Home<========@@@@@@@@
2023-04-12 16: 35: 21.929 DEBUG (SyncWorker_4) [custom_components.ha_carrier
] infinite_hold:True; holding until:'None'
2023-04-12 16: 35: 28.288 DEBUG (MainThread) [custom_components.ha_carrier
] {'serial': '2219W105293', 'name': '31 Powers', 'profile': {'model': 'SYSTXCCWIC01-B', 'brand': 'Carrier', 'firmware': 'CESR131626-04.31', 'indoor_model': 'FE4ANF005', 'indoor_serial': '1111A85981', 'outdoor_model': '25HNA948A00320', 'outdoor_serial': '3310E11056', 'time_stamp': '04/12/2023,
        12: 15: 16 EDT', 'zone_ids': ['1', '2'
        ]
    }, 'status': {'outdoor_temperature': 75.0, 'mode': 'off', 'temperature_unit': 'F', 'filter_used': 70, 'is_disconnected': False, 'airflow_cfm': 0, 'outdoor_unit_operational_status': 'off', 'indoor_unit_operational_status': 'off', 'time_stamp': '04/12/2023,
        16: 29: 36 EDT', 'zones': [
            {'id': '1', 'name': '1st Floor', 'current_activity': 'away', 'temperature': 69.0 <===@@@ 'humidity': 39, 'fan': 'off', 'hold': True, 'occupancy': False, 'hold_until': None, 'heat_set_point': 66.0, 'cool_set_point': 76.0, 'conditioning': 'idle'
            },
            {'id': '2', 'name': '2nd Floor', 'current_activity': 'away', 'temperature': 70.0, <===@@@ 'humidity': 39, 'fan': 'off', 'hold': True, 'occupancy': False, 'hold_until': None, 'heat_set_point': 65.0, 'cool_set_point': 75.0, 'conditioning': 'idle'
            }
        ]
    }, 'config': {'temperature_unit': 'F', 'static_pressure': 0.7799999713897705, 'mode': 'auto', 'limit_min': 50, 'limit_max': 90, 'time_stamp': '04/12/2023,
        16: 35: 22 EDT', 'zones': [
            {'api_id': '1', 'name': '1st Floor', 'hold_activity': 'home', 'hold': True, 'hold_until': None, 'activities': [
                    {'api_id': 'away', 'fan': 'off', 'heat_set_point': 66.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'home', 'fan': 'off', 'heat_set_point': 68.0, 'cool_set_point': 72.0
                    },
                    {'api_id': 'manual', 'fan': 'off', 'heat_set_point': 68.0, 'cool_set_point': 71.0
                    },
                    {'api_id': 'sleep', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'wake', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'vacation', 'fan': 'off', 'heat_set_point': 60.0, 'cool_set_point': 80.0
                    }
                ]
            },
            {'api_id': '2', 'name': '2nd Floor', 'hold_activity': 'home', 'hold': True, 'hold_until': None, 'activities': [
                    {'api_id': 'away', 'fan': 'off', 'heat_set_point': 65.0, 'cool_set_point': 75.0
                    },
                    {'api_id': 'home', 'fan': 'off', 'heat_set_point': 68.0, 'cool_set_point': 72.0
                    },
                    {'api_id': 'manual', 'fan': 'off', 'heat_set_point': 65.0, 'cool_set_point': 69.0
                    },
                    {'api_id': 'sleep', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'wake', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'vacation', 'fan': 'off', 'heat_set_point': 60.0, 'cool_set_point': 80.0
                    }
                ]
            }
        ]
    }
}

Diagnostics dump

No response

dahlb commented 1 year ago

while there might be a race condition when setting mode and preset your logs here don't show it.

You are looking at status, but you should be looking at config.
I highlighted below where the config is correctly setting both zones to home and infinite holds. The carrier thermostat has internal logic and intentional delays and backoffs that affect the delay in the status changing. The only thing that can be controlled is the thermostat's config, when the thermostat decides to change it's status is entirely up to the thermostat.

2023-04-12 16: 35: 21.926 DEBUG (SyncWorker_7) [custom_components.ha_carrier
] set_preset_mode; preset_mode:Home<========@@@@@@@@
2023-04-12 16: 35: 21.926 DEBUG (SyncWorker_7) [custom_components.ha_carrier
] infinite_hold:True; holding until:'None'
2023-04-12 16: 35: 21.928 DEBUG (SyncWorker_4) [custom_components.ha_carrier
] set_preset_mode; preset_mode:Home<========@@@@@@@@
2023-04-12 16: 35: 21.929 DEBUG (SyncWorker_4) [custom_components.ha_carrier
] infinite_hold:True; holding until:'None'
2023-04-12 16: 35: 28.288 DEBUG (MainThread) [custom_components.ha_carrier
] {'serial': '2219W105293', 'name': '31 Powers', 'profile': {'model': 'SYSTXCCWIC01-B', 'brand': 'Carrier', 'firmware': 'CESR131626-04.31', 'indoor_model': 'FE4ANF005', 'indoor_serial': '1111A85981', 'outdoor_model': '25HNA948A00320', 'outdoor_serial': '3310E11056', 'time_stamp': '04/12/2023,
        12: 15: 16 EDT', 'zone_ids': ['1', '2'
        ]
    }, 'status': {'outdoor_temperature': 75.0, 'mode': 'off', 'temperature_unit': 'F', 'filter_used': 70, 'is_disconnected': False, 'airflow_cfm': 0, 'outdoor_unit_operational_status': 'off', 'indoor_unit_operational_status': 'off', 'time_stamp': '04/12/2023,
        16: 29: 36 EDT', 'zones': [
            {'id': '1', 'name': '1st Floor', 'current_activity': 'away', 'temperature': 69.0 <===@@@ 'humidity': 39, 'fan': 'off', 'hold': True, 'occupancy': False, 'hold_until': None, 'heat_set_point': 66.0, 'cool_set_point': 76.0, 'conditioning': 'idle'
            },
            {'id': '2', 'name': '2nd Floor', 'current_activity': 'away', 'temperature': 70.0, <===@@@ 'humidity': 39, 'fan': 'off', 'hold': True, 'occupancy': False, 'hold_until': None, 'heat_set_point': 65.0, 'cool_set_point': 75.0, 'conditioning': 'idle'
            }
        ]
    }, 'config': {'temperature_unit': 'F', 'static_pressure': 0.7799999713897705, 'mode': 'auto', 'limit_min': 50, 'limit_max': 90, 'time_stamp': '04/12/2023,
        16: 35: 22 EDT', 'zones': [
            {'api_id': '1', 'name': '1st Floor', 'hold_activity': 'home', <===@@@  'hold': True, 'hold_until': None, 'activities': [
                    {'api_id': 'away', 'fan': 'off', 'heat_set_point': 66.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'home', 'fan': 'off', 'heat_set_point': 68.0, 'cool_set_point': 72.0
                    },
                    {'api_id': 'manual', 'fan': 'off', 'heat_set_point': 68.0, 'cool_set_point': 71.0
                    },
                    {'api_id': 'sleep', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'wake', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'vacation', 'fan': 'off', 'heat_set_point': 60.0, 'cool_set_point': 80.0
                    }
                ]
            },
            {'api_id': '2', 'name': '2nd Floor', 'hold_activity': 'home', <===@@@  'hold': True, 'hold_until': None, 'activities': [
                    {'api_id': 'away', 'fan': 'off', 'heat_set_point': 65.0, 'cool_set_point': 75.0
                    },
                    {'api_id': 'home', 'fan': 'off', 'heat_set_point': 68.0, 'cool_set_point': 72.0
                    },
                    {'api_id': 'manual', 'fan': 'off', 'heat_set_point': 65.0, 'cool_set_point': 69.0
                    },
                    {'api_id': 'sleep', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'wake', 'fan': 'off', 'heat_set_point': 72.0, 'cool_set_point': 76.0
                    },
                    {'api_id': 'vacation', 'fan': 'off', 'heat_set_point': 60.0, 'cool_set_point': 80.0
                    }
                ]
            }
        ]
    }
}