substitutions:
  device_name: delta-wallbox
  friendly_name: "Delta AC MAX Basic"
  modbus_address: "1"
  max_power_limit: "3680"   # 1P / 16A / 230V = 3680W
  uart_baud_rate: "19200"

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

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:
  level: DEBUG
  baud_rate: 0

api:
  encryption:
    key: !secret ha_api_key_2

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "Wallbox Fallback"
    password: !secret wifi_ap_password

mqtt:
  broker: 192.168.x.x   #YOUR_MQTT_BROKER_IP
  port: 1883
  username: !secret mqtt_username
  password: !secret mqtt_password
  topic_prefix: delta-wallbox

captive_portal:

web_server:
  port: 80
  local: true

# ============================================================
# UART / ModBus RTU Konfiguration
# ============================================================
uart:
  id: modbus_uart
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: ${uart_baud_rate}
  parity: NONE
  stop_bits: 1
  data_bits: 8

modbus:
  id: modbus_bus
  uart_id: modbus_uart
  send_wait_time: 500ms

modbus_controller:
  - id: wallbox
    modbus_id: modbus_bus
    address: ${modbus_address}
    setup_priority: -10
    command_throttle: 500ms
    update_interval: 10s

sensor:

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "Charger State"
    id: charger_state
    register_type: read
    address: 100
    value_type: U_WORD
    accuracy_decimals: 0
    icon: mdi:ev-station
    skip_updates: 3

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE Anzahl"
    id: evse_count
    register_type: read
    address: 102
    value_type: U_WORD
    accuracy_decimals: 0
    icon: mdi:counter
    skip_updates: 30

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 State (raw)"
    id: evse1_state
    register_type: read
    address: 1000
    value_type: U_WORD
    accuracy_decimals: 0
    icon: mdi:state-machine
    entity_category: diagnostic

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 Charge State"
    id: evse1_charge_state
    register_type: read
    address: 1001
    value_type: U_WORD
    accuracy_decimals: 0
    icon: mdi:battery-charging

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 Spannung"
    id: evse1_voltage
    register_type: read
    address: 1003
    value_type: U_DWORD
    accuracy_decimals: 1
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1
    icon: mdi:sine-wave

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 Ladeleistung"
    id: evse1_charging_power
    register_type: read
    address: 1005
    value_type: U_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    icon: mdi:lightning-bolt

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 Max. Ladeleistung (Fahrzeug)"
    id: evse1_max_charging_power
    register_type: read
    address: 1013
    value_type: U_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    device_class: power
    icon: mdi:arrow-up-bold-circle-outline

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 Min. Ladeleistung (Fahrzeug)"
    id: evse1_min_charging_power
    register_type: read
    address: 1015
    value_type: U_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    device_class: power
    icon: mdi:arrow-down-bold-circle-outline

text_sensor:

  - platform: template
    name: "Charger Status"
    icon: mdi:ev-station
    lambda: |-
      switch ((int) id(charger_state).state) {
        case 0:   return std::string("Nicht bereit");
        case 1:   return std::string("Betriebsbereit");
        case 10:  return std::string("FEHLER");
        default:  return std::string("Unbekannt (" + std::to_string((int)id(charger_state).state) + ")");
      }

  - platform: template
    name: "EVSE1 Status"
    icon: mdi:battery-charging
    lambda: |-
      switch ((int) id(evse1_charge_state).state) {
        case 0: return std::string("Kein Fahrzeug");
        case 1: return std::string("Verbunden – wartet auf Freigabe");
        case 2: return std::string("Ladevorgang startet...");
        case 3: return std::string("Lädt");
        case 4: return std::string("Pausiert");
        case 5: return std::string("Erfolgreich abgeschlossen");
        case 6: return std::string("Durch Benutzer beendet");
        case 7: return std::string("Fehler – Fahrzeug noch verbunden");
        default: return std::string("Unbekannt (" + std::to_string((int)id(evse1_charge_state).state) + ")");
      }

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "Seriennummer"
    id: serial_number
    register_type: read
    address: 110
    register_count: 10
    response_size: 20
    icon: mdi:barcode
    entity_category: diagnostic
    skip_updates: 60

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "Modell"
    id: charger_model
    register_type: read
    address: 130
    register_count: 10
    response_size: 20
    icon: mdi:information-outline
    entity_category: diagnostic
    skip_updates: 60

number:

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "EVSE1 Ladeleistung Limit"
    id: evse1_power_limit
    address: 1600
    register_type: holding
    value_type: U_DWORD
    min_value: 0
    max_value: 3450
    step: 100
    unit_of_measurement: "W"
    device_class: power
    icon: mdi:lightning-bolt-circle
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "Fallback Leistung"
    id: fallback_power
    address: 203
    register_type: holding
    value_type: U_DWORD
    min_value: 0
    max_value: ${max_power_limit}
    step: 100
    unit_of_measurement: "W"
    device_class: power
    icon: mdi:shield-bolt
    mode: box

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "Kommunikations-Timeout"
    id: comm_timeout
    address: 202
    register_type: holding
    value_type: U_WORD
    min_value: 0
    max_value: 600
    step: 15
    unit_of_measurement: "s"
    icon: mdi:timer-outline
    mode: box

switch:

  - platform: modbus_controller
    modbus_controller_id: wallbox
    name: "Kommunikations-Timeout aktiv"
    id: comm_timeout_enable
    address: 201
    register_type: holding
    icon: mdi:timer-check-outline

#light:
#  - platform: status_led
#    name: "ESP32 Status LED"
#    pin: GPIO2
