Výpočet kapacity akumulátora

Souhrn tématu

Výpočet kapacity akumulátora lze provádět pomocí měření proudu a napětí s čipem INA228, který umožňuje přesné sledování průchodu náboje až do 85 V a proudy do 300 A. Data se pravidelně ukládají do paměti ESP32, což zajišťuje zachování hodnot i po výpadku napájení. Pro správný výpočet je důležité zohlednit vliv teploty a proudového zatížení na účinnost článků, přičemž korekce stavu nabití (SOC) může být nutná při výraznějších změnách teploty.
Kajap
Příspěvky: 931
Registrován: pon črc 21, 2025 11:13 am
Reputace:17
Lokalita: Okoli
Lokalita:Okoli

Re: Výpočet kapacity akumulátora

Nový příspěvek od Kajap »

To je dumb reset a ne AI ML (umělá inteligence & strojové učení).

Zkrátka si myslím ale nic o tom nevím upozorňuje, že výrobce dobře ví co dělá když to bere pesimisticky protože to nemůže nikomu uškodit tolik jako kdyby to vzal optimisticky nebo exaktně

Zrovna nedávno když jsem dostal ten boční tak jsem nad tím přemýšlel kolik to může být přesný a jaká může být vzorkovací frekvence že to nikdy nemůže být přesný

Takže teď se to vysvětlilo, při nabití/ vybití se to “resetuje” :-))

Pokud v manuálu není uvedeno nic o samo učení, tak tam asi nic vyššího nebude …

A jak je to s tím vzorkováním, přece to nemůže měřit krátkých vzorcích ? Nebo nevím jak ty kulomby fungují
Uživatelský avatar
Valdano
Příspěvky: 2691
Registrován: čtv črc 21, 2022 5:39 pm
Reputace:337
Lokalita: Česká Lípa
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Lokalita:Česká Lípa

Re: Výpočet kapacity akumulátora

Nový příspěvek od Valdano »

AI ML v JK-BMS. To jsem bral jen jako vtip. Na něco takového můžete u současných JK-BMS zapomenout. Možná tak za XX let a s jiným HW. :lol:
Kajap
Příspěvky: 931
Registrován: pon črc 21, 2025 11:13 am
Reputace:17
Lokalita: Okoli
Lokalita:Okoli

Re: Výpočet kapacity akumulátora

Nový příspěvek od Kajap »

No nevim, já ji nemám ale ve foťáku v iPhonu (a iOS) to ML bylo snad už před 8 lety kvůli optimalizaci fotografování, věděl jsi to??

Ps: ai ml není chat gpt, aby bylo jasno. Na ml nepotřebuješ kdoví jaký hardware, ale SW.

Bojlery SMART Dražice taky měly učení chování uživatele už před 10 lety

Podle mě to není nic zas tak těžkýho, i 10 let starý škodovce musíš dát informaci - že jsi vyměnil baterku protože se učí ;)) jistě, spousta lidí to neví a vyměněnou baterku do kurví

Budíček
Uživatelský avatar
Valdano
Příspěvky: 2691
Registrován: čtv črc 21, 2022 5:39 pm
Reputace:337
Lokalita: Česká Lípa
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Lokalita:Česká Lípa

Re: Výpočet kapacity akumulátora

Nový příspěvek od Valdano »

Podle mého názoru v JK-BMS učení ohledně odhadu SOC není. Nejsou o tom žádné zmínky ani ze strany výrobce ani široké skupiny uživatelů. Pojem AI je obecně dost zprofanovaný a v současné době tzv. cool. Pokud by tam něco takového bylo výrobce by se jistě hrdě chlubil tím, že tam má nějaké AI algoritmy případně strojové učení, které postupně v čase zpřesňuje odhad SOC. Takže výpočet SOC realizovaný ve firmware JK-BMS se dle mého názoru spoléhá výhradně na tradiční deterministické metody a není tam ani Kalmanova filtrace, která zlepšuje výpočet SOC.
Uživatelský avatar
TomHC
Příspěvky: 4271
Registrován: pát lis 11, 2022 8:14 am
Reputace:977
Lokalita: Hlohovec, SR
Systémové napětí: 48V
Výkon panelů [Wp]: 8820
Kapacita baterie [kWh]: 30
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Hlohovec, SR
Lokalita:Hlohovec, SRSystémové napětí:48VVýkon panelů [Wp]:8820 Kapacita baterie [kWh]:30

