substitutions:
  local_update_interval: 30s

##########################################################################################
# GENERAL COMMON SENSORS
# https://esphome.io/components/sensor/
##########################################################################################

# Debug helpers (loop time / heap / reset info)
debug:
  update_interval: ${local_update_interval}

sensor:
#  - platform: uptime # Uptime for this device in seconds
#    name: "Uptime (s):"
#    update_interval: ${local_update_interval}
#    id: uptime_sensor
#    entity_category: "diagnostic"

#  - platform: wifi_signal # Wifi Strength
#    name: "Wifi (dB):"
#    id: wifi_signal_db
#    update_interval: ${local_update_interval}
#    entity_category: "diagnostic"

#  - platform: copy # Reports the WiFi signal strength in %
#    source_id: wifi_signal_db
#    name: "WiFi (%):"
#    filters:
#      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
#    unit_of_measurement: "% Max"
#    entity_category: "diagnostic"
#    device_class: ""

  # Free heap via debug (replaces template-based ESP.getFreeHeap if you prefer)
  - platform: debug
    free:
      name: "Free Heap"
      entity_category: "diagnostic"

  # Loop time via debug (replaces broken template loop time)
  - platform: debug
    loop_time:
      name: "Loop Time"
      entity_category: "diagnostic"

  # If you’d rather keep the legacy heap sensor, uncomment below and
  # delete the debug "free" block above to avoid duplicates:
  # - platform: template
  #   name: "${friendly_name} Free Heap"
  #   unit_of_measurement: "B"
  #   update_interval: 30s
  #   entity_category: "diagnostic"
  #   lambda: |-
  #     return (float) ESP.getFreeHeap();

    # Only works with esp8266
  #- platform: adc
  #  pin: VCC
  #  name: "VCC Voltage"
  #  id: vcc_voltage_sensor
  #  entity_category: diagnostic

#binary_sensor:
#  - platform: status
#    name: "Network Status"
#    icon: mdi:check-network-outline
#    entity_category: diagnostic    

##########################################################################################
# Text Sensors
# https://esphome.io/components/text_sensor/index.html
##########################################################################################
text_sensor:
  ######################################################
  # General ESPHome Info
  ######################################################
  - platform: version
    name: "Version:"
    entity_category: "diagnostic"

  - platform: wifi_info
    ip_address:
      icon: mdi:ip-network
      entity_category: diagnostic
      name: "IP Address:"
    ssid:
      name: "Connected SSID"
      icon: mdi:wifi-strength-2
      entity_category: diagnostic
    mac_address:
      name: "MAC Address:"
      icon: mdi:network-pos
      entity_category: diagnostic

  - platform: uptime # Uptime for this device human readable
    name: "Uptime:"
    icon: mdi:clock-start
    update_interval: ${local_update_interval}
    entity_category: "diagnostic"

  ###################################################################################################
  # Creates a sensor of the uptime of the device, in formatted days, hours, minutes and seconds
  ###################################################################################################
#  - platform: template
#    name: "Uptime (Days)"
#    entity_category: diagnostic
#    lambda: |-
#      int seconds = (id(uptime_sensor).state);
#      int days = seconds / (24 * 3600);
#      seconds = seconds % (24 * 3600);
#      int hours = seconds / 3600;
#      seconds = seconds % 3600;
#      int minutes = seconds /  60;
#      seconds = seconds % 60;
#      if ( days > 3650 ) {
#        return  "Starting up" ;
#      } else if ( days ) {
#        return  (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() ;
#      } else if ( hours ) {
#        return  (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() ;
#      } else if ( minutes ) {
#        return  (String(minutes) +"m "+ String(seconds) +"s").c_str() ;
#      } else {
#        return  (String(seconds) +"s").c_str() ;
#      }
#    icon: mdi:clock-start

##########################################################################################
# BUTTONS
# Diagnostic buttons, activated if needed in HA
##########################################################################################
#button:
#  - platform: safe_mode
#    name: "Safe Mode Restart:"
#    entity_category: "diagnostic"
#    disabled_by_default: true
#
#  - platform: restart
#    name: "Restart:"
#    entity_category: "diagnostic"
#    disabled_by_default: true
#
#  - platform: factory_reset
#    name: "FACTORY RESET:"
#    entity_category: "diagnostic"
#    disabled_by_default: true

