FVE s podporou z DS

Souhrn tématu

Uživatel amatérsky plánuje fotovoltaickou elektrárnu (FVE) s podporou ze sítě (DS), která pokryje spotřebu během vysokého tarifu pomocí FV panelů a baterií. Za nízkého tarifu se využívá přímý odběr ze sítě a dobíjení baterií. Diskutuje se i integrace zdroje tepla EASUN SMG II s možností ovládání přes ESP32 a Home Assistant, což umožňuje efektivní řízení nabíjecího proudu a monitorování provozu. Celkově jde o praktický návod a zkušenosti s návrhem hybridního systému pro úsporu energie.
cipis
Moderátor
Příspěvky: 7339
Registrován: pon srp 16, 2021 9:31 pm
Reputace:1031
Lokalita: blízko Brna
Systémové napětí: 24V
Výkon panelů [Wp]: 18+ kWp
Kapacita baterie [kWh]: 40+26
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: blízko Brna

Re: FVE s podporou z DS

Nový příspěvek od cipis »

Hmm, a podělíš se o to PBŘ?
18+ kWp v provozu, 7+ kWp čeká na montáž/zapojení
Regulátory Epever a Victron
MP 24/5000 + Deye mikroinvertory 1+2,25+0,8 kW (můj byt + máti byt)
MP 24/1200 inet, sit, kamery atd.
Phoenix 24/5000 vytěžování do akumulačních kamen
Epever 3kW vytěžování do bojlerů + žebříky
1 kW "nabíječka" 24 V
40+ kWh staré olovo 26+ kWh Li-Ion
několik dalších MP jako záložní zdroje na různých místech
Modře píši jako moderátor, černě jako člen.
rva
Příspěvky: 5059
Registrován: úte dub 23, 2013 10:21 am
Reputace:1004
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 62
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem

Re: FVE s podporou z DS

Nový příspěvek od rva »

Tak už jsou i nějaké zkušenosti s tím EASUN baterry boxem. Články se rozcházejí víc, než u ostatních baterií, které jsem skládal:
Rozbalancování baterie EASUN.png
Rozbalancování baterie EASUN.2.png
Rozbalancování baterie EASUN.2.png (65.31 KiB) Zobrazeno 313 x
. Je vidět, že i větší firmy by se mohly učit od amatérů. Použitá JBD BMS má pouze pasivní balancér (palič) asi 50 mA, zatímco za podobnou cenu by si tam každý svéprávný bastlíř dal JK-BMS s aktivním balancováním alespoň 1A. Uvidím, jestli s tím časem něco udělám.
Do externího boxu jsem přesunul další baterii. Při stěhování jsem mohl přeměřit a zapsat na články jejich vnitřní odpor ( články jsou nabité, protože demontáž a montáž se nejlépe dělá za nabitého stavu, kdy do baterií skoro nic neteče), ještě se to musí učesat, chybí k tomu nějaké komponenty, ale už je zapojená do elektrárny.
2026-08-02 -Vnitřní odpor článků 315 Ah.jpg
Postavena je na vozíku-plošině z LIDL (cca 250 Kč, papírová nosnost 250 kg).
PARKSIDE® Transportní vozík Lidl.png
Ale kolečka jsem po testování vyměnil za jiná (oranžová😃), která jsem vytisk z TPU (neprasknou a jak je model dost hustý, tak mají i pevnost).
2026-08-02 Příprava druhé baterie v boxu.jpg
U baterií dávám sichr pojistku na + pól, tady jsem vyzkoušel z Allegro kompaktní typ:
Pojistka baterie 150A .png
Má zbytečně velký montážní otvor, takže aby dobře seděla na terminálu této baterie, vypodložil jsem to Cu podložkama.
Jo a box je už nějak natřený, aby mu nevadila případná vlhkost a dalo se to utřít. Zavíraný zatím na petlici:
2026-08-02 Box po natření.jpg
2026-08-02 Box po natření.2.jpg
Integrace do HA je přes esphome, kde jsem se vrátil k bezdrátovému řešení - s BMS se komunikuje přes BLE a přes wifi to jde do LAN a HA. Vyhovují mi moduly esp32 C3 s oled displejem. Než se vyřeší nákupy z Číny, tak Poláci jsou schopni to dodat za podobné ceny:
ESP32 C3 OLED.png
Na displeji nechávám rotovat pár základních hodnot - napětí baterie, proud, max. rozdíl napětí mezi články. Komu se nechce to ladit, stačí změnit MAC adresu a mělo by to fungovat:

Kód: Vybrat vše

substitutions:
  name: battery-315ah
  friendly_name: Baterie 315Ah
  device_description: "Monitoruje a nastavuje baterii 315Ah na které je JK-BMS přes ble."
  external_components_source: github://syssi/esphome-jk-bms@main

  # BLE settings
  mac_address: xx:xx:xx:1B:5B:A1
  # Please use "JK02_24S" if you own a old JK-BMS < hardware version 11.0 (hardware version >= 6.0 and < 11.0)
  # Please use "JK02_32S" if you own a new JK-BMS >= hardware version 11.0 (f.e. JK-B2A8S20P hw 11.XW, sw 11.26)
  # Please use "JK04" if you have some old JK-BMS <= hardware version 3.0 (f.e. JK-B2A16S hw 3.0, sw. 3.3.0)
  protocol_version: JK02_32S

esphome:
  name: ${name}
#  name_add_mac_suffix: false
  comment: ${device_description}
  project:
    name: "syssi.esphome-jk-bms"
    version: 2.1.0

esp32:
  variant: esp32c3
  framework:
    type: esp-idf


external_components:
  - source: ${external_components_source}
    refresh: 0s

# Enable logging
logger:

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

# Allow Over-The-Air updates
ota:
  platform: esphome
  password: "a4c918a61abbf937b5413b41e91c3823"
  on_begin:
    then:
      - switch.turn_off: ble_client_switch0
      - logger.log: "BLE connection suspended for OTA update"
  
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
# Optional manual IP
#  manual_ip:
#   static_ip: 192.168.0.70
#  gateway: 192.168.0.1
# subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "battery-315ah"
    password: bxxx-315ah


# V HA se pak k položkám "edit" a "logs" objeví položka "visit", kde se po kliknutí otevře stránka esphome daného zařízení
# To have a "next url" for improv serial
web_server:
  port: 80


# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

