Waveshare ESP32-S3-ETH PoE OV2640 CAM

@mx738: Toni, how did you configure the LAN PoE for that board? Are you able to kindly share?

I just got the non camera version but POE works fine using the above. You can’t put in WiFi or an AP/captive portal part when using Ethernet. Haven’t had time to add various sensors yet so left the relay in. Just flash it using USB C then plug into POE Ethernet and it shows up to add in HA.

substitutions:
  name: ws-poe-s3
  friendly_name: ws_poe_s3
  device_sampling_time: 30s

esphome:
  name: ${name}
  friendly_name: ${friendly_name}

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf
  flash_size: 16MB

psram:
  mode: octal
  speed: 80MHz  

switch:
  - platform: gpio
    name: ws-poe-32-relay1
    id: relay1                              
    pin: GPIO8
    restore_mode: ALWAYS_OFF
    setup_priority: 800
# Enable logging
logger:

debug:
  update_interval: ${device_sampling_time}   

# Enable Home Assistant API
api:
  encryption:
    key: "Api123="

ota:
  - platform: esphome
    password: "otapw"

#wifi:
#  ssid: !secret wifi_ssid
#  password: !secret wifi_password

ethernet:
  type: W5500
  mosi_pin: GPIO11
  miso_pin: GPIO12
  clk_pin: GPIO13
  cs_pin: GPIO14
  reset_pin: GPIO9
  interrupt_pin: GPIO10
  clock_speed: 25MHz  

time:
  - platform: homeassistant
    id: homeassistant_time    

button:
  - platform: safe_mode
    name: Safe Mode Boot

  - platform: factory_reset
    name: Factory reset

  - platform: restart
    id: reboot_btn
    name: restart

sensor:
  #-------------------------------------------------------------------------------
  # ESP32 internal sensors
  #-------------------------------------------------------------------------------
  # Temperature
  - platform: internal_temperature
    name: Internal Temperature
    update_interval: ${device_sampling_time}

  - platform: debug
    free:
      name: Heap free
      id: ${friendly_name}_heap_free
    block:
      name: Heap max block
      id: ${friendly_name}_heap_max_block
    loop_time:
      name: Loop time
      id: ${friendly_name}_loop_time

  - platform: template
    name: Heap free (%)
    id: ${friendly_name}_heap_free_percent
    unit_of_measurement: '%'
    accuracy_decimals: 2
    icon: mdi:percent
    update_interval: ${device_sampling_time}
    entity_category: diagnostic
    # 524288 B (SRAM total)
    # 327680 B (DRAM usable)
    lambda: return ( id(${friendly_name}_heap_free).state * 100 / 327680 );

  - platform: template
    name: Heap max block (%)
    id: ${friendly_name}_heap_max_block_percent
    unit_of_measurement: '%'
    accuracy_decimals: 2
    icon: mdi:percent
    update_interval: ${device_sampling_time}
    entity_category: diagnostic
    # 524288 B (SRAM total)
    # 327680 B (DRAM usable)
    lambda: return ( id(${friendly_name}_heap_max_block).state * 100 / 327680 );

  - platform: uptime
    name: "Uptime Sensor"
    id: ${friendly_name}_uptime_sensor
    update_interval: ${device_sampling_time}
    internal: true
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: ${friendly_name}_uptime_human
            state: !lambda |-
              int seconds = round(id(${friendly_name}_uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? to_string(days) + "d " : "") +
                (hours ? to_string(hours) + "h " : "") +
                (minutes ? to_string(minutes) + "m " : "") +
                (to_string(seconds) + "s")
              ).c_str();

 
text_sensor:
  - platform: ethernet_info
    ip_address:
      name: "IP Address" 

  #-------------------------------------------------------------------------------
  # Custom Text sensors
  #-------------------------------------------------------------------------------
  - platform: template
    name: Uptime Human Readable
    id: ${friendly_name}_uptime_human
    icon: mdi:clock-start    
    

web_server:
  port: 80
  version: 2
  include_internal: true
  ota: false      

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  #ap:
  #  ssid: "Ws-Poe-S3 Fallback Hotspot"
  #  password: "AB6J9ECa7R0F"

#captive_portal: