Сторінка 1 з 1

SANDISOLAR Aohai AO-6KSL-G3 Home Assistant integration.

Додано: 29 травня 2026, 17:52
bootuse
Якщо у комунікацію з батареєю ви зробили через CAN, то у вас залишається вільний RS485.
Сам інвертор - https://sandisolar.shop/collections/eu- ... -assistant


Для підключення потрібен RS485-TTL адаптер та esp32 (я використовую esp32c6 але правильну).
Живлення RS485-TTL адаптера - 5В, підключення до інвертора - лише лінії А та В (без GND).
RS485-TTL - https://s.click.aliexpress.com/e/_c3yN9U9d
esp32c6 - https://s.click.aliexpress.com/e/_c3HYdofD

Увага! В програмі лише частина регістрів витягується з інвертора, якщо потрібно ще якість регістри, то тут вже додавайте їх самостійно.
У Вкладенні ви знайдете список регістрів Modbus RTU. Деякі регістрі не працюють, схоже, що список не зовсім підходить саме до цієї моделі.

Код: Виділити все


uart:
  id: mod_bus
  tx_pin: GPIO19
  rx_pin: GPIO20
  baud_rate: 9600
  parity: NONE
  stop_bits: 1
  #debug:


modbus:
  id: modbus1
  uart_id: mod_bus

modbus_controller:
  - id: inverter
    address: 1
    modbus_id: modbus1
    command_throttle: 100ms
    setup_priority: -10
    update_interval: 5s

sensor:
  # Статус інвертора
  - platform: modbus_controller
    modbus_controller_id: inverter
    id: inverter_status
    name: "Inverter Status"
    register_type: read
    address: 0
    value_type: U_WORD

  # Напруга AC інвертора
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Voltage"
    id: inverter_voltage
    register_type: read
    address: 2
    value_type: U_WORD
    unit_of_measurement: "V"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Струм інвертора
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Current"
    id: inverter_current
    register_type: read
    address: 5
    value_type: S_WORD
    unit_of_measurement: "A"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Температура інвертора
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Temp Inverter"
    id: inverter_temp
    register_type: read
    address: 10
    value_type: S_WORD
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Температура IPM
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Temp Boost"
    id: boost_temp
    register_type: read
    address: 11
    value_type: S_WORD
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1


  # Grid Voltage
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Grid Voltage"
    id: grid_voltage
    register_type: read
    address: 42
    value_type: U_WORD
    unit_of_measurement: "V"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Grid Current
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Grid Current"
    id: grid_current
    register_type: read
    address: 43
    value_type: S_WORD
    unit_of_measurement: "A"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Частота мережі
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Grid Frequency"
    id: grid_frequency
    register_type: read
    address: 51
    value_type: U_WORD
    unit_of_measurement: "Hz"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  # PV1 Voltage
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "PV1 Voltage"
    id: pv1_voltage
    register_type: read
    address: 64
    value_type: U_WORD
    unit_of_measurement: "V"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # PV1 Current
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "PV1 Current"
    id: pv1_current
    register_type: read
    address: 65
    value_type: U_WORD
    unit_of_measurement: "A"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Розрахунок потужності PV1
  - platform: template
    name: "PV1 Power"
    unit_of_measurement: "W"
    accuracy_decimals: 0
    lambda: |-
      return id(pv1_voltage).state * id(pv1_current).state;


      
# Battery voltage
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Voltage"
    id: battery_voltage
    register_type: read
    address: 127
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

# Battery SOC
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery SOC"
    id: battery_soc
    register_type: read
    address: 128
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    state_class: measurement
    accuracy_decimals: 1


# BMS battery current
  # + = charge
  # - = discharge
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Current"
    id: battery_current
    register_type: read
    address: 141
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 2
    filters:
      - multiply: 0.01


# Внутрішня напруга Bus1 (Регістр 8)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Bus1 Voltage"
    address: 8
    register_type: read
    value_type: U_WORD 
    unit_of_measurement: "V"
    device_class: voltage
    filters:
      - multiply: 0.1 