i2c:
  - id: bus_a
    sda: GPIO5
    scl: GPIO6
    scan: true  
#    frequency: 10kHz 
#    timeout: 400us   
 
 # Nadefinování několika fontů, ze kterých si budu vybírat pro zobrazení na displeji
font:
  - file: "gfonts://Roboto"
    id: font1
    size: 20

  - file: "gfonts://Material+Symbols+Outlined"
    id: font2
    size: 12

  - file: "gfonts://Material+Symbols+Outlined"
    id: font3
    size: 16

  - file: "gfonts://Material+Symbols+Outlined"
    id: font4
    size: 32

time:
  - platform: homeassistant
    id: esptime
  
#dashboard_import:
#  package_import_url: github://esphome/firmware/esphome-web/esp32c3.yaml@v2
#  import_full_config: true

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
#esp32_improv:
#  authorizer: none

esp32_ble_tracker:
  scan_parameters:
    active: false

ble_client:
  - mac_address: ${mac_address}
    id: client0

jk_bms_ble:
  - ble_client_id: client0
    protocol_version: ${protocol_version}
    throttle: 60s
    id: bms0
    # Override the label of one or more error bits (bit 0-31, JK02 only).
    # An empty label suppresses the bit entirely.
    #
    # error_overrides:
    #   4: "Cell overvoltage"
    
binary_sensor:
  - platform: jk_bms_ble
    balancing:
      name: "balancing"
    charging:
      name: "charging"
    discharging:
      name: "discharging"
    heating:
      name: "heating"
    online_status:
      name: "online status"

button:
  - platform: jk_bms_ble
    retrieve_settings:
      name: "retrieve settings"
    retrieve_device_info:
      name: "retrieve device info"
    retrieve_logbook:
      name: "retrieve logbook"

number:
  - platform: jk_bms_ble
    jk_bms_ble_id: bms0
    balance_trigger_voltage:
      name: "balance trigger voltage"
    cell_count:
      name: "cell count"
    total_battery_capacity:
      name: "total battery capacity"
    cell_voltage_overvoltage_protection:
      name: "cell voltage overvoltage protection"
    cell_voltage_overvoltage_recovery:
      name: "cell voltage overvoltage recovery"
    cell_voltage_undervoltage_protection:
      name: "cell voltage undervoltage protection"
    cell_voltage_undervoltage_recovery:
      name: "cell voltage undervoltage recovery"
    balancing_start_voltage:
      name: "balancing start voltage"
    voltage_calibration:
      name: "voltage calibration"
    current_calibration:
      name: "current calibration"
    power_off_voltage:
      name: "power off voltage"
    max_balance_current:
      name: "max balance current"
    max_charge_current:
      name: "max charge current"
    max_discharge_current:
      name: "max discharge current"
    charge_overcurrent_protection_delay:
      name: "charge overcurrent protection delay"
    charge_overcurrent_protection_recovery_time:
      name: "charge overcurrent protection recovery time"
    discharge_overcurrent_protection_delay:
      name: "discharge overcurrent protection delay"
    discharge_overcurrent_protection_recovery_time:
      name: "discharge overcurrent protection recovery time"
    short_circuit_protection_delay:
      name: "short circuit protection delay"
    short_circuit_protection_recovery_time:
      name: "short circuit protection recovery time"
    charge_overtemperature_protection:
      name: "charge overtemperature protection"
    charge_overtemperature_protection_recovery:
      name: "charge overtemperature protection recovery"
    discharge_overtemperature_protection:
      name: "discharge overtemperature protection"
    discharge_overtemperature_protection_recovery:
      name: "discharge overtemperature protection recovery"
    charge_undertemperature_protection:
      name: "charge undertemperature protection"
    charge_undertemperature_protection_recovery:
      name: "charge undertemperature protection recovery"
    mosfet_overtemperature_protection:
      name: "mosfet overtemperature protection"
    mosfet_overtemperature_protection_recovery:
      name: "mosfet overtemperature protection recovery"


sensor:
  - platform: jk_bms_ble
    jk_bms_ble_id: bms0
    min_cell_voltage:
      name: "min cell voltage"
    max_cell_voltage:
      name: "max cell voltage"
    min_voltage_cell:
      name: "min voltage cell"
    max_voltage_cell:
      name: "max voltage cell"
    delta_cell_voltage:
      name: "delta cell voltage"
      id: bms0_delta_cell_voltage
    average_cell_voltage:
      name: "average cell voltage"
    cell_voltage_1:
      name: "cell voltage 1"
    cell_voltage_2:
      name: "cell voltage 2"
    cell_voltage_3:
      name: "cell voltage 3"
    cell_voltage_4:
      name: "cell voltage 4"
    cell_voltage_5:
      name: "cell voltage 5"
    cell_voltage_6:
      name: "cell voltage 6"
    cell_voltage_7:
      name: "cell voltage 7"
    cell_voltage_8:
      name: "cell voltage 8"
    cell_voltage_9:
      name: "cell voltage 9"
    cell_voltage_10:
      name: "cell voltage 10"
    cell_voltage_11:
      name: "cell voltage 11"
    cell_voltage_12:
      name: "cell voltage 12"
    cell_voltage_13:
      name: "cell voltage 13"
    cell_voltage_14:
      name: "cell voltage 14"
    cell_voltage_15:
      name: "cell voltage 15"
    cell_voltage_16:
      name: "cell voltage 16"
    cell_resistance_1:
      name: "cell resistance 1"
    cell_resistance_2:
      name: "cell resistance 2"
    cell_resistance_3:
      name: "cell resistance 3"
    cell_resistance_4:
      name: "cell resistance 4"
    cell_resistance_5:
      name: "cell resistance 5"
    cell_resistance_6:
      name: "cell resistance 6"
    cell_resistance_7:
      name: "cell resistance 7"
    cell_resistance_8:
      name: "cell resistance 8"
    cell_resistance_9:
      name: "cell resistance 9"
    cell_resistance_10:
      name: "cell resistance 10"
    cell_resistance_11:
      name: "cell resistance 11"
    cell_resistance_12:
      name: "cell resistance 12"
    cell_resistance_13:
      name: "cell resistance 13"
    cell_resistance_14:
      name: "cell resistance 14"
    cell_resistance_15:
      name: "cell resistance 15"
    cell_resistance_16:
      name: "cell resistance 16"
    total_voltage:
      name: "total voltage"
      id: bms0_total_voltage
    current:
      name: "current"
      id: bms0_current
    heating_current:
      name: "heating current"
    power:
      name: "power"
    charging_power:
      name: "charging power"
    discharging_power:
      name: "discharging power"
    temperature_sensor_1:
      name: "temperature sensor 1"
    temperature_sensor_2:
      name: "temperature sensor 2"
    # temperature_sensor_3:
    #   name: "temperature sensor 3"
    # temperature_sensor_4:
    #   name: "temperature sensor 4"
    mosfet_temperature:
      name: "mosfet temperature"
    balancer_status_bitmask:
      name: "balancer status bitmask"
    state_of_charge:
      name: "state of charge"
      id: bms0_state_of_charge
    capacity_remaining:
      name: "capacity remaining"
    full_charge_capacity:
      name: "full charge capacity"
    charging_cycles:
      name: "charging cycles"
    total_charging_cycle_capacity:
      name: "total charging cycle capacity"
    total_runtime:
      name: "total runtime"
    power_on_count:
      name: "power on count"
    balancing_current:
      name: "balancing current"


