Visonic Powermax Binding

Visonic produces the Powermax alarm panel series (PowerMax, PowerMax+, PowerMaxExpress, PowerMaxPro and PowerMaxComplete) and the Powermaster alarm series (PowerMaster 10 and PowerMaster 30). This binding allows you to control the alarm panel (arm/disarm) and allows you to use the Visonic sensors (movement, door contact, ...) within openHAB.

The PowerMax provides support for a serial interface that can be connected to the machine running openHAB. The serial interface is not installed by default but can be ordered from any PowerMax vendor (called the Visonic RS-232 Adaptor Kit).

Visonic does not provide a specification of the RS232 protocol and, thus, the binding uses the available protocol specification given at the ​domoticaforum.

The binding implemntation of this protocol is largely inspired by the Vera plugin.

Binding Configuration

This binding can be configured in the file services/powermax.cfg.

PropertyDefaultRequiredDescription
serialPortif connecting via serial portserial port to use for connecting to the PowerMax alarm system; e.g. COM1 for Windows and /dev/ttyS0 or /dev/ttyUSB0 for Linux
ipif connecting using a network connectionthe IP address to use for connecting to the PowerMax alarm system
tcpPortif connecting using a network connectionthe TCP port number to use for connecting to the PowerMax alarm system
motionOffDelay3Nodelay in minutes to reset a motion detection
allowArmingfalseNoenable (set to true) or disable (set to false) arming the PowerMax alarm system from openHAB. For security reason, this feature is disabled by default.
allowDisarmingfalseNoenable (set to true) or disable (set to false) disarming the PowerMax alarm system from openHAB. For security reason, this feature is disabled by default.
pinCodewhen Powerlink mode cannot be usedPIN code to use for arming/disarming the PowerMax alarm system from openHAB
forceStandardModefalseNoforce the standard mode rather than trying using the Powerlink mode. In this mode, the binding will not download the alarm panel setup and so the binding will not know what zones you have setup or what is your PIN code for example.
panelTypePowerMaxProwhen forcing the standard modemust be one of PowerMax, PowerMax+, PowerMaxPro, PowerMaxComplete, PowerMaxProPart, PowerMaxCompletePart, PowerMaxExpress, PowerMaster10, PowerMaster30
autoSyncTimefalseNoautomatic sync time at openHAB startup

Some notes:

  • On Linux, you may get an error stating the serial port cannot be opened when the Powermax plugin tries to load. You can get around this by adding the openhab user to the dialout group like this: usermod -a -G dialout openhab.
  • Also on Linux you may have issues with the USB if using two serial USB devices e.g. Powermax and RFXcom. See the wiki page for more on symlinking the USB ports here.
  • For Powerlink mode to work, the enrollment procedure has to be followed. If you don't enroll the Powerlink on the PowerMax the binding will operate in Standard mode, and if enrolled in Powerlink mode. On the newer software versions of the PowerMax the Powerlink enrollment is automatic, and the binding should only operate in 'Powerlink' mode (if enrollment is successful).

Item Configuration

General format is:

powermax="<selector>[:<parameter>]"

where <selector> is required and from the table below, and <parmater> is only required for a few selectors.

SelectorParameteritem typepurposechangeable
panel_mode-StringEither Standard, Powerlink or Downloadno
panel_type-StringType of the panelno
panel_serial-StringSerial numberno
panel_eprom-StringEPROM versionno
panel_software-StringSoftware versionno
panel_trouble-SwitchWhether a trouble is detected by the panel or notno
panel_alert_in_memory-SwitchWhether an alert is saved in panel memory or notno
partition_status-StringA short status summaryno
partition_ready-SwitchWhether the panel is ready or notno
partition_bypass-SwitchWhether at least one zone is bypassed or notno
partition_alarm-SwitchWhether an alarm is active or notno
partition_armed-SwitchWhether the system is armed or notyes (ON or OFF)
partition_arm_mode-StringPartition arm modeyes (possible values are Disarmed, Stay, Armed, StayInstant, ArmedInstant, Night and NightInstant)
zone_statuszone number (first zone is 1)Switch or ContactWhether the zone is tripped or notno
zone_last_tripzone number (first zone is 1)DateTimeTimestamp when the zone was last trippedno
zone_bypassedzone number (first zone is 1)SwitchWhether the zone is bypassed or notyes (ON or OFF)
zone_armedzone number (first zone is 1)String or SwitchWhether the zone is armed or notno
zone_low_batteryzone number (first zone is 1)SwitchWhether the sensor battery is low or notno
command-StringTo trigger a binding actionyes (possible values are get_event_log, download_setup, log_setup and help_items)
event_logentry number (1 for the most recent)StringEvent log entryno
PGM_status-SwitchPGM switch ON or OFFyes (ON or OFF)
X10_statusdevice number (first is 1)String or SwitchX10 device ON or OFFyes (possible values are ON, OFF, DIM and BRIGHT)

Actions

Defining such an item

String Powermax_command "Command [%s]" {powermax="command", autoupdate="false"}

