I have below “code” for an ESPHOME device for now. I run my device on a battery and solar and would like to make it as power efficient as possible. There I would like to keep the uptime of the esp32 as small as possible to that I can enter deep sleep again as fast as possible, hence an automation that forces read of temperature and battery voltage and then asks the esp32 to enter deep sleep again. With my current setup I see that it is not always reading a temperature on boot and therefore I have currently set uptime to 90 secs before going to deep sleep (60 turned out not to be enough).
As well, if any suggestions on how to power optimize, please let me know (I do e.g. need to turn off the onboard power led, I think I know how to do that).
I’m completely new to ESPHOME, so hope you can help with some descriptive guidance.
esphome:
name: altan
platform: ESP32
board: esp-wrover-kit
wifi:
ssid: !secret wifi_iot_ssid
password: !secret wifi_iot_pass
# Optional manual IP
manual_ip:
static_ip: 10.0.30.50
gateway: 10.0.0.1
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Altan Fallback Hotspot"
password: !secret esphome_fallback_hotspot
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
password: !secret esphome_oat_pass
ota:
password: !secret esphome_oat_pass
#Deep sleep
deep_sleep:
run_duration: 90s
sleep_duration: 30min
id: deep_sleep_1
# Dallas sensor/hub component (in my case for the DS18B20 Waterproof Digital Temperature Temp Sensor Probe)
dallas:
- pin: GPIO4
sensor:
- platform: dallas
address: 0x5E02131E08F5AA28
name: "Temperatur - Altan"
id: dallas_temp_1
- platform: adc
pin: 39
name: "Battery Voltage - Altan"
update_interval: 20s
attenuation: 2.5db
accuracy_decimals: 1
id: battery_voltage_1
filters:
- multiply: 4.268367
I have now changed my code as shown below. I need to optimize on the uptime (run_duration before entering deep sleep), it is set to 60 secs, but I see it takes around 5 secs for it to boot up and post the MQTT messages for temperature and battery voltage.
Any idea to how I ensure it does exactly one reading of respectively the temperature and the battery voltage (it is using “on_boot” or defining a template or an action in one of the readings? Then along with that I can trigger deep sleep.
Thanks in advance.
substitutions:
display_name: DIY_Solar_1
esphome:
name: solar_1
platform: ESP32
board: esp-wrover-kit
status_led:
pin: GPIO2
wifi:
ssid: !secret wifi_iot_ssid
password: !secret wifi_iot_pass
fast_connect: true
# Optional manual IP
manual_ip:
static_ip: !secret ip_static_diy_solar_1
gateway: !secret ip_gateway
subnet: !secret ip_subnet
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: ${display_name}_AP
password: !secret esphome_fallback_hotspot
captive_portal:
# Enable logging
logger:
#level: INFO #set to INFO to save a bit of time (hence battery)
# MQTT preferred over API when using deep sleep
mqtt:
broker: !secret mqttip
port: !secret mqttport
username: !secret mqttuser
password: !secret mqttpass
birth_message: #Setting the MQTT Birth and Will message to blank stops the device from going Unavailable while it is asleep which messes with history graphs (lots of dots/broken lines)
will_message:
on_message:
- topic: ${display_name}/ota_mode
payload: 'ON'
then:
- deep_sleep.prevent: deep_sleep_1
- topic: ${display_name}/sleep_mode
payload: 'ON'
then:
- deep_sleep.enter: deep_sleep_1
ota:
password: !secret esphome_oat_pass
#Deep sleep
deep_sleep:
run_duration: 60s
sleep_duration: 15min
id: deep_sleep_1
# Dallas sensor/hub component (in my case for the DS18B20 Waterproof Digital Temperature Temp Sensor Probe)
dallas:
- pin: GPIO4
update_interval: 5s
id: dallas_1
sensor:
- platform: dallas
address: 0x5E02131E08F5AA28
name: ${display_name} Temperature
id: dallas_temp_1
- platform: adc
pin: 39
name: ${display_name} Battery Voltage
update_interval: 5s
attenuation: 2.5db
accuracy_decimals: 1
id: battery_voltage_1
filters:
- multiply: 4.268367
Thanks for posting this! I was able to get it working for my new swimming pool thermometer that I plan to power by a 18650 and solar panel. Deep sleep is working great on ESP8266 with MQTT