switch:
  - platform: jk_bms_ble
    charging:
      name: "charging"
    discharging:
      name: "discharging"
    balancer:
      name: "balancer"

  - platform: ble_client
    ble_client_id: client0
    name: "enable bluetooth connection"
    id: ble_client_switch0

text_sensor:
  - platform: jk_bms_ble
    errors:
      name: "errors"
    errors_bitmask_hex:
      name: "errors bitmask hex"
    balancer_status:
      name: "balancer status"
    total_runtime_formatted:
      name: "total runtime formatted"
    software_version:
      name: "software version"
    hardware_version:
      name: "hardware version"
    device_model:
      name: "device model"
    manufacturing_date:
      name: "manufacturing date"
    serial_number:
      name: "serial number"

display:
  - platform: ssd1306_i2c
    i2c_id: bus_a
    model: "SSD1306 72x40"
    #reset_pin: D2
    address: 0x3C
#za lambda se píše kód přímo v C. V tomto případě se na displeji střídá několik hodnot 
    lambda: |-
          switch (id(page))
            {
            case 1:
              it.strftime(5, 18, id(font1), TextAlign::BASELINE_LEFT, "%H:%M", id(esptime).now());
              break;
            case 2:
              if (id(bms0_current).has_state()) 
                {
                it.printf(5, 20, id(font1), TextAlign::BASELINE_LEFT , "%.1f A", id(bms0_current).state);
                }
              break;
            case 3:
              if (id(bms0_state_of_charge).has_state()) 
                {
                it.printf(5, 22, id(font1), TextAlign::BASELINE_LEFT , "%.0f %%", id(bms0_state_of_charge).state);      
                }
              break;
            case 4:
              if (id(bms0_total_voltage).has_state()) 
                {
                it.printf(5, 24, id(font1), TextAlign::BASELINE_LEFT , "%.1f V", id(bms0_total_voltage).state);      
                }
              break;
            case 5:
              if (id(bms0_delta_cell_voltage).has_state()) 
                {
                it.printf(5, 26, id(font1), TextAlign::BASELINE_LEFT , "%.0f mV", id(bms0_delta_cell_voltage).state * 1000);      
                }
              break;
          }

globals:
- id: page
  type: int
  initial_value: "1"

# cyklus zajišťující v 1s intervalech zobrazení jednotlivých hodnot
interval:
- interval: 1s
  then:
    - lambda: |-
        id(page) = (id(page) + 1);
        if (id(page) > 5) {
          id(page) = 1;
        }
    
Tyto moduly se akorát vejdou do krabičky podle esp32 C3 oled krabička a pak to vypadá nějak takto:
2026-08-02 Monitorování JK BMS a JBD BMS pomocí EspHome.jpg
Do boxu by měly přejít ještě nějaké baterie a jeden nabíječ pro zimní provoz. Zatím tam je místa dost.
A pokud jde o požár, tak u uzavřeného boxu nepočítám s požárem, ale výbuchem. Pro něj je potřeba vše připravit tak, aby tlaková vlna směřovala do bezpečné oblasti. U rozmetaných zbytků je pak celkem jedno, z jakého byly materiálu. Hlavně aby se neproměnily v neřízené střely.
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
Uživatelský avatar
JirkaE
Příspěvky: 2796
Registrován: pát dub 21, 2023 7:17 pm
Reputace:399
Lokalita: Kousek od Rozvadova
Systémové napětí: 48V
Výkon panelů [Wp]: 7350
Kapacita baterie [kWh]: 38
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: FVE s podporou z DS

Nový příspěvek od JirkaE »

Nebojíš se promrzání toho schodu v zimě a nechtěný zbytečný chladnutí prostoru pro baterky skrz ten schod ?

Jinak skvělá práce a inspirace :yes: - jak to dostat ven (do bezpečné vzdálenosti a za hlavní zeď)
Porovnání všech 4 stringů a nově i finálový celek s Victron a teploty vody bojlerů 1-3 a už i e-Transit :D :

DC/AC - WATTMETR / Victron / Bojlery / E-Transit / DS

Domovské vlákno : Jirkova FVE
Spirály v bazaru : Spirály 55V - Je tam i ten test;)
rva
Příspěvky: 5059
Registrován: úte dub 23, 2013 10:21 am
Reputace:1004
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 62
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem

Re: FVE s podporou z DS

Nový příspěvek od rva »

Jak se to bude chovat v zimě uvidím. Zatím předpokládám, že v boxu bude nabíječ, ze kterého v zimě potřebuji dostat do baterií cca 15 kWh denně a u něj bude ztráta (teplo) cca 1.5 kWh.
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
Kajap
Příspěvky: 548
Registrován: pon črc 21, 2025 11:13 am
Reputace:8
Lokalita: Okoli

Re: FVE s podporou z DS

Nový příspěvek od Kajap »

“vidět, že i větší firmy by se mohly učit od amatérů. Použitá JBD BMS má pouze pasivní balancér (palič) asi 50 mA, zatímco za podobnou cenu by si tam každý svéprávný bastlíř dal JK-BMS s aktivním balancováním alespoň 1A. Uvidím, jestli s tím časem něco udělám.“

Co jsem slyšel tak pasivní bancer je vhodný do auta, do chaty, zkrátka tam, kde je většinu času stále nabito 100%, a ne na cyklické vybíjení noc/den…