# Загальна вихідна активна потужність (Регістр 286)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power Total Active"
    address: 286                     # Регістри 286 та 287
    register_type: read
    value_type: S_DWORD             # Обов'язково 32-біти зі знаком (sint32)
    unit_of_measurement: "W"
    accuracy_decimals: 1            # <--- Змініть на 1, щоб бачити десяті частини!
    device_class: power
    state_class: measurement
    icon: "mdi:lightning-bolt"
    filters:
      - multiply: -0.1              # <--- Множимо на -0.1, щоб прибрати мінус від інвертора

# Загальна потужність локального навантаження (Регістр 330)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power Out Load"
    address: 330
    register_type: read
    value_type: U_DWORD # 32-бітне число без знака (uint32)
    unit_of_measurement: "W"
    device_class: power
    filters:
      - multiply: 0.1 

  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power To User Total"
    address: 320
    register_type: read
    value_type: U_DWORD 
    unit_of_measurement: "W"
    device_class: power
    filters:
      - multiply: 0.1 # Згідно з таблицею крок 0.1W

 
# Швидкість обертання вентилятора (Регістр 106)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Fan Speed"
    address: 106
    register_type: read
    value_type: U_WORD 
    unit_of_measurement: "RPM"
    icon: "mdi:fan"



# 1. Струм батареї від BMS (Регістр 141)
  # Зверніть увагу: тип sint16, оскільки струм може бути від'ємним (розряд) або додатним (заряд)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Battery Current"
    address: 141
    register_type: read
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    accuracy_decimals: 2
    filters:
      - multiply: 0.01


# 3. Максимальний струм заряду, який дозволяє BMS (Регістр 143)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Max Allowed Charge Current"
    address: 143
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    filters:
      - multiply: 0.1

# 4. Максимальний струм розряду, який дозволяє BMS (Регістр 144)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Max Allowed Discharge Current"
    address: 144
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    filters:
      - multiply: 0.1

# Баланс комірок (Delta Volt) — тепер показуватиме 3 знаки після коми
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Cell Delta Voltage"
    address: 150  # (Або 149, якщо ви міняли адресу через зсув)
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    accuracy_decimals: 3 # Змушує відображати три знаки (наприклад, 0.002 V)
    filters:
      - multiply: 0.001

# Максимальна напруга комірки
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Max Cell Voltage"
    address: 157  # (Або 156)
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    accuracy_decimals: 3
    filters:
      - multiply: 0.001

# Мінімальна напруга комірки
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Min Cell Voltage"
    address: 158  # (Або 157)
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    accuracy_decimals: 3
    filters:
      - multiply: 0.001

# 8. Кількість повних циклів акумулятора (Регістр 151)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Battery Cycle Count"
    address: 151
    register_type: read
    value_type: U_WORD
    icon: "mdi:battery-refresh"

# 2. Температура батареї від BMS (Регістр 142)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "BMS Battery Temperature"
    address: 142
    register_type: read
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Temp LLC"
    address: 12
    register_type: read      # Читаємо як Input Register
    value_type: S_WORD       # 16-бітне число зі знаком (sint16)
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    device_class: temperature
    state_class: measurement
    icon: "mdi:thermometer"
    # Множимо на 0.1, щоб отримати коректне значення з десятковою комою
    filters:
      - multiply: 0.1

  # --- ЗАРЯД ЗА СЬОГОДНІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Energy Charge Today"
    address: 383                     # Початкова адреса (захопить 383 і 384)
    register_type: read
    value_type: U_DWORD             # 32-бітне число (uint32)
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    icon: "mdi:battery-arrow-up"
    filters:
      - multiply: 0.1

  # --- ЗАГАЛЬНИЙ ЗАРЯД (TOTAL) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Energy Charge Total"
    address: 385                     # Початкова адреса (захопить 385 і 386)
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    icon: "mdi:battery-plus"
    filters:
      - multiply: 0.1

  # --- РОЗРЯД ЗА СЬОГОДНІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Energy Discharge Today"
    address: 387                     # Початкова адреса (захопить 387 і 388)
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    icon: "mdi:battery-arrow-down"
    filters:
      - multiply: 0.1

  # --- ЗАГАЛЬНИЙ РОЗРЯД (TOTAL) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Energy Discharge Total"
    address: 389                     # Початкова адреса (захопить 389 і 390)
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    icon: "mdi:battery-minus"
    filters:
      - multiply: 0.1

  # NTC темп
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Temp External NTC"
    address: 13              # Змініть на точну адресу регістра з вашої таблиці!
    register_type: read      # Читаємо як Input Register
    value_type: S_WORD       # 16-бітне число зі знаком (sint16)
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    device_class: temperature
    state_class: measurement
    icon: "mdi:thermometer-bluetooth" # Іконка зовнішнього/виносного датчика
    # Множимо на 0.1, оскільки китайські NTC-налаштування майже завжди йдуть без коми
    filters:
      - multiply: 0.1

