diff --git a/bundles/org.openhab.binding.paradoxalarm/README.md b/bundles/org.openhab.binding.paradoxalarm/README.md index 55ceb2f95b6..20be7230d3c 100644 --- a/bundles/org.openhab.binding.paradoxalarm/README.md +++ b/bundles/org.openhab.binding.paradoxalarm/README.md @@ -76,7 +76,8 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9 | Channel | Type | Description | |--------------------------|---------|-----------------------------------------------------------------------------------------------| | partitionLabel | String | Label of partition inside Paradox configuration | -| state | String |State of partition (armed, disarmed, in alarm) | +| state | String | Calculated overall state of the partition (Armed, Disarmed, In Alarm) | +| detailedState | String | Calculated detailed state of the partition based on partition state bits (see below table for possible values) | | additionalState | String | This used to be a channel where all different states were consolidated as semi-colon separated string. With implementation of each state as channel additional states should be no longer used. (deprecated channel) | | readyToArm | Switch | Partition is Ready to arm | | inExitDelay | Switch | Partition is in Exit delay | @@ -95,6 +96,13 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9 | allZonesClosed | Contact | All zones in partition are currently closed | | command | String | Command to be send to partition. Can be (ARM, DISARM, FORCE_ARM, INSTANT_ARM, STAY_ARM, BEEP) | +### Partition detailed state possible values: +| Overall state value | Detailed state value (depending on the sub-state) | +|--------------------------|----------------------------------------------------------------------------------------------| +| InAlarm | Silent Alarm, Audible Alarm, Fire Alarm, In Alarm (if none of the first three) | +| Armed | Away Armed, Stay Armed, NoEntry Armed, Armed (if none of the first three) | +| Disarmed | Disarmed | + ### Zone channels: | Channel | Type | Description | diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxAlarmBindingConstants.java b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxAlarmBindingConstants.java index a082d7c8085..74d4f43eddf 100644 --- a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxAlarmBindingConstants.java +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxAlarmBindingConstants.java @@ -69,6 +69,7 @@ public class ParadoxAlarmBindingConstants { public static final String PARTITION_LABEL_CHANNEL_UID = "label"; public static final String PARTITION_STATE_CHANNEL_UID = "state"; + public static final String PARTITION_DETAILED_STATE_CHANNEL_UID = "detailedState"; @Deprecated // After implementation of channels for every possible state, the summarized additional states is no // longer needed. We'll keep it for backward compatibility public static final String PARTITION_ADDITIONAL_STATES_CHANNEL_UID = "additionalStates"; diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxPartitionHandler.java b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxPartitionHandler.java index bfdcd92f614..8ca6ed97a5f 100644 --- a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxPartitionHandler.java +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/handlers/ParadoxPartitionHandler.java @@ -48,6 +48,7 @@ public class ParadoxPartitionHandler extends EntityBaseHandler { if (partition != null) { updateState(PARTITION_LABEL_CHANNEL_UID, new StringType(partition.getLabel())); updateState(PARTITION_STATE_CHANNEL_UID, new StringType(partition.getState().getMainState())); + updateState(PARTITION_DETAILED_STATE_CHANNEL_UID, new StringType(partition.getState().getDetailedState())); updateState(PARTITION_ADDITIONAL_STATES_CHANNEL_UID, new StringType("Deprecated field. Use direct channels instead")); updateState(PARTITION_READY_TO_ARM_CHANNEL_UID, booleanToSwitchState(partition.getState().isReadyToArm())); diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/Partition.java b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/Partition.java index 91dae6baf3b..e65a3820991 100644 --- a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/Partition.java +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/Partition.java @@ -40,7 +40,11 @@ public class Partition extends Entity implements Commandable { public Partition setState(PartitionState state) { this.state = state; - logger.debug("Partition {}:\t{}", getLabel(), getState().getMainState()); + logger.debug("Partition {} main state:\t{}", getLabel(), getState().getMainState()); + if (logger.isTraceEnabled()) { + logger.trace("Partition {} detailed state:\t{}", getLabel(), getState().getDetailedState()); + logger.trace("Partition {} full state dump:\t{}", getLabel(), getState()); + } return this; } diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/PartitionState.java b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/PartitionState.java index 7bf69e3c84a..ed44c464504 100644 --- a/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/PartitionState.java +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/PartitionState.java @@ -19,6 +19,16 @@ package org.openhab.binding.paradoxalarm.internal.model; */ public class PartitionState { + private static final String ARMED = "Armed"; + private static final String DISARMED = "Disarmed"; + private static final String IN_ALARM = "InAlarm"; + + private static final String ARMED_IN_NO_ENTRY = "NoEntry Armed"; + private static final String ARMED_IN_STAY = "Stay Armed"; + private static final String ARMED_IN_AWAY = "Away Armed"; + private static final String FIRE_ALARM = "Fire Alarm"; + private static final String AUDIBLE_ALARM = "Audible Alarm"; + private static final String SILENT_ALARM = "Silent Alarm"; private boolean isArmed; private boolean isArmedInAway; private boolean isArmedInStay; @@ -47,13 +57,37 @@ public class PartitionState { private boolean areAllZoneclosed; public String getMainState() { - if (isInAlarm) { - return "InAlarm"; + if (isInAlarm || isInSilentAlarm || isInAudibleAlarm || isInFireAlarm) { + return IN_ALARM; } else { - return isArmed || isArmedInAway || isArmedInStay || isArmedInNoEntry ? "Armed" : "Disarmed"; + return isArmed || isArmedInAway || isArmedInStay || isArmedInNoEntry ? ARMED : DISARMED; } } + public String getDetailedState() { + if (isInAlarm) { + if (isInSilentAlarm) { + return SILENT_ALARM; + } else if (isInAudibleAlarm) { + return AUDIBLE_ALARM; + } else if (isInFireAlarm) { + return FIRE_ALARM; + } + return IN_ALARM; + } else if (isArmed) { + if (isArmedInAway) { + return ARMED_IN_AWAY; + } else if (isArmedInStay) { + return ARMED_IN_STAY; + } else if (isArmedInNoEntry) { + return ARMED_IN_NO_ENTRY; + } + return ARMED; + } + + return DISARMED; + } + @Override public String toString() { return "PartitionState [isArmed=" + isArmed + ", isArmedInAway=" + isArmedInAway + ", isArmedInStay=" diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/i18n/paradoxalarm.properties b/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/i18n/paradoxalarm.properties index b59bfef8add..0233610f5d3 100644 --- a/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/i18n/paradoxalarm.properties +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/i18n/paradoxalarm.properties @@ -69,6 +69,8 @@ channel-type.paradoxalarm.command.state.option.BYPASS = Bypass channel-type.paradoxalarm.command.state.option.CLEAR_BYPASS = Clear Bypass channel-type.paradoxalarm.communicationState.label = Bridge Communication State channel-type.paradoxalarm.communicationState.description = Status of connection to Paradox system +channel-type.paradoxalarm.detailedState.label = Detailed Partition State +channel-type.paradoxalarm.detailedState.description = The detailed state of partition (contains sub-states like Stay in Armed, Armed no entry, etc) channel-type.paradoxalarm.forceReady.label = Partition Is Force Ready channel-type.paradoxalarm.forceReady.description = Partition is Force Ready channel-type.paradoxalarm.generatedAlarm.label = Generated an Alarm diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/thing/partition.xml b/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/thing/partition.xml index f5d1771eb60..0375a0350df 100644 --- a/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/thing/partition.xml +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/thing/partition.xml @@ -15,6 +15,7 @@ + @@ -34,6 +35,10 @@ + + 1 + + @@ -59,6 +64,12 @@ State of partition + + String + + The detailed state of partition (contains sub-states like Stay in Armed, Armed no entry, etc) + + String diff --git a/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/update/partition_type_update.xml b/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/update/partition_type_update.xml new file mode 100644 index 00000000000..7541ba8a354 --- /dev/null +++ b/bundles/org.openhab.binding.paradoxalarm/src/main/resources/OH-INF/update/partition_type_update.xml @@ -0,0 +1,14 @@ + + + + + + + paradoxalarm:detailedState + + + + +