Esp32c6 - deepsleep ext1 not working as expected

Hi,
I’m trying to make a remote controller powered with battery, so I need to put the esp in deepsleep and wake it when a button is pressed. I’m facing some problems with the deep sleep, I get all the pins are pressed, the wake mask all the time has the first threebits at 1 even if the button are not pressed and the value on that GPIOs is zero. What I’m doing wrong or missing?

esphome:
  name: esp32-c6-one
  friendly_name: esp32-c6-one

  on_boot:
    priority: -100
    then:
      - deep_sleep.prevent: deep_sleep_1
      - output.turn_off: user_led
      - delay: 
          seconds: 1
      - if:
          condition:
            wifi.connected:
          then:
            - if:
                condition:
                  - lambda: 'return esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_EXT1;'
                then:
                  - mqtt.publish: 
                      topic: test/command
                      payload: !lambda |-
                                  uint64_t wake = esp_sleep_get_ext1_wakeup_status();
                                  uint32_t low = wake % 0xFFFFFFFF;
                                  uint32_t high = (wake>> 32) % 0xFFFFFFFF;
                                  if ( low & BIT(1) ) {
                                    return "Pin 1 woke me up: " + std::to_string(wake);
                                  }
                                  if ( low & BIT(2) ) {
                                    return "Pin 2 woke me up: " + std::to_string(wake);
                                  }

                                  return "error" + std::to_string(wake);
                else:
                  - mqtt.publish: 
                      topic: test/request
                      payload: !lambda |-                                  
                                  return "getStatus";
          else:
            - deep_sleep.allow: deep_sleep_1
            - deep_sleep.enter: deep_sleep_1

mqtt:
  discovery: false # disable entity discovery
  discover_ip: true # enable device discovery
  broker: !secret broker_ip
  port: !secret broker_port
  username: !secret mqtt_user
  password: !secret mqtt_password
  on_message:
    - topic: test/status
      payload: "testResp"
      then:
        - deep_sleep.allow: deep_sleep_1
        - output.turn_on: user_led
        - delay: 
            seconds: 5
        - deep_sleep.enter: deep_sleep_1

esp32:
  board: seeed_xiao_esp32c6
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption: 
    key: !secret test_encr_key

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  power_save_mode: NONE

captive_portal:

output:
  - platform: gpio
    id: user_led
    inverted: true
    pin: 
      GPIO15

# Example configuration entry
deep_sleep:
  id: deep_sleep_1
  run_duration: 
    minutes: 2
  sleep_duration: 
    minutes: 1
    seconds: 0
  esp32_ext1_wakeup:
    pins: 
      - GPIO0
      - GPIO1
      - GPIO2
    mode: ANY_HIGH

web_server:
  port: 80

So is your wakeup misbehaving or you only have problem to get the pin?
Do you have pulldowns on your pins?

My bit manipulation skills are next to nothing and my string conversion even worst, so I would try something simpler.

uint64_t wake = esp_sleep_get_ext1_wakeup_status();
if (wake & (1ULL << 0)) return "GPIO0 woke me up";
if (wake & (1ULL << 1)) return "GPIO1 woke me up";
if (wake & (1ULL << 2)) return "GPIO2 woke me up";
return "Unknown wake source";