# --- СОНЯЧНА ГЕНЕРАЦІЯ ЗА СЬОГОДНІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Solar Generation Today"
    address: 379                     # Стартова адреса (захопить 379 та 380 регістри)
    register_type: read
    value_type: U_DWORD             # 32-бітне число (uint32)
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    icon: "mdi:solar-power-variant"
    filters:
      - multiply: 0.1

  # --- ЗАГАЛЬНА СОНЯЧНА ГЕНЕРАЦІЯ (TOTAL) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Solar Generation Total"
    address: 381                     # Стартова адреса (захопить 381 та 382 регістри)
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    icon: "mdi:solar-panel-large"
    filters:
      - multiply: 0.1


  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power Total Apparent ALL"
    address: 284                     # Стартова адреса (захопить 284 та 285)
    register_type: read
    value_type: U_DWORD             # 32-бітне число (uint32)
    unit_of_measurement: "VA"
    accuracy_decimals: 1
    device_class: apparent_power
    state_class: measurement
    icon: "mdi:flash"
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power Total Reactive  ALL"
    address: 288                     # Стартова адреса (захопить 288 та 289)
    register_type: read
    value_type: S_DWORD             # Використовуємо 32-бітне число зі знаком (sint32)
    unit_of_measurement: "var"
    accuracy_decimals: 1
    device_class: reactive_power
    state_class: measurement
    icon: "mdi:flash-outline"
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power Factor"
    address: 52
    register_type: read      # Читаємо як Input Register
    value_type: S_WORD       # 16-бітне число зі знаком (sint16)
    unit_of_measurement: ""  # Коефіцієнт потужності є безрозмірною величиною
    accuracy_decimals: 2     # Показуватиме, наприклад, 0.97 чи 1.00
    device_class: power_factor
    state_class: measurement
    icon: "mdi:angle-acute"
    filters:
      - multiply: 0.0001


  # --- НАПРУГА EPS (РЕЗЕРВ) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "EPS Voltage"
    address: 55
    register_type: read      # Читаємо як Input Register
    value_type: U_WORD       # 16-бітне число без знаку (uint16)
    unit_of_measurement: "V"
    accuracy_decimals: 1
    device_class: voltage
    state_class: measurement
    icon: "mdi:flash-outline"
    filters:
      - multiply: 0.1

  # --- СТРУМ EPS (РЕЗЕРВ) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "EPS Current"
    address: 56
    register_type: read      # Читаємо як Input Register
    value_type: U_WORD       # 16-бітне число без знаку (uint16)
    unit_of_measurement: "A"
    accuracy_decimals: 1
    device_class: current
    state_class: measurement
    icon: "mdi:current-ac"
    filters:
      - multiply: 0.1

  # --- НАПРУГА ГЕНЕРАТОРА ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Generator Voltage"
    address: 96
    register_type: read      # Читаємо як Input Register
    value_type: U_WORD       # 16-бітне число без знаку (uint16)
    unit_of_measurement: "V"
    accuracy_decimals: 1
    device_class: voltage
    state_class: measurement
    icon: "mdi:engine-outline"
    filters:
      - multiply: 0.1

  # --- СТРУМ ГЕНЕРАТОРА ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Generator Current"
    address: 97
    register_type: read      # Читаємо як Input Register
    value_type: U_WORD       # 16-бітне число без знаку (uint16)
    unit_of_measurement: "A"
    accuracy_decimals: 1
    device_class: current
    state_class: measurement
    icon: "mdi:current-ac"
    filters:
      - multiply: 0.1


  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Total Operation Time"
    address: 107                     # Стартова адреса (захопить 107 та 108 регістри)
    register_type: read
    value_type: U_DWORD             # 32-бітне число (uint32)
    unit_of_measurement: "h"         # Виводимо в годинах (hours)
    accuracy_decimals: 1             # Один знак після коми (наприклад, 142.5 год)
    icon: "mdi:hourglass-toggle"
    # Перераховуємо байти інвертора (0.5 хв) у повноцінні години
    filters:
      - multiply: 0.00833333


  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery SOH"
    address: 152
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "%"
    accuracy_decimals: 0
    device_class: battery
    state_class: measurement
    icon: "mdi:heart-battery"


