Portál AbcLinuxu, 29. dubna 2024 10:53


Dotaz: Úprava záznamů pro grafy

16.4.2016 16:31 Deryl | skóre: 11
Úprava záznamů pro grafy
Přečteno: 1229×
Odpovědět | Admin

Zdravím,

sbírám data z elektroměru a ukládám do tabulky (MariaDB):

       time               averagePower
2016-04-10 10:01:00           270
2016-04-10 10:02:00           290
2016-04-10 10:03:00           280
2016-04-10 10:04:00           300
2016-04-10 10:05:00           280

Data lze interpretovat:

v průběhu 2016-04-10 10:00:00 až 10:01:00 byla průměrná spotřeba 270 W;
v průběhu 2016-04-10 10:01:00 až 10:02:00 byla průměrná spotřeba 290 W;
atd.

Data bych rád zobrazil v grafu (pro web) následovně:

300                            --------
290              --------      |      |
280              |      |-------      --------
270       --------                           |
260       |                                  |
        10:00  10:01  10:02  10:03  10:04  10:05

Jsa ohledně zpracování hromadnějších dat laik, hledám nápovědu, jakým směrem se vydat:

Nerad bych objevoval slepé cesty, poradíte někdo, jak to nejlépe pojmout?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.4.2016 16:52 NN
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Cestou rrd databaze?
16.4.2016 17:31 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Problém je jinde: hodnota "value" není aktuální stav něčeho v daný moment (time), ale průběh trvající na stejné úrovni od minulého měření.

Všechny jednoduché grafy namalují přímou spojnici mezi "values", tj. bez duplicitních záznamů budou spojnice šikmé - takový druh grafu se hodí např. pro zobrazování aktuální teploty (tj. spojnice aproximuje teplotu v mezičase mezi měřeními), ale ne pro průběhovou veličinu.

Odkážu-li se k výše uvedenému příkladu, spojnice mezi 10:01 a 10:02 (dle záznamů v db) by stoupala z 270 na 290, tj. vizuálně by se dalo odečíst, že spotřeba v 10:01:30 je 280 W.

Tak tomu ovšem není, protože v intervalu mezi 10:01 - 10:02 byla spotřeba (průměrná, v jakémkoliv okamžiku) 290 W - což je na náčrtu grafu v dotazu jednoznačně patrné.

Jinými slovy řeším, jak interpretovat data z db v grafu: zda duplikovat záznamy pro účely přípravy grafu např. do dočasné tabulky nebo zda to umí nějaká javascript knihovna "on-the-fly".

Viz např. příspěvek zde: https://community.openhab.org/t/persist-strategy-everychange-incl-the-last-known-value-before-change/7571 obsahující ukázku grafů.
16.4.2016 17:39 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy

červená linka ukazuje spojnice mezi body v db, modrá linka ukazuje požadovanou interpretaci.

(Zdá se, že sem nelze vložit odkaz na obrázek, tak alespoň viz příloha.)

16.4.2016 20:55 Filip Jirsák
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Pokud se ty záznamy ukládají každou minutu, i když zůstává spotřeba stejná, nevím, co na tom chcete řešit – stačí jenom zvolit sloupcový graf a ne spojnicový, a hodnoty na ose X nezarovnávat do prostředka sloupce, ale na jeho pravý okraj.
16.4.2016 21:32 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Toto bude nejsnazší řešení - zkoušel jsem HighCharts, tam se mi sloupce podařilo zarovnat.
16.4.2016 20:07 Filip Jirsák
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejlepší by byla třetí varianta, ale žádnou knihovnu vám z hlavy neporadím. Ale ta duplicitní data si případně můžete na klientovy snadno připravit sám. Druhá varianta je možná v plnohodnotných SQL databázích – vygenerujete si sadu záznamů se zvolenou granularitou (ve vašem případě 1 minuta), a tu spojíte s daty z tabulky (vždy použijete nejbližší vyšší nebo shodnou hodnotu). V MySQL/MariaDB byste si ale tu funkci pro generování sady záznamů asi musel napsat sám (nenašel jsem, že by měla něco takového, jako je třeba v PostgreSQL generate_series).
Josef Kufner avatar 16.4.2016 21:34 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Hello world ! Segmentation fault (core dumped)
17.4.2016 12:59 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Od Flotu mne trochu odrazuje, že už na to dva roky nikdo nesáhl (github), což je škoda. Dokonalostí to asi nebude (328 issues, 122 pull reqs).
Josef Kufner avatar 17.4.2016 14:26 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Úprava záznamů pro grafy
Když jsem ho před pár lety používal, fungoval velice hezky. Na Githubu vypadá trochu mrtvě, ale jinak to je zralý nástroj.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.