# Paradox Alarm System binding
![](/logos/paradoxalarm.png)
This binding is intended to provide basic support for Paradox Alarm system.
With the power of openHAB this binding can be used for complex decision rules combining motion/magnetic sensor or whole partitions states with different scenarios.
Examples:
- All partitions are armed, therefore there is no one at home.
- Window is opened for more than 10 minutes and temperature outside is bellow XXX degrees, send mail/any other supported notification to particular people.
# Supported Paradox panels/systems
Currently binding supports the following panels: EVO192, EVO48(not tested), EVO96(not tested)
# Supported things
Thing | Thing Type | Description |
---|---|---|
ip150 | Bridge | The bridge is used to communicate with IP150 ethernet module attached to Paradox security system. |
panel | Thing | This is representation of Paradox panel. Has the general information about the main panel module, i.e. serial number, firmware/hardware/software versions, panel type, etc... |
partition | Thing | The partition is grouped aggregation of multiple zones. It's also referred in Paradox Babyware as "Area". |
zone | Thing | Paradox zone. Can be anything - magnetic, motion or any other opened/closed sensor. State channel is contact, "low battery" and "is tampered" channels are switch, label is String |
# Things configuration
# IP150 bridge parameters
Parameter | Description |
---|---|
refresh | Value is in seconds. Defines the refresh interval when the binding polls from paradox system. Optional parameter. Default 5 seconds. |
ip150Password | The password to your IP150 (not your panel PIN). Mandatory parameter. |
pcPassword | The panel programming code 3012 setting. Optional parameter. Default value is 0000. |
ipAddress | IP address or hostname of your IP150. If hostname is used must be resolvable by OpenHAB. Mandatory parameter. |
port | The port used for data communication. Optional parameter. Default value is 10000. |
panelType | If parameter is passed, auto-discovery of panel type will be skipped. Provide string - EVO48, EVO96, EVO192, etc... Optional parameter. |
reconnectWaitTime | Value is in seconds. The time to wait before a reconnect occurs after socket timeout. Optional parameter. Default value is 30 seconds. |
maxPartitions | Sets maximum partitions to use during refresh. If not set, maximum allowed amount from panelType will be used. Optional parameter. |
maxZones | Sets maximum zones to use during refresh. If not set, maximum allowed amount from panelType will be used. Optional parameter. |
encrypt | Sets if encryption has to be used. Optional parameter. Default value is false |
# IP150 bridge channels
Channel | Description |
---|---|
communicationCommand | Possible values [LOGOUT, LOGIN, RESET] |
communicationState | Shows the communication status to Paradox. Different from Bridge status. Bridge may be online and able to receive commands but communication may be offline due to various reasons. Possible values [Offline, Online] |
# Communication command channel allowed values
Value | Description |
---|---|
LOGOUT | Logs out and disconnects from Paradox alarm system |
LOGIN | Creates socket if necessary, connects to paradox system and uses the logon data from the thing parameters to connect. |
RESET | Does logout and then login with recreation of communicator objects inside the code. |
# Entities (zones, partitions) configuration parameters:
Value | Description |
---|---|
id | The numeric ID of the zone/partition |
disarmEnabled | Optional boolean flag. Valid for partitions. When set to true the command DISARM will be allowed for the partition where the flag is enabled. CAUTION: Enabling DISARM command can be dangerous. If attacker can gain access to your openHAB (via API or UI), this command can be used to disarm your armed partition (area) |
# Panel channels:
Channel | Type | Description |
---|---|---|
state | String | Overall panel state |
inputVoltage | Number:ElectricPotential | Supply Voltage |
boardVoltage | Number:ElectricPotential | Board DC Voltage |
batteryVoltage | Number:ElectricPotential | Battery Voltage |
panelTime | DateTime | Panel internal time (Timezone is set to default zone of the Java virtual machine) |
# Partition channels:
Channel | Type | Description |
---|---|---|
partitionLabel | String | Label of partition inside Paradox configuration |
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 |
inEntryDelay | Switch | Partition in Entry Delay |
inTrouble | Switch | Partition has trouble |
alarmInMemory | Switch | Partition has alarm in memory |
zoneBypass | Switch | Partition is in Zone Bypass |
zoneInTamperTrouble | Switch | Partition is in Tamper Trouble |
zoneInLowBatteryTrouble | Switch | Partition has zone in Low Battery Trouble |
zoneInFireLoopTrouble | Switch | Partition has zone in Fire Loop Trouble |
zoneInSupervisionTrouble | Switch | Partition has zone in Supervision Trouble |
stayInstantReady | Switch | Partition is in state Stay Instant Ready |
forceReady | Switch | Partition is in state Force Ready |
bypassReady | Switch | Partition is in state Bypass Ready |
inhibitReady | Switch | Partition is in state Inhibit Ready |
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 |
---|---|---|
zoneLabel | String | Label of zone inside Paradox configuration |
openedState | Contact | Zone opened / closed |
tamperedState | Switch | Zone is tampered |
supervisionTrouble | Switch | Zone is in supervision trouble |
inTxDelay | Switch | Zone is in txDelay |
shutdown | Switch | Zone is shutdown |
bypassed | Switch | Zone is bypassed |
hasActivatedIntellizoneDelay | Switch | Zone is has an activated Intellizone delay |
hasActivatedEntryDelay | Switch | Zone is has an activated entry delay |
presentlyInAlarm | Switch | Zone is currently in alarm |
generatedAlarm | Switch | Zone has generated an alarm |
command | String | Command for zone. Can be (BYPASS, CLEAR_BYPASS) |
# Example things configuration
Bridge paradoxalarm:ip150:ip150 [refresh=5, panelType="EVO192", ip150Password="********", pcPassword="0000", ipAddress=XXX.XXX.XXX.XXX", port=10000, reconnectWaitTime=10, maxPartitions=4, maxZones=50, encrypt=true ] {
Thing panel panel
Thing partition partition1 [id=1]
Thing partition partition2 [id=2]
Thing partition partition3 [id=3]
Thing partition partition4 [id=4]
Thing zone MotionSensor1 [id=1]
Thing zone MagneticSensorWindow1 [id=2]
Thing zone MotionSensor2 [id=3]
Thing zone MagneticSensorWindow2 [id=4]
}
# Example items configuration
//Groups
Group Paradox "Paradox security group"
Group Partitions "Paradox partitions" (Paradox)
Group Floor1MUC "Magnetic sensors - Floor 1" (Paradox)
Group Floor2MUC "Magnetic sensors - Floor 2" (Paradox)
Group Floor3MUC "Magnetic sensors - Floor 3" (Paradox)
Group PIRSensors "Motion sensors" (Paradox)
//COMMUNICATOR BRIDGE
String paradoxSendCommand "Send command to IP150" {channel="paradoxalarm:ip150:ip150:communicationCommand"}
String panelState "Paradox panel state: [%s]"<network> (Paradox) { channel = "paradoxalarm:ip150:ip150:communicationState" }
Number paradoxAcVoltage “Input Voltage: [%.1f V]” (Paradox) { channel = “paradoxalarm:panel:ip150:panel:inputVoltage” }
Number paradoxDcVoltage “Board DC Voltage: [%.1f V]” (Paradox) { channel = “paradoxalarm:panel:ip150:panel:boardVoltage” }
Number paradoxBatteryVoltage “Battery Voltage: [%.1f V]” (Paradox) { channel = “paradoxalarm:panel:ip150:panel:batteryVoltage” }
DateTime paradoxTime "Paradox Time: [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1tS]" <lock> (Paradox) { channel = "paradoxalarm:panel:ip150:panel:panelTime" }
//PARTITIONS
String partition1State "Magnetic sensors - Floor 1: [%s]" (Partitions) { channel = "paradoxalarm:partition:ip150:partition1:state" }
String partition1Command "Command for MUCFL1: [%s]" <lock> (Partitions) { channel = "paradoxalarm:partition:ip150:partition1:command" }
//ZONES
Contact CorridorFl1_PIR_state "Corridor Fl1 motion: [%s]" (PIRSensors) { channel = "paradoxalarm:zone:ip150:MotionSensor1:opened" }
Contact CorridorFl1_MUC_state "Corridor Fl1 window: [%s]" (Floor1MUC) { channel = "paradoxalarm:zone:ip150:MagneticSensorWindow1:opened" }
# Example sitemap configuration
Text label="Security" icon="lock" {
Frame label="IP150 communication" {
Text item=panelState valuecolor=[panelState=="Online"="green", panelState=="Offline"="red"]
Selection item=paradoxSendCommand mappings=["LOGOUT"="Logout", "LOGIN"="Login", "RESET"="Reset"]
}
Frame label="Panel" {
Text item=paradoxTime
Text item=paradoxAcVoltage
Text item=paradoxDcVoltage
Text item=paradoxBatteryVoltage
}
Frame label="Partitions" {
Text item=partition1State valuecolor=[partition1State=="Disarmed"="green", partition1State=="Armed"="red"]
Selection item=partition1Command mappings=["ARM"="Arm", "FORCE_ARM"="Force Arm", "STAY_ARM"="Stay Arm", "INSTANT_ARM"="Instant Arm", "BEEP"="Keyboard Beep"]
}
Frame label="Zones" {
Group item=Floor1MUC
Group item=Floor2MUC
Group item=Floor3MUC
Group item=PIRSensors
}
}
# Acknowledgements
This binding would not be possible without the reverse engineering of the byte level protocol and the development by other authors in python, C# and other languages. Many thanks to the following authors and their respective GitHub repositories for their development that helped in creating this binding:
João Paulo Barraca - https://github.com/ParadoxAlarmInterface/pai (opens new window)
Jean Henning - repository not available
Tertuish - https://github.com/Tertiush/ParadoxIP150v2 (opens new window) / https://github.com/Tertiush/ParadoxIP150 (opens new window)
← Orvibo Pentair Pool →