# 201й регістр
  - platform: modbus_controller
    modbus_controller_id: inverter
    id: inverter_reg_201_raw
    address: 201
    register_type: holding
    value_type: U_WORD
    internal: true # Цей сенсор прихований, він потрібен лише для розбору на біти
    # Оновлюємо статус наших бінарних сенсорів щоразу, як зчитується регістр
    on_value:
      then:
        - lambda: |-
            if (!std::isnan(x)) {
              uint16_t val = (uint16_t)x;
              id(bin_eco_mode).publish_state((val & 0x0001) > 0);
              id(bin_overload_restart).publish_state((val & 0x0002) > 0);
              id(bin_temp_restart).publish_state((val & 0x0004) > 0);
              id(bin_mode_alert).publish_state((val & 0x0008) > 0);
              id(bin_gen_enable).publish_state((val & 0x0020) > 0);
              id(bin_smart_load).publish_state((val & 0x0040) > 0);
              id(bin_grid_feed).publish_state((val & 0x0080) > 0);
            }


text_sensor:
  - platform: template
    name: "Inverter Mode"
    lambda: |-
      switch ((int)id(inverter_status).state) {
        case 0: return {"Waiting"};
        case 1: return {"Grid"};
        case 2: return {"Off-grid"};
        case 3: return {"Fault"};
        case 4: return {"Flashing"};
        case 5: return {"Bypass"};
        case 6: return {"Self-charge"};
        default: return {"Unknown"};
      }


# --- РЕГІСТР 234: ЗВ'ЯЗОК З ХМАРОЮ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Cloud Connection Status"
    address: 234
    register_type: holding
    entity_category: diagnostic
    icon: "mdi:cloud-check"
    lambda: |-
      if (data.size() < 2) return std::string("Немає даних");
      
      // Логіка для молодшого байта (data[1])
      uint8_t status_byte = data[1]; 
      if (status_byte == 0xAA) {
        return std::string("Норма (Підключено)");
      } else if (status_byte == 0x55) {
        return std::string("Помилка хмари");
      } else {
        return std::string("Невідомий статус");
      }

# --- РЕГІСТР 234: ТИП МОДУЛЯ ЗВ'ЯЗКУ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Datalogger Type"
    address: 234
    register_type: holding
    entity_category: diagnostic
    icon: "mdi:router-wireless"
    lambda: |-
      if (data.size() < 2) return std::string("Немає даних");
      
      // Логіка для старшого байта (data[0])
      uint8_t type_byte = data[0]; 
      if (type_byte == 0x01) {
        return std::string("Wi-Fi (Wifi-U)");
      } else if (type_byte == 0x02) {
        return std::string("4G Модем (4G-U)");
      } else {
        return std::string("Не визначено");
      }

# --- РЕГІСТР 235: ВНУТРІШНІЙ ЗВ'ЯЗОК (ЛОГГЕР <-> ІНВЕРТОР) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Logger Internal Comm Status"
    address: 235
    register_type: holding
    entity_category: diagnostic
    icon: "mdi:connection"
    lambda: |-
      if (data.size() < 2) return std::string("Немає даних");
      
      // У 235 регістрі значення зазвичай лежить у молодшому байті (data[1])
      uint8_t comm_byte = data[1]; 
      if (comm_byte == 0xAA) {
        return std::string("Зв'язок OK");
      } else if (comm_byte == 0x55) {
        return std::string("Помилка зв'язку з платою");
      } else {
        // Про всяк випадок перевіримо старший байт, якщо китайці записали туди
        if (data[0] == 0xAA) return std::string("Зв'язок OK");
        if (data[0] == 0x55) return std::string("Помилка зв'язку з платою");
        return std::string("Невідомий статус");
      }

