I’ve seen a lot of projects that put their alarm code into their yaml which I wanted to avoid since I want to be able to easily change it and have multiple. So I use Alarmo instead of the regular since this does support multiple different codes on the hass side.
esphome:
name: alarm-panel
friendly_name: alarm-panel
on_boot:
priority: 200
then:
- wait_until:
condition:
wifi.connected:
timeout: 5s
esp8266:
board: d1_mini
logger:
api:
# password: !secret api_password
encryption:
key: !secret api_encryption_key
ota:
password: !secret ota_pass
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
captive_portal:
web_server:
port: 80
include_internal: True
i2c:
sda: D3
scl: D2
frequency: 400kHz
text_sensor:
- platform: homeassistant
entity_id: alarm_control_panel.alarmo
name: "Alarm"
id: ha_alarm
- platform: template
name: "Keypad code"
id: keypad_text
internal: true
- platform: template
name: "Keypad display code"
id: keypad_display_text
internal: true
filters:
# fix this
- substitute:
- "1 -> *"
- "2 -> *"
- "3 -> *"
- "4 -> *"
- "5 -> *"
- "6 -> *"
- "7 -> *"
- "8 -> *"
- "9 -> *"
- "0 -> *"
display:
- platform: lcd_pcf8574
dimensions: 20x4
address: 0x27
update_interval: 0.1s
lambda: |-
it.printf("Alarm: %s", id(ha_alarm).state.c_str());
it.printf(0, 1, "Code: %s", id(keypad_display_text).state.c_str());
pcf8574:
- id: 'pcf8574_hub'
address: 0x3C
pcf8575: false
matrix_keypad:
id: alarm_keypad
# has_diodes: False
keys: "123A456B789C*0#D"
# keys: "123456789*0#"
# https://learn.adafruit.com/matrix-keypad/pinouts
# 3x4 Matrix Keypad (PID 3845)
# 1 c2 7
# 2 r1 6
# 3 c1 5
# 4 r4 4
# 5 c3 3
# 6 r3 2
# 7 r2 1
columns:
- pin:
pcf8574: pcf8574_hub
number: 0
mode: INPUT
inverted: False
- pin:
pcf8574: pcf8574_hub
number: 1
mode: INPUT
inverted: False
- pin:
pcf8574: pcf8574_hub
number: 2
mode: INPUT
inverted: False
- pin:
pcf8574: pcf8574_hub
number: 3
mode: INPUT
inverted: False
rows:
- pin:
pcf8574: pcf8574_hub
number: 4
mode: OUTPUT
inverted: False
- pin:
pcf8574: pcf8574_hub
number: 5
mode: OUTPUT
inverted: False
- pin:
pcf8574: pcf8574_hub
number: 6
mode: OUTPUT
inverted: False
- pin:
pcf8574: pcf8574_hub
number: 7
mode: OUTPUT
inverted: False
key_collector:
- id: alarm_code_reader
source_id: alarm_keypad
min_length: 4
max_length: 8
end_keys: "#"
end_key_required: True
back_keys: "B"
clear_keys: "C"
allowed_keys: "0123456789A"
timeout: 15s
on_progress:
then:
- text_sensor.template.publish:
id: keypad_text
state: !lambda "return x.c_str();"
- text_sensor.template.publish:
id: keypad_display_text
state: !lambda "return x.c_str();"
- if:
condition:
lambda: |-
return id(keypad_text).state.back() == 'A';
then:
- logger.log: "Arming"
- homeassistant.service:
service: alarmo.arm
data:
entity_id: alarm_control_panel.alarmo
- lambda: |-
id(alarm_code_reader).clear();
on_result:
then:
- text_sensor.template.publish:
id: keypad_text
state: !lambda "return x.c_str();"
- homeassistant.service:
service: alarmo.disarm
data:
code: !lambda |-
return x.c_str();
entity_id: alarm_control_panel.alarmo