ESP32/ESP8266 Deep Sleep

Besonderheiten ESP8266

Um das Timer-Wake-up mit ESP8266 zu verwenden, muss der RST-Pin mit GPIO 16 (D0) verbunden werden. Siehe: ESP8266 Deep Sleep with Arduino IDE (NodeMCU)

Auf dem Client

deep-sleep-d1-mini.yaml
esphome:
  name: deep-sleep-d1-mini
  friendly_name: Deep Sleep D1-Mini
  on_boot:
    priority: 250.0
    then:

  on_loop:
    then:
      - if:
          condition:
            - not:
                - script.is_running: demo_script
          then:
            - script.execute: demo_script

esp8266:
  board: esp01_1m

logger:

api:
  encryption:
    key: "zDQR1Ju6tofuK+hhVtttACIJWRrwNd9Swo2eVMmf4cE="

ota:
  password: "e70cec7b819f8420caf809f11f4da29b"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
 
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Deep-Sleep-D1-Mini"
    password: !secret fallback_password

captive_portal:

deep_sleep:
  id: deep_sleep_1
  run_duration: 20s
  sleep_duration: 5s

mqtt:
  broker: homeassistant.local
  username: MQTT-user
  password: !secret mqtt_password
  discovery: true

  on_message:
    - topic: deep-sleep-d1-mini/ota_mode
      payload: 'ON'
      then:
        - logger.log: OTA Mode set to ON from MQTT
        - deep_sleep.prevent: deep_sleep_1
    - topic: deep-sleep-d1-mini/ota_mode
      payload: 'OFF'
      then:
        - logger.log: OTA Mode set to OFF from MQTT
        - deep_sleep.allow: deep_sleep_1
#        - deep_sleep.enter: deep_sleep_1

switch:
  - platform: template
    id: sleep_demo_switch
    name: sleep_demo_switch
    optimistic: true

script:
  id: demo_script
  mode: single
  then:
    - switch.toggle: sleep_demo_switch
    - delay: 1s

In home assistant

Automation

automation.yaml
alias: deep-sleep-d1-mini/ota_mode
description: ""
trigger:
- platform: state
entity_id:
- input_select.deep_sleep_d1_mini_ota_mode
condition: []
action:
- choose:
- conditions:
- condition: state
entity_id: input_select.deep_sleep_d1_mini_ota_mode
state: "ON"
sequence:
- service: script.deep_sleep_d1_mini_ota_mode
data: {}
- choose:
- conditions:
- condition: state
entity_id: input_select.deep_sleep_d1_mini_ota_mode
state: "OFF"
sequence:
- service: script.deep_sleep_d1_mini_ota_mode_off
data: {}
mode: single

Script

deep-sleep-d1-mini_ota_mode_ON.yaml
alias: deep-sleep-d1-mini/ota_mode_ON
sequence:
  - service: mqtt.publish
    data:
      qos: "0"
      retain: true
      topic: deep-sleep-d1-mini/ota_mode
      payload: "ON"
mode: single
icon: mdi:facebook-messenger
deep-sleep-d1-mini_ota_mode_OFF.yaml
alias: deep-sleep-d1-mini/ota_mode_ON
sequence:
  - service: mqtt.publish
    data:
      qos: "0"
      retain: true
      topic: deep-sleep-d1-mini/ota_mode
      payload: "ON"
mode: single
icon: mdi:facebook-messenger
deep-sleep-d1-mini.yaml
substitutions:
  devicename: deep-sleep-d1-mini
  upper_devicename: Deep Sleep D1-Mini

esphome:
  name: $devicename
  friendly_name: $upper_devicename
  on_boot:
    priority: 250.0
    then:
      
  on_loop:
    then:
      - if:
          condition:
            - not:
                - script.is_running: demo_script
          then:
            - script.execute: demo_script

esp8266:
  board: esp01_1m

logger:

packages:
  wifi: !include packages/wifi.yaml
  mqtt: !include packages/mqtt.yaml
  ota:  !include packages/ota.yaml
 
#wifi:
#  use_address: 192.168.178.36
 
# Notice that ‘api’ is commented out, as it clashes with deep sleep as it can take a minute or two to connect to the HA api.
#api:

captive_portal:
    
deep_sleep:
  id: deep_sleep_1
  run_duration: 20s
  sleep_duration: 10s

mqtt:
  on_message:
    - topic: deep-sleep-d1-mini/ota_mode
      payload: 'ON'
      then:
        - logger.log: OTA Mode set to ON from MQTT
        - deep_sleep.prevent: deep_sleep_1
    - topic: deep-sleep-d1-mini/ota_mode
      payload: 'OFF'
      then:
        - logger.log: OTA Mode set to OFF from MQTT
        - deep_sleep.allow: deep_sleep_1
#        - deep_sleep.enter: deep_sleep_1

switch:
  - platform: template
    id: sleep_demo_switch
    optimistic: true
 
 

script:
  id: demo_script
  mode: single
  then:
    - logger.log:
        format: "Ich bin ESP8266 ESP-01 1M"    
    - switch.toggle: sleep_demo_switch
    - delay: 1s