Re: Výpočet kapacity akumulátora

Nový příspěvek od TomHC »

Bože, vy ale okolo toho dokážete rozjímať. 🔮 A pritom je to tak jednoduché a sto krát vysvetlené. 😴
Hlavný spotrebič: VW ID.4 | 2x MUST PH1800 5.5kW + GWL-SUN2000, 9kWp V+J+Z | 600 Ah LiFePO4 s BMS JBD 200A | SW: Home Assistant na Synology DS923+ ku tomu ESPHome, Tasmota, MariaDB, InfluxDB, Telegraf, Grafana, Zigbee2MQTT... | HW: ESPlan (ESP32 + LAN 8720 + RS485).
Nejaké moje projekty: MUST-ESPhome, ELTEK Flatpack2 ESPhome, ESP32-EMON, PZEM-017@WiFi, diyBMS-CurrentShunt-ESPhome , BMS UART-TS485 adaptér
Kajap
Příspěvky: 931
Registrován: pon črc 21, 2025 11:13 am
Reputace:17
Lokalita: Okoli
Lokalita:Okoli

Re: Výpočet kapacity akumulátora

Nový příspěvek od Kajap »

Tak to vysvětlí po stoprvní když to zjevně nechápem
unicast
Příspěvky: 3019
Registrován: sob bře 30, 2019 10:27 am
Reputace:577
Lokalita: JV od pekla :)
Systémové napětí: 48V
Výkon panelů [Wp]: 5100
Kapacita baterie [kWh]: 49
Chci/Mám dotaci: NE
Lokalita:JV od pekla :)Systémové napětí:48VVýkon panelů [Wp]:5100 Kapacita baterie [kWh]:49

Re: Výpočet kapacity akumulátora

Nový příspěvek od unicast »

Mám pocit, že Toma nebaví házet hrách na zeď.
Uživatelský avatar
TomHC
Příspěvky: 4271
Registrován: pát lis 11, 2022 8:14 am
Reputace:977
Lokalita: Hlohovec, SR
Systémové napětí: 48V
Výkon panelů [Wp]: 8820
Kapacita baterie [kWh]: 30
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Hlohovec, SR
Lokalita:Hlohovec, SRSystémové napětí:48VVýkon panelů [Wp]:8820 Kapacita baterie [kWh]:30

Re: Výpočet kapacity akumulátora

Nový příspěvek od TomHC »

unicast, presne tak, a pritom stačí čítať, Franto to tu popísal úplne presne - viewtopic.php?t=2853#p297472

A ako bonus, prečo JK/JBD/Daly/Pace BMS "zle" merajú? O tom sa tu už tiež niečo popísalo. Jediný dôvod SoC driftu je to, že tie BMS majú "hluchú" zónu (niečo medzi -1A až +1A), kedy hlásia 0A.A prečo to je tak?Lebo neboli vymyslené pre ESS, ale pre elektro vozidlá (skútre, kolobežky, golfové vozíky) a pre jednoduchosť urobili, že ak je to pod +/-1A, tak je to buď nabité, alebo sa to nehýbe, tak sa to po pár minútach vypne. Alebo nebudeme merať "šum". A kde je problém? Problém je v tom, že ak je MPPT vo Float a ak výroba = spotreba, tak z/do batérie tečie minimálny prúd a vtedy BMS "nič" nepočíta. Detto pre menič v bypasse, vtedy berie podľa typu okolo 50W, t.j. 1A pri 16S LFP a vtedy to občas hlási 1A, ale väčšinou 0A. Preto je drift hlavne v zime a v období prebytkov, keď sa iba udržiava batéria.

Riešením je SmartShunt, diyBMS-CurrentShunt alebo čokoľvek podobné. Ten nemá žiadnu hluchú oblasť a SoC počíta úplne postačujúco.