# --- ДІАГНОСТИКА РЕГІСТРА СИРЕ ЗНАЧЕННЯ  ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Raw Diagnostic 1" 
    address: 275
    register_type: holding
    icon: "mdi:database-search"
    entity_category: diagnostic
    raw_encode: NONE
    lambda: |-
      if (data.size() < 2) return std::string("No data");
      
      // Отримуємо значення обох байтів для повної картини
      uint8_t high_byte = data[0];
      uint8_t low_byte = data[1];
      uint16_t full_word = (high_byte << 8) | low_byte;
      
      char buffer[64];
      sprintf(buffer, "Low: %d | High: %d | Full: %d (0x%04X)", low_byte, high_byte, full_word, full_word);
      return std::string(buffer);





switch:
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Power Switch"
    address: 0
    register_type: holding # Важливо! Для керування використовуємо Holding Registers
    bitmask: 1             # Працюємо з першим бітом (1 - ввімкнено, 0 - вимкнено)
    entity_category: config
    icon: "mdi:power"

   # --- РЕГІСТР 231: КЕРУВАННЯ BLUETOOTH ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Enable Bluetooth"
    address: 231
    register_type: holding
    entity_category: config
    icon: "mdi:bluetooth"
    # Оскільки тип у таблиці uint8, значення зазвичай лежить у молодшому байті
    lambda: "return x > 0;"
    write_lambda: "return x ? 1.0f : 0.0f;"

# --- РЕГІСТР 207: КЕРУВАННЯ ЗВУКОВИМ СИГНАЛОМ (ПИЩАЛКОЮ) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Enable Buzzer"
    address: 207
    register_type: holding
    entity_category: config
    icon: "mdi:volume-mute"
    # Інвертуємо логіку для зручності: перемикач увімкнено = звук вимкнено (Mute)
    lambda: "return x > 0;"
    write_lambda: "return x ? 1.0f : 0.0f;"

# --- РЕГІСТР 208: ПЕРЕХІД В БАЙПАС ПРИ ПЕРЕВАНТАЖЕННІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Enable Overload to Bypass"
    address: 208
    register_type: holding
    entity_category: config
    lambda: "return x > 0;"
    write_lambda: "return x ? 1.0f : 0.0f;"





number:
# 1. Максимальний загальний струм заряджання батареї (Регістр 129)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Max Charge Current"
    address: 129
    register_type: holding 
    value_type: U_WORD 
    unit_of_measurement: "A"
    device_class: current
    entity_category: config
    icon: "mdi:battery-charging-high"
    # Чіткі межі для повзунка (від 10А до 120А, підлаштуйте під свій акумулятор)
    min_value: 10
    max_value: 120
    step: 1
    # Явне ділення та множення для Modbus (замість багнутого multiply):
    lambda: "return (float)x * 0.01;"
    write_lambda: "return (uint16_t)(x / 0.01);"
    mode: 'box'

# 2. Максимальний струм заряджання від мережі (Регістр 189)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "AC Grid Charge Current"
    address: 189
    register_type: holding 
    value_type: U_WORD 
    unit_of_measurement: "A"
    device_class: current
    entity_category: config
    icon: "mdi:power-plug"
    # Чіткі межі (від 0А до 100А)
    min_value: 0
    max_value: 100
    step: 1
    # Явне ділення та множення (крок за таблицею 0.1):
    lambda: "return (float)x * 0.1;"
    write_lambda: "return (uint16_t)(x / 0.1);"
    mode: 'box'

  # Максимальна потужність генератора в кВт (Регістр 220)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Gen Input Rated Power"
    address: 220
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "kW"       # Змінюємо одиниці виміру на кВт
    entity_category: config
    icon: "mdi:generator-portable"
    min_value: 0
    max_value: 15.0                # Максимум 15 кВт
    step: 0.1                      # Крок 0.1 кВт (тобто 100 Вт)
    mode: BOX

    # --- МАТЕМАТИКА ДЛЯ КВТ ---
    # При читанні: якщо інвертор для 5000Вт присилає сире 500:
    # 500 * 10 = 5000 Вт. Ділимо на 1000, щоб отримати 5.0 кВт.
    # Разом це спрощується до: х * 0.01
    lambda: "return (float)x * 0.01;"

    # При записі: якщо ви вводите 5.0 кВт:
    # 5.0 * 1000 = 5000 Вт. Ділимо на 10 (бо інвертор чекає 500).
    # Разом це спрощується до: х * 100.0
    write_lambda: "return (uint16_t)(x * 100.0);"