You can trigger an action through a call in a rule:

Powermax_command.sendCommand("<command>")

Here are the available actions:

CommandAction
get_event_logRetrieve the event logs
download_setupRead the panel setup (and sync time)
log_setupLog information about the current panel setup
help_itemsLog information about how to create items and sitemap

Examples

Here is an example of what items you can define (only zone 1 and X10 device 1 are considered in this example):

items/powermaxdemo.items

Group GPowerMax "Alarm"

String Powermax_partition_status "Partition status [%s]" (GPowerMax) {powermax="partition_status"}
Switch Powermax_partition_ready "Partition ready" (GPowerMax) {powermax="partition_ready", autoupdate="false"}
Switch Powermax_partition_bypass "Partition bypass" (GPowerMax) {powermax="partition_bypass", autoupdate="false"}
Switch Powermax_partition_alarm "Partition alarm" (GPowerMax) {powermax="partition_alarm", autoupdate="false"}
Switch Powermax_panel_trouble "Panel trouble" (GPowerMax) {powermax="panel_trouble", autoupdate="false"}
Switch Powermax_panel_alert_in_mem "Panel alert in memory" (GPowerMax) {powermax="panel_alert_in_memory", autoupdate="false"}
Switch Powermax_partition_armed "Partition armed" (GPowerMax) {powermax="partition_armed", autoupdate="false"}
String Powermax_partition_arm_mode "Partition arm mode [%s]" (GPowerMax) {powermax="partition_arm_mode", autoupdate="false"}

Switch Powermax_zone1_status "Zone 1 status" (GPowerMax) {powermax="zone_status:1", autoupdate="false"}
Contact Powermax_zone1_status2 "Zone 1 status [%s]" (GPowerMax) {powermax="zone_status:1"}
DateTime Powermax_zone1_last_trip "Zone 1 last trip [%1$tH:%1$tM]" (GPowerMax) {powermax="zone_last_trip:1"}
Switch Powermax_zone1_bypassed "Zone 1 bypassed" (GPowerMax) {powermax="zone_bypassed:1", autoupdate="false"}
Switch Powermax_zone1_armed "Zone 1 armed" (GPowerMax) {powermax="zone_armed:1", autoupdate="false"}
Switch Powermax_zone1_low_battery "Zone 1 low battery" (GPowerMax) {powermax="zone_low_battery:1", autoupdate="false"}

String Powermax_command "Command [%s]" (GPowerMax) {powermax="command", autoupdate="false"}

String Powermax_event_log_1 "Event log 1 [%s]" (GPowerMax) {powermax="event_log:1"}
String Powermax_event_log_2 "Event log 2 [%s]" (GPowerMax) {powermax="event_log:2"}
String Powermax_event_log_3 "Event log 3 [%s]" (GPowerMax) {powermax="event_log:3"}
String Powermax_event_log_4 "Event log 4 [%s]" (GPowerMax) {powermax="event_log:4"}
String Powermax_event_log_5 "Event log 5 [%s]" (GPowerMax) {powermax="event_log:5"}

String Powermax_panel_mode "Panel mode [%s]" (GPowerMax) {powermax="panel_mode"}
String Powermax_panel_type "Panel type [%s]" (GPowerMax) {powermax="panel_type"}
String Powermax_panel_eeprom "EPROM [%s]" (GPowerMax) {powermax="panel_eprom"}
String Powermax_panel_software "Software version [%s]" (GPowerMax) {powermax="panel_software"}
String Powermax_panel_serial "Serial [%s]" (GPowerMax) {powermax="panel_serial"}

Switch Powermax_PGM_status "PGM status" (GPowerMax) {powermax="PGM_status", autoupdate="false"}
Switch Powermax_X10_1_status "X10 1 status" (GPowerMax) {powermax="X10_status:1", autoupdate="false"}
String Powermax_X10_1_status2 "X10 1 status [%s]" (GPowerMax) {powermax="X10_status:1", autoupdate="false"}

sitemaps/powermaxdemo.sitemap.fragment

Text label="Security" icon="lock" {
    Switch item=Powermax_partition_armed mappings=[OFF="Disarmed", ON="Armed"]
    Switch item=Powermax_partition_arm_mode mappings=[Disarmed="Disarmed", Stay="Armed home", Armed="Armed away"] valuecolor=[=="Armed"="green",=="Stay"="orange"]
    Switch item=Powermax_command mappings=[get_event_log="Event log", download_setup="Get setup", log_setup="Log setup", help_items="Help items"]
    Switch item=Powermax_X10_1_status2 mappings=[OFF="Off", ON="On", DIM="Dim", BRIGHT="Bright"]
    Group item=GPowerMax label="Alarm"
}

Limitations

  • Visonic does not provide a specification of the RS232 protocol and, thus, use this binding at your own risk.
  • The binding is not able to arm/disarm a particular partition.
  • The compatibility of the binding with the Powermaster alarm panel series is probably only partial.
  • The TCP connection is implemented but was not tested.