esphome:
  name: froeling # If you're intending to use the Dashboard provided in this Repo - DO NOT CHANGE THE NAME -> readme.md

esp32:
  board: wemos_d1_mini32

# Enable logging
logger:
  baud_rate: 0
  level: INFO

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

ota:
  password: ""

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

web_server:
  port: 80

substitutions:
  name: froeling
  modbus_controller_id: froeling

uart:
  - id: uartfroeling

    tx_pin: 1
    rx_pin: 3
    baud_rate: 57600
    data_bits: 8
    stop_bits: 1
    parity: NONE

modbus:
  id: modbus1
  uart_id: uartfroeling

modbus_controller:
  - id: froeling
    address: 2
    modbus_id: modbus1
    setup_priority: -10
    update_interval: "60s"
    command_throttle: "50ms"

switch:
  - platform: restart
    name: "Restart ESP"

packages:
  remote_package:
    url: https://github.com/GyroGearl00se/ESPHome-Froeling-Lambdatronic_3200
    ref: main
    files: [austragung.yaml, boiler_01.yaml, heizkoerper.yaml, kessel.yaml, puffer_01.yaml, zirkulationspumpe.yaml]
    refresh: 1d
    
number:
  - platform: modbus_controller
    modbus_controller_id: ${modbus_controller_id}
    name: "${name} Bei welcher RL Temperatur an der Zirkulationsleitung soll die Pumpe ausschalten"
    id: ${name}_Bei_welcher_RL_Temperatur_an_der_Zirkulationsleitung_soll_die_Pumpe_ausschalten
    address: 600
    unit_of_measurement: "°C"
    value_type: U_WORD
    multiply: 2
    min_value: 20
    max_value: 120

  - platform: modbus_controller
    modbus_controller_id: ${modbus_controller_id}
    name: "${name} Kessel-Solltemperatur"
    id: ${name}_Kessel_Solltemperatur
    address: 0
    unit_of_measurement: "°C"
    value_type: U_WORD
    multiply: 2
    min_value: 70
    max_value: 90

text_sensor:
  - platform: modbus_controller
    modbus_controller_id: ${modbus_controller_id}
    name: "${name} Anlagenzustand"
    id: ${name}_Anlagenzustand
    register_type: read
    address: 4000
    raw_encode: HEXBYTES
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 0: return std::string("Dauerlast");
        case 1: return std::string("Brauchwasser");
        case 2: return std::string("Automatik");
        case 3: return std::string("Scheitholzbetrieb");
        case 4: return std::string("Reinigen");
        case 5: return std::string("Ausgeschaltet");
        case 6: return std::string("Extraheizen");
        case 7: return std::string("Kaminkehrer");
        case 8: return std::string("Reinigen");
        default: return std::string("----");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: ${modbus_controller_id}
    name: "${name} Kesselzustand"
    id: ${name}_Kesselzustand
    register_type: read
    address: 4001
    raw_encode: HEXBYTES
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 0: return std::string("STÖRUNG");
        case 1: return std::string("Kessel Aus");
        case 2: return std::string("Anheizen");
        case 3: return std::string("Heizen");
        case 4: return std::string("Feuererhaltung");
        case 5: return std::string("Feuer Aus");
        case 6: return std::string("Tür offen");
        case 7: return std::string("Vorbereitung");
        case 8: return std::string("Vorwärmen");
        case 9: return std::string("Zünden");
        case 10: return std::string("Abstellen Warten");
        case 11: return std::string("Abstellen Warten1");
        case 12: return std::string("Abstellen Einschub1");
        case 13: return std::string("Abstellen Warten2");
        case 14: return std::string("Abstellen Einschub2");
        case 15: return std::string("Abreinigen");
        case 16: return std::string("2h warten");
        case 17: return std::string("Saugen / Heizen");
        case 18: return std::string("Fehlzündung");
        case 19: return std::string("Betriebsbereit");
        case 20: return std::string("Rost schließen");
        case 21: return std::string("Stoker leeren");
        case 22: return std::string("Vorheizen");
        case 23: return std::string("Saugen");
        case 24: return std::string("RSE schließen");
        case 25: return std::string("RSE öffnen");
        case 26: return std::string("Rost kippen");
        case 27: return std::string("Vorwärmen-Zünden");
        case 28: return std::string("Resteinschub");
        case 29: return std::string("Stoker auffüllen");
        case 30: return std::string("Lambdasonde aufheizen");
        case 31: return std::string("Gebläsenachlauf I");
        case 32: return std::string("Gebläsenachlauf II");
        case 33: return std::string("Abgestellt");
        case 34: return std::string("Nachzünden");
        case 35: return std::string("Zünden Warten");
        case 36: return std::string("FB: RSE schließen");
        case 37: return std::string("FB: Kessel belüften");
        case 38: return std::string("FB: Zünden");
        case 39: return std::string("FB: min. Einschub");
        case 40: return std::string("RSE schließen");
        case 41: return std::string("STÖRUNG: STB/NA");
        case 42: return std::string("STÖRUNG: Kipprost");
        case 43: return std::string("STÖRUNG: FR-Überdr.");
        case 44: return std::string("STÖRUNG: Türkont.");
        case 45: return std::string("STÖRUNG: Saugzug");
        case 46: return std::string("STÖRUNG: Umfeld");
        case 47: return std::string("FEHLER: STB/NA");
        case 48: return std::string("FEHLER: Kipprost");
        case 49: return std::string("FEHLER: FR-Überdr.");
        case 50: return std::string("FEHLER: Türkont.");
        case 51: return std::string("FEHLER: Saugzug");
        case 52: return std::string("FEHLER: Umfeld");
        case 53: return std::string("FEHLER: Stoker");
        case 54: return std::string("STÖRUNG: Stoker");
        case 55: return std::string("FB: Stoker leeren");
        case 56: return std::string("Vorbelüften");
        case 57: return std::string("STÖRUNG: Hackgut");
        case 58: return std::string("FEHLER: Hackgut");
        case 59: return std::string("NB: Tür offen");
        case 60: return std::string("NB: Anheizen");
        case 61: return std::string("NB: Heizen");
        case 62: return std::string("FEHLER: STB/NA");
        case 63: return std::string("FEHLER: Allgemein");
        case 64: return std::string("NB: Feuer Aus");
        case 65: return std::string("Selbsttest aktiv");
        case 66: return std::string("Fehlerbeh. 20min");
        case 67: return std::string("FEHLER: Fallschacht");
        case 68: return std::string("STÖRUNG: Fallschacht");
        case 69: return std::string("Reinigen möglich");
        case 70: return std::string("Heizen - Reinigen");
        case 71: return std::string("SH Anheizen");
        case 72: return std::string("SH Heizen");
        case 73: return std::string("SH Heiz/Abstell");
        case 74: return std::string("STÖRUNG sicher");
        case 75: return std::string("AGR Nachlauf");
        case 76: return std::string("AGR reinigen");
        case 77: return std::string("Zündung AUS");
        case 78: return std::string("Filter reinigen");
        case 79: return std::string("Anheizassistent");
        case 80: return std::string("SH Zünden");
        case 81: return std::string("SH Störung");
        case 82: return std::string("Sensorcheck");
        default: return std::string("----");
      }
      return x;
