Pozor je tu ještě jedno vlákno které řeší senzor VL53L1X který není kompatabilní s touto integrací protože se jedná o senzor který není nativně podporován ESPhome a jedná se o externí komponentu.
Teď, ale k původnímu tématu.
Pro instalaci brány potřebujete 2x senzor VL53L0X + esp32 (doporučen)
Tento senzor je podporován ESPhome proto není nic jednodušího než v esp addonu přidat nový uzel a do esp32 poté nahrát konfigurační soubor:
Kód: Vybrat vše
esphome:
name: kuchyne-brana
platform: ESP32
board: nodemcu-32s
# Enable logging
logger:
level: INFO
# Enable Home Assistant API
api:
ota:
password: "3c68dbec5ba65c4451f70be6bdb0369d"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: xxxxxxxxx
gateway: xxxxxxxxx
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Kuchyne-Brana Fallback Hotspot"
password: "xxxxxxxxxxx"
captive_portal:
i2c:
sda: GPIO21
scl: GPIO22
scan: True
id: bus_a
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: "Brána do kuchyně"
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: "Bráná ven z kuchyně"
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: "Počítání osob kuchyně"
lambda: !lambda |-
return id(count);
- platform: vl53l0x
name: "Sensor 1"
id: sens_1
i2c_id: bus_a
address: 0x41
update_interval: 50ms
enable_pin: GPIO25
timeout: 500us
internal: true
- platform: vl53l0x
name: "Sensor 2"
id: sens_2
i2c_id: bus_a
address: 0x42
update_interval: 50ms
enable_pin: GPIO32
timeout: 500us
internal: true
Senzor má adresu 0x29, ale potřebujeme připojit dva na tuto jednu sběrnici a pokud nebude mít každý senzor jinou adresu nebudou na společné sběrnici fungovat.
Jak to udělat ?, docela jednoduše.
Na senzoru je pin označen písmenem X (XSHUNT) a právě toho využijeme a připojíme k pinům esp32 (definováno v kódu).
Tímto připojením a konfigurací esp32 docílíme toho že esp32 vnutíme svoji vlastní adresu a senzory přepínáme mezi sebou a tím je můžeme připojit na jednu sběrnici I2C bez konfliktu.
Esp32 vytvoří 3 entity v HA které dále použijete v automatizaci (hlavně počítání osob) čítač běží v esp32 proto již v HA nemusíte nic vytvářet.
Je dobré si pohrát se vzdáleností mezi senzory.
Původně jsem zkoušel 6cm až 15cm, ale pro stabilní funkci se mi osvědčila vzdálenost 10 cm.
Mám je umístěny z boku dveří do kuchyně a vzdálenost k boku skříňky, která je umístěna na druhé straně dveří cca 1,3m a fungují spolehlivě.