# Відсоток акумулятора (SOC) для ВИМКНЕННЯ Smart Load / Second EPS (Регістр 226)
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Smart Load Off SOC"
    address: 226
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    entity_category: config
    icon: "mdi:battery-arrow-down"
    min_value: 10
    max_value: 95
    step: 1
    mode: BOX
    # Передаємо значення як є (якщо на екрані 50%, інвертор чекає число 50)
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"

# --- РЕГІСТР 215: КОМПЕНСАЦІЯ ПОТУЖНОСТІ МЕРЕЖІ (ZERO EXPORT BUFFER) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Grid Power Compensation"
    address: 215
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "W"
    entity_category: config
    icon: "mdi:hand-coin"
    min_value: 0
    max_value: 200
    step: 1
    mode: BOX
    # Значення передаються як є (наприклад, число 40 = 40 Вт)
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"


    # --- РЕГІСТР 183: МАКСИМАЛЬНИЙ СТРУМ РОЗРЯДУ ---
  #- platform: modbus_controller
  #  modbus_controller_id: inverter
  #  name: "Inverter Max Discharge Current"
  #  address: 183
  #  register_type: holding
  #  value_type: U_WORD
  #  unit_of_measurement: "A"
  #  device_class: current
  #  entity_category: config
  #  icon: "mdi:battery-arrow-down-current"
  #  min_value: 1.0
  #  max_value: 137.0
  #  step: 1.0
  #  mode: BOX
  #  lambda: "return (float)x / 100.0;"
  #  write_lambda: "return (uint16_t)(x * 100.0);"

# --- РЕГІСТР 185: SOC ВІДНОВЛЕННЯ РОЗРЯДУ (ON-GRID) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "On-Grid End-of-Discharge Recovery SOC"
    address: 185
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    entity_category: config
    icon: "mdi:battery-refresh"
    min_value: 20
    max_value: 100
    step: 1
    mode: BOX
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"

# --- РЕГІСТР 187: SOC ВІДНОВЛЕННЯ РОЗРЯДУ (OFF-GRID) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Off-Grid end-of-Discharge Recovery"
    address: 187
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    entity_category: config
    icon: "mdi:battery-refresh-outline"
    min_value: 10
    max_value: 100
    step: 1
    mode: BOX
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"

# --- РЕГІСТР 188: НАПРУГА ЗАХИСНОГО ВИМКНЕННЯ (UNDER VOLTAGE) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Under Voltage Cut-off"
    address: 188
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-alert"
    min_value: 40.0
    max_value: 48.0
    step: 0.1
    mode: BOX
    lambda: "return (float)x / 10 ;" # x / 10.0
    write_lambda: "return (uint16_t)(x * 10.0);"

# --- РЕГІСТР 190: НАПРУГА ПЛАВАЮЧОГО ЗАРЯДУ (FLOAT) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Float Voltage"
    address: 190
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-charging-wireless-60"
    min_value: 48.0
    max_value: 58.4
    step: 0.1
    mode: BOX
    lambda: "return (float)x / 100.0;"
    write_lambda: "return (uint16_t)(x * 100.0);"

# --- РЕГІСТР 191: НАПРУГА ПЕРЕХОДУ БАТАРЕЯ -> МЕРЕЖА ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery to AC Voltage (Discharge limit)"
    address: 191
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-arrow-down"
    min_value: 44.0
    max_value: 52.0
    step: 0.1
    mode: BOX
    lambda: "return (float)x / 10.0;"
    write_lambda: "return (uint16_t)(x * 10.0);"