Potřebuje více času na vybalancování, které se děje prakticky jen na vrcholu a trvá dlouho…


Nevím, co je na tom pravdy, a ještě jsem slyšel že to JBD ani aktivní balancery nedělá…

Teď mi má přijít jedna baterka, vyhřívaná od Renogy a právě takový pasivní JBD v tom čekám…

Co si o tom myslíš?
rva
Příspěvky: 5059
Registrován: úte dub 23, 2013 10:21 am
Reputace:1004
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 62
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem

Re: FVE s podporou z DS

Nový příspěvek od rva »

Myslím, že pasivní balancer, zvláště pokud se nedá nastavit napětí balancování, je minulost a když mám na výběr, tak se mu vyhnu.
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
rva
Příspěvky: 5059
Registrován: úte dub 23, 2013 10:21 am
Reputace:1004
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 62
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem

Re: FVE s podporou z DS

Nový příspěvek od rva »

Aktuálně mám 7 bateriových úložišť. Pro zobrazení stavu baterií jsou pro Home Assistant integrace, které velmi dobře vypadají. Alternativně jsem pro rychlý přehled vyzkoušel zobrazit vše podstatné o všech bateriích na co nejmenším místě (a s minimálním zatížením procesoru).
Stav baterií.png
Stav baterií.png (26.77 KiB) Zobrazeno 109 x
Pokud někdo potřebuje nahustit co nejvíc dat, stačí je vhodně naformátovat na kartě "markdown":

Kód: Vybrat vše

type: markdown
content: >2

   **| *Baterie* | Nabíjení | Vybíjení | SOC | Proud | diff |**

  | *315Ah externí box....*| {{ states('binary_sensor.battery_315ah_charging')
  }} | {{ states('binary_sensor.battery_315ah_discharging') }} | {{
  states('sensor.battery_315ah_state_of_charge')|round(0) }}% | {{
  states('sensor.battery_315ah_current')|round(1) }}A | {{
  (states('sensor.battery_315ah_delta_cell_voltage')| float * 1000 )|round(0)
  }}mV |

  | *300Ah box EASUN...*| {{
  states('binary_sensor.obyvak_easun_battery_pack_charging') }} | {{
  states('binary_sensor.obyvak_easun_battery_pack_discharging') }} | {{
  states('sensor.obyvak_easun_battery_pack_state_of_charge')|round(0) }}% | {{
  states('sensor.obyvak_easun_battery_pack_current')|round(1) }}A | {{
  (states('sensor.obyvak_easun_battery_pack_delta_cell_voltage')| float * 1000
  )|round(0) }}mV |

  | *246Ah sklep.............*| {{
  states('binary_sensor.esp32_mini_kit1_charging') }} | {{
  states('binary_sensor.esp32_mini_kit1_discharging') }} | {{
  states('sensor.esp32_mini_kit1_esp32_mini_kit1_capacity_remaining')|round(0)
  }}% | {{ states('sensor.esp32_mini_kit1_esp32_mini_kit1_current')|round(1) }}A
  | {{
  states('sensor.esp32_mini_kit1_esp32_mini_kit1_delta_cell_voltage')|round(0)
  }}mV |

  | *230Ah externí box....*| {{ states('binary_sensor.battery_230ah_charging')
  }} | {{ states('binary_sensor.battery_230ah_discharging') }} | {{
  states('sensor.battery_230ah_state_of_charge')|round(0) }}% | {{
  states('sensor.battery_230ah_current')|round(1) }}A | {{
  (states('sensor.battery_230ah_delta_cell_voltage')| float * 1000 )|round(0)
  }}mV |

  | *200Ah sklep zeď......*| {{
  states('binary_sensor.esp32_c3_supermini10_charging') }} | {{
  states('binary_sensor.esp32_c3_supermini10_discharging') }} | {{
  states('sensor.esp32_c3_supermini10_state_of_charge')|round(0) }}% | {{
  states('sensor.esp32_c3_supermini10_current')|round(1) }}A | {{
  states('sensor.esp32_c3_supermini10_delta_cell_voltage')|round(0) }}mV |

  | *200Ah sklep.............* | {{
  states('binary_sensor.esp32_c3_supermini_3_charging') }} | {{
  states('binary_sensor.esp32_c3_supermini_3_discharging') }} | {{
  states('sensor.esp32_c3_supermini_3_state_of_charge')|round(0) }}% | {{
  states('sensor.esp32_c3_supermini_3_current')|round(1) }}A | {{
  states('sensor.esp32_c3_supermini_3_delta_cell_voltage')|round(0) }}mV |

  | *100Ah elektrárna.....* | {{
  states('binary_sensor.elektrarna_battery_100ah_charging') }} | {{
  states('binary_sensor.elektrarna_battery_100ah_discharging') }} | {{
  states('sensor.elektrarna_battery_100ah_capacity_remaining')|round(0) }}% | {{
  states('sensor.elektrarna_battery_100ah_current')|round(1) }}A | {{
  (states('sensor.elektrarna_battery_100ah_delta_cell_voltage')| float * 1000 )|
  round(0) }}mV |


  **| *Celkem - bočník.....* | ----| ---- | {{
  states('sensor.soc_cele_baterie')|round(0) }}% | {{
  states('sensor.proud_do_baterii')|round(1) }}A | ---- |**
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
rva
Příspěvky: 5059
Registrován: úte dub 23, 2013 10:21 am
Reputace:1004
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 62
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem

Re: FVE s podporou z DS

Nový příspěvek od rva »

Do externího boxu přibyl "zdroj tepla na zimu" - EASUN SMG II, který bude v zimě fungovat jako nabíječ. Komunikace s HA je podle https://github.com/syssi/esphome-smg-ii. Ten můj kus má RS232 na standardním sériovém konektoru DB9 a standardních pinech 2,3,a 5 (RX, TX, Gnd). Na konektoru je vyvedeno i napájení pro výrobcem dodávaný wifi dongle, ale z lenosti esp32 napájím nějakou USB nabíječkou mobilu. Pro toto použití je vhodné, že mohu z HA nastavovat u nabíječky nabíjecí proud, to jsem u jiných kombibeden musel přímo na nich. ESP32 je schované v bedně, tak jsem vybral verzi esp32 C3 super mini bez oled displeje.
A koukám, že tomu SMG II by slušelo i pár fv panelů, aby v zimě toho tepla v bedně bylo více.
Kód pro esphome:

