esphome_component_bthome icon indicating copy to clipboard operation
esphome_component_bthome copied to clipboard

Get server found status to prevent deepsleep

Open jerome83136 opened this issue 1 year ago • 2 comments
trafficstars

Hello,

I would like to prevent my transmitters from goind into deep sleep when no server is found.

Currently; when no server is found the autofind server mechanism is triggered and all Wifi channels are scanned by the transmitters until they find a reachable receiver. Then the server and channel are saved into flash.

The problem is that the auto find mechanism doesn't seem to be considered by "on_send_failed" So I cannot find a way to prevent deep sleep while the auto find is in progress. (I would like to wait for a server to be found and saved to flash, before going deep sleep)

Is there a way to access the status of found servers and use i as a condition to prevent/allow deep sleep ?

Here are the DEBUG boot logs of my transmitter; where we can see auto find scanning, which gets stopped when deep sleep triggers (after 30 seconds)

[I][logger:359]: Log initialized
[I][app:029]: Running through setup()...
[I][beethowen_transmitter:147]: Connecting server to {address} 70:04:1d:33:54:88 on {channel} 1
[C][adc:047]: Setting up ADC 'battery_voltage'...
[C][adc:093]: ADC 'battery_voltage' setup fin[D][beethowen_transmitter:287]: ESPNow send failed, resetting server_found.
[D][beethowen_transmitter:296]: Sending finished {success} 0, {has_outstanding_measurements} 0, {count} 2
[D][app:029]: espnow send failed ! Preventing deepsleep...
[D][beethowen_transmitter:135]: trying to find server on {channel} 1, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[D][beethowen_transmitter:135]: trying to find server on {channel} 3, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 5, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 7, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 9, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 11, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 2, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 4, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 6, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 8, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 10, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][sensor:094]: 'battery_voltage': Sending state 2.35054 V with 4 decimals of accuracy
[D][beethowen_transmitter:135]: trying to find server on {channel} 1, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.65 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 3, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 5, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 7, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 9, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 11, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 2, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 4, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 6, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 8, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 10, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 1, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 3, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 5, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 7, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 9, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][sensor:094]: 'battery_voltage': Sending state 2.18596 V with 4 decimals of accuracy
[D][beethowen_transmitter:135]: trying to find server on {channel} 11, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 2, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 4, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 6, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 8, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 10, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 1, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 3, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 5, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 7, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 9, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 11, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 2, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 4, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 6, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][beethowen_transmitter:135]: trying to find server on {channel} 8, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][sensor:094]: 'battery_voltage': Sending state 2.09734 V with 4 decimals of accuracy
[D][beethowen_transmitter:135]: trying to find server on {channel} 10, {local_passkey_} 0x0000, {remote_expected_passkey_} 0x0000
[W][component:214]: Component beethowen_transmitter took a long time for an operation (0.61 s).
[W][component:215]: Components should block for at most 20-30ms.
[I][deep_sleep:117]: Beginning Deep Sleep
[I][deep_sleep:119]: Sleeping for 600000000us
[D][esp32.preferences:114]: Saving 1 preferences to flash...
[D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
Terminal disconnected: NetworkError: The device has been lost.

Transmitter config:

esphome:
  name: test-deepsleep-sender

esp32:
  board: esp32-c3-devkitm-1
  variant: esp32c3

external_components:
  - source: github://afarago/esphome_component_bthome

logger:
#  level: NONE
#  baud_rate: 0

interval:
  - interval: 5sec
    then:
      - beethowen_transmitter.send

beethowen_transmitter:
  id: mySender
  connect_persistent: true
  sensors:
    - measurement_type: voltage
      sensor_id: battery_voltage
  auto_send: false
  on_send_failed:
    - lambda: |-
        ESP_LOGD("app", "espnow send failed ! Preventing deepsleep...");
  on_send_finished:
    - lambda: |-
        ESP_LOGD("app", "espnow send success ! Going deepsleep...");
        id(deep_sleep1).begin_sleep(true);

sensor:
  - platform: adc
    pin: GPIO0
    # pin: VCC ## debug, but remove multiply
    id: battery_voltage
    accuracy_decimals: 4
    unit_of_measurement: "V"
    update_interval: 10sec
    filters:
      # 4.2 V is scaled down to 1.0 V
      - filter_out: nan # <-- Processing will stop here on unknown values.
      - multiply: 4.22

deep_sleep:
  id: deep_sleep1
  run_duration: 30s
  sleep_duration: 10min
  wakeup_pin: GPIO4
  wakeup_pin_mode: INVERT_WAKEUP

Receiver config:

substitutions:
  systemName: "test-deepsleep-receiver"

esphome:
  name: ${systemName}

esp32:
  board: esp32-c3-devkitm-1
  variant: esp32c3

external_components:
  - source: github://afarago/esphome_component_bthome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  # power_save_mode: HIGH # This makes esp-now loss packages.

web_server:

mdns:
  disabled: true

logger:

api:
  encryption:
    key: ###########

ota:

#time:
#  - platform: homeassistant
#    id: my_time
#    timezone: Europe/Berlin

beethowen_receiver:
  dump: unmatched
  devices:
    - mac_address: "EC:DA:3B:3A:92:08"
      name_prefix: mySender
      dump: all

sensor:
  - platform: beethowen_receiver
    mac_address: "EC:DA:3B:3A:92:08"
    sensors:
      - measurement_type: voltage
        name: Battery voltage
        id: mySender_voltage
  - platform: template
    name: "mySender.battery_level"
    unit_of_measurement: '%'
    update_interval: 10s
    lambda: |-
      return (id(mySender_voltage).state);

Can someone explain me if I do it the wrong way maybe ? :)

Thank you for our help Best regards

jerome83136 avatar Mar 15 '24 13:03 jerome83136

Hello everyone, Anyone to help here ? Thank you Best regards

jerome83136 avatar Mar 20 '24 10:03 jerome83136

experience this issue also

mastersf avatar Apr 13 '24 17:04 mastersf