InfluxDB - SELECT (výběr dat)
Home Assistant, Arduino, SDS, Raspberry, Linux, vzdálený dohled, automatizace, měření, opensource, closedsource, hotová řešení, DIY, stavebnice, komponenty, software, postupy, návody, schémata, rady, zkušenosti ...
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
InfluxDB - SELECT (výběr dat)
Pro někoho hračka, já se na tom zasekl.
Zajímá mě
1. na jakém článku bývá najvětší napětí při dobíjení baterie
2. na jakém článku bývá najvětší napětí při vybíjení baterie
1. Vyčítám a v grafárně normálně zobrazím data (v tomto případě to je článek, na kterém JK BMS naměří max. napětí - tuto entitu BMS přes ESPHome posílá do HA):
Tím zjistím, na jakém článku bývá největší napětí (bez ohledu na směr proudu baterií).
2. Vyčítám a v grafárně normálně zobrazím data (v tomto případě to je proud do baterie (nabíjecí má kladnou hodnotu, vybíjecí zápornou):
Nevím, jak ty dva dotazy zkombinovat, když chci v tom prvním dotazu jenom čísla článků, když je proud baterií kladný (při nabíjení).
Zajímá mě
1. na jakém článku bývá najvětší napětí při dobíjení baterie
2. na jakém článku bývá najvětší napětí při vybíjení baterie
1. Vyčítám a v grafárně normálně zobrazím data (v tomto případě to je článek, na kterém JK BMS naměří max. napětí - tuto entitu BMS přes ESPHome posílá do HA):
Kód: Vybrat vše
SELECT "value" FROM "state" WHERE ("entity_id" = 'jk_bms_sklep_max_voltage_cell') AND $timeFilter
2. Vyčítám a v grafárně normálně zobrazím data (v tomto případě to je proud do baterie (nabíjecí má kladnou hodnotu, vybíjecí zápornou):
Kód: Vybrat vše
SELECT "value" FROM "A" WHERE ("entity_id" = 'jk_bms_sklep_current') AND $timeFilter
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
Re: InfluxDB - SELECT (výběr dat)
Zkouším jak ty dva dotazy zkombinovat a stále dostávám nesmysl. Vymázne mi to záporné proudy ale ne odpovídající čísla článků. A přitom chci něco tak jednoduchého jako vybrat čísla článků baterie, pro které je proud baterií kladný. Nakonec si udělám ostudu a budu muset zapojit dceru.
Kód: Vybrat vše
SELECT ("value") FROM (SELECT ("value") FROM "state", "A" WHERE (("entity_id" = 'jk_bms_sklep_max_voltage_cell') OR ("entity_id" = 'jk_bms_sklep_current'))AND $timeFilter ) WHERE ("value">0)
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Příspěvky: 392
- Registrován: ned čer 26, 2022 3:33 pm
- Lokalita: Znojemsko
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5500
- Kapacita baterie [kWh]: 11
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
bez do script editoru a pooznacuj si potrebne entity a melo by to jit ...
Kód: Vybrat vše
from(bucket: "ADRESA_TVOJI_INFLUXDB")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "V" or r["_measurement"] == "A")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_max_voltage_cell" or r["entity_id"] == "jk_bms_sklep_current")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
string1 - 5.5kwp 3S4P - 460wp | 3x Multiplus ii 3000VA 1F systém | Lifepo4 230AH 48V + Seplos BMS
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
Re: InfluxDB - SELECT (výběr dat)
Další neznámá oblast. Koukám, že budu muset nastavit aby v influxDB běželo skriptování ve flux.
influxdb.conf:
Ale zatím povinnnosti, pak omést stovku panelů od sněhu a až pak zábava.
influxdb.conf:
Kód: Vybrat vše
[http]
flux-enabled = true
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
Re: InfluxDB - SELECT (výběr dat)
Díky za nakopnutí abych zkusil script. Zas jsem o něco chytřejší. Skripty se teda píší ve flux, který je minimálně u mě přístupný v influxDB.
Číslo článku baterie je v jiném měření, než proud baterie a pomocí skriptu je mám už uloženy v jedné tabulce.
Spojení dvou měření do jednoho:
Teď to ještě rozdělit na dvě tabulky, jednu s kladným proudem a druhou se záporným a snad by to mělo být ono.
Malý krůček pro lidstvo, ale velký krok pro člověka. Nebo naopak?
Číslo článku baterie je v jiném měření, než proud baterie a pomocí skriptu je mám už uloženy v jedné tabulce.
Spojení dvou měření do jednoho:
Kód: Vybrat vše
Proud = from(bucket: "ha2/autogen")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "A")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_current")
|> fill(column: "_value", usePrevious: true)
|> aggregateWindow(every: 1s, fn: distinct)
|> keep(columns: ["_value", "_time"])
Clanek = from(bucket: "ha2/autogen")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "state")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_max_voltage_cell")
|> fill(column: "_value", usePrevious: true)
|> aggregateWindow(every: 1s, fn: distinct)
|> keep(columns: ["_value", "_time"])
Proud_Clanek = join(tables: {Proud: Proud, Clanek: Clanek}, on: ["_time"])
|> fill(column: "_value_Proud", usePrevious: true)
|>fill(column: "_value_Clanek", usePrevious: true)
|> yield()
Malý krůček pro lidstvo, ale velký krok pro člověka. Nebo naopak?
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Příspěvky: 1550
- Registrován: pon úno 07, 2022 2:43 pm
- Lokalita: Okolí Pardubic
- Systémové napětí: 24V
- Výkon panelů [Wp]: 10120
- Kapacita baterie [kWh]: 13,4
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
Chlapi zeptám se... Potřebuji do influxdb dostat data která mám na webu, takže bych je potřeboval CURL zobrazit a uložit do influxdb... Jedná se o teplotu bojleru. Jenže přes php mi to nejde a nic jiného neovládám vůbec... nenakopnul by jste mě někdo?
MUST 3KW 80A MPPT 24V/ 3,75kWp stringy 5s3P 200wp + 5s1P 150wp. 2 měnič MUST 3KW 80A MPPT 24V 6370Wp stringy 2S4P 400wp bifacial + 2S1P 410wp + 2S3P 395wp Baterie 13,4KWh lifepo4 (2X 8S 280Ah EVE), Celek tedy 10120Wp
-
- Příspěvky: 392
- Registrován: ned čer 26, 2022 3:33 pm
- Lokalita: Znojemsko
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5500
- Kapacita baterie [kWh]: 11
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
ono to muzes vse napsat normal v selectu pres joiny, ale pres skript je to mnohem rychlejsi (pro me, bejt to mssql tak ti to vypisu pres CTE) ... nech to v jednom, jen pridej druhou y axis na pravou stranu kde nechas vykreslenej proud z baterie a bude to pekne all in one ...rva píše:Teď to ještě rozdělit na dvě tabulky, jednu s kladným proudem a druhou se záporným a snad by to mělo být ono.
Malý krůček pro lidstvo, ale velký krok pro člověka. Nebo naopak?
string1 - 5.5kwp 3S4P - 460wp | 3x Multiplus ii 3000VA 1F systém | Lifepo4 230AH 48V + Seplos BMS
-
- Příspěvky: 392
- Registrován: ned čer 26, 2022 3:33 pm
- Lokalita: Znojemsko
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5500
- Kapacita baterie [kWh]: 11
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
a kde ti to bezi? v HA? nebo zvlast nekde jinde?bokser01 píše:Chlapi zeptám se... Potřebuji do influxdb dostat data která mám na webu, takže bych je potřeboval CURL zobrazit a uložit do influxdb... Jedná se o teplotu bojleru. Jenže přes php mi to nejde a nic jiného neovládám vůbec... nenakopnul by jste mě někdo?
string1 - 5.5kwp 3S4P - 460wp | 3x Multiplus ii 3000VA 1F systém | Lifepo4 230AH 48V + Seplos BMS
-
- Příspěvky: 1550
- Registrován: pon úno 07, 2022 2:43 pm
- Lokalita: Okolí Pardubic
- Systémové napětí: 24V
- Výkon panelů [Wp]: 10120
- Kapacita baterie [kWh]: 13,4
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
Mám solaranzeige jede to normálně na raspberry. Zkrátka potřebuju tu hodnotu vyčíst z webu z txt souboru kde je hodnota teploty a nějak vložit do databáze pro někoho nic složitého, no pro mě bojAntrac1t píše:a kde ti to bezi? v HA? nebo zvlast nekde jinde?bokser01 píše:Chlapi zeptám se... Potřebuji do influxdb dostat data která mám na webu, takže bych je potřeboval CURL zobrazit a uložit do influxdb... Jedná se o teplotu bojleru. Jenže přes php mi to nejde a nic jiného neovládám vůbec... nenakopnul by jste mě někdo?
MUST 3KW 80A MPPT 24V/ 3,75kWp stringy 5s3P 200wp + 5s1P 150wp. 2 měnič MUST 3KW 80A MPPT 24V 6370Wp stringy 2S4P 400wp bifacial + 2S1P 410wp + 2S3P 395wp Baterie 13,4KWh lifepo4 (2X 8S 280Ah EVE), Celek tedy 10120Wp
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
Re: InfluxDB - SELECT (výběr dat)
Pro mě je to nové, takže nějakou dobu bude trvat, než pochopím o co jde. Cílem je ověřit, jestli se nějak jednoduše nedá detekovat blížící se závada baterie. BMS opakovaně čte napětí na článcích a pro nás lenochy i rovnou posílá číslo článku s maximálním (a minimálním napětí). Jednoduché bylo v grafaně získat histogram na kterém vidím rozdíly mezi články: A to chci rozdělit pro případ, kdy se články nabíjejí a pro případ, kdy se vybíjejí.Antrac1t píše:ono to muzes vse napsat normal v selectu pres joiny, ale pres skript je to mnohem rychlejsi ...
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Příspěvky: 392
- Registrován: ned čer 26, 2022 3:33 pm
- Lokalita: Znojemsko
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5500
- Kapacita baterie [kWh]: 11
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
a na ten web to davas pres co? arduino/esp ... proc se ptam, nemam rad takove to skrabani na levem uchu pravou rukou (senzor->txt->web->influx nez senzor->influx)bokser01 píše:Mám solaranzeige jede to normálně na raspberry. Zkrátka potřebuju tu hodnotu vyčíst z webu z txt souboru kde je hodnota teploty a nějak vložit do databáze pro někoho nic složitého, no pro mě bojAntrac1t píše:a kde ti to bezi? v HA? nebo zvlast nekde jinde?bokser01 píše:Chlapi zeptám se... Potřebuji do influxdb dostat data která mám na webu, takže bych je potřeboval CURL zobrazit a uložit do influxdb... Jedná se o teplotu bojleru. Jenže přes php mi to nejde a nic jiného neovládám vůbec... nenakopnul by jste mě někdo?
string1 - 5.5kwp 3S4P - 460wp | 3x Multiplus ii 3000VA 1F systém | Lifepo4 230AH 48V + Seplos BMS
-
- Příspěvky: 1550
- Registrován: pon úno 07, 2022 2:43 pm
- Lokalita: Okolí Pardubic
- Systémové napětí: 24V
- Výkon panelů [Wp]: 10120
- Kapacita baterie [kWh]: 13,4
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
JJ ESP32 s deep sleep napájené z baterie posílá mi to na webhosting kde se to grafuje a zapisuje ale v té grafaně by to bylo praktičtější
MUST 3KW 80A MPPT 24V/ 3,75kWp stringy 5s3P 200wp + 5s1P 150wp. 2 měnič MUST 3KW 80A MPPT 24V 6370Wp stringy 2S4P 400wp bifacial + 2S1P 410wp + 2S3P 395wp Baterie 13,4KWh lifepo4 (2X 8S 280Ah EVE), Celek tedy 10120Wp
-
- Příspěvky: 392
- Registrován: ned čer 26, 2022 3:33 pm
- Lokalita: Znojemsko
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5500
- Kapacita baterie [kWh]: 11
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
tak pokud pokud ti nebude vadit ze to nebudes mit na webu jako txt, tak tady je jednoduchy postup jak rovnou z esp rvat data do lokal influxdb ... pocitam ze asi nejedes nic pres HAbokser01 píše:JJ ESP32 s deep sleep napájené z baterie posílá mi to na webhosting kde se to grafuje a zapisuje ale v té grafaně by to bylo praktičtější
https://www.debashishsahu.com/posts/sen ... -database/
string1 - 5.5kwp 3S4P - 460wp | 3x Multiplus ii 3000VA 1F systém | Lifepo4 230AH 48V + Seplos BMS
-
- Příspěvky: 392
- Registrován: ned čer 26, 2022 3:33 pm
- Lokalita: Znojemsko
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5500
- Kapacita baterie [kWh]: 11
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
ja se kdysi vykaslal na max a min a beru aktualni hodnotu a narval to do boxplotu kde jde videt jakej clanek uplne uhejba skrz napeti, jeste by se dalo k tomu pridat proud nabijeni/vybijeni jak jsi zminovalrva píše:Pro mě je to nové, takže nějakou dobu bude trvat, než pochopím o co jde. Cílem je ověřit, jestli se nějak jednoduše nedá detekovat blížící se závada baterie. BMS opakovaně čte napětí na článcích a pro nás lenochy i rovnou posílá číslo článku s maximálním (a minimálním napětí). Jednoduché bylo v grafaně získat histogram na kterém vidím rozdíly mezi články: A to chci rozdělit pro případ, kdy se články nabíjejí a pro případ, kdy se vybíjejí.Antrac1t píše:ono to muzes vse napsat normal v selectu pres joiny, ale pres skript je to mnohem rychlejsi ...
string1 - 5.5kwp 3S4P - 460wp | 3x Multiplus ii 3000VA 1F systém | Lifepo4 230AH 48V + Seplos BMS
-
- Příspěvky: 7727
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: InfluxDB - SELECT (výběr dat)
mě taky přijde jednodušší řešit okamžitý napětí, už jsem tady postoval výstupy z influxdb, kde je vidět, že jiný články jdou první nahoru a jiný první dolů, a jiný m klesá napětí při velkým odběru. Podle mě stačí detekovat napětí mimo rozumný rozsah, tj iu lifepo4 pod 2.7V a nad 3.5V a to dokáže sama BMS, v HA si můžeš tyhle meze nastavit opatrněj, abys měl nějakej ALERT že se něco děje (nebo neděje, jenom jsou nabitý baterky a nestíhá balancer, a nebo jsou vybitý, a některej článek pod zátěží jde strměj dolů). Mě tyhle alerty dělá přímo DIYBMS v4, takže to nemusím řešit nějakým složitým systémem.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
Re: InfluxDB - SELECT (výběr dat)
Sledovat napětí je moc jednoduché, z BMS jde řada dat, tak třeba se dají zpracovat, aby se s předstihem detekovalo něco podezřelého.
1. BMS údaj o článku s maximálním a článku s minimálním napětí využívá k přelévání náboje.
2. Pokud bude některý článek vyžadovat častěji náboj doplňovat, asi má vyšší samovybíjení, což nemusí vadit, pokud se bude v čase chovat stejně.
3. Pokud ale té energie na vybalancování začne vyžadovat víc a víc, měl bych zpozornět. A to mi jenom sledování napětí neřekne, protože balancery to zpočátku téměř vyrovnají.
1. BMS údaj o článku s maximálním a článku s minimálním napětí využívá k přelévání náboje.
2. Pokud bude některý článek vyžadovat častěji náboj doplňovat, asi má vyšší samovybíjení, což nemusí vadit, pokud se bude v čase chovat stejně.
3. Pokud ale té energie na vybalancování začne vyžadovat víc a víc, měl bych zpozornět. A to mi jenom sledování napětí neřekne, protože balancery to zpočátku téměř vyrovnají.
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Příspěvky: 4003
- Registrován: úte dub 23, 2013 10:21 am
- Lokalita: Kousek od Lysé nad Labem
- Systémové napětí: 48V
- Výkon panelů [Wp]: 46000
- Kapacita baterie [kWh]: 40
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Kousek od Lysé nad Labem
Re: InfluxDB - SELECT (výběr dat)
Tak snad nějaké závěry pro nás, kteří nemají žádné zkušenosti v jazyce flux (ani jiném podobném skriptovacím jazyce). Bral jsem to jako výzvu, jestli z toho něco dostanu. V kódu je vysvětlení amatéra proč jsem co dělal.
Třeba se někdo najde, kdo nám dá rychlokurz jak vše funguje a jak se to má dělat správně.
Výsledky jsem exportoval jako csv a graf udělal v excelu.
Vlastní kód je určitě neoptimální, zpracování 24 hodin záznamu z JK-BMS trvalo cca 3 minuty.
Třeba se někdo najde, kdo nám dá rychlokurz jak vše funguje a jak se to má dělat správně.
Kód: Vybrat vše
// Cílem je předpřipravit si data z BMS tak, aby bylo možno posoudit v jakém stavu jsou články baterie.
// Z toho, co BMS ukládá do influxDB, budu využívat:
// 1. čísla článků s max a min napětím
// 2. balancovací proud
// 3. proud baterii
// Úvod do influxDB je na https://docs.influxdata.com/influxdb/cloud/get-started/
// Do tabulky ClanekMax si chci uložit čísla článků s max napětím - to jsou ty, ze kterých se odebírá balanční proud
// Pod tímto názvem mohu data z tabulky opakovaně používat pro opakované zpracování např. ClanekTemp = ClanekMax
// 1. Data mám v influxDB databázi ha2. Tam začnu - nejprve si do ClanekMax vyberu tuto databázi:
ClanekMax = from(bucket: "ha2/autogen")
// Výběr musím omezit na časový rozsah, symbol |> je pipe-forward operator, který posílá výstup předchozí funkce jako vstup do té následující
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
// čísla článků jsou uložena v měřeních "state", tak si vyfiltruji jenom tato měření
|> filter(fn: (r) => r["_measurement"] == "state")
// v těchto měřeních jsou čísla článků uložena ve "field" ktere se jmenuje "value", tak předchozí výsledek dál filtruji
|> filter(fn: (r) => r["_field"] == "value")
// a opět zužuji výběr na "domain" "sensors"
|> filter(fn: (r) => r["domain"] == "sensor")
// a tam mám čísla článků uložena pod "entity_id" "jk_bms_sklep_max_voltage_cell"
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_max_voltage_cell")
// V influxDB jsou záznamy jako časové řady, pro další zpracování si je převedu do tabulky s časovým oknem po 5s
|> aggregateWindow(every: 5s, fn: distinct)
// ponechám si v tabulce jenom dva sloupce.
|> keep(columns: ["_value", "_time"])
// Pokud si chci prohlédnout tento mezivýsledek, odkomentuji následující řádek, stisknu tlačítko "Run Script"
// a nahoře vpravo si stiskem "View Raw Data" přepínám výsledek mezi grafem a tabulkou (řada dat se třeba ani jako graf nedá zobrazit).
//|> yield(name: "CMax")
// Teď mám tabulku ClanekMax s čísly článků + časem a tato data mohu používat pro opakované zpracování např. ClanekTemp = ClanekMax
// Do tabulky ClanekMin si obdobně uložím články, na kterých bylo min. napětí - do těchto článků tedy teče balanční proud
ClanekMin = from(bucket: "ha2/autogen")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "state")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_min_voltage_cell")
|> aggregateWindow(every: 5s, fn: distinct)
|> keep(columns: ["_value", "_time"])
//|> yield(name: "CMin")
// Do tabulky Balance si obdobně uložím balancovací proud + čas
Balance = from(bucket: "ha2/autogen")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "A")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_balancing_current")
|> aggregateWindow(every: 5s, fn: first)
|> keep(columns: ["_value", "_time"])
//|> yield(name: "Balance")
// Do tabulky Current si uložím jaký proud tekl celou baterií
Current = from(bucket: "ha2/autogen")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "A")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "jk_bms_sklep_current")
|> aggregateWindow(every: 5s, fn: distinct, createEmpty: true)
|> keep(columns: ["_value", "_time"])
//|> yield(name: "Current")
C = join(tables: {ClanekMin: ClanekMin, ClanekMax: ClanekMax }, on: ["_time"])
// Ve funkci reduce si zavedu akumulátory C01 - C16, do kterých si ukládám, kolikrát je na daném článku
// ve sloupci _value_ClanekMin naměřeno minimální napětí
// Spočítá, kolikrát je v dané tabulce článek daného čísla 1-16
|> reduce(fn: (r, accumulator) => ({
C01: accumulator.C01 + int(v: (r._value_ClanekMin == 1)),
C02: accumulator.C02 + int(v: (r._value_ClanekMin == 2)),
C03: accumulator.C03 + int(v: (r._value_ClanekMin == 3)),
C04: accumulator.C04 + int(v: (r._value_ClanekMin == 4)),
C05: accumulator.C05 + int(v: (r._value_ClanekMin == 5)),
C06: accumulator.C06 + int(v: (r._value_ClanekMin == 6)),
C07: accumulator.C07 + int(v: (r._value_ClanekMin == 7)),
C08: accumulator.C08 + int(v: (r._value_ClanekMin == 8)),
C09: accumulator.C09 + int(v: (r._value_ClanekMin == 9)),
C10: accumulator.C10 + int(v: (r._value_ClanekMin == 10)),
C11: accumulator.C11 + int(v: (r._value_ClanekMin == 11)),
C12: accumulator.C12 + int(v: (r._value_ClanekMin == 12)),
C13: accumulator.C13 + int(v: (r._value_ClanekMin == 13)),
C14: accumulator.C14 + int(v: (r._value_ClanekMin == 14)),
C15: accumulator.C15 + int(v: (r._value_ClanekMin == 15)),
C16: accumulator.C16 + int(v: (r._value_ClanekMin == 16)),
}),
identity: {C01: 0, C02: 0, C03: 0, C04: 0, C05: 0, C06: 0, C07: 0, C08: 0, C09: 0, C10: 0, C11: 0, C12: 0, C13: 0, C14: 0, C15: 0, C16: 0})
|> yield(name: "Články s minimálním napětím")
// Tím jsem získal první zajímavý výsledek - tabulku s tím, kolikrát bylo na každém článku naměřeno minimální napětí.
// Dále by mě zajímalo, na kterém článku bylo naměřeno minimální napětí při vybíjení baterie (proud je menší než nula)
// Vytvořím si tabulku s články + proudem baterií
C1 = join(tables: {ClanekMin: ClanekMin, ClanekMax: ClanekMax }, on: ["_time"])
CBC1 = join(tables: {Clanek: C1, Current: Current}, on: ["_time"])
//|> yield(name: "CBC1")
// vyberu záznamy s vybíjením baterie (proud <0)
|> filter(fn: (r) => r._value < 0)
//|> yield(name: "CBC1")
// Spočítá, kolikrát je v dané tabulce článek daného čísla 1-16 při vybíjení baterie
|> reduce(fn: (r, accumulator) => ({
C01: accumulator.C01 + int(v: (r._value_ClanekMin == 1)),
C02: accumulator.C02 + int(v: (r._value_ClanekMin == 2)),
C03: accumulator.C03 + int(v: (r._value_ClanekMin == 3)),
C04: accumulator.C04 + int(v: (r._value_ClanekMin == 4)),
C05: accumulator.C05 + int(v: (r._value_ClanekMin == 5)),
C06: accumulator.C06 + int(v: (r._value_ClanekMin == 6)),
C07: accumulator.C07 + int(v: (r._value_ClanekMin == 7)),
C08: accumulator.C08 + int(v: (r._value_ClanekMin == 8)),
C09: accumulator.C09 + int(v: (r._value_ClanekMin == 9)),
C10: accumulator.C10 + int(v: (r._value_ClanekMin == 10)),
C11: accumulator.C11 + int(v: (r._value_ClanekMin == 11)),
C12: accumulator.C12 + int(v: (r._value_ClanekMin == 12)),
C13: accumulator.C13 + int(v: (r._value_ClanekMin == 13)),
C14: accumulator.C14 + int(v: (r._value_ClanekMin == 14)),
C15: accumulator.C15 + int(v: (r._value_ClanekMin == 15)),
C16: accumulator.C16 + int(v: (r._value_ClanekMin == 16)),
}),
identity: {C01: 0, C02: 0, C03: 0, C04: 0, C05: 0, C06: 0, C07: 0, C08: 0, C09: 0, C10: 0, C11: 0, C12: 0, C13: 0, C14: 0, C15: 0, C16: 0})
|> yield(name: "Články s minimálním napětím při vybíjení baterie")
// A získal jsem tabulku s tím, jak často bylo na některém článku minimální napětí když se baterie vybíjela
// Do třetice by mě zajímalo, na jakých článcích je minimální napětí při nabíjení baterie - proud > 0
// Vytvořím si tabulku s články + proudem baterií
CBC2 = join(tables: {Clanek: C1, Current: Current}, on: ["_time"])
//|> yield(name: "CBC2")
// vyberu záznamy s nabíjenímm baterie (proud > 0)
|> filter(fn: (r) => r._value > 0)
//|> yield(name: "CBC2")
// Spočítá, kolikrát je v dané tabulce článek daného čísla 1-16 při nabíjení baterie
|> reduce(fn: (r, accumulator) => ({
C01: accumulator.C01 + int(v: (r._value_ClanekMin == 1)),
C02: accumulator.C02 + int(v: (r._value_ClanekMin == 2)),
C03: accumulator.C03 + int(v: (r._value_ClanekMin == 3)),
C04: accumulator.C04 + int(v: (r._value_ClanekMin == 4)),
C05: accumulator.C05 + int(v: (r._value_ClanekMin == 5)),
C06: accumulator.C06 + int(v: (r._value_ClanekMin == 6)),
C07: accumulator.C07 + int(v: (r._value_ClanekMin == 7)),
C08: accumulator.C08 + int(v: (r._value_ClanekMin == 8)),
C09: accumulator.C09 + int(v: (r._value_ClanekMin == 9)),
C10: accumulator.C10 + int(v: (r._value_ClanekMin == 10)),
C11: accumulator.C11 + int(v: (r._value_ClanekMin == 11)),
C12: accumulator.C12 + int(v: (r._value_ClanekMin == 12)),
C13: accumulator.C13 + int(v: (r._value_ClanekMin == 13)),
C14: accumulator.C14 + int(v: (r._value_ClanekMin == 14)),
C15: accumulator.C15 + int(v: (r._value_ClanekMin == 15)),
C16: accumulator.C16 + int(v: (r._value_ClanekMin == 16)),
}),
identity: {C01: 0, C02: 0, C03: 0, C04: 0, C05: 0, C06: 0, C07: 0, C08: 0, C09: 0, C10: 0, C11: 0, C12: 0, C13: 0, C14: 0, C15: 0, C16: 0})
|> yield(name: "Články s minimálním napětím při nabíjení baterie")
// Tím jsem získal třetí zajímavý výsledek - kde je nejnižší napětí, když se baterie nabíjí
// obdobně mohu získat řadu dalšách dat třeba o článcích s max. napětím, popřípadě s přeléváním energie při balancování
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
-
- Podobná témata
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
-
Zprovozneni Victron VE.Direct + influxDB + Grafana
od lwq » » v Raspberry Pi
Zprovozneni Victron VE.Direct + influxDB + Grafana
- 1 Odpovědi
- 975 Zobrazení
-
Poslední příspěvek od lwq
-
-
- 8 Odpovědi
- 865 Zobrazení
-
Poslední příspěvek od Matess
-
- 27 Odpovědi
- 2239 Zobrazení
-
Poslední příspěvek od cipis
-
- 26 Odpovědi
- 2744 Zobrazení
-
Poslední příspěvek od Marek_Kuřim
-
- 18 Odpovědi
- 1816 Zobrazení
-
Poslední příspěvek od Dreambox