initial
This commit is contained in:
197
esp32-c6.yaml
Normal file
197
esp32-c6.yaml
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
substitutions:
|
||||||
|
device_name: "battery-sensor-7f3a"
|
||||||
|
friendly_name: "Battery Sensor 7F3A"
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: ${device_name}
|
||||||
|
friendly_name: ${friendly_name}
|
||||||
|
on_boot:
|
||||||
|
- priority: -100
|
||||||
|
then:
|
||||||
|
- logger.log: "Device started - 10s for OTA"
|
||||||
|
- delay: 10s
|
||||||
|
- logger.log: "OTA window closed - proceeding to sensor reading"
|
||||||
|
- script.execute: read_sensors_and_sleep
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32-c6-devkitc-1
|
||||||
|
framework:
|
||||||
|
type: esp-idf
|
||||||
|
|
||||||
|
logger:
|
||||||
|
# level: INFO
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret mail_notifier_ha_api_key
|
||||||
|
reboot_timeout: 0s
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret mail_notifier_ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
power_save_mode: LIGHT
|
||||||
|
fast_connect: true
|
||||||
|
reboot_timeout: 0s
|
||||||
|
|
||||||
|
mqtt:
|
||||||
|
broker: !secret mqqt_broker
|
||||||
|
username: !secret mqqt_username
|
||||||
|
password: !secret mqqt_password
|
||||||
|
port: 1883
|
||||||
|
discovery: false
|
||||||
|
log_topic: null
|
||||||
|
birth_message:
|
||||||
|
topic: ${device_name}/status
|
||||||
|
payload: "online"
|
||||||
|
retain: true
|
||||||
|
will_message:
|
||||||
|
topic: ${device_name}/status
|
||||||
|
payload: "offline"
|
||||||
|
retain: true
|
||||||
|
keepalive: 15s
|
||||||
|
|
||||||
|
deep_sleep:
|
||||||
|
id: deep_sleep_control
|
||||||
|
sleep_duration: 24h
|
||||||
|
esp32_ext1_wakeup:
|
||||||
|
pins:
|
||||||
|
- number: GPIO7
|
||||||
|
allow_other_uses: True
|
||||||
|
mode:
|
||||||
|
input: true
|
||||||
|
pullup: true
|
||||||
|
mode: ANY_HIGH
|
||||||
|
|
||||||
|
|
||||||
|
script:
|
||||||
|
- id: read_sensors_and_sleep
|
||||||
|
mode: single
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
not:
|
||||||
|
mqtt.connected:
|
||||||
|
then:
|
||||||
|
- logger.log: "Waiting for MQTT connection..."
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
mqtt.connected:
|
||||||
|
timeout: 10s
|
||||||
|
- logger.log: "Starting sensor reading"
|
||||||
|
- component.update: battery_raw
|
||||||
|
- delay: 50ms
|
||||||
|
|
||||||
|
- mqtt.publish:
|
||||||
|
topic: ${device_name}/battery/voltage
|
||||||
|
payload: !lambda |-
|
||||||
|
return to_string(id(battery_voltage).state);
|
||||||
|
retain: true
|
||||||
|
|
||||||
|
- mqtt.publish:
|
||||||
|
topic: ${device_name}/battery/percent
|
||||||
|
payload: !lambda |-
|
||||||
|
return to_string(id(battery_percent).state);
|
||||||
|
retain: true
|
||||||
|
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: 'return esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_EXT1;'
|
||||||
|
then:
|
||||||
|
- logger.log: "Woke up by interrupt - Sending ALARM!"
|
||||||
|
- mqtt.publish:
|
||||||
|
topic: ${device_name}/alarm
|
||||||
|
payload: "TRIGGERED"
|
||||||
|
retain: false
|
||||||
|
|
||||||
|
- mqtt.publish:
|
||||||
|
topic: ${device_name}/reed_switch
|
||||||
|
payload: !lambda |-
|
||||||
|
return id(reed_switch).state ? "OPEN" : "CLOSED";
|
||||||
|
retain: true
|
||||||
|
|
||||||
|
- logger.log: "Data sent via MQTT"
|
||||||
|
- delay: 1s
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
binary_sensor.is_off: reed_switch
|
||||||
|
then:
|
||||||
|
- logger.log: "Reed switch closed - entering deep sleep"
|
||||||
|
- deep_sleep.enter: deep_sleep_control
|
||||||
|
else:
|
||||||
|
- logger.log: "WARNING: Reed switch open - staying active!"
|
||||||
|
- delay: 5s
|
||||||
|
- script.execute: read_sensors_and_sleep
|
||||||
|
|
||||||
|
binary_sensor:
|
||||||
|
- platform: gpio
|
||||||
|
id: reed_switch
|
||||||
|
name: "Reed Switch"
|
||||||
|
internal: true
|
||||||
|
pin:
|
||||||
|
number: GPIO7
|
||||||
|
mode:
|
||||||
|
input: true
|
||||||
|
pullup: true
|
||||||
|
allow_other_uses: true
|
||||||
|
filters:
|
||||||
|
- delayed_on: 100ms
|
||||||
|
on_release:
|
||||||
|
then:
|
||||||
|
- logger.log: "Reed switch closed"
|
||||||
|
- mqtt.publish:
|
||||||
|
topic: ${device_name}/reed_switch
|
||||||
|
payload: !lambda |-
|
||||||
|
return id(reed_switch).state ? "OPEN" : "CLOSED";
|
||||||
|
retain: true
|
||||||
|
- delay: 1s
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: adc
|
||||||
|
pin: GPIO0
|
||||||
|
id: battery_raw
|
||||||
|
name: "Battery Raw"
|
||||||
|
attenuation: 12db
|
||||||
|
internal: true
|
||||||
|
filters:
|
||||||
|
- multiply: 2.0
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- component.update: battery_voltage
|
||||||
|
- component.update: battery_percent
|
||||||
|
|
||||||
|
- platform: template
|
||||||
|
id: battery_voltage
|
||||||
|
name: "Battery Voltage"
|
||||||
|
unit_of_measurement: "V"
|
||||||
|
accuracy_decimals: 2
|
||||||
|
device_class: voltage
|
||||||
|
state_class: measurement
|
||||||
|
update_interval: 1min
|
||||||
|
internal: True
|
||||||
|
lambda: |-
|
||||||
|
float raw = id(battery_raw).state;
|
||||||
|
if (isnan(raw)) return NAN;
|
||||||
|
return raw;
|
||||||
|
|
||||||
|
- platform: template
|
||||||
|
id: battery_percent
|
||||||
|
name: "Battery Level"
|
||||||
|
unit_of_measurement: "%"
|
||||||
|
accuracy_decimals: 0
|
||||||
|
device_class: battery
|
||||||
|
state_class: measurement
|
||||||
|
update_interval: 1min
|
||||||
|
internal: True
|
||||||
|
lambda: |-
|
||||||
|
const float min_v = 3.0;
|
||||||
|
const float max_v = 4.15;
|
||||||
|
float v = id(battery_raw).state;
|
||||||
|
if (isnan(v)) return NAN;
|
||||||
|
float p = (v - min_v) / (max_v - min_v) * 100.0;
|
||||||
|
if (p < 0) p = 0;
|
||||||
|
if (p > 100) p = 100;
|
||||||
|
return p;
|
||||||
Reference in New Issue
Block a user