# --- РЕГІСТР 192: НАПРУГА ПЕРЕХОДУ МЕРЕЖА -> БАТАРЕЯ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter AC to Battery Voltage (Charge target)"
    address: 192
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-arrow-up"
    min_value: 48.0
    max_value: 58.0
    step: 0.1
    mode: BOX
    lambda: "return (float)x / 10.0;"
    write_lambda: "return (uint16_t)(x * 10.0);"

# --- РЕГІСТР 194: МАКСИМАЛЬНИЙ ЧАС ПІДВИЩЕНОГО ЗАРЯДУ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Boost Charge Max Time"
    address: 194
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "min"
    entity_category: config
    icon: "mdi:timer-cog"
    min_value: 5
    max_value: 900
    step: 1
    mode: BOX
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"

# --- РЕГІСТР 195: ТОЧКА ПОПЕРЕДЖЕННЯ ПРО НИЗЬКУ НАПРУГУ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Under Voltage Alarm"
    address: 195
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-alert-variant-outline"
    min_value: 40.0
    max_value: 50.0
    step: 0.1
    mode: BOX
    lambda: "return (float)x / 10.0;"
    write_lambda: "return (uint16_t)(x * 10.0);"

# --- РЕГІСТР 130: НАПРУГА ПРИПИНЕННЯ РОЗРЯДУ (STOP DISCHARGE) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Stop Discharge Voltage"
    address: 130
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-remove"
    min_value: 40.0
    max_value: 52.0
    step: 0.01
    mode: BOX
    lambda: "return (float)x / 100.0;"
    write_lambda: "return (uint16_t)(x * 100.0);"

# --- РЕГІСТР 131: НАПРУГА ВІДСІКАННЯ ЗАРЯДУ (CONSTANT CHARGE) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Constant Charge Voltage"
    address: 131
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    entity_category: config
    icon: "mdi:battery-charging-high"
    min_value: 48.0
    max_value: 59.2
    step: 0.01
    mode: BOX
    lambda: "return (float)x / 100.0;"
    write_lambda: "return (uint16_t)(x * 100.0);"

# --- РЕГІСТР 139: SOC ПРИПИНЕННЯ ЗАРЯДУ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Battery Charge Stop SOC"
    address: 139
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    entity_category: config
    icon: "mdi:battery-charging-100"
    min_value: 10
    max_value: 100
    step: 1
    mode: BOX
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"

# --- РЕГІСТР 140: SOC ПРИПИНЕННЯ РОЗРЯДУ ПРИ НАЯВНОСТІ МЕРЕЖІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "On-Grid Discharge Stop SOC"
    address: 140
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    entity_category: config
    icon: "mdi:battery-arrow-down"
    min_value: 10
    max_value: 100
    step: 1
    mode: BOX
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"

# --- РЕГІСТР 141: SOC ПОВНОГО ВИМКНЕННЯ ПРИ АВТОНОМІЇ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Off-Grid Discharge Stop SOC"
    address: 141
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    entity_category: config
    icon: "mdi:battery-alert"
    min_value: 10
    max_value: 100
    step: 1
    mode: BOX
    lambda: "return (float)x;"
    write_lambda: "return (uint16_t)x;"


  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Тест"
    address: 142
    register_type: holding
    value_type: U_WORD
    entity_category: config
    icon: "mdi:battery-arrow-down"
    mode: BOX
    lambda: "return (float)x;"
    


select:
# --- РЕГІСТР 209: РЕЖИМ ВХІДНОЇ МЕРЕЖІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter AC Input Type"
    address: 209
    value_type: U_WORD
    entity_category: config
    icon: "mdi:power-settings"
    optionsmap:
      "APL": 0
      "UPS": 1

# --- РЕГІСТР 211: РЕЖИМ ПАРАЛЕЛЬНОЇ РОБОТИ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Parallel Mode"
    address: 211
    value_type: U_WORD
    entity_category: config
    icon: "mdi:dots-hexagon"
    optionsmap:
      "Single (SIG)": 0
      "Parallel (PAL)": 1
      "3-Phase 1 (3P1)": 2
      "3-Phase 2 (3P2)": 3
      "3-Phase 3 (3P3)": 4

