I’ve dug into this some more, and the issue seems to be what is being returned by the infinitive server.
I’ve added a debug logger to the update(self):
def update(self):
"""Update current status from infinitive device."""
_LOGGER.debug("Updating Infinitive status")
status = self._inf_device.get_status()
_LOGGER.debug("status retrived")
_LOGGER.debug(status)
_LOGGER.debug("try keys")
And debug log indicates that only some of the status variables are being returned
2021-11-05 14:27:57 DEBUG (SyncWorker_2) [custom_components.infinitive.climate] Updating Infinitive status
2021-11-05 14:27:57 DEBUG (SyncWorker_2) [custom_components.infinitive.climate] status retrived
2021-11-05 14:27:57 DEBUG (SyncWorker_2) [custom_components.infinitive.climate] {'currentTemp': 23, 'currentHumidity': 39, 'outdoorTemp': 10, 'mode': 'heat', 'coolActive': False, 'heatActive': False, 'fanMode': 'low', 'hold': False, 'heatSetpoint': 19, 'coolSetpoint': 26}
2021-11-05 14:27:57 DEBUG (SyncWorker_2) [custom_components.infinitive.climate] try keys
2021-11-05 14:27:57 DEBUG (SyncWorker_2) [custom_components.infinitive.climate] dict_keys(['currentTemp', 'currentHumidity', 'outdoorTemp', 'mode', 'coolActive', 'heatActive', 'fanMode', 'hold', 'heatSetpoint', 'coolSetpoint'])
2021-11-05 14:27:57 DEBUG (SyncWorker_2) [custom_components.infinitive.climate] Status update error: 'blowerRPM'
The question is why?
I don’t know where the actual pyinfinitive.py is on my system (it’s clearly there since things are working), but looking at its code listing on github, I see the following:
def get_status(self):
"""Return current status of an infinitive device."""
configstatus = self._get_configstatus(self.config_url, '')
handlerstatus = self._get_configstatus(self.airhandler_url, '')
heatpumpstatus = self._get_configstatus(self.heatpump_url, 'heatpump_')
return {**configstatus, **heatpumpstatus, **handlerstatus}
As far as I can tell, the status variables being returned do not quite match what’s expected. According to infinitive’s GitHub page, configstatus should return the following:
{
"tempUnit":"F",
"currentTemp": 70,
"currentHumidity": 50,
"outdoorTemp": 50,
"mode": "heat",
"stage":2,
"fanMode": "auto",
"hold": true,
"holdDurationMins":0,
"heatSetpoint": 68,
"coolSetpoint": 74,
"targetHumidity":45,
"rawMode": 64
}
Compare that to what I get back in a status update:
“tempUnit” no
“currentTemp” yes
“currentHumidity” yes
“outdoorTemp” yes
“mode” yes
“stage” no, unless that’s “coolActive” or “heatActive”
“fanMode” yes
“hold” yes
“holdDurationMins” no
“heatSetpoint” yes
“coolSetpoint” yes
“targetHumidity” no [maybe because my system does not have a humidifier?]
“rawMode” no
It’s clear that I am not getting back anything for heatpumpstatus or handlerstatus, which have the blowerRPM and airflwoCFM status variables.
I feel like I am missing something here …