Kód: Vybrat vše

substitutions:
  name: isolar-smg-ii-1
  friendly_name: ISOLAR SMG II - 1
  device_description: "Monitoruje ISolar/EASUN SMG II inverter via RS232."
  external_components_source: github.com/syssi/esphome-smg-ii
  tx_pin: GPIO20
  rx_pin: GPIO21
  
esphome:
  name: ${name}
  friendly_name: ${name}
  comment: ${device_description}
  min_version: 2024.6.0
  project:
    name: "syssi.esphome-smg-ii"
    version: 1.5.0
    
esp32:
  board: esp32-c3-devkitm-1
  framework:
  #  type: arduino 
    type: esp-idf 


#external_components:
#  - source: ${external_components_source}
#    refresh: 0s

# Enable logging
logger:
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: g/h/JAlFkO21wj2jWEkTtPYGDLPSOkbSytFjfgbX09M=

# Allow Over-The-Air updates
ota:
  - platform: esphome
#    password: "ba063ae33175aa0f32cb28cb82d974d2"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  min_auth_mode: WPA2
# Optional manual IP
#  manual_ip:
#    static_ip: 192.168.0.64
#    gateway: 192.168.0.1
#    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "isolar-smg-ii-1"
    password: isolar-smg-ii-1


# V HA se pak k položkám "edit" a "logs" objeví položka "visit", kde se po kliknutí otevře stránka esphome daného zařízení
# To have a "next url" for improv serial
web_server:
  port: 80


# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

# If you use Home Assistant please remove this `mqtt` section and uncomment the `api` component!
# The native API has many advantages over MQTT: https://esphome.io/components/api.html#advantages-over-mqtt
#mqtt:
#  broker: !secret mqtt_host
#  username: !secret mqtt_username
#  password: !secret mqtt_password
#  id: mqtt_client

uart:
  - id: uart_0
    baud_rate: 9600
    tx_pin: ${tx_pin}
    rx_pin: ${rx_pin}

modbus:
  - id: modbus0
    uart_id: uart_0
    send_wait_time: 200ms

modbus_controller:
  - id: smg0
    address: 0x01
    modbus_id: modbus0
    command_throttle: 200ms
    update_interval: 10s

time:
  - platform: sntp

sensor:
  - platform: total_daily_energy
    name: "pv energy today"
    restore: true
    device_class: energy
    power_id: smg0_pv_average_power
    filters:
      # Multiplication factor from W to kW is 0.001
      - multiply: 0.001
    unit_of_measurement: kWh

  - platform: template
    name: "discharging power"
    id: smg0_discharging_power
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    icon: mdi:battery-arrow-down
    # Gets updated on value of smg0_battery_average_power
    update_interval: never
    lambda: |-
      if (isnan(id(smg0_battery_average_power).state)) {
        return {};
      }
      auto power = id(smg0_battery_average_power).state;
      return (power < 0.0f) ? -power : 0.0f;

  - platform: template
    name: "charging power"
    id: smg0_charging_power
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    icon: mdi:battery-charging
    # Gets updated on value of smg0_battery_average_power
    update_interval: never
    lambda: |-
      if (isnan(id(smg0_battery_average_power).state)) {
        return {};
      }
      auto power = id(smg0_battery_average_power).state;
      return (power > 0.0f) ? power : 0.0f;

  # Fault code                                                    ULong 100 2 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "fault code"
    address: 100
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 0
    icon: mdi:alert-circle

  # Warning code                                                  ULong 108 2 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "warning code"
    address: 108
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 0
    icon: mdi:alert-circle

  # Operation Mode                                                UInt  201 1 R 0: Power On
  #                                                                             1: Standby
  #                                                                             2: Mains
  #                                                                             3: Off-Grid
  #                                                                             4: Bypass
  #                                                                             5: Charging
  #                                                                             6: Fault
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "operation mode id"
    address: 201
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    icon: mdi:information

  # Effective mains voltage                              0.1V     Int   202 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "ac voltage"
    address: 202
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Mains Frequency                                      0.01Hz   Int   203 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "ac frequency"
    address: 203
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "Hz"
    device_class: frequency
    state_class: measurement
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  # Average mains power                                  1W       Int   204 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "average mains power"
    address: 204
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0

  # Effective inverter voltage                           0.1V     Int   205 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "effective inverter voltage"
    address: 205
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Effective inverter current                           0.1A     Int   206 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "effective inverter current"
    address: 206
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Inverter frequency                                   0.01Hz   Int   207 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "inverter frequency"
    address: 207
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "Hz"
    device_class: frequency
    state_class: measurement
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  # Average inverter power                               1W       Int   208 1 R Positive numbers indicate inverter output, negative numbers indicate inverter input
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "average inverter power"
    address: 208
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0

  # Inverter charging power                              1W       Int   209 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "inverter charging power"
    address: 209
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0

  # Output effective voltage                             0.1V     Int   210 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output effective voltage"
    address: 210
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Output effective Current                             0.1A     Int   211 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output effective Current"
    address: 211
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Output frequency                                     0.01Hz   Int   212 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output frequency"
    address: 212
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "Hz"
    device_class: frequency
    state_class: measurement
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  # Output active power                                  1W       Int   213 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output active power"
    address: 213
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0

  # Output apparent power                                1VA      Int   214 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output apparent power"
    address: 214
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "VA"
    device_class: apparent_power
    state_class: measurement
    accuracy_decimals: 0

  # Battery average voltage                              0.1V     Int   215 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery average voltage"
    address: 215
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Battery average Current                              0.1A     Int   216 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery average current"
    address: 216
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Battery average power                                1W       Int   217 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery average power"
    id: smg0_battery_average_power
    address: 217
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0
    on_value:
      - component.update: smg0_discharging_power
      - component.update: smg0_charging_power

  # PV average voltage                                   0.1V     Int   219 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "pv average voltage"
    address: 219
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # PV average current                                   0.1A     Int   220 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "pv average current"
    address: 220
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # PV average power                                     1W       Int   223 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    id: smg0_pv_average_power
    name: "pv average power"
    address: 223
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0

  # PV charging average power                            1W       Int   224 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "pv charging average power"
    address: 224
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 0

  # Load percentage                                      1%       Int   225 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "load percentage"
    address: 225
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "%"
    state_class: measurement
    accuracy_decimals: 0
    icon: mdi:percent

  # DCDC Temperature                                     1°C      Int   226 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "dcdc temperature"
    address: 226
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    accuracy_decimals: 0

  # Inverter Temperature                                 1°C      Int   227 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "inverter temperature"
    address: 227
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    accuracy_decimals: 0

  # Battery state of charge                              1%       UInt  229 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery state of charge"
    address: 229
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    state_class: measurement
    accuracy_decimals: 0

  # Battery average current                              0.1A     Int   232 1 R Positive number means charging, negative number means discharging
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery average current2"
    address: 232
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Inverter charging average current                    0.1A     Int   233 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "inverter charging average current"
    address: 233
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # PV charging average current                          0.1A     Int   234 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "pv charging average current"
    address: 234
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # # Output voltage                                        0.1V    Uint  320 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "output voltage"
  #   address: 320
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Output frequency setting                              0.01Hz  Uint  321 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "output frequency setting"
  #   address: 321
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "Hz"
  #   device_class: frequency
  #   # state_class: measurement
  #   accuracy_decimals: 2
  #   filters:
  #     - multiply: 0.01

  # # Battery overvoltage protection point                  0.1V    Uint  323 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "battery overvoltage protection point"
  #   address: 323
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Max charging voltage                                  0.1V    Uint  324 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "max charging voltage"
  #   address: 324
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Floating charging voltage                             0.1V    Uint  325 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "floating charging voltage"
  #   address: 325
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Battery discharge recovery point in mains mode        0.1V    Uint  326 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "battery discharge recovery point in mains mode"
  #   address: 326
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Battery low voltage protection point in mains mode    0.1V    Uint  327 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "battery low voltage protection point in mains mode"
  #   address: 327
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Battery low voltage protection point in off-grid mode 0.1V    Uint  329 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "battery low voltage protection point in off-grid mode"
  #   address: 329
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Maximum charging current                              0.1A    Uint  332 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "maximum charging current"
  #   address: 332
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "A"
  #   device_class: current
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Maximum mains charging current                        0.1A    Uint  333 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "maximum mains charging current"
  #   address: 333
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "A"
  #   device_class: current
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # # Eq Charging voltage                                   0.1V    Uint  334 1 R/W
  # - platform: modbus_controller
  #   modbus_controller_id: smg0
  #   name: "Eq Charging voltage"
  #   address: 334
  #   register_type: holding
  #   value_type: U_WORD
  #   unit_of_measurement: "V"
  #   device_class: voltage
  #   # state_class: measurement
  #   accuracy_decimals: 1
  #   filters:
  #     - multiply: 0.1

  # Rated power                                           W       Uint  643 1 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "rated power"
    address: 643
    register_type: holding
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    # state_class: measurement
    accuracy_decimals: 0

