-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[homekit] Fix collecting characteristics that don't belong to a complex accessory #13233
Conversation
…ex accessory given: ``` Group eThermostat { homekit="Thermostat" } Number:Temperature Thermostat_AmbTemp (eThermostat) { homekit="CurrentTemperature" } Number:Temperature Thermostat_SetTemp (eThermostat) { homekit="TargetTemperature" } Group gThermostatZoneContacts // in reality there are multiple thermostats and multiple of these groups, // so that a rule on members of gThermostatZoneContacts can find the related // thermostat to turn it off when a window is open Group:Contact:OR(OPEN,CLOSED) gWindows (eThermostat, gThermostatZoneContacts) Contact Window_Contact (gWindows) { homekit="ContactSensor" } ``` When constructing the Thermostat accessory for eThermostat, detects the Window_Contact as a mandatory characteristic, because it's a base accessory in a nested group. This leads to lots of warnings about the temperature value of a contact item being out of range. The fix is two-fold - first of all, there's no reason to search nested groups for characteristics of a complex accessory. Second of all, even if for some reason you were to nest an accessory in an accessory, the nested accessory does not actually belong to the outer accessory, so don't add it as a mandatory characteristic of the outer. I suspect there's still one more bug, because AbstractHomekitAccessoryImpl. getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was returning Window_Contact, which is only tagged as a ContactSensor. But after fixing the above two bugs, it was no longer reproducible, and I didn't continue digging. Signed-off-by: Cody Cutrer <cody@cutrer.us>
Let @andylintner or @yfre review first. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@ccutrer small change from ".getAllMembers" to ".getMembers" with big, positive, impact. thanks. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code LGTM
…ex accessory (openhab#13233) given: ``` Group eThermostat { homekit="Thermostat" } Number:Temperature Thermostat_AmbTemp (eThermostat) { homekit="CurrentTemperature" } Number:Temperature Thermostat_SetTemp (eThermostat) { homekit="TargetTemperature" } Group gThermostatZoneContacts // in reality there are multiple thermostats and multiple of these groups, // so that a rule on members of gThermostatZoneContacts can find the related // thermostat to turn it off when a window is open Group:Contact:OR(OPEN,CLOSED) gWindows (eThermostat, gThermostatZoneContacts) Contact Window_Contact (gWindows) { homekit="ContactSensor" } ``` When constructing the Thermostat accessory for eThermostat, detects the Window_Contact as a mandatory characteristic, because it's a base accessory in a nested group. This leads to lots of warnings about the temperature value of a contact item being out of range. The fix is two-fold - first of all, there's no reason to search nested groups for characteristics of a complex accessory. Second of all, even if for some reason you were to nest an accessory in an accessory, the nested accessory does not actually belong to the outer accessory, so don't add it as a mandatory characteristic of the outer. I suspect there's still one more bug, because AbstractHomekitAccessoryImpl. getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was returning Window_Contact, which is only tagged as a ContactSensor. But after fixing the above two bugs, it was no longer reproducible, and I didn't continue digging. Signed-off-by: Cody Cutrer <cody@cutrer.us>
…ex accessory (openhab#13233) given: ``` Group eThermostat { homekit="Thermostat" } Number:Temperature Thermostat_AmbTemp (eThermostat) { homekit="CurrentTemperature" } Number:Temperature Thermostat_SetTemp (eThermostat) { homekit="TargetTemperature" } Group gThermostatZoneContacts // in reality there are multiple thermostats and multiple of these groups, // so that a rule on members of gThermostatZoneContacts can find the related // thermostat to turn it off when a window is open Group:Contact:OR(OPEN,CLOSED) gWindows (eThermostat, gThermostatZoneContacts) Contact Window_Contact (gWindows) { homekit="ContactSensor" } ``` When constructing the Thermostat accessory for eThermostat, detects the Window_Contact as a mandatory characteristic, because it's a base accessory in a nested group. This leads to lots of warnings about the temperature value of a contact item being out of range. The fix is two-fold - first of all, there's no reason to search nested groups for characteristics of a complex accessory. Second of all, even if for some reason you were to nest an accessory in an accessory, the nested accessory does not actually belong to the outer accessory, so don't add it as a mandatory characteristic of the outer. I suspect there's still one more bug, because AbstractHomekitAccessoryImpl. getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was returning Window_Contact, which is only tagged as a ContactSensor. But after fixing the above two bugs, it was no longer reproducible, and I didn't continue digging. Signed-off-by: Cody Cutrer <cody@cutrer.us>
…ex accessory (openhab#13233) given: ``` Group eThermostat { homekit="Thermostat" } Number:Temperature Thermostat_AmbTemp (eThermostat) { homekit="CurrentTemperature" } Number:Temperature Thermostat_SetTemp (eThermostat) { homekit="TargetTemperature" } Group gThermostatZoneContacts // in reality there are multiple thermostats and multiple of these groups, // so that a rule on members of gThermostatZoneContacts can find the related // thermostat to turn it off when a window is open Group:Contact:OR(OPEN,CLOSED) gWindows (eThermostat, gThermostatZoneContacts) Contact Window_Contact (gWindows) { homekit="ContactSensor" } ``` When constructing the Thermostat accessory for eThermostat, detects the Window_Contact as a mandatory characteristic, because it's a base accessory in a nested group. This leads to lots of warnings about the temperature value of a contact item being out of range. The fix is two-fold - first of all, there's no reason to search nested groups for characteristics of a complex accessory. Second of all, even if for some reason you were to nest an accessory in an accessory, the nested accessory does not actually belong to the outer accessory, so don't add it as a mandatory characteristic of the outer. I suspect there's still one more bug, because AbstractHomekitAccessoryImpl. getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was returning Window_Contact, which is only tagged as a ContactSensor. But after fixing the above two bugs, it was no longer reproducible, and I didn't continue digging. Signed-off-by: Cody Cutrer <cody@cutrer.us> Signed-off-by: Andras Uhrin <andras.uhrin@gmail.com>
…ex accessory (openhab#13233) given: ``` Group eThermostat { homekit="Thermostat" } Number:Temperature Thermostat_AmbTemp (eThermostat) { homekit="CurrentTemperature" } Number:Temperature Thermostat_SetTemp (eThermostat) { homekit="TargetTemperature" } Group gThermostatZoneContacts // in reality there are multiple thermostats and multiple of these groups, // so that a rule on members of gThermostatZoneContacts can find the related // thermostat to turn it off when a window is open Group:Contact:OR(OPEN,CLOSED) gWindows (eThermostat, gThermostatZoneContacts) Contact Window_Contact (gWindows) { homekit="ContactSensor" } ``` When constructing the Thermostat accessory for eThermostat, detects the Window_Contact as a mandatory characteristic, because it's a base accessory in a nested group. This leads to lots of warnings about the temperature value of a contact item being out of range. The fix is two-fold - first of all, there's no reason to search nested groups for characteristics of a complex accessory. Second of all, even if for some reason you were to nest an accessory in an accessory, the nested accessory does not actually belong to the outer accessory, so don't add it as a mandatory characteristic of the outer. I suspect there's still one more bug, because AbstractHomekitAccessoryImpl. getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was returning Window_Contact, which is only tagged as a ContactSensor. But after fixing the above two bugs, it was no longer reproducible, and I didn't continue digging. Signed-off-by: Cody Cutrer <cody@cutrer.us>
…ex accessory (openhab#13233) given: ``` Group eThermostat { homekit="Thermostat" } Number:Temperature Thermostat_AmbTemp (eThermostat) { homekit="CurrentTemperature" } Number:Temperature Thermostat_SetTemp (eThermostat) { homekit="TargetTemperature" } Group gThermostatZoneContacts // in reality there are multiple thermostats and multiple of these groups, // so that a rule on members of gThermostatZoneContacts can find the related // thermostat to turn it off when a window is open Group:Contact:OR(OPEN,CLOSED) gWindows (eThermostat, gThermostatZoneContacts) Contact Window_Contact (gWindows) { homekit="ContactSensor" } ``` When constructing the Thermostat accessory for eThermostat, detects the Window_Contact as a mandatory characteristic, because it's a base accessory in a nested group. This leads to lots of warnings about the temperature value of a contact item being out of range. The fix is two-fold - first of all, there's no reason to search nested groups for characteristics of a complex accessory. Second of all, even if for some reason you were to nest an accessory in an accessory, the nested accessory does not actually belong to the outer accessory, so don't add it as a mandatory characteristic of the outer. I suspect there's still one more bug, because AbstractHomekitAccessoryImpl. getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was returning Window_Contact, which is only tagged as a ContactSensor. But after fixing the above two bugs, it was no longer reproducible, and I didn't continue digging. Signed-off-by: Cody Cutrer <cody@cutrer.us>
given:
When constructing the Thermostat accessory for eThermostat, detects the
Window_Contact as a mandatory characteristic, because it's a base accessory
in a nested group. This leads to lots of warnings about the temperature
value of a contact item being out of range.
The fix is two-fold - first of all, there's no reason to search nested
groups for characteristics of a complex accessory. Second of all,
even if for some reason you were to nest an accessory in an accessory,
the nested accessory does not actually belong to the outer accessory,
so don't add it as a mandatory characteristic of the outer.
I suspect there's still one more bug, because AbstractHomekitAccessoryImpl.
getCharacteristic(HomekitCharacteristicType.CURRENT_TEMPERATURE) was
returning Window_Contact, which is only tagged as a ContactSensor. But
after fixing the above two bugs, it was no longer reproducible, and I
didn't continue digging.