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
+
+
+
+
+