select:
  # Output Mode                                                   Uint  300 1 R/W 0: Single, 1: Parallel, 2: 3 Phase-P1, 3: 3 Phase-P2, 4: 3 Phase-P3
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output mode"
    use_write_multiple: true
    address: 300
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Single": 0
      "Parallel": 1
      "Phase P1": 2
      "Phase P2": 3
      "Phase P3": 4

  # Output priority                                               Uint  301 1 R/W 0: Utility-PV-Battery, 1: PV-Utility-Battery, 2: PV-Battery-Utility, 3: PV-Utility-Battery (SUB), 4: PV-Utility-Feed (SUF)
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output priority"
    use_write_multiple: true
    address: 301
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Utility-PV-Battery (UTI)": 0
      "PV-Utility-Battery (SOL)": 1
      "PV-Battery-Utility (SBU)": 2
      "PV-Utility-Battery (SUB)": 3
      # Some devices (e.g. Qoltec 53963, Anenji 3kW-24Vdc-120Vac) support this additional output priority mode
      # "PV-Utility-Feed (SUF)": 4

  # Input voltage range                                           Uint  302 1 R/W 0: Wide range, 1: Narrow range
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "input voltage range"
    use_write_multiple: true
    address: 302
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Wide range": 0
      "Narrow range": 1

  # Buzzer mode                                                   Uint  303 1 R/W 0: Mute in all situations, 1: Sound when the input source is changed or there is a specific warning or fault, 2: Sound when there is aspecific warning or fault, 3: Sound when fault occurs
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "buzzer mode"
    use_write_multiple: true
    address: 303
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Silent": 0
      "Beep on input source changes, warnings and faults": 1
      "Beep on warnings and faults": 2
      "Beep on faults": 3

  # LCD backlight                                                 Uint  305 1 R/W 0: Timed off, 1: Always on
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "lcd backlight"
    use_write_multiple: true
    address: 305
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Timed off": 0
      "Always on": 1

  # Battery charging priority                                     Uint  331 1 R/W 0: Utility priority, 1: PV priority, 2: PV is at the same level as the Utility, 3: Only PV charging is allowed
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery charging priority"
    use_write_multiple: true
    address: 331
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Utility priority": 0
      "PV priority": 1
      "PV is at the same level as the Utility": 2
      "Only PV charging is allowed": 3

  # Turn on mode                                                  Uint  406 1 R/W 0: Can be turn-on locally or remotely, 1: Only local turn-on, 2: Only remote turn-on
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "turn on mode"
    use_write_multiple: true
    address: 406
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "Local and remotely turn-on allowed": 0
      "Local turn-on only": 1
      "Remote turn-on only": 2

  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery type"
    use_write_multiple: true
    address: 322
    value_type: U_WORD
    entity_category: config
    icon: mdi:cog
    optionsmap:
      "AGM": 0
      "FLD": 1
      "USER": 2
      "Li1": 3
      "Li2": 4
      "Li3": 5
      "Li4": 6
      "Lib": 8