A za druhé, neriadime tokamak ani otáčanie planét v našej slnečnej sústave, takže náreky o nepresnosti, peukertovej konštante a kompenzácie podľa teploty sú čistý bullshit a zbytočnosť, vhodná pre zopár jedincov postihnutých chorobným perfekcionizmom a potrebou vŕtať sa v každom 💩.

howgh
Hlavný spotrebič: VW ID.4 | 2x MUST PH1800 5.5kW + GWL-SUN2000, 9kWp V+J+Z | 600 Ah LiFePO4 s BMS JBD 200A | SW: Home Assistant na Synology DS923+ ku tomu ESPHome, Tasmota, MariaDB, InfluxDB, Telegraf, Grafana, Zigbee2MQTT... | HW: ESPlan (ESP32 + LAN 8720 + RS485).
Nejaké moje projekty: MUST-ESPhome, ELTEK Flatpack2 ESPhome, ESP32-EMON, PZEM-017@WiFi, diyBMS-CurrentShunt-ESPhome , BMS UART-TS485 adaptér
Migel
Příspěvky: 1997
Registrován: ned zář 25, 2022 10:47 am
Reputace:383
Lokalita: Pod Karpatmi
Lokalita:Pod Karpatmi

Re: Výpočet kapacity akumulátora

Nový příspěvek od Migel »

Trosku sa mylis! Peukertov exponent nieje ziadna zbytocnost a je nevyhnutny pre meranie spravneho soc, v zariadeniach kde je v nastaveniach uvedeny.Ako napriklad smartshunt od victronu.
Ak mas zadanu nespravnu hodnotu tak ti to ukazuje nezmysly!
Minuly tyzden sa mi ozval chalan odtialto z fora a ze mu vyplo menic na nizke soc.Zistili sme ze ma zle nastavene hodnoty a prestavil peukertov exponent a soc zacalo zobrazovat spravne.
Nemusime riadit planety ani nic podobne, ale ked je v nastaveniach vyrobku nejaky parameter ktory je potrebny pre meranie, tak ho treba zadat spravne.To nieje puntickarstvo a ani nic podobne.
JZ-2s5p 3,8kWp >> Epever 8415 AN
JV-2s3p 2,7kWp >> Epever 6415 AN
2x Victron MP2 5000V/A paralelne
3x GWL SUN-2000G paralelne

48V 760Ah/35kWh Li-ion
a stále v štádiu budovania :repair:(rozširovania)
Uživatelský avatar
TomHC
Příspěvky: 4271
Registrován: pát lis 11, 2022 8:14 am
Reputace:977
Lokalita: Hlohovec, SR
Systémové napětí: 48V
Výkon panelů [Wp]: 8820
Kapacita baterie [kWh]: 30
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Hlohovec, SR
Lokalita:Hlohovec, SRSystémové napětí:48VVýkon panelů [Wp]:8820 Kapacita baterie [kWh]:30

Re: Výpočet kapacity akumulátora

Nový příspěvek od TomHC »

Nerozporujem to, ak tam je nejaká voľba (kapacita batérie, peukertov exponent) ktorá sa vo výpočte používa, treba ju zadať korektne, to dá rozum. Narážal som skôr na to, že diyBMS-CurrentShunt ho nepoužíva, ani teplotný koeficient, ani nejaké promile samovybíjania a predsa to funguje veľmi slušne.
Hlavný spotrebič: VW ID.4 | 2x MUST PH1800 5.5kW + GWL-SUN2000, 9kWp V+J+Z | 600 Ah LiFePO4 s BMS JBD 200A | SW: Home Assistant na Synology DS923+ ku tomu ESPHome, Tasmota, MariaDB, InfluxDB, Telegraf, Grafana, Zigbee2MQTT... | HW: ESPlan (ESP32 + LAN 8720 + RS485).
Nejaké moje projekty: MUST-ESPhome, ELTEK Flatpack2 ESPhome, ESP32-EMON, PZEM-017@WiFi, diyBMS-CurrentShunt-ESPhome , BMS UART-TS485 adaptér
rva
Příspěvky: 5181
Registrován: úte dub 23, 2013 10:21 am
Reputace:1037
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 76
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem
Lokalita:Kousek od Lysé nad LabemSystémové napětí:48VVýkon panelů [Wp]:46000 Kapacita baterie [kWh]:76

Re: Výpočet kapacity akumulátora

Nový příspěvek od rva »

Snad u olova to má význam, ale u lithia platí dost přesně, že kolik Ah dám dovnitř, tolik jich dostanu ven. Aspoň roční data z bočník+INA226+esp to celkem ukazují:
Dodané a odebrané Ah z baterie LiFePo4 za rok.png
_______________________________________________________________________
FV: 43 kWp,
Baterie: LiFePO4 76 kWh,
Kombinované měniče/regulátory: 3x Isolar SM II (5 kW, 100 A, 450 V) + Isolar SMG II (6.2 kW, 120 A, 500 V)
Mppt regulátory: EPSolar ET6415N (60 A/150 V) + EASun ICharger 48100 (100 A / 150 V)
Uživatelský avatar
Valdano
Příspěvky: 2691
Registrován: čtv črc 21, 2022 5:39 pm
Reputace:337
Lokalita: Česká Lípa
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Lokalita:Česká Lípa

Re: Výpočet kapacity akumulátora

Nový příspěvek od Valdano »

To platí pokud máte bateriové uložiště v prostoru s relativně stabilní teplotou ideálně okolo 20° C. Pokud je však umístěno v prostoru, ve kterém třeba v zimním období klesá teplota až někam k rozmezí mezi 5° až 10° C tak už to může snížit účinnost nabíjení LiFePo4 prizmatických článků o přibližně 5 až 8 %.
Kajap
Příspěvky: 931
Registrován: pon črc 21, 2025 11:13 am
Reputace:17
Lokalita: Okoli
Lokalita:Okoli

Re: Výpočet kapacity akumulátora

Nový příspěvek od Kajap »

A ten bočník aj. snad neměří teplotu?
Kajap
Příspěvky: 931
Registrován: pon črc 21, 2025 11:13 am
Reputace:17
Lokalita: Okoli
Lokalita:Okoli

Re: Výpočet kapacity akumulátora

Nový příspěvek od Kajap »

TomHC píše: sob srp 29, 2026 9:27 pm

prečo JK/JBD/Daly/Pace BMS "zle" merajú? O tom sa tu už tiež niečo popísalo. Jediný dôvod SoC driftu je to, že tie BMS majú "hluchú" zónu (niečo medzi -1A až +1A), kedy hlásia 0A.A prečo to je tak?Lebo neboli vymyslené pre ESS, ale pre elektro vozidlá

howgh
Tak to jsem nevěděl, takže výrobce vůbec nepočítají s FVE? :-)

Jo je pravda že jsem si všimnul že to občas konkr JBD uvnitř tohoto https://eu.renogy.com/cdn/shop/files/12 ... ery_UM.pdf ukazuje 0 už mi přišlo jako nesmysl že tam vždycky bude plus nebo mínus, takže tím se to vysvětluje ten proud je pod nějakým limitem je pravda že jsem tam nic jako 0.x A neviděl
rva
Příspěvky: 5181
Registrován: úte dub 23, 2013 10:21 am
Reputace:1037
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 76
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem
Lokalita:Kousek od Lysé nad LabemSystémové napětí:48VVýkon panelů [Wp]:46000 Kapacita baterie [kWh]:76

Re: Výpočet kapacity akumulátora

Nový příspěvek od rva »

Účinnost za nízkých teplot závisí i na proudovém zatížení článků. U mě ty venkovní nepřesáhnou 0.1C, což účinnosti pomůže. A jaká bude teplota, to jsem sám zvědav. Kdyby to mělo větší vliv na určení SOC, tak bych musel zahrnout nějakou korekci. Teploty měřím, ale ne všechny baterie jsou na jednom místě.
Jinak pro měření proudu je už za příznivou cenu k dispozici čip INA228. Výhodou je, že měří napětí až do 85 V a průchod náboje sám počítá. Oproti INA226 (16 bit) je 20 bitový.
Porovnání obou modulů (záznam 3 dnů) ukazuje, že výsledek je (téměř) stejný. Protože INA nemá trvalou paměť, akumulované hodnoty vyčítám do esp každých 30s a čítač v INA vynuluji. esp32 naakumulovaná data jednou za hodinu ukládá do trvalé paměti. Tak ani výpadek napětí nevede k velkým chybám. Nechtěl jsem dělat krabičku na míru, tak jsem jen upravil výřez pro displej u krabičky, kterou častěji používám a upevnil vše tavnou pistolí.
Na daném bočníku mám tedy teď dva snímače a ten s INA226 někdy demontuji.

Kód: Vybrat vše

substitutions:
  name: bocnik-01
  friendly_name: Bočník 01
  device_description: "Měření proudu do/z baterií pomocí bočníku 75mV/300A a snímače proudu INA228"
  
esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  comment: ${device_description}
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: '1.0'

esp32:
  board: esp32dev
  framework:
    type: esp-idf
    advanced:
      minimum_chip_revision: "3.1"
      sram1_as_iram: true

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "bocnik01"
    password: bocnik01

# 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í
web_server:
  port: 80

captive_portal:

# Aktivuje bezpečné ukládání stavů do paměti ESP aby se počítaná hodnota Ah po restartu nenulovala
preferences:
  flash_write_interval: 1h # Hodnoty s restore: True se do trvalé paměti ukládají každou hodinu

  
# Hardwarové I2C piny pro klasické ESP32
i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

font:
  - file: "gfonts://Roboto"
    id: font_normal
    size: 11
    glyphsets: GF_Latin_Core 
    # Základní alfanumerické znaky + specifická česká diakritika (Á, Í, É, Ě, Ý, Ň)
    #glyphs: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/&°:. -_ÁÍÉĚÝ'

  - file: "gfonts://Roboto"
    id: font_large
    size: 20
    glyphsets: GF_Latin_Core 
    # Pro velké hodnoty stačí čísla, jednotky a znak stupně
    #glyphs: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/&°:. -_ÁÍÉĚÝ'

globals:
# 1. Dočasné paměti pro rozepsané hodnoty
  - id: docasna_baterie_dodano
    type: float
    initial_value: '0.0'
  - id: docasna_baterie_odebrano
    type: float
    initial_value: '0.0'
  - id: docasna_baterie_stav
    type: float
    initial_value: '0.0'
  - id: celkovy_stav_ah
    type: float
    restore_value: true         # <--- TOTO ZDE JE VALIDNÍ a přežije restart ESP
    initial_value: '0.0'        # Výchozí hodnota při úplně prvním flashnutí
  - id: ulozena_kapacita
    type: float
    restore_value: true # Obnoví hodnotu z paměti, při prvním spuštění použije výchozí
    initial_value: '1590.0' # Výchozí hodnota v Ah, pokud v paměti ještě nic není


#ina228
#Configuration variables:
#    address (Optional, integer): Manually specify the I²C address of the sensor. Defaults to 0x40.
#    shunt_resistance (Optional, float): The value of the shunt resistor on the board for current calculation. Defaults to 0.1 ohm.
#    max_current (Optional, float): The maximum current you are expecting. ESPHome will use this to configure the sensor optimally. Defaults to 3.2A.
#    adc_time (Optional, Time or both of the following nested options): The time in microseconds to perform a single ADC conversion. Defaults to 1100us. Valid values are 140us, 204us, 332us, 588us, 1100us, 2116us, 4156us, 8244us.
#        voltage (Required, Time) ADC conversion time for Bus Voltage
#        current (Required, Time) ADC conversion time for Shunt Voltage (Current measurement)
#    adc_averaging (Optional, integer): Selects ADC sample averaging count. Defaults to 4. Valid values are 1, 4, 16, 64, 128, 256, 512, 1024.
#    update_interval (Optional, Time): The interval to check the sensor. Defaults to 60s.
#
#Sensors
#The component offers four sensors. You can configure all or any subset of them. Each configured sensor is reported separately on each update_interval. The name option is required for each sensor configured. All other options from Sensor.
#    current (Optional): Calculated current output, Amperes.
#    power (Optional): Calculated power output, Watts.
#    bus_voltage (Optional): Bus voltage output (voltage of the high side contact), Volts.
#    shunt_voltage (Optional): Shunt voltage (voltage across the shunt resistor) value of the sensor, Volts.
sensor:
  - platform: ina2xx_i2c
    model: INA228
    id: baterie_ina
    address: 0x40
    shunt_resistance: 0.00025 ohm
    max_current: 300.0 A
    adc_range: 0
    adc_time: 1052us       # Rychlejší vzorkování
    adc_averaging: 1024    # Maximální hardwarové průměrování čipu
    update_interval: 30s    # Častější vyčítání do ESPHome
    reset_on_boot: false           # <--- DŮLEŽITÉ: ESP při bootu nesmaže čip!
    
    bus_voltage:
      name: "Napětí"
      id: napeti
      accuracy_decimals: 2
    current:
      name: "Current"
      id: current
      filters:
      - throttle: 10s  # Hodnota se do HA pošle maximálně jednou za 10s
      accuracy_decimals: 2
    power:
      name: "Výkon"
      id: vykon
      accuracy_decimals: 1
    temperature:
      name: "Teplota"
      id: teplota
      accuracy_decimals: 1
 # Zde definujeme hardwarový charge senzor (přináší hodnotu v Ah)      
    charge:
      name: "INA228 Delta Ah"
      id: ina228_delta_ah
      # Jakmile INA vyčte novou hodnotu, spustí se tato akce:
      on_value:
        then:
          - lambda: |-
              if (!std::isnan(x)) {
                // 1. Přičteme deltu z čipu k naší trvalé globální proměnné
                id(celkovy_stav_ah) += x;
                
                // 2. Ošetříme vaše limity baterie (0 až 1590 Ah)
                if (id(celkovy_stav_ah) > id(ulozena_kapacita)) {
                  id(celkovy_stav_ah) = id(ulozena_kapacita);
                }
                if (id(celkovy_stav_ah) < 0.0) {
                  id(celkovy_stav_ah) = 0.0;
                }
                // 3. Propíšeme novou hodnotu do senzoru pro Home Assistanta
                id(baterie_ah_stav).publish_state(id(celkovy_stav_ah));
                
                // 4. Vynulujeme registry v INA228 pro další 30s cyklus
                id(baterie_ina).reset_energy_counters();
              }
      
  #- platform: integration - pro výpočet z proudu
  #  name: "Baterie - Ah stav"
  #  id: baterie_ah_stav
  #  sensor: current
  #  time_unit: h               # Výsledkem budou Ampérhodiny (Ah)
  #  integration_method: trapezoid   # Metoda integrace (stejná jako máte v HA)
  #  restore: true # <--- DŮLEŽITÉ: Po restartu začne tam, kde skončil
  #      # Filtry kontrolují hodnotu při každé změně:
  #  filters:
  #    - lambda: |-
  #        if (x > 1590.0) {
  #          return 1590.0; // Pokud je hodnota vyšší než 1590, vrátí 1590
  #        } else if (x < 0.0) {
  #          return 0.0;    // Pojistka: Pokud klesne pod 0, vrátí 0
  #        } else {
  #          return x;      // Jinak vrátí skutečně naměřenou hodnotu
  #        }
 #   filters:
  #    - throttle: 60s  # Hodnota se do HA pošle maximálně jednou za minutu

  # 3. Výsledný senzor pro Home Assistanta (zobrazuje hodnotu z globální proměnné)
  - platform: template
    name: "Baterie - Ah stav"
    id: baterie_ah_stav
    unit_of_measurement: "Ah"
    accuracy_decimals: 2
    # Při startu ESP okamžitě načte uloženou hodnotu z globální proměnné
    lambda: |-
      return id(celkovy_stav_ah);

  # --- AKTUÁLNÍ MĚSÍC (Běžící počítadla) ---
  - platform: integration
    name: "Baterie - dodáno Ah"
    id: baterie_dodano_ah
    sensor: proud_nabijeni
    time_unit: h
    integration_method: trapezoid
    restore: true
    accuracy_decimals: 2
    icon: "mdi:battery-arrow-up" # Vizualizace nabíjení na webu
    filters:
      - throttle: 60s  # Hodnota se do HA pošle maximálně jednou za minutu

  - platform: integration
    name: "Baterie - odebráno Ah"
    id: baterie_odebrano_ah
    sensor: proud_vybijeni
    time_unit: h
    integration_method: trapezoid
    restore: true
    accuracy_decimals: 2
    icon: "mdi:battery-arrow-down" # Vizualizace vybíjení na webu
    filters:
      - throttle: 60s  # Hodnota se do HA pošle maximálně jednou za minutu

     
    # =================================================================
  # Rozdělení kladného a záporného proudu
  # =================================================================

  # 1. Pouze nabíjecí proud (pokud je proud > 0)
  - platform: template
    id: proud_nabijeni
    accuracy_decimals: 3
    unit_of_measurement: "A"
    lambda: |-
      if (id(current).state > 0) {
        return id(current).state;
      } else {
        return 0.0;
      }
    update_interval: 1s

  # 2. Pouze vybíjecí proud (pokud je proud < 0, otočíme ho na kladnou hodnotu)
  - platform: template
    id: proud_vybijeni
    accuracy_decimals: 3
    unit_of_measurement: "A"
    lambda: |-
      if (id(current).state < 0) {
        return -id(current).state;
      } else {
        return 0.0;
      }
    update_interval: 1s  

# 1. Definice senzorů (Wi-Fi signál a textové informace o síti)
  - platform: wifi_signal
    name: "WiFi Síla Signálu"
    update_interval: 60s
    id: wifi_dbm

  - platform: copy
    source_id: wifi_dbm
    name: "WiFi Síla Signálu v %"
    unit_of_measurement: "%"
    accuracy_decimals: 0
    id: wifi_procenta
    filters:
      - lambda: return min(max(2 * (x + 100.0f), 0.0f), 100.0f);
 
# 2. Textová zadávací pole (Boxy)            
number:
  - platform: template
    name: "Příprava - Baterie Dodáno Ah"
    id: priprava_baterie_dodano
    mode: box
    optimistic: true
    min_value: 0
    max_value: 1000000
    step: 1
    icon: "mdi:battery-arrow-up"
    set_action:
      - globals.set:
          id: docasna_baterie_dodano
          value: !lambda "return x;"

  - platform: template
    name: "Příprava - Baterie Odebráno Ah"
    id: priprava_baterie_odebrano
    mode: box
    optimistic: true
    min_value: 0
    max_value: 1000000
    step: 1
    icon: "mdi:battery-arrow-down"
    set_action:
      - globals.set:
          id: docasna_baterie_odebrano
          value: !lambda "return x;"

  - platform: template
    name: "Příprava - Baterie Stav Ah"
    id: priprava_baterie_stav
    mode: box
    optimistic: true
    min_value: 0
    max_value: 1000000
    step: 1
    icon: "mdi:battery-heart-variant"
    set_action:
      - globals.set:
          id: docasna_baterie_stav
          value: !lambda "return x;"

# 2. Zadávací pole pro kapacitu baterie
  - platform: template
    name: "Kapacita baterie"
    id: kapacita_baterie
    min_value: 10
    max_value: 5000
    step: 1
    unit_of_measurement: "Ah"
    icon: "mdi:battery-arrow-up"
    # Při startu nebo obnovení načte aktuální stav z proměnné
    lambda: |-
      return id(ulozena_kapacita);
    # Při změně v HA zapíše novou hodnotu do trvalé paměti
    set_action:
      then:
        - globals.set:
            id: ulozena_kapacita
            value: !lambda return x;

