-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpeople-counter-up.yaml
222 lines (182 loc) · 5.36 KB
/
people-counter-up.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
#Подсчёт людей с помощью vl53l0x
substitutions:
device_name: "people-count-up"
esphome:
name: ${device_name}
platform: ESP8266
board: nodemcuv2
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
# Set statul led for Wemos D1 mini
status_led:
pin: GPIO2
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${device_name} Hotspot"
password: "!secret ota_pass"
captive_portal:
# Enable web server (can be disabled)
web_server:
port: 80
i2c:
sda: 4
scl: 5
scan: true
id: bus_a
#sensor:
# - platform: vl53l0x
# name: "distance1"
# id: distance1
# address: 0x41
# enable_pin: GPIO14
# timeout: 200us
# update_interval: 1s
# unit_of_measurement: "m"
# - platform: vl53l0x
# name: "distance2"
# id: distance2
# address: 0x42
# enable_pin: GPIO12
# timeout: 200us
# update_interval: 1s
# unit_of_measurement: "m"
globals:
- id: seq1
type: int
restore_value: no
initial_value: '0'
- id: seq2
type: int
restore_value: no
initial_value: '0'
- id: seq3
type: int
restore_value: no
initial_value: '0'
- id: seq4
type: int
restore_value: no
initial_value: '0'
- id: count
type: int
restore_value: no
initial_value: '0'
- id: inside_previous_value
type: bool
restore_value: no
initial_value: 'false'
- id: outside_previous_value
type: bool
restore_value: no
initial_value: "false"
binary_sensor:
- platform: template
id: lab_inside_door_laser
name: "Lab Inside Door Laser"
lambda: !lambda |-
if((id(sens_1).state < 0.7f) != id(inside_previous_value)){
id(inside_previous_value) = (id(sens_1).state < 0.7f);
if(((id(sens_1).state < 0.7f) == false) && ((id(sens_2).state < 0.7f) == false)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 0;
}else if(((id(sens_1).state < 0.7f) == false) && ((id(sens_2).state < 0.7f) == true)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 1;
}else if(((id(sens_1).state < 0.7f) == true) && ((id(sens_2).state < 0.7f) == false)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 2;
}else if(((id(sens_1).state < 0.7f) == true) && ((id(sens_2).state < 0.7f) == true)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 3;
}
if((id(seq1) == 1) && (id(seq2) == 3) && (id(seq3) == 2) && (id(seq4) == 0)){
id(count) ++;
id(people_in_lab).publish_state(id(count));
}else if((id(seq1) == 2) && (id(seq2) == 3) && (id(seq3) == 1) && (id(seq4) == 0)){
id(count) --;
if(id(count) < 0){
id(count) = 0;
}
id(people_in_lab).publish_state(id(count));
}
}
return id(sens_1).state < 0.7f;
- platform: template
id: lab_outside_door_laser
name: "Lab Outside Door Laser"
lambda: !lambda |-
if((id(sens_2).state < 0.7f) != id(outside_previous_value)){
id(outside_previous_value) = (id(sens_2).state < 0.7f);
if(((id(sens_1).state < 0.7f) == false) && ((id(sens_2).state < 0.7f) == false)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 0;
}else if(((id(sens_1).state < 0.7f) == false) && ((id(sens_2).state < 0.7f) == true)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 1;
}else if(((id(sens_1).state < 0.7f) == true) && ((id(sens_2).state < 0.7f) == false)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 2;
}else if(((id(sens_1).state < 0.7f) == true) && ((id(sens_2).state < 0.7f) == true)){
id(seq1) = id(seq2);
id(seq2) = id(seq3);
id(seq3) = id(seq4);
id(seq4) = 3;
}
if((id(seq1) == 1) && (id(seq2) == 3) && (id(seq3) == 2) && (id(seq4) == 0)){
id(count)++;
id(people_in_lab).publish_state(id(count));
}else if((id(seq1) == 2) && (id(seq2) == 3) && (id(seq3) == 1) && (id(seq4) == 0)){
id(count)--;
if(id(count) < 0){
id(count) = 0;
}
id(people_in_lab).publish_state(id(count));
}
}
return id(sens_2).state < 0.7f;
sensor:
- platform: template
id: people_in_lab
name: "People in Stairs"
icon: 'mdi:counter'
accuracy_decimals: 0
lambda: !lambda |-
return id(count);
- platform: vl53l0x
name: "Sensor 1"
id: sens_1
i2c_id: bus_a
address: 0x41
update_interval: 50ms
enable_pin: GPIO14
timeout: 500us
internal: true
- platform: vl53l0x
name: "Sensor 2"
id: sens_2
i2c_id: bus_a
address: 0x42
update_interval: 50ms
enable_pin: GPIO12
timeout: 500us
internal: true