switch:
  # LCD automatically returns to the homepage                     Uint  306 1 R/W 0: Do not return automatically, 1: Automatically return after 1 minute
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "lcd automatically returns to the homepage"
    use_write_multiple: true
    address: 306
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

  # Energy-saving mode                                            Uint  307 1 R/W 0: Energy-saving mode is off, 1: Energy-saving mode is on
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "energy-saving mode"
    use_write_multiple: true
    address: 307
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

  # Overload automatic restart                                    Uint  308 1 R/W 0: Overload failure will not restart, 1: Automatic restart after overload failure
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "overload automatic restart"
    use_write_multiple: true
    address: 308
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

  # Over temperature automatic restart                            Uint  309 1 R/W 0: Over temperature failure will not restart, 1: Automatic restart after over-temperature fault
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "over temperature automatic restart"
    use_write_multiple: true
    address: 309
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

  # Overload transfer to bypass enabled                           Uint  310 1 R/W 0: Disable, 1: Enable
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "overload transfer to bypass enabled"
    use_write_multiple: true
    address: 310
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

  # Battery Eq mode is enabled                                    Uint  313 1 R/W 0: Disable, 1: Enable
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery Eq mode is enabled"
    use_write_multiple: true
    address: 313
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

  # Remote switch                                                 Uint  420 1 R/W 0: Remote shutdown, 1: Remote turn-on
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "remote switch"
    use_write_multiple: true
    address: 420
    register_type: holding
    bitmask: 1
    icon: mdi:toggle-switch

text_sensor:
  # Fault code                                                    ULong 100 2 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "fault"
    address: 100
    register_type: holding
    register_count: 2
    response_size: 4
    raw_encode: HEXBYTES
    icon: mdi:alert-circle
    lambda: |-
      static const uint8_t FAULTS_SIZE = 27;
      static const char *const FAULTS[FAULTS_SIZE] = {
          "Over temperature of inverter module",                     // 0000 0000 0000 0000 0000 0000 0000 0001 (1)
          "Over temperature of DCDC module",                         // 0000 0000 0000 0000 0000 0000 0000 0010 (2)
          "Battery over voltage",                                    // 0000 0000 0000 0000 0000 0000 0000 0100 (3)
          "PV module over temperature",                              // 0000 0000 0000 0000 0000 0000 0000 1000 (4)
          "Output short circuit",                                    // 0000 0000 0000 0000 0000 0000 0001 0000 (5)
          "Inverter over voltage",                                   // 0000 0000 0000 0000 0000 0000 0010 0000 (6)
          "Output over load",                                        // 0000 0000 0000 0000 0000 0000 0100 0000 (7)
          "Bus over voltage",                                        // 0000 0000 0000 0000 0000 0000 1000 0000 (8)
          "Bus soft start timed out",                                // 0000 0000 0000 0000 0000 0001 0000 0000 (9)
          "PV over current",                                         // 0000 0000 0000 0000 0000 0010 0000 0000 (10)
          "PV over voltage",                                         // 0000 0000 0000 0000 0000 0100 0000 0000 (11)
          "Battery over current",                                    // 0000 0000 0000 0000 0000 1000 0000 0000 (12)
          "Inverter over current",                                   // 0000 0000 0000 0000 0001 0000 0000 0000 (13)
          "Bus low voltage",                                         // 0000 0000 0000 0000 0010 0000 0000 0000 (14)
          "Reserve (Bit 15)",                                        // 0000 0000 0000 0000 0100 0000 0000 0000 (15)
          "Inverter DC component is too high",                       // 0000 0000 0000 0000 1000 0000 0000 0000 (16)
          "Reserve (Bit 17)",                                        // 0000 0000 0000 0001 0000 0000 0000 0000 (17)
          "The zero bias of output current is too large",            // 0000 0000 0000 0010 0000 0000 0000 0000 (18)
          "The zero bias of inverter current is too large",          // 0000 0000 0000 0100 0000 0000 0000 0000 (19)
          "The zero bias of battery current is too large",           // 0000 0000 0000 1000 0000 0000 0000 0000 (20)
          "The zero bias of PV current is too large",                // 0000 0000 0001 0000 0000 0000 0000 0000 (21)
          "Inverter low voltage",                                    // 0000 0000 0010 0000 0000 0000 0000 0000 (22)
          "Inverter negative power protection",                      // 0000 0000 0100 0000 0000 0000 0000 0000 (23)
          "The host in the parallel system is lost",                 // 0000 0000 1000 0000 0000 0000 0000 0000 (24)
          "Synchronization signal abnormal in the parallel system",  // 0000 0001 0000 0000 0000 0000 0000 0000 (25)
          "The battery type is incompatible",                        // 0000 0010 0000 0000 0000 0000 0000 0000 (26)
          "Parallel versions are incompatible",                      // 0000 0100 0000 0000 0000 0000 0000 0000 (27)
      };
      std::string values = "";

      uint32_t mask = modbus::helpers::dword_from_hex_str(x, 0);
      if (mask) {
        for (int i = 0; i < FAULTS_SIZE; i++) {
          if (mask & (1 << i)) {
            values.append(FAULTS[i]);
            values.append(";");
          }
        }
        if (!values.empty()) {
          values.pop_back();
        }
      }
      return values;

  # Warning code                                                  ULong 108 2 R
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "warning"
    address: 108
    register_type: holding
    register_count: 2
    response_size: 4
    raw_encode: HEXBYTES
    icon: mdi:alert-circle
    lambda: |-
      static const uint8_t WARNINGS_SIZE = 19;
      static const char *const WARNINGS[WARNINGS_SIZE] = {
          "Reserve (Bit 0)",                                             // 0000 0000 0000 0000 0000 0000 0000 0001 (1)
          "Mains waveform abnormal",                                     // 0000 0000 0000 0000 0000 0000 0000 0010 (2)
          "Reserve (Bit 2)",                                             // 0000 0000 0000 0000 0000 0000 0000 0100 (3)
          "Mains low voltage",                                           // 0000 0000 0000 0000 0000 0000 0000 1000 (4)
          "Mains over frequency",                                        // 0000 0000 0000 0000 0000 0000 0001 0000 (5)
          "Mains low frequency",                                         // 0000 0000 0000 0000 0000 0000 0010 0000 (6)
          "PV low voltage",                                              // 0000 0000 0000 0000 0000 0000 0100 0000 (7)
          "Over temperature",                                            // 0000 0000 0000 0000 0000 0000 1000 0000 (8)
          "Battery low voltage",                                         // 0000 0000 0000 0000 0000 0001 0000 0000 (9)
          "Battery is not connected",                                    // 0000 0000 0000 0000 0000 0010 0000 0000 (10)
          "Overload",                                                    // 0000 0000 0000 0000 0000 0100 0000 0000 (11)
          "Battery Eq charging",                                         // 0000 0000 0000 0000 0000 1000 0000 0000 (12)
          "Battery undervoltage",                                        // 0000 0000 0000 0000 0001 0000 0000 0000 (13)
          "Output power derating",                                       // 0000 0000 0000 0000 0010 0000 0000 0000 (14)
          "Fan blocked",                                                 // 0000 0000 0000 0000 0100 0000 0000 0000 (15)
          "PV energy is too low to be use",                              // 0000 0000 0000 0000 1000 0000 0000 0000 (16)
          "Parallel communication interrupted",                          // 0000 0000 0000 0001 0000 0000 0000 0000 (17)
          "Output mode of Single and Parallel systems inconsistent",     // 0000 0000 0000 0010 0000 0000 0000 0000 (18)
          "Battery voltage difference of parallel system is too large",  // 0000 0000 0000 0100 0000 0000 0000 0000 (19)
      };
      std::string values = "";

      uint32_t mask = modbus::helpers::dword_from_hex_str(x, 0);
      if (mask) {
        for (int i = 0; i < WARNINGS_SIZE; i++) {
          if (mask & (1 << i)) {
            values.append(WARNINGS[i]);
            values.append(";");
          }
        }
        if (!values.empty()) {
          values.pop_back();
        }
      }
      return values;

  # Operation Mode                                                UInt  201 1 R 0: Power On, 1: Standby, 2: Mains, 3: Off-Grid, 4: Bypass, 5: Charging, 6: Fault
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "operation mode"
    address: 201
    register_type: holding
    raw_encode: HEXBYTES
    icon: mdi:information
    lambda: |-
      uint16_t value = modbus::helpers::word_from_hex_str(x, 0);
      switch (value) {
        case 0: return std::string("Power On");
        case 1: return std::string("Standby");
        case 2: return std::string("Mains");
        case 3: return std::string("Off-Grid");
        case 4: return std::string("Bypass");
        case 5: return std::string("Charging");
        case 6: return std::string("Fault");
      }
      return std::string("Unknown");