# 3. Potvrzovací tlačítka
button:
# Baterie mají 1590 Ah. Tímto tlačítkem se ručně údaj stavu baterie nastaví na tuto hodnotu 
  - platform: template
    name: "Baterie - Ah - reset na 100%"
    id: baterie_ah_reset
    icon: "mdi:battery-refresh"
    on_press:
      then:
        - lambda: |-
            // 1. Nastavíme trvalou globální proměnnou na plnou kapacitu
            id(celkovy_stav_ah) = id(ulozena_kapacita);
            
            // 2. Okamžitě aktualizujeme stav senzoru pro Home Assistanta
            id(baterie_ah_stav).publish_state(id(ulozena_kapacita));

  - platform: template
    name: "Zapsat - Baterie Dodáno Ah"
    icon: "mdi:check-bold"
    on_press:
      - sensor.integration.set_value:
          id: baterie_dodano_ah
          value: !lambda "return id(docasna_baterie_dodano);"

  - platform: template
    name: "Zapsat - Baterie Odebráno Ah"
    icon: "mdi:check-bold"
    on_press:
      - sensor.integration.set_value:
          id: baterie_odebrano_ah
          value: !lambda "return id(docasna_baterie_odebrano);"

  - platform: template
    name: "Zapsat - Baterie Stav Ah"
    icon: "mdi:check-bold"
    on_press:
      then:
        - lambda: |-
            // 1. Přečteme zadanou hodnotu přímo z globální proměnné (bez .state)
            float nova_hodnota = id(docasna_baterie_stav);
            
            // Pojistka: pokud by hodnota byla neplatná, nic neprovádíme
            if (!std::isnan(nova_hodnota)) {
              
              // 2. Ošetříme limity (0 až ulozena_kapacita(1590 Ah))
              if (nova_hodnota > id(ulozena_kapacita)) {
                nova_hodnota = id(ulozena_kapacita);
              }
              if (nova_hodnota < 0.0) {
                nova_hodnota = 0.0;
              }
              
              // 3. Uložíme hodnotu do trvalé globální proměnné celkového stavu
              id(celkovy_stav_ah) = nova_hodnota;
              
              // 4. Okamžitě aktualizujeme senzor pro Home Assistanta
              id(baterie_ah_stav).publish_state(nova_hodnota);
            }

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "IP Adresa"
      id: wifi_ip
            
display:
  - platform: ssd1306_i2c
    model: "SH1106 128x64"        # Změna na ovladač pro 1.3" displej
    address: 0x3C                 # Standardní I2C adresa těchto displejů
    id: oled_displej
    
    pages:
      - id: strana_1
        lambda: |-
          it.printf(0, 5, id(font_normal), "NAPETI & PROUD");
          it.printf(0, 20, id(font_large), "%.2f V", id(napeti).state);
          it.printf(0, 43, id(font_large), "%.2f A", id(current).state);
          
      - id: strana_2
        lambda: |-
          it.printf(0, 5, id(font_normal), "VYKON & TEPLOTA");
          it.printf(0, 20, id(font_large), "%.1f W", id(vykon).state);
          it.printf(0, 43, id(font_large), "%.1f °C", id(teplota).state);
          
      - id: strana_3
        lambda: |-
          it.printf(0, 5, id(font_normal), "Ah stav");
          it.printf(0, 32, id(font_large), "%.2f Ah", id(baterie_ah_stav).state);

      - id: strana_4
        lambda: |-
          it.printf(0, 5, id(font_normal), "SIT & PRIPOJENI");
          // Zobrazení IP adresy (.c_str() je nutné pro textové senzory)
          it.printf(0, 22, id(font_normal), "IP: %s", id(wifi_ip).state.c_str());
          // Zobrazení signálu v % i dBm pod sebou
          it.printf(0, 39, id(font_normal), "Signal: %.0f %%", id(wifi_procenta).state);
          it.printf(0, 52, id(font_normal), "RSSI: %.0f dBm", id(wifi_dbm).state);

interval:
  - interval: 5s
    then:
      - display.page.show_next: oled_displej
Přílohy
Krabička s displejem pro esp a INA228.jpg
INA 226 vs. INA228.png
esphome - INA228 .png
_______________________________________________________________________
FV: 43 kWp,
Baterie: LiFePO4 76 kWh,
Kombinované měniče/regulátory: 3x Isolar SM II (5 kW, 100 A, 450 V) + Isolar SMG II (6.2 kW, 120 A, 500 V)
Mppt regulátory: EPSolar ET6415N (60 A/150 V) + EASun ICharger 48100 (100 A / 150 V)

Kdo je online

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