[homekit] add support for flag "inverted" to lock accessory (#10169)

* add support for inverted to lock
* run spotless

Signed-off-by: Eugen Freiter <freiter@gmx.de>
This commit is contained in:
eugen 2021-02-16 19:19:37 +01:00 committed by GitHub
parent caa445a22b
commit e828baccca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 8 deletions

View File

@ -581,7 +581,7 @@ Switch motionsensor_tampered "Motion Sensor Tampered"
| | | Hue | Dimmer, Color | Hue |
| | | Saturation | Dimmer, Color | Saturation in % (1-100) |
| | | Brightness | Dimmer, Color | Brightness in % (1-100). See "Usage of dimmer modes" for configuration details. |
| | | ColorTemperature | Number | Color temperature which is represented in reciprocal megaKelvin, values - 50 to 400. should not be used in combination with hue, saturation and brightness |
| | | ColorTemperature | Number | NOT WORKING on iOS 14.x. Color temperature which is represented in reciprocal megaKelvin, values - 50 to 400. should not be used in combination with hue, saturation and brightness |
| Fan | | | | Fan |
| | ActiveStatus | | Switch | accessory current working status. A value of "ON"/"OPEN" indicates that the accessory is active and is functioning without any errors. |
| | | CurrentFanState | Number | current fan state. values: 0=INACTIVE, 1=IDLE, 2=BLOWING AIR |
@ -609,7 +609,7 @@ Switch motionsensor_tampered "Motion Sensor Tampered"
| | | LockControl | Number, Switch | status of physical control lock. values: 0/OFF=CONTROL LOCK DISABLED, 1/ON=CONTROL LOCK ENABLED |
| | | CoolingThresholdTemperature | Number | maximum temperature that must be reached before cooling is turned on. min/max/step can configured at item level, e.g. minValue=10.5, maxValue=50, step=2] |
| | | HeatingThresholdTemperature | Number | minimum temperature that must be reached before heating is turned on. min/max/step can configured at item level, e.g. minValue=10.5, maxValue=50, step=2] |
| Lock | | | | A Lock Mechanism |
| Lock | | | | A Lock Mechanism. with flag [inverted="true"] the default mapping to switch ON/OFF can be inverted. |
| | LockCurrentState | | Switch, Number | current state of lock mechanism (1/ON=SECURED, 0/OFF=UNSECURED, 2=JAMMED, 3=UNKNOWN) |
| | LockTargetState | | Switch | target state of lock mechanism (ON=SECURED, OFF=UNSECURED) |
| | | Name | String | Name of the lock |

View File

@ -40,10 +40,16 @@ import io.github.hapjava.services.impl.LockMechanismService;
*
*/
public class HomekitLockImpl extends AbstractHomekitAccessoryImpl implements LockMechanismAccessory {
final OnOffType securedState;
final OnOffType unsecuredState;
public HomekitLockImpl(HomekitTaggedItem taggedItem, List<HomekitTaggedItem> mandatoryCharacteristics,
HomekitAccessoryUpdater updater, HomekitSettings settings) {
super(taggedItem, mandatoryCharacteristics, updater, settings);
final String invertedConfig = getAccessoryConfiguration(HomekitTaggedItem.INVERTED, "false");
final boolean inverted = invertedConfig.equalsIgnoreCase("yes") || invertedConfig.equalsIgnoreCase("true");
securedState = inverted ? OnOffType.OFF : OnOffType.ON;
unsecuredState = inverted ? OnOffType.ON : OnOffType.OFF;
getServices().add(new LockMechanismService(this));
}
@ -56,7 +62,7 @@ public class HomekitLockImpl extends AbstractHomekitAccessoryImpl implements Loc
if (state instanceof DecimalType) {
lockState = LockCurrentStateEnum.fromCode(((DecimalType) state).intValue());
} else if (state instanceof OnOffType) {
lockState = state == OnOffType.ON ? LockCurrentStateEnum.SECURED : LockCurrentStateEnum.UNSECURED;
lockState = state == securedState ? LockCurrentStateEnum.SECURED : LockCurrentStateEnum.UNSECURED;
}
}
return CompletableFuture.completedFuture(lockState);
@ -67,7 +73,7 @@ public class HomekitLockImpl extends AbstractHomekitAccessoryImpl implements Loc
final @Nullable OnOffType state = getStateAs(HomekitCharacteristicType.LOCK_TARGET_STATE, OnOffType.class);
if (state != null) {
return CompletableFuture.completedFuture(
state == OnOffType.ON ? LockTargetStateEnum.SECURED : LockTargetStateEnum.UNSECURED);
state == securedState ? LockTargetStateEnum.SECURED : LockTargetStateEnum.UNSECURED);
}
return CompletableFuture.completedFuture(LockTargetStateEnum.UNSECURED);
// Apple HAP specification has only SECURED and UNSECURED values for lock target state.
@ -79,15 +85,13 @@ public class HomekitLockImpl extends AbstractHomekitAccessoryImpl implements Loc
getItem(HomekitCharacteristicType.LOCK_TARGET_STATE, SwitchItem.class).ifPresent(item -> {
switch (state) {
case SECURED:
// Close the door
if (item instanceof SwitchItem) {
item.send(OnOffType.ON);
item.send(securedState);
}
break;
case UNSECURED:
// Open the door
if (item instanceof SwitchItem) {
item.send(OnOffType.OFF);
item.send(unsecuredState);
}
break;
default: