· 2 years ago · Oct 07, 2023, 08:25 AM
1esphome:
2 name: "garage-presence"
3 friendly_name: "garage-presence"
4 platform: ESP32
5 board: esp32dev
6
7# Enable logging
8logger:
9
10# Enable Home Assistant API
11api:
12 encryption:
13 key: "*********"
14
15ota:
16 password: "********"
17
18wifi:
19 ssid: !secret wifi_ssid
20 password: !secret wifi_password
21
22 manual_ip:
23 static_ip: 10.0.0.86
24 gateway: 10.0.0.1
25 subnet: 255.255.255.0
26
27 # Enable fallback hotspot (captive portal) in case wifi connection fails
28 ap:
29 ssid: "Garage Presence Fallback Hotspot"
30 password: "*******"
31
32captive_portal:
33
34esp32_ble_tracker:
35 id: ble_tracker_id
36 scan_parameters:
37 interval: 10s
38 window: 1100ms
39 active: false
40## I used this bit to figure out which byte held the battery data, it was byte 1.
41# on_ble_advertise:
42# - mac_address: **:**:**:**:**:**
43# then:
44# - lambda: |-
45# for (auto data : x.get_service_datas())
46# ESP_LOGI("main", "Data Update UUID: %s Data: %s", data.uuid.to_string().c_str(), format_hex_pretty(data.data).c_str());
47 on_ble_service_data_advertise:
48 - mac_address: **:**:**:**:**:**
49 service_uuid: "5242"
50 then:
51 - lambda: |-
52 id(penny_mazda_battery).publish_state(x[1]);
53
54binary_sensor:
55 - platform: ble_presence
56 mac_address: **:**:**:**:**:**
57 id: penny_mazda
58 name: "Penny Mazda"
59 device_class: "presence"
60 icon: mdi:car
61 filters:
62 - delayed_off: 30s
63 on_press:
64 - script.execute: ble_active_scan
65
66sensor:
67 - platform: ble_rssi
68 mac_address: **:**:**:**:**:**
69 id: penny_mazda_rssi
70 name: "Penny Mazda RSSI"
71 entity_category: "diagnostic"
72 - platform: template
73 id: penny_mazda_battery
74 name: "Penny Mazda Battery"
75 device_class: "battery"
76 unit_of_measurement: "%"
77 entity_category: "diagnostic"
78 accuracy_decimals: 0
79
80script:
81 - id: ble_active_scan
82 mode: single
83 then:
84 - lambda: |-
85 id(ble_tracker_id).stop_scan();
86 - delay: 2s
87 - lambda: |-
88 id(ble_tracker_id).set_scan_active(true);
89 id(ble_tracker_id).start_scan();
90 - logger.log:
91 format: Active scan started
92 level: INFO
93 - delay: 30s
94 - logger.log:
95 format: Active scan stopped
96 level: INFO
97 - lambda: |-
98 id(ble_tracker_id).stop_scan();
99 - delay: 2s
100 - lambda: |-
101 id(ble_tracker_id).set_scan_active(false);
102 id(ble_tracker_id).start_scan();
103
104interval:
105 - interval: 10min
106 then:
107 - script.execute: ble_active_scan
108
109button:
110 - platform: template
111 name: "BLE Active Scan"
112 id: run_active_scan
113 on_press:
114 - script.execute: ble_active_scan