# --- РЕГІСТР 213: РОЛЬ У ПАРАЛЕЛЬНІЙ СИСТЕМІ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Parallel Device Type"
    address: 213
    value_type: U_WORD
    entity_category: config
    icon: "mdi:account-network"
    optionsmap:
      "Master": 0
      "Slave": 1

# --- РЕГІСТР 214: РЕЖИМ РОБОТИ BMS (КОМУНІКАЦІЯ) ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter BMS Work Mode"
    address: 214
    value_type: U_WORD
    entity_category: config
    icon: "mdi:battery-bluetooth"
    optionsmap:
      "Disabled (Voltage Mode)": 0
      "CAN Bus": 1
      "RS485": 2

# --- РЕГІСТР 181: ПРІОРИТЕТ ЗАРЯДЖАННЯ АКУМУЛЯТОРА ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Charge Source Priority"
    address: 181
    value_type: U_WORD
    entity_category: config
    icon: "mdi:battery-charging-setting"
    optionsmap:
      "Solar First (CSO)": 0
      "Solar & Utility (SNU)": 1
      "Only Solar (OSO)": 2

# --- РЕГІСТР 182: ПРІОРИТЕТ ЖИВЛЕННЯ НАВАНТАЖЕННЯ ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Output Source Priority"
    address: 182
    value_type: U_WORD
    entity_category: config
    icon: "mdi:home-lightning-bolt"
    optionsmap:
      "Solar-Battery-Utility (SOL)": 0
      "Utility-Solar-Battery (UTI)": 1
      "Solar-Utility-Battery (SBU)": 2
      "Grid-Tied Mode": 10

# --- РЕГІСТР 125:  ТИП АКУМУЛЯТОРА  ---
  - platform: modbus_controller
    modbus_controller_id: inverter
    name: "Inverter Battery SubType"
    address: 125
    value_type: U_WORD
    entity_category: config
    icon: "mdi:battery-casing"
    optionsmap:
      "Lead-Acid": 0
      "Lithium": 1
      "Lithium No Comm": 2

binary_sensor:
  # БІТ 0: ЕКО РЕЖИМ
  - platform: template
    id: bin_eco_mode
    name: "Inverter ECO Mode Status"
    icon: "mdi:leaf"

  # БІТ 1: АВТОПЕРЕЗАПУСК ПРИ ПЕРЕВАНТАЖЕННІ
  - platform: template
    id: bin_overload_restart
    name: "Inverter Overload Auto Restart Status"
    icon: "mdi:refresh-circle"

  # БІТ 2: АВТОПЕРЕЗАПУСК ПРИ ПЕРЕГРІВІ
  - platform: template
    id: bin_temp_restart
    name: "Inverter Over-Temperature Auto Restart Status"
    icon: "mdi:thermometer-refresh"

  # БІТ 3: ЗВУК ПРИ ЗМІНІ РЕЖИМУ ЖИВЛЕННЯ
  - platform: template
    id: bin_mode_alert
    name: "Inverter Mode Change Alert Status"
    icon: "mdi:bell-ring-outline"

  # БІТ 5: ДОЗВІЛ РОБОТИ ВІД ГЕНЕРАТОРА
  - platform: template
    id: bin_gen_enable
    name: "Inverter Generator Input Status"
    icon: "mdi:engine-start"

  # БІТ 6: ДВОКАНАЛЬНЕ НАВАНТАЖЕННЯ (SMART LOAD)
  - platform: template
    id: bin_smart_load
    name: "Inverter Smart Load Status"
    icon: "mdi:power-plug"

  # БІТ 7: ДОЗВІЛ ГЕНЕРАЦІЇ В МЕРЕЖУ (GRID FEED)
  - platform: template
    id: bin_grid_feed
    name: "Inverter Grid Feed-In Status"
    icon: "mdi:transmission-tower-export"

Re: SANDISOLAR Aohai AO-6KSL-G3 Home Assistant integration.

Додано: 05 червня 2026, 10:48
bootuse
Огляд інвертора.