This is a standalone Comfort to MQTT bridge for Cytech's Comfort II Ultra Alarm system with UCM/ETH03 (or ETH02) module primarily intended to integrate with Home Assistant (or OpenHAB or other MQTT compatible systems). It can run on a Raspberry Pi and other systems with Python 3 support.
With Home Assistant, you can further extend the Comfort system with more complex logic, inputs, outputs and actions. Using virtual inputs, you can define additional zones in Comfort triggered by any sensor available in your Home Assistant setup. Or vice-versa, having Comfort trigger any action in your Home Assistant setup.
You should be familiar with configuring Comfort using the Comfigurator tool first. Comfigurator, Comfort manuals and protocol definition available at www.cytech.biz
Requires paho-mqtt client. Install using
sudo pip3 install paho-mqtt
Download and save comfort2.py to your home folder /home/pi or anywhere else you prefer.
Edit comfort2.py:
MQTTBROKERIP = "localhost"
MQTTBROKERPORT = 1883
MQTTUSERNAME = ""
MQTTPASSWORD = ""
COMFORTIP = "192.168.123.88"
COMFORTPORT = 1001
PINCODE = "1234"
The following MQTT topics are published:
comfort2/alarm - current MQTT alarm state (disarmed, pending, armed_home, armed_away, triggered)
comfort2/alarm/online - 1 for online, 0 for offline
comfort2/alarm/message - informational messages, e.g. the zone that triggered the alarm
comfort2/alarm/timer - countdown entry/exit timer in seconds when arming to away mode or entering. updates every second.
comfort2/input1 - 1 for open/active, 0 for closed/inactive. the state of the zone input. includes virtual input
comfort2/input2
...
comfort2/input96
comfort2/output1 - 1 for on, 0 for off
...
comfort2/output16
comfort2/flag1 - 1 for on, 0 for off
...
comfort2/flag255
The following MQTT topics are subscribed:
comfort2/alarm/set - sent from Home Assistant, DISARM, ARMED_HOME or ARMED_AWAY
comfort2/input17/set - 1 for open/active, 0 for closed/inactive. virtual input to integrate with any sensor in Home Assistant
...
comfort2/input64/set
comfort2/output1/set - 1 for on, 0 for off. activates the output
...
comfort2/output16/set
comfort2/response1/set - value is ignored. Comfort response is activated as programmed in Comfigurator
...
comfort2/response255/set
comfort2/flag1/set - 1 for on, 0 for off
...
comfort2/flag255/set
configuration.yaml:
alarm_control_panel: - platform: mqtt name: Comfort Alarm state_topic: "comfort2/alarm" command_topic: "comfort2/alarm/set" availability_topic: "comfort2/alarm/online" payload_available: "1" payload_not_available: "0" code: "1234" #code can be different from Comfort's binary_sensor: - platform: mqtt name: Front Door state_topic: "comfort2/input1" availability_topic: "comfort2/alarm/online" payload_on: "1" payload_off: "0" payload_available: "1" payload_not_available: "0" - platform: mqtt name: Front Motion state_topic: "comfort2/input8" availability_topic: "comfort2/alarm/online" payload_on: "1" payload_off: "0" payload_available: "1" payload_not_available: "0" sensor: - platform: mqtt name: Alarm Message state_topic: "comfort2/alarm/message" availability_topic: "comfort2/alarm/online" payload_available: "1" payload_not_available: "0" - platform: mqtt name: Alarm Countdown unit_of_measurement: "s" state_topic: "comfort2/alarm/timer" availability_topic: "comfort2/alarm/online" payload_available: "1" payload_not_available: "0"
switch:
Sends notifications to your phone if alarm state changes
automations.yaml:
- action: service: notify.notify data_template: title: '{{ trigger.to_state.attributes.friendly_name }}' message: "{% if is_state('alarm_control_panel.comfort_alarm', 'armed_home')\ \ %}\n Armed Home\n{% elif is_state('alarm_control_panel.comfort_alarm',\ \ 'armed_away') %}\n Armed Away\n{% elif is_state('alarm_control_panel.comfort_alarm',\ \ 'disarmed') %}\n Disarmed\n{% elif is_state('alarm_control_panel.comfort_alarm',\ \ 'pending') %}\n Pending\n{% elif is_state('alarm_control_panel.comfort_alarm',\ \ 'triggered') %}\n Triggered\n{% else %}\n {{ trigger.to_state.state\ \ }}\n{% endif %}\n" id: alarm_state_notification alias: Alarm State Notification trigger: platform: state entity_id: alarm_control_panel.comfort_alarm
Running
Make sure nothing else is connected to your Comfort system via ETH02/ETH03 on the specified port.
python3 comfort2.py
It should automatically connect to both Comfort and Home Assistant. It will hold the connection to Comfort so you cannot use Comfigurator or anything that connects to Comfort on the specified port. Use Ctrl-C to exit.
To autostart and run in the background as a systemd service (as pi user), create
sudo nano -w /etc/systemd/system/comfort2@pi.service
with the following content:
[Unit]
Description=Comfort 2
After=network-online.target
[Service]
Type=simple
User=%i
ExecStart=/usr/bin/python3 /home/pi/comfort2/comfort2.py
[Install]
WantedBy=multi-user.target
The startup order doesn't really matter as it will auto-connect to your Home Assistant. Then do:
sudo systemctl --system daemon-reload
sudo systemctl enable comfort2@pi.service
sudo systemctl start comfort2@pi.service
It should then be all working. Subsequently on reboot it will automatically start without having to do anything.