· 5 years ago · Jan 17, 2021, 08:54 PM
1substitutions:
2 devicename: "alarmkeypad"
3 friendly_name: "Alarm Keypad"
4
5esphome:
6 name: $devicename
7 build_path: build/$devicename
8 platform: ESP32
9 board: esp32doit-devkit-v1
10 includes:
11 - src/custom_alarmkeypad/custom_alarmkeypad.h
12
13wifi: !include "common/wifi.yaml"
14captive_portal:
15logger:
16api:
17ota:
18
19i2c:
20 sda: 21
21 scl: 22
22
23spi:
24 clk_pin: 33
25 miso_pin: 32
26 mosi_pin: 17
27
28pn532:
29 cs_pin: 16
30 update_interval: 1s
31 on_tag:
32 then:
33 - homeassistant.tag_scanned: !lambda 'return x;'
34
35pcf8574:
36 - id: 'pcf8574_hub'
37 address: 0x21
38 pcf8575: False
39
40keypad:
41 id: mykeypad
42 rows:
43 - pin:
44 pcf8574: pcf8574_hub
45 # Use pin number 0
46 number: 0
47 # One of INPUT or OUTPUT
48 mode: OUTPUT
49 inverted: False
50 - pin:
51 pcf8574: pcf8574_hub
52 # Use pin number 0
53 number: 0
54 # One of INPUT or OUTPUT
55 mode: OUTPUT
56 inverted: False
57 - pin:
58 pcf8574: pcf8574_hub
59 # Use pin number 0
60 number: 0
61 # One of INPUT or OUTPUT
62 mode: OUTPUT
63 inverted: False
64 - pin:
65 pcf8574: pcf8574_hub
66 # Use pin number 0
67 number: 0
68 # One of INPUT or OUTPUT
69 mode: OUTPUT
70 inverted: False
71 columns:
72 - pin:
73 pcf8574: pcf8574_hub
74 # Use pin number 0
75 number: 0
76 # One of INPUT or OUTPUT
77 mode: OUTPUT
78 inverted: False
79 - pin:
80 pcf8574: pcf8574_hub
81 # Use pin number 0
82 number: 0
83 # One of INPUT or OUTPUT
84 mode: OUTPUT
85 inverted: False
86 - pin:
87 pcf8574: pcf8574_hub
88 # Use pin number 0
89 number: 0
90 # One of INPUT or OUTPUT
91 mode: OUTPUT
92 inverted: False
93 - pin:
94 pcf8574: pcf8574_hub
95 # Use pin number 0
96 number: 0
97 # One of INPUT or OUTPUT
98 mode: OUTPUT
99 inverted: False
100 keys: "123A456B7890DAB"
101
102
103custom_component:
104 - lambda: |-
105 auto custom_alarmkeypad = new AlarmKeypad();
106 return {custom_alarmkeypad};
107
108display:
109 - platform: ht16k33_alpha
110 id: "alpha1"
111 address: 0x70
112 lambda: |-
113 if(id(text).state.length()>4) {
114 it.print(id(text).state.substr(0,4));
115 }
116 else {
117 it.print(id(text).state);
118 }
119
120 - platform: ht16k33_alpha
121 id: "alpha2"
122 address: 0x71
123 lambda: |-
124 if(id(text).state.length()>4) {
125 it.print(id(text).state.substr(4,4));
126 }
127 else {
128 it.print("");
129 }
130
131light:
132 - platform: fastled_clockless
133 chipset: WS2812B
134 pin: 13
135 num_leds: 13
136 rgb_order: GRB
137 name: "$friendly_name key backlight leds"
138 gamma_correct: 0
139 color_correct: [50%, 50%, 50%]
140 effects:
141 - addressable_rainbow:
142 name: Rainbow
143
144 - platform: fastled_clockless
145 chipset: WS2812B
146 pin: 19
147 num_leds: 8
148 rgb_order: GRB
149 name: "$friendly_name case glow leds"
150 gamma_correct: 0
151 color_correct: [50%, 50%, 50%]
152
153 - platform: fastled_clockless
154 chipset: WS2812B
155 pin: 18
156 num_leds: 8
157 rgb_order: GRB
158 name: "$friendly_name Rfid ring leds"
159 gamma_correct: 0
160 color_correct: [50%, 50%, 50%]
161
162text_sensor:
163
164 #Input text from keypad
165 - platform: keypad
166 id: reader
167 keypad_id: mykeypad
168 max_length: 4
169 end_keys: "AB"
170 back_keys: "D"
171 allowed_keys: "0123456789"
172 on_progress:
173 - logger.log:
174 format: "input progress: '%s'"
175 args: [ 'x.c_str()' ]
176 on_value:
177 - logger.log:
178 format: "input result: '%s'"
179 args: [ 'x.c_str()' ]
180
181 #Text set from/to home assistant
182 - platform: homeassistant
183 name: "$friendly_name text"
184 entity_id: input_text.alarm_keypad_text
185 id: text
186
187 #Home assistant alarm status
188 - platform: homeassistant
189 name: "$friendly_name alarm state"
190 entity_id: alarm_control_panel.alarme
191 id: alarmtext
192 on_value:
193 then:
194 lambda: !lambda |-
195
196 if(x=="armed_home") {
197 id(text).publish_state("A-HOME");
198 }
199 else if(x=="armed_night") {
200 id(text).publish_state("A-NIGHT");
201 }
202 else if(x=="armed_away") {
203 id(text).publish_state("ARMED");
204 }
205 else if(x=="arming") {
206 id(text).publish_state("ARMING");
207 }
208 else if(x=="disarmed") {
209 id(text).publish_state("DISARMED");
210 }
211 else {
212 id(text).publish_state(x);
213 }
214
215binary_sensor:
216 - <<: !include "common/common_binary_sensors.yaml"
217
218switch:
219 - <<: !include "common/common_switchs.yaml"
220
221sensor:
222 - <<: !include "common/common_sensors.yaml"
223
224 #Brightness set from home assistant
225 - platform: homeassistant
226 name: "$friendly_name brightness"
227 entity_id: input_number.alarm_keypad_brightness
228 id: brightness
229 on_value:
230 then:
231 lambda: !lambda |-
232 id(alpha1).set_brightness(x);
233 id(alpha2).set_brightness(x);