esphome: name: pps-v3-548714 friendly_name: presence sensor platformio_options: board_build.flash_mode: dio board_build.mcu: esp32c3 on_boot: priority: 550 then: # id(ble).set_manufacturer_data({ 0xFF, 0xFF, 0xAB, PIR, radar }); # presence = 0x69, absence = 0x42 - if: condition: - binary_sensor.is_on: pir_state then: # PIR is on - globals.set: id: check_radar_again value: 'false' # wake up 5m later - lambda: |- id(deep_sleep_1).set_sleep_duration(300000); - repeat: count: 10 then: # report presennce - if: condition: - binary_sensor.is_off: radar_state then: # PIR on, radar off - lambda: |- float lightVoltage = id(photoresistor).state; uint8_t *lightData = (uint8_t*)&lightVoltage; id(ble).set_manufacturer_data({ 0xFF, 0xFF, 0xCC, 0x69, 0x42, lightData[0], lightData[1], lightData[2], lightData[3] }); else: - lambda: |- float lightVoltage = id(photoresistor).state; uint8_t *lightData = (uint8_t*)&lightVoltage; id(ble).set_manufacturer_data({ 0xFF, 0xFF, 0xCC, 0x69, 0x69, lightData[0], lightData[1], lightData[2], lightData[3] }); - delay: 70ms else: # PIR is off - globals.set: id: check_radar_again value: 'false' # wake up 5m later - lambda: |- id(deep_sleep_1).set_sleep_duration(300000); - repeat: count: 10 then: - if: condition: - binary_sensor.is_off: radar_state then: # PIR off, radar off - lambda: |- float lightVoltage = id(photoresistor).state; uint8_t *lightData = (uint8_t*)&lightVoltage; id(ble).set_manufacturer_data({ 0xFF, 0xFF, 0xCC, 0x42, 0x42, lightData[0], lightData[1], lightData[2], lightData[3] }); else: # PIR off, radar on - lambda: |- float lightVoltage = id(photoresistor).state; uint8_t *lightData = (uint8_t*)&lightVoltage; id(ble).set_manufacturer_data({ 0xFF, 0xFF, 0xCC, 0x42, 0x69, lightData[0], lightData[1], lightData[2], lightData[3] }); - delay: 70ms - if: condition: and: - binary_sensor.is_on: radar_state - lambda: |- return !id(check_radar_again); then: - globals.set: id: check_radar_again value: 'true' # wake up 30s later - lambda: |- id(deep_sleep_1).set_sleep_duration(30000); else: - globals.set: id: check_radar_again value: 'false' # wake up 5m later - lambda: |- id(deep_sleep_1).set_sleep_duration(300000); # - light.turn_off: rgb_light - deep_sleep.enter: deep_sleep_1 esp32: board: esp32-c3-devkitm-1 variant: ESP32C3 framework: type: esp-idf # # Enable logging # logger: # Enable Home Assistant API api: encryption: key: "redacted" reboot_timeout: 0s ota: - platform: esphome password: "redacted" wifi: enable_on_boot: False ssid: !secret wifi_ssid password: !secret wifi_password fast_connect: True power_save_mode: HIGH globals: - id: check_radar_again type: bool restore_value: True initial_value: 'false' deep_sleep: run_duration: 5s sleep_duration: 30min wakeup_pin: allow_other_uses: True number: 1 wakeup_pin_mode: INVERT_WAKEUP id: deep_sleep_1 esp32_ble_server: id: ble manufacturer_data: [0xFF, 0xFF, 0xBB, 0x00] binary_sensor: - platform: gpio pin: number: 1 allow_other_uses: True name: "pir_state" id: pir_state - platform: gpio pin: number: 2 name: "radar_state" id: radar_state sensor: - platform: adc id: photoresistor attenuation: auto name: "photoresistor" pin: number: 3 mode: pullup: True input: True # connect the photoresistor across gnd and pin3 ################################# # On the reciever ################################# esp32_ble_tracker: scan_parameters: interval: 320ms window: 320ms on_ble_manufacturer_data_advertise: - mac_address: XX:XX:XX:XX:XX:XX manufacturer_id: FFFF then: - lambda: |- if (x[0] != 0xAB && x[0] != 0xCC) return; if (x[0] == 0xCC) { float lightVoltage = *((float*)&x[3]); id(ble_light).publish_state(lightVoltage); ESP_LOGD("BLE_sensors-LIGHT--", "PIR: %d radar: %d light: %d %d %d %d --------", x[1], x[2], x[3], x[4], x[5], x[6]); } id(ble_pir).publish_state(x[1] == 0x69); id(ble_radar).publish_state(x[2] == 0x69); ESP_LOGD("BLE_sensors---", "PIR: %d radar: %d --------", x[1], x[2]);