number:
  # Output voltage                                                0.1V    Uint  320 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output voltage"
    use_write_multiple: true
    address: 320
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:cog
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Output frequency setting                                      0.01Hz  Uint  321 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "output frequency setting"
    use_write_multiple: true
    address: 321
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.01
    unit_of_measurement: "Hz"
    entity_category: config
    icon: mdi:cog
    lambda: "return x * 0.01f;"
    write_lambda: |-
      return x * 100.0f;

  # Battery overvoltage protection point                          0.1V    Uint  323 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery overvoltage protection point"
    use_write_multiple: true
    address: 323
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery-high
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Max charging voltage                                          0.1V    Uint  324 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "max charging voltage"
    use_write_multiple: true
    address: 324
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery-high
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Floating charging voltage                                     0.1V    Uint  325 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "floating charging voltage"
    use_write_multiple: true
    address: 325
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Battery discharge recovery point in mains mode                0.1V    Uint  326 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery discharge recovery point in mains mode"
    use_write_multiple: true
    address: 326
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery-low
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Battery low voltage protection point in mains mode            0.1V    Uint  327 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery low voltage protection point in mains mode"
    use_write_multiple: true
    address: 327
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery-low
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Battery low voltage protection point in off-grid mode          0.1V           Uint  329 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery low voltage protection point in off-grid mode"
    use_write_multiple: true
    address: 329
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    # max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery-low
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Maximum charging current                                      0.1A    Uint  332 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "maximum charging current"
    use_write_multiple: true
    address: 332
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 0.1
    unit_of_measurement: "A"
    entity_category: config
    icon: mdi:battery-charging
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Maximum mains charging current                                0.1A    Uint  333 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "maximum mains charging current"
    use_write_multiple: true
    address: 333
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 0.1
    unit_of_measurement: "A"
    entity_category: config
    icon: mdi:battery-charging
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Eq Charging voltage                                           0.1V    Uint  334 1 R/W
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "Eq Charging voltage"
    use_write_multiple: true
    address: 334
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 0.1
    unit_of_measurement: "V"
    entity_category: config
    icon: mdi:battery
    lambda: "return x * 0.1f;"
    write_lambda: |-
      return x * 10.0f;

  # Battery equalization time                                     min     Uint  335 1 R/W Range: 0~900
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "battery equalization time"
    use_write_multiple: true
    address: 335
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 900.0
    step: 1
    unit_of_measurement: "min"
    entity_category: config
    icon: mdi:timer

  # Equalization Timeout exit                                     min     Uint  336 1 R/W Range: 0~900
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "equalization Timeout exit"
    use_write_multiple: true
    address: 336
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 900.0
    step: 1
    unit_of_measurement: "min"
    entity_category: config
    icon: mdi:timer

  # Two equalization charging intervals                           day     Uint  337 1 R/W Range: 1~90
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "two equalization charging intervals"
    use_write_multiple: true
    address: 337
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 90.0
    step: 1
    unit_of_measurement: "day"
    entity_category: config
    icon: mdi:timer

  # SOC point back to utility source                           %       Uint  341 1 R/W Value Menu 43 minimum setting value must be more than the value of program 45
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "SOC point back to utility"
    use_write_multiple: true
    address: 341
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 1
    unit_of_measurement: "%"
    entity_category: config
    icon: mdi:battery-alert

  # SOC point back to battery                        %       Uint  342 1 R/W Value Menu 44 60%~100% Settable
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "SOC point back to battery"
    use_write_multiple: true
    address: 342
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 1
    unit_of_measurement: "%"
    entity_category: config
    icon: mdi:battery-high

  # Low DC cut-off SOC                 %       Uint  343 1 R/W Value Menu 45 3%~30% the max setting value must be less than the value of program 43.
  - platform: modbus_controller
    modbus_controller_id: smg0
    name: "Low DC cut-off SOC"
    use_write_multiple: true
    address: 343
    register_type: holding
    value_type: U_WORD
    min_value: 0.0
    max_value: 100.0
    step: 1
    unit_of_measurement: "%"
    entity_category: config
    icon: mdi:battery-low

button:
  # Exit the fault mode                                           Uint  426   W   1: Exit the fault state
  - platform: template
    name: "exit fault state"
    icon: mdi:restore
    on_press:
      then:
        - lambda: |-
            auto cmd = esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(id(smg0), 426, 1, {1});
            id(smg0)->queue_command(cmd);
Přílohy
SMG II dashboard.jpg
EASUN SMG II 6.2 kW umístění v boxu a komunikace.jpg
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS

Kdo je online

Uživatelé procházející toto fórum: Claudebot [Bot]