• No results found

Platforma pro archivaci mˇeˇren´ı kvantity a kvality elektrick´e energie

N/A
N/A
Protected

Academic year: 2022

Share "Platforma pro archivaci mˇeˇren´ı kvantity a kvality elektrick´e energie"

Copied!
53
0
0

Loading.... (view fulltext now)

Full text

(1)

Platforma pro archivaci mˇ eˇ ren´ı kvantity a kvality elektrick´ e energie

Bakal´ aˇ rsk´ a pr´ ace

Studijn´ı program: B2646 – Informaˇcn´ı technologie Studijn´ı obor: 1802R007 – Informaˇcn´ı technologie Autor pr´ace: Luk´aˇs P´ıcha

Vedouc´ı pr´ace: Ing. Jan Kraus, Ph.D.

(2)

Platform for an archive of power quality and quantity measurements

Bachelor thesis

Study programme: B2646 – Information technology Study branch: 1802R007 – Information technology Author: Luk´aˇs P´ıcha

Supervisor: Ing. Jan Kraus, Ph.D.

(3)
(4)
(5)
(6)

Abstrakt

C´ılem t´eto pr´ace je prozkoumat ukl´ad´an´ı ˇcasov´ych ˇrad v relaˇcn´ıch a NoSQL datab´az´ıch. Zdrojem ˇcasov´ych ˇrad jsou mˇeˇren´ı nˇekolika veliˇcin elektrick´e energie z´ıskan´a z mˇeˇr´ıc´ıch pˇr´ıstroj˚u od firmy KMB systems s.r.o. Praktick´a ˇc´ast se zamˇeˇruje na v´yvoj webov´e sluˇzby na architektuˇre REST, kter´a um´ı komunikovat s obˇema typy datab´az´ı. Rozhran´ı umoˇzˇnuje jednoduch´e a rychl´e zpra- cov´an´ı namˇeˇren´ych veliˇcin. Druhou silnou vlastnost´ı rozhran´ı je prezentov´an´ı namˇeˇren´ych dat koncov´ym z´akazn´ık˚um v nejkratˇs´ım moˇzn´em ˇcasu od ˇcasu namˇeˇren´ı.

Kl´ıˇcov´a slova: ukl´ad´an´ı ˇcasov´ych ˇrad, REST API, relaˇcn´ı da- tab´aze, NoSQL datab´aze, sledov´an´ı spotˇreby elektrick´e energie

Abstract

This thesis explores saving of time series in relational and NoSQL databases. Data in time series are taken from measurements by measuring devices in KMB Systems company and contain measuring of several electrical energy quantities. The empirical part of thesis is focused on web service development on REST architecture which is able to communicate with both database types. Due to the interface, the procession of measured quantities is fast and easy. The second key feature of the interface is the ability to present the measured data to customer in shortest time possible from the measurement itself.

Keywords: saving of time series, REST API, relational database, NoSQL database, monitoring of electricity consumption

(7)

Podˇ ekov´ an´ı

T´ımto bych r´ad podˇekoval Ing. Janu Krausovi, Ph.D. za odborn´e veden´ı a ˇcas str´aven´y pˇri konzultac´ıch nad bakal´aˇrskou prac´ı. D´ale pak sv´e rodinˇe, kter´a mi studium umoˇznila a podporovala mˇe.

(8)

Obsah

Seznam zkratek . . . 12

1 Uvod´ 13 2 Anal´yza datov´eho souboru k praktick´e ˇc´asti 14 2.1 Nev´yhody aktu´aln´ıho ˇreˇsen´ı . . . 14

3 Casov´ˇ e ˇrady 16 3.1 Dˇelen´ı ˇcasov´ych ˇrad . . . 16

3.2 Upravy ˇ´ casov´ych ˇrad . . . 17

3.2.1 Doplnˇen´ı chybˇej´ıc´ıch hodnot . . . 17

3.2.2 Dalˇs´ı ´upravy . . . 17

3.3 Popisn´e charakteristiky . . . 18

3.4 Probl´emy ˇcasov´ych ˇrad . . . 18

4 Zpracov´an´ı anal´yzy poˇzadavk˚u 19 5 Moˇznosti ukl´ad´an´ı dat 21 5.1 Relaˇcn´ı MySQL datab´aze . . . 21

5.1.1 Centr´aln´ı datab´aze vˇsech zaˇr´ızen´ı a uˇzivatel˚u . . . 22

5.1.2 Uˇzivatelsk´e datab´aze . . . 22

5.2 NoSQL datab´aze . . . 25

5.2.1 Ukl´ad´an´ı ˇcasov´ych ˇrad do MongoDB . . . 26

5.3 Shrnut´ı. . . 26

6 Principy a technologie pro v´yvoj webov´ych sluˇzeb a aplikac´ı 27 6.1 HTTP protokol . . . 27

6.1.1 Metody . . . 28

6.1.2 Hlaviˇcka a tˇelo . . . 28

6.1.3 Zabezpeˇcen´ı komunikace . . . 29

6.1.4 Stavov´e k´ody . . . 29

6.2 Webov´e aplikace. . . 30

6.2.1 Architektura MVC . . . 30

6.3 V´ybˇer technologi´ı pro v´yvoj . . . 31

6.3.1 Laravel . . . 31

6.3.2 Ostatn´ı n´astroje. . . 33

(9)

7 Realizace ˇreˇsen´ı 36

7.1 KMB Visio Api . . . 36

7.1.1 Zabezpeˇcen´ı a autentizace uˇzivatel˚u . . . 36

7.1.2 Komunikace s KMB Viso API . . . 37

7.1.3 Form´at odpovˇedi a dotazu do API . . . 37

7.2 API dokumentace . . . 38

7.2.1 Registrace a pˇrihlaˇsov´an´ı uˇzivatel˚u . . . 38

7.2.2 Registrace nov´eho zaˇr´ızen´ı . . . 38

7.2.3 Dalˇs´ı modifikace nad zaˇr´ızen´ımi a ostatn´ımi zdroji . . . 39

7.2.4 Odes´ıl´an´ı namˇeˇren´ych hodnot . . . 40

7.2.5 Uprava dat do podoby pro klienta´ . . . 41

7.2.6 Historie namˇeˇren´ych hodnot dan´eho pˇr´ıstroje . . . 41

7.3 KMB Visio Manager / Client . . . 42

7.3.1 Pˇrihlaˇsov´an´ı uˇzivatel˚u . . . 42

7.3.2 Spr´ava datab´az´ı, zaˇr´ızen´ı a uˇzivatel˚u . . . 43

7.3.3 Sledov´an´ı spotˇreby elektrick´e energie . . . 43

8 Z´avˇer 45 8.1 Dalˇs´ı rozvoj pr´ace . . . 45

Literatura 47

Pˇr´ılohy 51

A Obsah pˇriloˇzen´eho CD 51

B UML Use case diagram 52

(10)

Seznam obr´ azk˚ u

5.1 Konceptu´aln´ı model centr´aln´ı datab´aze pro KMB Visio . . . 22 5.2 Prvn´ı verze tabulky pro z´aznam mˇeˇren´ı . . . 24 5.3 Druh´a verze tabulky pro z´aznam mˇeˇren´ı . . . 24 5.4 Struktura tabulky, co uchov´av´a ˇcasovou ˇradu v jednom ˇr´adku . . . . 25 5.5 Konceptu´aln´ı model uˇzivatelsk´e datab´aze pro KMB Visio . . . 25 7.1 Uk´azka grafu z prostˇred´ı KMB Visio Client. . . 44 B.1 UML Use case diagram . . . 52

(11)

Seznam tabulek

2.1 P˚uvodn´ı datov´y soubor ve form´atu csv . . . 15 7.1 Specifikace tˇela zpr´avy pro registraci nov´eho zaˇr´ızen´ı . . . 39 7.2 Specifikace tˇela zpr´avy pro odesl´an´ı namˇeˇren´ych . . . 41

(12)

Seznam zdrojov´ ych k´ od˚ u a uk´ azek

1 Datov´y soubor ve form´atu JSON . . . 15

2 Poˇzadavek na server - registrace nov´eho uˇzivatele . . . 28

3 Instalace Laravel frameworku a projektu . . . 32

4 Konfiguraˇcn´ı soubor pro datab´aze . . . 33

5 Definice rout v prostˇred´ı Laravel. . . 33

6 Hlaviˇcka metody sendRequest ve tˇr´ıde KMBVisioApiModel . . . 37

7 Odhlaˇsov´an´ı uˇzivatel˚u v prostˇred´ı Laravel. . . 39

8 Tˇelo a odpovˇed’ zpr´avy pˇri zaloˇzen´ı nov´eho zaˇr´ızen´ı . . . 40

(13)

Seznam zkratek

ACID Atomic, Consistent, Isolated, Durable API Application Programming Interface CSV Comma-separated values

CRUD Create, Read, Update, Delete

DI Dependency Injection (pˇred´av´an´ı z´avislost´ı) DoS Denial of service

HMAC Hash-based message authentication code HTML HyperText Markup Language

HTTP(S) Hypertext Transfer Protocol (Secure) JSON JavaScript Object Notation

MIT Massachusetts Institute of Technology MITM Main-in-the-middle

MVC Model-View-Controller

OOP Object-oriented programming ORM Object-relational mapping REST REpresentational state transfer RFC Request For Comments

SMTP Simple Mail Transfer Protocol SOAP Simple Object Application Protocol SQL Structured Query Language

SSL Secure Sockets Layer TLS Transport Layer Security UML Unified Modeling Language URL Uniform Resource Locator XML eXtensible Markup Language

(14)

1 Uvod ´

Ukolem bakal´´ aˇrsk´e pr´ace je vytvoˇren´ı aplikace pro vhodn´e ukl´ad´an´ı dat a n´aslednˇe i uˇzivatelsky pˇr´ıvˇetiv´e prezentace namˇeˇren´ych hodnot pro koncov´e z´akazn´ıky. Mˇeˇren´e hodnoty poch´azej´ı z mˇeˇr´ıc´ıch pˇr´ıstroj˚u z firmy KMB systems s.r.o, kter´e generuje aplikace Envis. Tyto pˇr´ıstroje um´ı mˇeˇrit v ˇr´adech stovek veliˇcin v jedn´e minutˇe.

Motivac´ı je hned nˇekolik. Z´akazn´ık chce m´ıt rychl´y pˇrehled o tom, co se dˇeje v jeho s´ıti. Takto lze napˇr´ıklad vypozorovat, zda v s´ıti nejsou ˇcern´ı odbˇeratel´e nebo jestli s´ıt’ vydrˇz´ı dalˇs´ı energetickou z´atˇeˇz. Reˇserˇse uk´azala, ˇze nejsou dostupn´e aplikace, kter´e by o pr˚ubˇehu informovaly v co moˇzn´a nejkratˇs´ım ˇcase. Dosavadn´ı notifikac´ı je aˇz v´yzva k zaplacen´ı faktury od poskytovatele elektrick´e energie.

Prvn´ı kapitoly ˇcten´aˇre sezn´am´ı se zp˚usobem, jak Envis namˇeˇren´a data ukl´ad´a a co je jejich obsahem. Jsou zde prozkoum´any i moˇznosti jin´ych zp˚usob˚u ukl´ad´an´ı za ´uˇcelem dalˇs´ıho strojov´eho zpracov´an´ı a uˇsetˇren´ı m´ısta v pamˇeti. Dalˇs´ı kapi- tolou je n´avrh datab´azov´ych model˚u pro ukl´ad´an´ı ˇcasov´ych ˇrad, kter´e poch´azej´ı z namˇeˇren´ych ´udaj˚u. Byly prozkoum´any relaˇcn´ı i NoSQL datab´aze, konkr´etnˇe jak efektivnˇe ukl´adat data. Dalˇs´ı ˇc´ast seznamuje s v´yvojem webov´ych sluˇzeb aplikac´ı.

Jsou uvedeny technologie, kter´e byly vybr´any pro v´yvoj, jejich v´yhody, a proˇc jsou lepˇs´ı neˇz jin´e technologie.

V praktick´e ˇc´asti je pops´an pr˚ubˇeh v´yvoje API a klientsk´e ˇc´asti, je pops´an zp˚usob zabezpeˇcen´ı a pˇr´ıstup na urˇcit´e zdroje. Jedn´a se o online aplikaci, kte- rou bude vyuˇz´ıvat mnoho uˇzivatel˚u s r˚uzn´ymi opr´avnˇen´ımi, jednokrokovou regis- trac´ı bez zbyteˇcn´ych osobn´ıch ´udaj˚u a extr´emnˇe jednoduch´ym zp˚usobem pˇrenosu dat. Namˇeˇren´a data jsou uchov´avan´a v menˇs´ıch ˇcasov´ych intervalech oproti En- visu. D´ıky detailnˇejˇs´ımu uchov´av´an´ı dat lze pak v pˇr´ıpadˇe probl´emu v s´ıt´ı pˇresnˇeji urˇcit, v jak´em ˇcase probl´emov´a ud´alost nastala. V z´avˇeru se lze doˇc´ıst, zda a jak´ymi nejd˚uleˇzitˇejˇs´ımi kroky bylo dosaˇzeno poˇzadovan´ych c´ıl˚u a je nast´ınˇena ot´azka dalˇs´ıho rozˇs´ıˇren´ı t´eto pr´ace.

(15)

2 Anal´ yza datov´ eho souboru k praktick´ e ˇ c´ asti

Prvn´ım krokem cel´e pr´ace bylo porozumˇen´ı problematice mˇeˇren´ı elektrick´e energie a zp˚usobu, jak´ym jsou data z mˇeˇren´ı ukl´ad´ana. Pro tyto ´uˇcely byla poskytnuta sada csv soubor˚u, kter´e generuje aplikace Envis [21]. CSV soubory jsou v´yhodn´e v tom, ˇze pro jejich ˇcten´ı a z´apis nen´ı tˇreba speci´aln´ıch sloˇzit´ych program˚u. Data v ˇr´adc´ıch jsou nejˇcastˇeji oddˇelen´a stˇredn´ıkem nebo ˇc´arkou. Dalˇs´ımi form´aty pro ukl´ad´an´ı dat je napˇr´ıklad JSON, viz uk´azka 1 a XML form´at. JSON form´at nen´ı optim´aln´ı pro pˇrenos bin´arn´ıch dat, v XML souboru nalezneme spoustu znak˚u, kter´e tvoˇr´ı tento form´at. Uˇzit´ı form´atu vˇzdy z´avis´ı na konkr´etn´ım typu aplikace.

Soubor (tabulka 2.1) na prvn´ım ˇr´adku obsahuje identifikaci zaˇr´ızen´ı, kter´e data namˇeˇrilo a pˇr´ıznak PQ. Dalˇs´ı ˇr´adek informuje o tom, jak´e veliˇciny a v jak´ych jed- notk´ach byly v dan´em ˇcase namˇeˇreny, poˇcet veliˇcin se pohybuje v ˇr´adu des´ıtek.

V praxi se tento ˇr´adek obvykle popisuje jako hlaviˇcka. Prvn´ı poloˇzkou je record time[s], tedy datum a ˇcas mˇeˇren´ı s pˇresnost´ı na milisekundy, dalˇs´ımi prvky v hlaviˇcce jsou jiˇz zmiˇnovan´e veliˇciny, pro pˇredstavu napˇr´ıklad frekvence, napˇet´ı, proud, v´ykon, konfi- gurace nastaven´ı parametr˚u, aj. Kaˇzd´y csv soubor uchov´av´a data jednoho mˇeˇr´ıc´ıho pˇr´ıstroje za jeden cel´y den, nejˇcastˇeji po patn´actiminutov´ych intervalech. Po tˇechto ˇr´adc´ıch n´asleduj´ı jiˇz konkr´etn´ı hodnoty v poˇrad´ı definovan´em v hlaviˇcce. Prvn´ı hod- notou je tedy datum a ˇcas mˇeˇren´ı, napˇr. 03.06.201700 : 00 : 00.038, n´asleduj´ı namˇeˇren´e hodnoty, kter´e jsou r˚uzn´ych datov´ych typ˚u - cel´e ˇc´ıslo, ˇc´ısla s plovouc´ı ˇr´adovou ˇc´arkou a bin´arn´ı pole o velikosti jednoho bajtu. Spousta veliˇcin m´a po cel´y den mˇeˇren´ı nulov´e hodnoty - to je zapˇr´ıˇcinˇeno t´ım, ˇze pˇr´ıstroj danou veliˇcinu nemˇeˇr´ı, ale ukl´ad´a v´ychoz´ı hodnotu nula. Jeden konkr´etn´ı datov´y soubor je v pˇr´ıloze A.

2.1 Nev´ yhody aktu´ aln´ıho ˇ reˇ sen´ı

Pˇri studii bylo nalezeno p´ar moˇznost´ı jak toto csv optimalizovat za ´uˇcelem rych- lejˇs´ıho zpracov´an´ı a pˇredevˇs´ım zmenˇsen´ı zab´ıran´eho m´ısta na disku. Pokud by se datum a ˇcas ukl´adaly v normˇe ISO 8601, bylo by pot´e moˇzn´e z tohoto form´atu rychle a jednoduˇse vytvoˇrit objekt typu DateT ime. Budeme-li cht´ıt z´ıskat hodnoty pro konkr´etn´ı veliˇcinu za cel´y mˇeˇren´y interval, budeme muset prvnˇe zjistit, na kter´em prvku hlaviˇckov´eho ˇr´adku se nach´az´ı (sloˇzitost O(n)), a pot´e proj´ıt vˇsechny ˇr´adky a vybrat hodnotu na indexu mˇeˇren´e veliˇciny (opˇet O(n)), celkovˇe tedy sloˇzitost O(n2). V pˇr´ıpadˇe, ˇze by byla data v souboru transformovanˇe, tj. sloupeˇcky ˇcasy

(16)

mˇeˇren´ı a jeden konkr´etn´ı ˇr´adek by pˇredstavoval mˇeˇrenou veliˇcinu, nalezen´ı hodnot dan´e veliˇciny pro cel´y pozorovac´ı interval bude pouze O(n). Posledn´ı moˇznost´ı, kter´a vede k optimalizaci, je probl´em nulov´ych hodnot v cel´em sledovan´em ´useku. Nuly by ˇslo jednak nahradit pr´azdn´ym ˇretˇezcem, ˇc´ımˇz se d´a tak´e zmenˇsit velikost v´ysledn´eho souboru, nicm´enˇe lepˇs´ı variantou by bylo veliˇciny s nulov´ymi hodnotami za cel´y in- terval nezapisovat, ale zapsat pouze jejich n´azev do hlaviˇckov´eho souboru na posledn´ı m´ısto. Pokud by neexistovala hodnota na indexu v ˇr´adc´ıch hodnot, znamenalo by to, ˇze dan´a veliˇcina v dan´em ˇcase nic nenamˇeˇrila.

1 {

2 data: {

3 "03.06.2017 00:01:00.000" : {

4 "avg.f[Hz]" : 49.98321,

5 "avg.U1[V]" : 244.821

6 "avg.I1[A]" : 0.9353704,

7 // ...

8 },

9 "03.06.2017 00:02:00.000" : {

10 // ...

11 }

12

13 }

14 }

Uk´azka 1: Datov´y soubor ve form´atu JSON

Tabulka 2.1: P˚uvodn´ı datov´y soubor ve form´atu csv

KMB Headquarters/ SMC 235D U X/5A E(6)/ PQ Survey

record time[s] avg.f[Hz] avg.U1[V] avg.I1[A] avg.P1[kW] avg.3Q[kvar]

03.06.2017 00:01:00.000 49.98321 246.0748 0.9353704 0.146431396484375 -0.376471221923828 03.06.2017 00:02:00.000 49.97229 246.2901 0.9507966 0.149623641967773 -0.369777191162109 03.06.2017 00:03:00.000 49.97416 246.5585 0.943457 0.149523010253906 -0.373624664306641 03.06.2017 00:04:00.000 49.97937 246.4277 0.9414431 0.149441955566406 -0.367776519775391 03.06.2017 00:05:00.000 49.97763 246.4431 0.9385444 0.148853408813477 -0.371797271728516 03.06.2017 00:06:00.000 49.96017 246.3116 0.9371952 0.148481750488281 -0.367386169433594 03.06.2017 00:07:00.000 49.95576 246.1986 0.9446217 0.150069046020508 -0.372720794677734 03.06.2017 00:08:00.000 49.9529 246.2795 0.9422051 0.149398193359375 -0.370366790771484 03.06.2017 00:09:00.000 49.96693 246.3747 0.9412095 0.149346862792969 -0.373975128173828 03.06.2017 00:10:00.000 49.97293 246.3651 0.9298881 0.147384735107422 -0.375468139648438

(17)

3 Casov´ ˇ e ˇ rady

Po prozkoum´an´ı archivu monitoru kvality bylo zjiˇstˇeno, ˇze data obsaˇzen´a v nˇem jsou zdrojem pro ˇcasovou ˇradu. ˇZe se v tomhle pˇr´ıpadˇe mluv´ı o ˇcasov´e ˇradˇe dokazuje definice, kter´a ji popisuje jako ”ˇcasovou posloupnost hodnot ukazatel˚u namˇeˇren´ych v urˇcit´ych ˇcasov´ych intervalech”[20]. Kaˇzdou ˇcasovou ˇradu lze zapsat v n´asleduj´ıc´ım tvaru:

y1, y2, . . . , yn (3.1)

kde y znaˇc´ı sledovan´e hodnoty, t je ˇcasov´a promˇenn´a a n je poˇcet vzork˚u. Dalˇs´ı moˇznost´ı z´apisu je ve tvaru:

yt, t = 1, . . . , n (3.2)

Naˇse ˇcasov´a ˇrada vznikla ze sledov´an´ı mˇeˇren´ı veliˇcin v oblasti elektrick´e energie.

Casov´ˇ e ˇrady slouˇz´ı pro porozumˇen´ı dan´e situaci, jehoˇz v´ysledkem je pochopen´ı podm´ınek a pravidel pro zpracov´an´ı dalˇs´ıch hodnot t´eto ˇcasov´e ˇrady. Dalˇs´ı moˇznost´ı je tak´e predikce v´yvoje nov´ych ukazatel˚u. ˇCasov´e ˇrady maj´ı vyuˇzit´ı t´emˇeˇr ve vˇsech odvˇetv´ıch, napˇr. sledov´an´ı akciov´eho trhu, pˇredpovˇed’ poˇcas´ı, doba do poruchy stroje, predikce porodnosti a ´umrtnosti obyvatel apod.

3.1 Dˇ elen´ı ˇ casov´ ych ˇ rad

Ne vˇsechny ˇcasov´e ˇrady pracuj´ı se stejn´ymi ˇcasov´ymi ukazateli a jejich sledovan´y interval t´eˇz nen´ı stejn´y. Proto je potˇreba dobˇre porozumˇet, do jak´e skupiny data patˇr´ı. ˇSpatn´e zaˇrazen´ı by mohlo m´ıt za n´asledek v´ybˇer ˇspatn´ych metod pro je- jich anal´yzu, ˇc´ımˇz nelze dos´ahnout spr´avn´ych v´ysledk˚u. Prvn´ı zp˚usob dˇelen´ı je dle d´elky ˇcasov´eho ´useku, kdy pozorujeme nˇejak´a data. Je-li perioda delˇs´ı neˇz jeden rok, mluv´ıme o dlouhodob´ych ˇcasov´ych ˇrad´ach. ˇCasy s menˇs´ı periodou oznaˇcujeme jako kr´atkodob´e ˇcasov´e ˇrady, kde sledovan´e obdob´ı m˚uˇze b´yt tˇreba ˇctvrtlet´ı, mˇes´ıc, t´yden. Kratˇs´ı periody neˇz v´yˇse zmiˇnovan´e jsou ud´av´any vysokofrekvenˇcn´ı ˇcasovou ˇradu.

Druh´ym zp˚usobem dˇelen´ı je dˇelen´ı dle typu sledovan´eho ukazatele na ˇrady in- tervalov´e a okamˇzikov´e. U intervalov´ych ˇrad z´aleˇz´ı na d´elce sledovan´eho ukaza- tele, u okamˇzikov´ych naopak. Intervalov´a ˇcasov´a ˇrada je jednoduˇs´ı na prov´adˇen´ı z´akladn´ıch popisn´ych statistik, u okamˇzikov´ych ˇrad je potˇreba se zamyslet, zda napˇr. souˇcet ukazatel˚u d´av´a re´aln´y smysl. Proto se u intervalov´ych ˇcasov´ych ˇrad poˇc´ıt´a s prost´ym a v´aˇzen´ym chronologick´ym pr˚umˇerem.

(18)

Pro doplnˇen´ı lze pak jeˇstˇe ˇcasov´e ˇrady dˇelit na ˇrady s absolutn´ımi ˇci relativn´ımi ukazateli, deterministick´e a stochastick´e, ekvidistantn´ı a neekvidistantn´ı, stacion´arn´ı a nestacion´arn´ı. V´ıce o ˇcasov´ych ˇrad´ach viz [4].

3.2 Upravy ˇ ´ casov´ ych ˇ rad

U ˇcasov´ych ˇrad lze prov´adˇet n´asleduj´ıc´ı operace (je tˇreba m´ıt na pamˇeti, zda m´a dan´a operace smysl a v´ysledek bude re´aln´y) - doplnˇen´ı chybˇej´ıc´ıch hodnot,transformace mˇeˇr´ıtka a kombinace ˇcasov´ych ˇrad, ˇcasov´y posun, sez´onn´ı diference, kumulativn´ı souˇcet, vyhlazov´an´ı ˇcasov´ych ˇrad. Pozornost bude zamˇeˇrena na operace, kter´ych bylo uˇzito pˇri zpracov´an´ı re´aln´ych dat v praktick´e ˇc´asti t´eto pr´ace [3].

3.2.1 Doplnˇ en´ı chybˇ ej´ıc´ıch hodnot

V praxi m˚uˇze nastat situace, kdy dan´e pozorovan´ı nemus´ı obsahovat vˇsechny platn´e hodnoty. Chybˇej´ıc´ı neboli neplatn´e hodnoty mohou b´yt zp˚usobeny obecnˇe napˇr.

v´ypadkem mˇeˇr´ıc´ıho pˇr´ıstroje, zapomenut´ım vyplnˇen´ı ot´azky v dotazn´ıku, pˇreps´an´ım se v desetinn´e ˇc´arce, ˇspatn´ym pochopen´ım ot´azky apod. Pˇri zpracov´an´ı jak´ehokoliv statistick´eho souboru je tedy nutn´e chybˇej´ıc´ı hodnoty doplnit a je potˇreba se za- myslet nad t´ım, zda n´am doplnˇen´e hodnoty pˇr´ıliˇs neovlivn´ı v´ysledek. Opˇet exis- tuje mnoho pˇr´ıstup˚u, jak se s t´ımto vypoˇr´adat. Nejjednoduˇsˇs´ı moˇznost´ı je do- plnit chybˇej´ıc´ı hodnoty nulami, tento zp˚usob ˇreˇsen´ı ale nen´ı pˇr´ıliˇs vhodn´y pro okamˇzikov´e ˇrady. Lepˇs´ı volbou je nahradit chybˇej´ıc´ı hodnoty v datech nˇejakou centr´aln´ı charakteristikou souboru namˇeˇren´ych hodnot. Konkr´etnˇe mluv´ıme o arit- metick´em pr˚umˇeru nebo medi´anu. Centr´aln´ı charakteristika m˚uˇze b´yt poˇc´ıt´ana na z´akladˇe cel´eho v´ybˇerov´eho souboru, nebo v okol´ı chybˇej´ıc´ıch bod˚u. Zaj´ımavˇejˇs´ım a mnohdy i pˇresnˇejˇs´ım zp˚usobem je nahrazen´ı chybˇej´ıc´ıch hodnot trendem cel´e ˇcasov´e ˇrady a line´arn´ı interpolac´ı. Pro doplnˇen´ı hodnot na konci ˇrady se uˇz´ıv´a me- toda extrapolace.

3.2.2 Dalˇ s´ı ´ upravy

Sez´onn´ı diference. Jedn´a se o rozd´ıl mezi ˇcasov´ymi okamˇziky o celistv´y n´asobek d´elky periody. Diference vyjadˇruje velikost zmˇeny, ke kter´e doˇslo mezi dvˇema ˇcasov´ymi okamˇziky mˇeˇren´ı oproti pˇredch´azej´ıc´ım obdob´ı. Pokud je rozd´ıl kladn´y, ˇrada v dan´em ˇcase roste, v opaˇcn´em pˇr´ıpadˇe kles´a. Opaˇcnou operac´ı je kumulativn´ı souˇcet, kter´y vyjadˇruje souˇcet pozorov´an´ı za urˇcit´y ˇcasov´y ´usek. Pokud aplikujeme tyto dvˇe

´

upravy, z´ısk´ame p˚uvodn´ı ˇradu opoˇzdˇenou a jeden ˇcasov´y interval, zvˇetˇsenou nebo zmenˇsenou o urˇcitou konstantu. Transformaci mˇeˇr´ıtka uˇzijeme v pˇr´ıpadˇe, ˇze je potˇreba potlaˇcit ˇci zm´ırnit nestacionarity ˇrady, kde s rostouc´ımi hodnotami roste i rozptyl ˇclen˚u. Transformaci aplikujeme uˇzit´ım logaritmick´e funkce, vyn´asoben´ım konstantou nebo prost´ym umocnˇen´ım. Po prozkoum´an´ı dat opˇet transformujeme do p˚uvodn´ıho tvaru. Posledn´ı ze zmiˇnovan´ych modifikac´ı je ˇcasov´y posun, kde uka- zatel˚um ˇcasov´e ˇrady zmˇen´ıme z´akladnu. T´ım pak z´ısk´ame ve star´e z´akladnˇe bud’

(19)

na zaˇc´atku nebo na konci chybˇej´ıc´ı hodnoty, pr´avˇe tolik, o kolik krok˚u byl posun prov´adˇen.

3.3 Popisn´ e charakteristiky

N´asleduje v´yˇcet z´akladn´ıch popisn´ych statistik, kter´e byly uˇz´ıv´any pˇri pr´aci. Prost´y chronologick´y pr˚umˇer se spoˇc´ıt´a jako:

y1

2 + y2+ . . . + yn−1+ y2n

n − 1 (3.3)

Kde kaˇzd´emu ˇcasov´e okamˇziku t1, t2, . . . , tnn´aleˇz´ı hodnota ˇcasov´e ˇrady y1, y2, . . . , yn. V´aˇzen´y chronologick´y pr˚umˇer se spoˇc´ıt´a n´asledovnˇe pro stejn´a krit´eria jako u 3.3:

y1+y2

2 (t2− t1) + y2+y2 3(t3 − t2) + . . . +yn12+yn(tn− tn−1)

tn− tn−1 (3.4)

Prost´y aritmetick´y pr˚umˇer s ukazatele y a poˇcet vzork˚u je t:

y =

Pn t=1yt

n (3.5)

Omezen´ı ˇrady, kde n´as z ˇcasov´e ˇrady zaj´ımaj´ı pouze hodnoty na urˇcit´ych indexech, lze napsat v n´asleduj´ıc´ım tvaru 3.3, kde vybereme kaˇzd´y k − t´y prvek z ˇcasov´e ˇrady yt. Omezen´a ˇrada bude d´elky n.

{yki}ni=0 (3.6)

Tohoto je vyuˇzito pˇri ´upravˇe dat do podoby pro klienta, kde parametr k odpov´ıd´a atributu group interval.

3.4 Probl´ emy ˇ casov´ ych ˇ rad

Pˇri anal´yze ˇrad se lze setkat s mnoha probl´emy, kter´e je potˇreba pˇri zpracov´an´ı dat zn´at. Jedn´a se pˇredevˇs´ım o probl´emy s d´elkou ˇcasov´e ˇrady, kde pˇri kr´atk´em mnoˇzstv´ı vzork˚u nemus´ı b´yt spr´avnˇe odhadnout dalˇs´ı v´yvoj, naopak pˇri delˇs´ım po- zorov´an´ı m˚uˇzeme zaznamenat v´ıce chybn´ych mˇeˇren´ı, coˇz opˇet m˚uˇze v´est ke ˇspatn´ym v´ysledk˚um. S t´ımto lehce souvis´ı i probl´em se vzorkem mˇeˇren´ı, kde sbˇer datov´eho souboru nemusel b´yt prov´adˇen stejn´ym zp˚usobem, napˇr. liˇs´ıc´ım se poˇctem dese- tinn´ych m´ıst, tzv. Mot´yl´ı efekt. Dalˇs´ım probl´emem pˇri zpracov´an´ı je probl´em s ka- lend´aˇrn´ımi dny. Pokud napˇr. zpracov´av´ame mˇes´ıˇcn´ı produkci, je tˇreba m´ıt na pamˇeti, ˇze kaˇzd´y mˇes´ıc m´a jin´y poˇcet kalend´aˇrn´ıch a pracovn´ıch dn˚u. Do modelov´an´ı je tˇreba zahrnout i st´atn´ı sv´atky (probl´emem jsou mnohdy Velikonoce) [8]. V pˇr´ıpadˇe t´eto pr´ace byl nejvˇetˇs´ı probl´em s pˇrechodem na letn´ı/zimn´ı ˇcas, kde v jednom pˇr´ıpadˇe data chybˇela, ve druh´em naopak pˇreb´yvala.

(20)

4 Zpracov´ an´ı anal´ yzy poˇ zadavk˚ u

Tato specifikace vyplynula po sezn´amen´ı s aktu´aln´ı problematikou vedouc´ım pr´ace.

Cel´e chov´an´ı aplikace je vyobrazena na UML Use Case diagramu v pˇr´ılozeB.1. Proˇc a k ˇcemu jsou dobr´e UML diagramy se lze doˇc´ıst v [7].

V nejnovˇejˇs´ıch verz´ıch firmwaru vybran´ych ˇrad pˇr´ıstroj˚u bude pˇrid´an skript (post request), kter´y kaˇzdou minutu odeˇsle na urˇcit´y server namˇeˇren´a data vˇsech veliˇcin.

Pro ´uspˇeˇsnost je tˇreba, aby zaˇr´ızen´ı bylo registrovan´e v centr´aln´ı datab´azi, kter´a v sobˇe nese informace o vˇsech zaˇr´ızen´ıch a o tom, do jak´e datab´aze m´a mˇeˇren´ı uloˇzit. D´ale mus´ı b´yt zaˇr´ızen´ı a jeho datab´aze aktivn´ı a mus´ı b´yt platn´y API token pro zamezen´ı odes´ıl´an´ı neplatn´ych mˇeˇren´ı (DoS ´utoky). Krom tˇechto ´udaj˚u odeˇsle i svoje unik´atn´ı v´yrobn´ı ˇc´ıslo a namˇeˇren´a data. Namˇeˇren´a data mohou b´yt dvoj´ıho typu, prvn´ı moˇznost´ı je odesl´an´ı jako asociativn´ı pole, kde kl´ıˇcem je n´azev veliˇciny a hodnotou je konkr´etn´ı mˇeˇren´a hodnota, druh´ym zp˚usobem je odesl´an´ı pouze pole mˇeˇren´ych veliˇcin. V takov´em pˇr´ıpadˇe je nutn´e, aby zaˇr´ızen´ı mˇelo definov´ano, kter´a veliˇcina je na dan´em indexu tohoto pole. V pˇr´ıpadˇe ztr´aty spojen´ı se serverem je zaruˇceno, ˇze pˇr´ıstroj vˇsechna namˇeˇren´a data odeˇsle pˇri obnoven´ı spojen´ı.

Na pozad´ı tohoto modelu bˇeˇz´ı v urˇcit´ych intervalech skript (spuˇstˇen´y napˇr. cro- nem), kter´y zpracov´av´a namˇeˇren´a data, dle nastaven´ı zaˇr´ızen´ı je modifikuje a uloˇz´ı do lepˇs´ı podoby. Modifikac´ı je myˇsleno agregov´an´ı po urˇcit´ych ˇcasov´ych intervalech, tak jako Envis generuje do csv soubor˚u, podpora pro rychlejˇs´ı pˇr´ıstup k dat˚um. Tento proces slouˇz´ı pro optimalizaci datab´aze, proˇc tomu tak je, se lze doˇc´ıst v n´asleduj´ıc´ı kapitole. Aˇckoliv se v z´akladu z´akazn´ık˚um budou zobrazovat data pouze za posledn´ı dva dny v intervalech vˇetˇs´ıch neˇz jedna minuta (minim´aln´ı interval pro agregaci z´akazn´ık˚um byl stanoven na 15 minut), je tˇreba m´ıt nad´ale uloˇzen´a i ”surov´a”data (minutov´e z´aznamy) pro pˇr´ıpadnou zmˇenu konfigurace.

Distributor pˇri odbˇeru mˇeˇr´ıc´ıch pˇr´ıstroj˚u obdrˇz´ı ˇcasovˇe platn´y registraˇcn´ı kl´ıˇc pro registrace do KMB Visio Manager. Pokud chce sv´ym koncov´ym z´akazn´ık˚um po- skytovat sledov´an´ı spotˇreby elektrick´e energie, mus´ı zaregistrovat sv´a zaˇr´ızen´ı. Re- gistrace spoˇc´ıv´a v ops´an´ı unik´atn´ıho v´yrobn´ıho ˇc´ısla pro kaˇzd´e zaˇr´ızen´ı a zaˇrazen´ı do konkr´etn´ı datab´aze. V jedn´e konkr´etn´ı datab´azi by mˇela b´yt pouze ta zaˇr´ızen´ı, kter´a jsou montov´ana v jedn´e konkr´etn´ı instituci. Toto opatˇren´ı je zde proto, aby konkr´etn´ı koncov´y z´akazn´ık nemˇel pˇr´ıstup k dat˚um (topologie, seznam uˇzivatel˚u, namˇeˇren´e

´

udaje) ostatn´ıch zaˇr´ızen´ı a naopak. D´ale pak m˚uˇze distributor aktivovat a deakti- vovat datab´azi a generovat registraˇcn´ı kl´ıˇc (rovnˇeˇz ˇcasovˇe platn´y) pro sv´e koncov´e

(21)

z´akazn´ıky. Podle preferenc´ı distributora a koncov´eho klienta je zde moˇznost si vy- brat i typ datab´aze (MySQL, NoSQL), kde kaˇzd´e ˇreˇsen´ı m´a sv´e v´yhody a nev´yhody.

Zaˇr´ızen´ım lze vytv´aˇret konfigurace, kter´e ˇr´ıkaj´ı, jak ˇcasto a v jak´ych ˇcasov´ych inter- valech m´a modifikace do podoby pro klienta prob´ıhat.

Obdrˇz´ı-li koncov´y z´akazn´ık (osoba jeˇz si zaˇr´ızen´ı nech´a instalovat do sv´e elek- trick´e s´ıtˇe) od sv´eho distributora registraˇcn´ı kl´ıˇc, m˚uˇze se registrovat do KMB Vi- sio Client. Prvn´ı z´akazn´ık, kter´y se v dan´e datab´azi registruje, je jej´ım spr´avcem.

Spr´avce je povaˇzov´an za osobu s odbornou zp˚usobilost´ı. Dalˇs´ımi uˇzivateli jsou osoby, co si od mont´era zakoupili mˇeˇr´ıc´ı pˇr´ıstroje. Ti maj´ı pr´ava pouze na sledov´an´ı spotˇreby pˇr´ıstroj˚u, kter´e jim spr´avce povol´ı. Pro kaˇzd´e zaˇr´ızen´ı si lze zobrazit konkr´etn´ı veliˇcinu a vidˇet jej´ı posledn´ı v´yvoj. Spr´avce m´a moˇznosti spr´avy zaˇr´ızen´ı, kter´e m˚uˇze ˇradit do projekt˚u. Projekty slouˇz´ı pro topologick´e uspoˇr´ad´an´ı zaˇr´ızen´ı tak jak jsou ve skuteˇcnosti rozm´ıstˇena. Stejnˇe jako zaˇr´ızen´ı, se i z´akazn´ıci mus´ı autentizovat.

(22)

5 Moˇ znosti ukl´ ad´ an´ı dat

Naj´ıt optim´aln´ı zp˚usob uloˇzen´ı dat vyˇzaduje m´ıt urˇcit´e zkuˇsenosti s modelov´an´ım datab´az´ı, ale i s n´asledn´ym v´ybˇerem dat z datab´aze (znalost dotazovac´ıho jazyka SQL). Datab´azov´e sch´ema je tˇreba m´ıt pˇripraveno i pro pˇr´ıpad dalˇs´ıho rozˇs´ıˇren´ı.

Do datab´az´ı lze ukl´adat cokoli, ale kaˇzd´a data jsou jinak specifick´a, jejich zpracov´an´ı a zpˇetn´a prezentace se tak´e liˇs´ı specifikac´ı aplikace, pro kterou slouˇz´ı. V prv´e ˇradˇe je potˇreba vˇedˇet, co pˇresnˇe za data budeme ukl´adat, jak´ych m˚uˇzou nab´yvat hodnot a jak k nim budeme pˇristupovat a zn´at celkovˇe poˇzadavky aplikace. Vˇsechny tyto souvislosti je tˇreba d´at spr´avnˇe dohromady a zamyslet se nad t´ım, zda bude toto ˇreˇsen´ı dostaˇcuj´ıc´ı. Pˇri nasazen´ı ostr´e verze aplikace uˇz nen´ı vˇzdy moˇzn´e struktury n´aslednˇe mˇenit, jelikoˇz se od nich odv´ıj´ı i dalˇs´ı ˇc´asti aplikace. V takov´em pˇr´ıpadˇe pak nezb´yv´a nic jin´eho neˇz si vystaˇcit s danou verz´ı nebo cel´e ˇreˇsen´ı vymyslet znovu, coˇz stoj´ı ˇcas. N´asleduj´ıc´ı podkapitoly l´ıˇc´ı n´avrh datab´az´ı pro REST API aplikaci.

Jsou zde uvedeny i postupy, kter´e nevedly k v´ysledn´emu ˇreˇsen´ı.

5.1 Relaˇ cn´ı MySQL datab´ aze

Tento typ datab´aze si lze pˇredstavit jako sadu tabulek, kde kaˇzd´a tabulka m´a sv˚uj jednoznaˇcn´y n´azev. Tabulky jsou tvoˇreny sloupci neboli atributy, kter´e mohou b´yt r˚uzn´ych datov´ych typ˚u. ˇR´adky pˇredstavuj´ı jednotliv´e z´aznamy, kde kaˇzd´y da- tab´azov´y ˇr´adek lze jednoznaˇcnˇe identifikovat prim´arn´ım kl´ıˇcem. Tabulky jsou propo- jeny vz´ajemn´ymi relacemi (vazbami), vazba m˚uˇze b´yt i napˇr´ıklad z jedn´e tabulky na tu samou, tzv. self-relace. N´avrh zaˇc´ın´a konceptu´aln´ım modelem, kter´y je n´aslednˇe pˇreveden na relaˇcn´ı model. V´ıce se lze doˇc´ıst v [9]. Pˇri n´avrhu bylo uˇzito co nej- vhodnˇejˇs´ıch datov´ych typ˚u s rozumnou d´elkou. Nen´ı tedy pˇr´ıliˇs vhodn´e, aby infor- mace o tom, zda je je entita aktivn´ı ˇci nikoliv, byla uloˇzena v datov´em typu integer (cel´e ˇc´ıslo) o velikosti 4 B (32 b), kdyˇz se d´a uˇz´ıt datov´eho typu bit o d´elce jednoho bitu. Dalˇs´ı optimalizac´ı je uˇz´ıvat i neznam´enkov´e datov´e typy (unsigned). O da- tov´ych typech se lze v´ıce doˇc´ıst v ofici´aln´ı pˇr´ıruˇcce MySQL [27]. Pˇri n´avrhu je dobr´e se drˇzet i nepsan´ych program´atorsk´ych konvenc´ı a doporuˇcen´ych postup˚u. Nˇekter´e frameworky dokonce vyˇzaduj´ı, v jak´em tvaru maj´ı b´yt n´azvy tabulek a pˇr´ısluˇsn´ych model˚u. Pro pr´aci s daty v SQL datab´az´ı lze vyuˇz´ıvat dotazovac´ıho jazyka SQL.

(23)

5.1.1 Centr´ aln´ı datab´ aze vˇ sech zaˇ r´ızen´ı a uˇ zivatel˚ u

Po d˚ukladn´em zpracov´an´ı anal´yzy poˇzadavk˚u a pochopen´ı, jak´a data budou ukl´ad´ana, bylo dosaˇzeno n´asleduj´ıc´ıho datab´azov´eho sch´ematu viz 5.1. Sch´ema obsahuje pˇet tabulek, kde jiˇz podle n´azvu lze urˇcit, pro kterou entitu byla vytvoˇrena. Tabulka pro entitu zaˇr´ızen´ı je pojmenovan´a objects (Laravel kv˚uli pr´aci s ORM [6] nedovoluje m´ıt pojmenov´any dvˇe tabulky stejnˇe, a to ani napˇr´ıˇc r˚uzn´ymi datab´azemi), atributy neboli sloupeˇcky jsou t´eˇz v´ystiˇznˇe pops´any a u modelu vid´ıme i jejich datov´y typ s maxim´aln´ı povolenou d´elkou znak˚u. Tabulky jsou vz´ajemnˇe propojeny relacemi ve standardu Crow’s Foot [13]. Lze tedy vyˇc´ıst, ˇze distributor spravuje v´ıce da- tab´az´ı a zaˇr´ızen´ı, ale kaˇzd´a datab´aze resp. zaˇr´ızen´ı spad´a pod jednoho distributora, zpr´avy (dotazy do KMB pro zaloˇzen´ı nov´e datab´aze) maj´ı sv´eho jasn´eho odes´ılatele, uˇzivatel´e (koncov´ı z´akazn´ıci) spadaj´ı do jedn´e datab´aze.

Obr´azek 5.1: Konceptu´aln´ı model centr´aln´ı datab´aze pro KMB Visio

5.1.2 Uˇ zivatelsk´ e datab´ aze

V naˇsem pˇr´ıpadˇe se mysl´ı ta datab´aze, kter´a uchov´av´a data o namˇeˇren´ych hodnot´ach a dalˇs´ım nastaven´ı dle zmiˇnovan´e specifikace. Jej´ı n´avrh byl jiˇz sloˇzitˇejˇs´ı, jelikoˇz

(24)

se zde pracuje s v´ıce nesourod´ymi datov´ymi typy mˇeˇren´ych veliˇcin. Cel´y v´ysledn´y model je na obr´azku 5.5. Nejzaj´ımavˇejˇs´ımi tabulkami jsou tabulky measurements a measurement raws, kter´e ukl´adaj´ı namˇeˇren´e hodnoty. Nyn´ı bude pops´ano, proˇc a jak se mˇenila jejich struktura.

Verze 1.x

Prvn´ı verze struktury pro ukl´ad´an´ı mˇeˇren´ı dat se skl´adala pouze z jedn´e tabulky, viz obr´azek 5.2, kter´a byla pouze nositelem ´udaj˚u o mˇeˇren´ı. Pokud chtˇel tedy uˇzivatel zobrazit nˇejak´e mˇeˇren´ı, trvalo zpracov´an´ı do v´ysledn´e podoby pˇr´ıliˇs dlouho. Nad ˇr´adky bylo sice uˇzito index˚u [26], nicm´enˇe indexy probl´em s rychlost´ı vˇzdy neˇreˇs´ı.

Nejpomalejˇs´ım ˇcl´ankem procesu z´ısk´an´ı dat bylo aˇz zpracov´an´ı dat na ´urovni apli- kace. SQL dotaz najde historii dat pro konkr´etn´ı zaˇr´ızen´ı a jednu jeho mˇeˇrenou veliˇcinu za posledn´ı dva dny. Jelikoˇz je nad touto kombinac´ı vytvoˇren index, je doba vykon´an´ı poˇzadavku optim´aln´ı. N´aslednˇe je potˇreba proj´ıt mˇeˇren´ı za jeden den a upravit ˇcasovou ˇradu dle konfigurace. K zjiˇstˇen´ı agregace je tˇreba dalˇs´ıho SQL dotazu. Upraven´a data je tˇreba vr´atit ve form´atu JSON, kde kl´ıˇcem je ˇcas mˇeˇren´ı a hodnotou je pole mˇeˇren´ı vˇzdy ve stejn´y ˇcas pro dan´y den. Tato struk- tura v˚ubec neˇreˇs´ı chybˇej´ıc´ı hodnoty v ˇcasov´e ˇradˇe, tud´ıˇz se m˚uˇze st´at, ˇze v´ysledn´a agregace bude obsahovat neplatn´e hodnoty. Uˇzit´ı datov´eho typu varchar nen´ı t´eˇz spr´avn´y zp˚usob (zbyteˇcnˇe zab´ır´a m´ısto v pamˇeti, potˇreba pˇretypov´an´ı na ˇc´ıseln´e typy pˇri matematick´ych operac´ı). Dalˇs´ım probl´emem je rychle rostouc´ı objem ta- bulky - pokud by zaˇr´ızen´ı mˇeˇrilo byt’ jen jednu veliˇcinu za minutu, za cel´y den poˇsle do datab´aze 1440 z´aznam˚u.

Vˇsechny tyto podnˇety vedly tedy k opuˇstˇen´ı od tohoto n´avrhu a ke snaze naj´ıt jin´y zp˚usob ukl´ad´an´ı dat. Dalˇs´ı v´ysledn´y model byl jiˇz propracovanˇejˇs´ı, i tak byl nicm´enˇe st´ale nepouˇziteln´y. Pozornost byla zamˇeˇrena na lepˇs´ı uˇzit´ı datov´ych typ˚u.

Sloupeˇcek value byl smaz´an a pˇribyly dva nov´e, jeden value f loat (pro ˇc´ıseln´e hodnoty), druh´y value text (pro bin´arn´ı pole). Jak n´azev napov´ıd´a, jejich datov´y typ odpov´ıdal postfixu v n´azvu, bylo povoleno hodnoty null, kter´a nezab´ır´a ˇz´adn´e m´ısto v pamˇeti [10], [30]. Postup pro z´ısk´an´ı dat byl obdobn´y jako v pˇredchoz´ım pˇr´ıpadˇe, rozd´ılem bylo pouze vybrat ten ze sloupeˇck˚u, kter´y nenab´yv´a hodnoty null.

V´ysledkem bylo pouze nepatrn´e zmenˇsen´ı velikosti a oˇsetˇren´ı pˇri ukl´ad´an´ı nov´ych hodnot do spr´avn´ych sloupc˚u. ´Uprava je zn´azornˇena na obr´azku5.3

Verze 2.x

Tuto verzi lze povaˇzovat za revoluˇcn´ı, jelikoˇz mnohem l´epe ˇreˇs´ı probl´emy spjat´e s re- alizac´ı pˇredchoz´ıch n´avrh˚u. Poˇr´ad bylo uˇzito tabulky measurement raws z verze 1.0, ale byl nasazen skript, kter´y kontroloval, zda pˇr´ıstroj odeslal celou ˇcasovou ˇradu (1440 hodnot pro jeden den). Pokud ano, byla tato data uloˇzena do tabulky measurements minutes a z tabulky measurement raws byla dan´a ˇrada odstranˇena.

Struktura je na obr´azku5.4 T´ım bylo doc´ıleno, ˇze z p˚uvodn´ıch 1440 ˇr´adk˚u vznikne pouze jeden s mnohem menˇs´ı velikost´ı. ˇCasov´a ˇrada se opˇet transformovala do JSON objektu, kde kl´ıˇcem je ˇcas mˇeˇren´ı, a hodnotu mˇeˇren´a veliˇcina (ukazatel okamˇzikov´e

(25)

Obr´azek 5.2: Prvn´ı verze tabulky pro z´aznam mˇeˇren´ı

Obr´azek 5.3: Druh´a verze tabulky pro z´aznam mˇeˇren´ı

ˇrady), tento objekt byl pot´e php funkc´ı unpack() pˇreveden do bin´arn´ıho pole a uloˇzen do datab´aze. Z´ısk´av´an´ı dat vˇsak st´ale nebylo optim´aln´ı. Doba dotazu byla mnohem rychlejˇs´ı, jelikoˇz ˇcasov´e ˇrady byly br´any z tabulky measurements minutes, pra- covalo se pˇritom pouze se dvˇema ˇr´adky, kter´e bylo tˇreba funkc´ı pack() dek´odovat a agregovat, stejnˇe jako v prvn´ı ˇc´asti. V t´eto verzi byl vyˇreˇsen i probl´em s da- tov´ymi typy hodnot veliˇcin. Tabulka measurement raws obsahovala znovu pouze jeden sloupec value datov´eho typu float. Ukl´ad´an´ı ˇc´ıseln´ych hodnot bylo tedy lo- gicky i koncepˇcnˇe spr´avnˇe. Bin´arn´ı pole byla pˇrevedena do dekadick´e soustavy a t´eˇz uloˇzena do sloupeˇcku value, pro jednoduˇs´ı identifikaci, zda je hodnota ve zm´ınˇen´em sloupci bin´arn´ı ˇci nikoliv, pˇribyl dalˇs´ı sloupec binary, kter´y tuto informaci poskytuje.

Toto ˇreˇsen´ı bylo postupnˇe optimalizov´ano aˇz do v´ysledn´e podoby, kter´a bˇeˇz´ı v po- sledn´ı verzi aplikace (datov´ano k bˇreznu 2018), kde ke kaˇzd´emu zaˇr´ızen´ı zn´ame jeho aktu´aln´ı agregaˇcn´ı interval (v jak´ych ˇcasov´ych ´usec´ıch zobrazovat data uˇzivateli).

Proto bylo navrˇzeno n´asleduj´ıc´ı. Tabulka measurements minutes zmˇenila n´azev na measurements, a byla obohacena o dalˇs´ı dva sloupeˇcky is f ull a group interval.

Ukl´ad´an´ı prob´ıhalo stejnˇe jako v pˇredchoz´ı ˇc´asti - uloˇz´ı se cel´a ˇcasov´a ˇrada s hodno- tou group interval rovnou jedn´e. N´aslednˇe byla tato ˇrada upravena na poˇzadovan´y poˇcet hodnot dle agregaˇcn´ıho intervalu a uloˇzena jako samostatn´y ˇr´adek, s hod- notou group interval podle aktu´aln´ıho nastaven´ı. Pokud je tedy agregaˇcn´ı inter- val roven ˇsedes´ati, ˇcasov´a ˇrada se skl´ad´a pouze z dat namˇeˇren´ych v kaˇzdou celou hodinu jednoho dne. Tato modifikace (neboli pracovnˇe pojmenov´ano merge akce) m˚uˇze opˇet dle konfigurace data ukl´adat bud’ aˇz po pˇrijet´ı vˇsech hodnot za cel´y den, nebo po ˇc´astech. Pokud je pˇrij´ım´a po ˇc´astech, je is f ull nastaven na nulu, v opaˇcn´em pˇr´ıpadˇe na hodnotu jedna. Pokud je ˇrada nekompletn´ı, postupnˇe se do n´ı pˇrid´avaj´ı novˇe dostupn´a data a pot´e, co je pln´a, se pˇr´ısluˇsn´a data smaˇzou z ta- bulky measurement raws. V´ysledn´e sch´ema je na obr´azku 5.5.

Pˇred aplikov´an´ım v´yˇse popisovan´e verze bylo zam´yˇsleno, ˇze by se data rovnou ukl´adala do measurements, ˇc´ımˇz by se tabulka measurement raws, ze kter´e se pr˚ubˇeˇzn´e odmaz´avaj´ı data, v˚ubec nemusela pouˇz´ıvat. Nakonec se tento n´avrh nere-

(26)

alizoval, jelikoˇz by z´aznam pro jednu ˇcasovou ˇradu musel b´yt pˇri kaˇzd´e nov´e hodnotˇe aktualizov´an. Aktualizace by nesla i dalˇs´ı d´ılˇc´ı kroky, poˇc´ınaje pˇrevodem z bin´arn´ı podoby do norm´aln´ıho pole, pˇrid´an´ı nov´e hodnoty a kontrolu na ´uplnost ˇcasov´e ˇrady, pokud by tato byla ´upln´a, agregovat (dˇr´ıve by to nemˇelo smysl) a uloˇzit jako nov´y z´aznam, a v posledn´ı ˇradˇe pˇrev´est do bin´arn´ıho pole a n´aslednˇe uloˇzit. Aˇckoliv by tato verze uloˇzen´ı zab´ırala m´enˇe m´ısta, sn´ıˇzila by se aktu´aln´ı rychlost skriptu, kter´y data modifikuje.

Obr´azek 5.4: Struktura tabulky, co uchov´av´a ˇcasovou ˇradu v jednom ˇr´adku

Obr´azek 5.5: Konceptu´aln´ı model uˇzivatelsk´e datab´aze pro KMB Visio

5.2 NoSQL datab´ aze

Zm´ınˇen´e SQL datab´aze vyˇzaduj´ı pˇresnou strukturu ukl´ad´an´ı dat, dodrˇzov´an´ı norm´aln´ıch forem, ˇci dodrˇzov´an´ı principu ACID. Toto zaˇc´ınalo b´yt postupnˇe nev´yhodn´e vzhle-

(27)

dem k poˇzadavk˚um na modern´ı aplikace (cloud, ˇsk´alovatelnost, grafov´e ukl´ad´an´ı, aj.). D´ıky tˇemto poˇzadavk˚um zaˇcaly vznikat nov´e datab´aze, kter´e se oznaˇcuj´ı jako NoSQL (Not Only SQL). Hlavn´ımi rozd´ıly oproti SQL datab´az´ım je, ˇze nevyuˇz´ıvaj´ı relaˇcn´ı model a struktury pro ukl´ad´an´ı dat. V SQL datab´az´ıch mluv´ıme o tabulk´ach a jejich atributech, kter´e jsou urˇcit´eho datov´eho typu. Existuje nˇekolik model˚u, jak ukl´adat data. Konkr´etnˇe mluv´ıme o tˇechto: kl´ıˇc-hodnota, dokumentov´y model, sloupcov´y model a grafov´y model. Samostatn´ym modelem je i model pro ukl´ad´an´ı ˇcasov´ych ˇrad. Oproti SQL datab´az´ım, kde se pro pr´aci s daty uˇz´ıv´a jazyka SQL, NoSQL datab´aze nemaj´ı ˇz´adn´y standardn´ı jazyk [23].

5.2.1 Ukl´ ad´ an´ı ˇ casov´ ych ˇ rad do MongoDB

Jako v´ysledn´a NoSQL datab´aze byla vybr´ana MongoDB [5]. Jedn´a se o dokumen- tov´y model datab´aze. Dokumentem m˚uˇze b´yt XML ˇci JSON form´at, v principu se jedn´a o rozˇs´ıˇren´y model kl´ıˇc-hodnota, kde hodnotou je pr´avˇe zmiˇnovan´y doku- ment. Vzhledem k ukl´ad´an´ı dat by se vˇsak nab´ızelo uˇzit´ı datab´aze pro ˇcasov´e ˇrady, MongoDB bylo nicm´enˇe vybr´ano hned z nˇekolika d˚uvod˚u. Jednak se jedn´a o nej- pouˇz´ıvanˇejˇs´ı NoSQL datab´azi [2], zm´ınˇen´y JSON dokument je vhodn´y pro v´ysledn´e rozhran´ı (KMB Visio API), kde se takt´eˇz pracuje s JSON objekty. Dalˇs´ım rozhodo- vac´ım faktorem bylo i jednoduch´e napojen´ı datab´azov´eho ovladaˇce do prostˇred´ı La- ravel, viz podkapitola6.3.1. Aˇckoliv tento dokumentov´y model nevyˇzaduje ukl´adat data v pˇredem dan´e struktuˇre, i tak bylo potˇreba se zamyslet, jak nejl´epe ˇcasov´e ˇrady ukl´adat. Jeden n´avrh vych´azel pˇr´ımo ze zdrojov´eho csv, kde kl´ıˇcem byla kom- binace ˇcasu namˇeˇren´ı a identifik´ator zaˇr´ızen´ı. Hodnotou pak n´aslednˇe asociativn´ı pole, kde kl´ıˇcem byla mˇeˇren´a veliˇcina a hodnotou namˇeˇren´y ´udaj. Z´ısk´an´ı dat pro danou veliˇcinu v urˇcit´ych ˇcasech je pak pˇri spr´avnˇe sloˇzen´em dotazu velice rychl´e.

Data nicm´enˇe nejsou tak spolehliv´a a robustn´ı a jsou silnˇe nekonzistentn´ı.

5.3 Shrnut´ı

Rozhodnout se, zda uˇz´ıt SQL ˇci NoSQL datab´azi nen´ı jednoduch´a ot´azka [16]. Vˇzdy z´avis´ı na konkr´etn´ım typu aplikace a mnoˇzinˇe ukl´adan´ych dat. Podle [38] by roz- hoduj´ıc´ım faktorem mˇel b´yt br´an podle ˇcasu odezvy nejˇcastˇeji vykon´avan´eho do- tazu. V t´eto aplikaci jde nejˇcastˇeji o vkl´ad´an´ı nov´ych dat. V MongoDB n´am na to staˇc´ı jedna operace vloˇzen´ı, pro v´ysledn´y datab´azov´y model SQL datab´aze je tˇreba n dotaz˚u, kde n pˇredstavuje poˇcet mˇeˇren´ych veliˇcin pˇrijat´ych v jednom mˇeˇren´ı.

Uloˇzen´ı je tedy v pˇr´ıpadˇe NoSQL jednoduˇsˇs´ı na reˇzii, ovˇsem velikost uloˇzen´ych dat se nˇekolikan´asobnˇe zvˇetˇsuje. Zrychlen´ı bylo zapˇr´ıˇceno i t´ım, ˇze se zde nekon- troluj´ı datov´e typy, tud´ıˇz pro bin´arn´ı data nemusela b´yt prov´adˇena konverze do dekadick´e soustavy. Na zpˇetnou anal´yzu (reverse engineering) za ´uˇcelem optimali- zace datab´azov´eho modelu t´eˇz nen´ı MongoDB vhodn´e, jelikoˇz z uloˇzen´ych dat nelze snadno zjistit, jak se struktura mˇenila. Pr´avˇe pro rychle se mˇen´ıc´ı strukturu je Mon- goDB doporuˇcovan´e, nicm´enˇe relaˇcn´ımu modelu byl vˇenov´an dostatek ˇcasu a pro aktu´aln´ı verzi aplikace je br´an jako dostateˇcn´y.

(28)

6 Principy a technologie pro v´ yvoj webov´ ych sluˇ zeb a aplikac´ı

V´ysledn´e rozhran´ı m´a b´yt implementov´ano jako webov´a sluˇzba. Webov´a sluˇzba je urˇcena pro v´ymˇenu dat mezi klientem a n´ı, dle pˇredem dan´ych pravidel. Pravidly mo- hou b´yt napˇr´ıklad struktura a form´at pˇren´aˇsen´ych dat, zp˚usob autentizace uˇzivatel˚u, uˇzit´ı pˇrenosov´eho protokolu. Jsou dva pˇr´ıstupy, jak vytv´aˇret webov´e sluˇzby [25].

Prvn´ı moˇznost´ı je vyuˇz´ıt SOAP protokolu, kter´y je v dneˇsn´ı dobˇe jiˇz zastaral´y, ale i tak poˇr´ad hojnˇe pouˇz´ıvan´y. Druhou moˇznost´ı je vyuˇz´ıt pˇr´ıstupu architektury REST neboli RESTfull [31]. Vybrat vhodnou technologii je opˇet z´aleˇzitost´ı poˇzadavk˚u na v´yslednou aplikaci, ale i zde existuje p´ar doporuˇcen´ı, podle jak´ych krit´eri´ı ˇreˇsen´ı vybrat. SOAP vlastnˇe definuje, jak k´odovat hlaviˇcku HTTP a soubor XML, aby si dva r˚uzn´e programy mohly mezi sebou vymˇeˇnovat informace. Zpr´ava (envelope) se skl´ad´a z hlaviˇcky (head) a tˇela (body). Obdobou SOAPu je RPC komunikace, t´eˇz re- alizovan´a HTTP protokolem. Kromˇe v´ymˇeny dokument˚u lze volat i vzd´alen´e funkce programu beˇz´ıc´ıho na serveru. REST architekturu jako prvn´ı definoval Roy Fielding (jeden ze spoluzakladatel˚u HTTP protokolu) ve sv´e disertaˇcn´ı pr´aci ”Architectu- ral Styles and the Design of Network-based Software Architectures”[14]. V´ysledn´e API bˇeˇz´ı na t´eto architektuˇre z toho d˚uvodu, ˇze se zde nemus´ı vyuˇz´ıvat XML pro v´ymˇenu obsahu zpr´av a je l´epe vyuˇzito HTTP protokolu. Posledn´ım d˚uvodem je i velik´e mnoˇzstv´ı tutori´al˚u pro tvorbu rozhran´ı nad touto architekturou.

6.1 HTTP protokol

HTTP (HyperText Transfer Protocol) je aplikaˇcn´ı protokol, d´ıky kter´emu spolu m˚uˇzou komunikovat klient a server. Protokol je jak´ysi pˇredpis pro zp˚usob v´ymˇeny dat mezi zmiˇnovan´ymi stranami. Dotaz, kter´y odes´ıl´a klient na server, se naz´yv´a request, odpovˇed’ ze serveru pro klienta je response. Jedn´a se o bezstavov´y protokol - server nerozpozn´a, jestli komunikuje st´ale s jedn´ım a t´ım sam´ym klientem, nebo dotazy na nˇej chod´ı od r˚uzn´ych klient˚u. Stavov´y protokol je napˇr´ıklad protokol SMTP, kde je spojen´ı otevˇren´e po celou dobu komunikace. V´yhody bezstavov´eho protokolu jsou jednoduchost na pouˇzit´ı a niˇzˇs´ı n´aklady na reˇzii pro obˇe strany.

V dalˇs´ıch ˇc´ast´ı t´eto podkapitoly se opˇet zamˇeˇruji pouze na kl´ıˇcov´e ˇc´asti, zejm´ena v souvislosti s REST architekturou [15].

(29)

6.1.1 Metody

Komunikace klienta se serverem mus´ı prob´ıhat podle pˇredem dan´ych pravidel. Jedn´ım z tˇechto pravidel je komunikovat skrze metody, podle kter´ych server jednoznaˇcnˇe urˇc´ı, co klient vyˇzaduje a co m´a s daty udˇelat. V kontextu s v´yvojem REST aplikac´ı se nˇekdy m´ısto pojmu metoda uˇz´ıv´a slovo verb - tento v´yraz je mnohem v´ystiˇznˇejˇs´ı.

RFC definuje pro HTTP nˇekolik metod, mezi hlavn´ı se ˇrad´ı POST (vytvoˇren´ı nov´eho zdroje), GET (z´ısk´an´ı dat o konkr´etn´ım zdroji), PUT (modifikace dan´eho zdroje), DELETE (smaz´an´ı dan´eho zdroje). Je-li k dispozici tato sada, d´a se nad nimi stavˇet aplikace, kter´a plnohodnotnˇe podporuje CRUD operace [39]. Mezi dalˇs´ı metody patˇr´ı i tˇreba HEAD, OPTIONS, CONNECT a TRACE. S RFC 5789 pˇriˇsly i metody PATCH, LINK a ULINK. Metody lze dˇelit na bezpeˇcn´e a idempotetn´ı, kde pro bezpeˇcn´e metody plat´ı, ˇze by nemˇely mˇenit data na serveru a odpovˇed’ by mˇela b´yt vˇzdy stejn´a. Pokud bude vol´ana metoda GET nad konkr´etn´ım zdrojem, vr´acen´a odpovˇed’ bude vˇzdy stejn´a, t´ımto tvrzen´ım je GET z´aroveˇn i idempotetn´ı meto- dou. Naopak neidempotetn´ı metodu je tˇreba POST - pˇri vytvoˇren´ı nov´eho zdroje se stejn´ymi daty budeme dost´avat vˇzdy jinou odpovˇed’, jelikoˇz bude vytvoˇreno v´ıce unik´atn´ıch zdroj˚u, liˇs´ıc´ı se napˇr. o atributy id, created, aj.

6.1.2 Hlaviˇ cka a tˇ elo

Hlaviˇcky jsou ned´ılnou souˇc´ast´ı pro komunikaci skrze HTTP. Informace v nich jsou jak´asi metadata, kter´a pˇresnˇe popisuj´ı, co je obsahem dotaz˚u a odpovˇed´ı.

HTTP uv´ad´ı pˇres 40 hlaviˇcek, v pˇr´ıpadˇe potˇreby si mohou program´atoˇri vytvoˇrit svoje vlastn´ı. Hlaviˇcky, se kter´ymi se lze nejˇcastˇeji setkat, jsou: Accept, Accept- Charset,Allow, Authorization, Cache-Control,Content-Type, Location. Tˇelo zpr´avy nebo-li body m˚uˇze nab´yvat r˚uzn´ych form´at˚u (JSON, XML, HTML, prost´y text, . . . ). Jedn´a se o konkr´etn´ı data, kter´a si vymˇeˇnuje klient se serverem, pokud je uˇzito HTTPS komunikace, nen´ı je tˇreba ˇsifrovat. Hlaviˇcka a tˇelo zpr´avy jsou oddˇeleny jedn´ım pr´azdn´ym ˇr´adkem, v uk´azce 2 je pˇr´ıklad registrace nov´eho uˇzivatele.

POST /kmb-visio-api/public/register HTTP/1.1 Host: localhost

Content-Type: application/json Cache-Control: no-cache

Authorization: Bearer 6ae608ea382f072d12f5f872cd064990

{

"email" : "john@doe.com",

"password" : "9963af2f7748a3df6dd3cc24cc150684a7ba4e03",

"name" : "John Doe"

}

Uk´azka 2: Poˇzadavek na server - registrace nov´eho uˇzivatele

(30)

6.1.3 Zabezpeˇ cen´ı komunikace

Prvotn´ım krokem k zabezpeˇcen´ı je uˇzit´ı HTTPS. Je tvoˇren HTTP a SSL ˇci TLS certifik´atu a zaruˇcuje pˇredevˇs´ım d˚uvˇeryhodnost a integritu pˇren´aˇsen´ych dat mezi klientem a serverem [41]. K tomu vˇsemu uˇz´ıv´a asymetrick´eho ˇsifrov´an´ı [29]. Lara- vel podporuje m´ıt API funkˇcn´ı pouze pˇri uˇzit´ı HTTPS, ˇcehoˇz bylo vyuˇzito. Dalˇs´ı

´

urovn´ı zabezpeˇcen´ı je ovˇeˇrov´an´ı uˇzivatel˚u, kteˇr´ı komunikuj´ı se sluˇzbou, byt’ se jedn´a o pouh´e z´ısk´an´ı dat konkr´etn´ıch zdroj˚u. V nejhorˇs´ım moˇzn´em pˇr´ıpadˇe by mohli i data metodou DELETE mazat.

Autentizace a autorizace uˇzivatel˚u prob´ıh´a nejˇcastˇeji tˇremi moˇzn´ymi zp˚usoby.

Prvn´ım z nich je pomoc´ı Basic Authorization (nˇekter´e zdroje uv´ad´ı i Basic Auth), kde se v kaˇzd´em dotazu odes´ıl´a jm´eno a heslo oddˇelen´e dvojteˇckou zak´odovan´e v Base64. V tomto pˇr´ıpadˇe je nutn´e, aby komunikace bˇeˇzela na protokolu HTTPS, jinak by pˇri ´utoku Main in the Middle mohlo doj´ıt k z´ısk´an´ı tˇechto citliv´ych ´udaj˚u.

Pˇri pˇrijet´ı requestu server ´udaje dek´oduje a ovˇeˇr´ı, zda poˇzadavek pˇrijme ˇci nikoliv.

Dalˇs´ı moˇznost´ı je HMAC autorizace, kde obˇe strany znaj´ı tajn´y kl´ıˇc, kter´ym ˇsifruj´ı pˇredem dan´y identifik´ator klienta. N´aslednˇe je vytvoˇren otisk (v HMAC se uˇz´ıv´a pojem podpis) hashovac´ı funkc´ı, napˇr. SHA-2 a odesl´ano v autorizaˇcn´ı hlaviˇcce.

Server prvnˇe zjist´ı (z URL, ˇci tˇela zpr´avy), kdo se ho pokouˇs´ı kontaktovat a s´am stejn´ymi kroky jako klient vytvoˇr´ı podpis. Pokud jsou podpisy od klienta a od ser- veru shodn´e, server pokraˇcuje ve zpracov´an´ı poˇzadavku. Modern´ı API dnes nab´ız´ı autorizaci skrze protokol OAuth2. Pˇri jeho uˇzit´ı si uˇzivatel´e pro komunikaci se ser- verem nemus´ı vytv´aˇret uˇzivatelsk´y ´uˇcet, protoˇze lze vyuˇz´ıt sluˇzeb, kter´e OAuth implementuj´ı (Facebook, Github, LindedIn, Shibboleth). Pˇri ´uspˇeˇsn´e autorizaci ser- ver vr´at´ı tzv. API kl´ıˇc s ˇcasovou platnost´ı, kter´ym se uˇzivatel´e autorizuj´ı pˇri dalˇs´ı komunikaci se serverem [19], [22].

6.1.4 Stavov´ e k´ ody

S kaˇzdou odpovˇed´ı, kterou server vrac´ı, pˇrich´az´ı i stavov´y k´od. Jedn´a se o tˇr´ım´ıstn´e ˇc´ıslo, kter´e pˇri spr´avn´em pouˇzit´ı m˚uˇze klientovi ihned zpracovat v´ysledek a nemus´ı se sloˇzitˇe zpracov´avat slovn´ı odpovˇed’. Ke k´odu se pak n´aslednˇe pˇripojuje i jedno- duch´a slovn´ı odpovˇed’, kter´a v´ystiˇznˇe popisuje v´ysledek jak probˇehlo zpracov´an´ı od klienta na serveru. RFC skupiny k´odu urˇcuje pouze na z´akladˇe hodnoty na ˇr´adu stovek. Kaˇzd´y v´yvoj´aˇr si m˚uˇze nadefinovat vlastn´ı k´ody, nicm´enˇe prvn´ı ˇc´ıslice by vˇzdy mˇela odpov´ıdat standard˚um. Informaˇcn´ı zpr´avy jsou ve tvaru 1XX, vyuˇz´ıvaj´ı se pro informov´an´ı klienta, zda server jeho poˇzadavku vyhov´ı. Pokud ano, vr´at´ı tento k´od a klient odeˇsle zpr´avu i s tˇelem. Toto lze vyuˇz´ıt pro zpr´avy, jenˇz maj´ı rozs´ahl´y obsah dat. Pˇr´ıkladem je odesl´an´ı z´aznamu o mˇeˇren´ı, kde je velk´y objem odes´ılan´ych dat. Klient postupuje jako pˇri odes´ıl´an´ı zpr´avy s daty, ale bez nich.

Jsou-li splnˇeny vˇsechny n´aleˇzitosti (platn´e hlaviˇcky), m˚uˇze pot´e odeslat poˇzadavek i s POST daty. Je-li poˇzadavek ´uspˇeˇsn´y (z´ısk´an´ı platn´eho zdroje, pˇrid´an´ı nov´eho, ˇci modifikace), je vracena odpovˇed’ ve tvaru 2XX, kter´a spad´a do skupiny Success

(31)

(tento v´yraz se nepˇrekl´ad´a, ale m˚uˇzeme ˇr´ıct, ˇze se jedn´a o ´uspˇeˇsn´e stavy). Spolu se stavov´ymi k´ody jsou d˚uleˇzit´e i pˇrijat´e hlaviˇcky, protoˇze dalˇs´ı skupina Redirect, pˇrekl´adan´a jako Pˇresmˇerov´an´ı (3XX), v hlaviˇcce Location obsahuje informaci, kam byl dan´y zdroj pˇrem´ıstˇen, napˇr. zmˇenou struktury API. Pˇresmˇerovac´ı k´od slouˇz´ı i pro ozn´amen´ı, ˇze dan´y zdroj nebyl od posledn´ıho poˇzadavku zmˇenˇen. Tyto stavy je dobr´e pouˇz´ıvat, pokud chceme klient˚um umoˇznit ukl´adat si zdroje do nˇejak´e formy mezipamˇeti (cache). V tomto pˇr´ıpadˇe se nab´ız´ı uloˇzen´ı do souboru v JSON form´atu, tak jako jej vrac´ı sluˇzba. Uˇzivatelsk´e chyby (4XX) jsou vraceny na z´akladˇe chybnˇe zaslan´eho poˇzadavku na server. Nejzn´amˇejˇs´ı chybou, se kterou pˇriˇsla do styku t´emˇeˇr vˇetˇsina uˇzivatel˚u webov´ych sluˇzeb a aplikac´ı, je 404 Not Found, kter´a infor- muje, ˇze na dan´e adrese se zdroj nenach´az´ı. Mezi uˇzivatelsk´e chyby patˇr´ı i pˇr´ıstup ke zdroji nepovolenou HTTP metodou (405), kde by se v optim´aln´ım pˇr´ıpadˇe mˇel v hlaviˇcce Allow vr´atit seznam dovolen´ych metod. D´ale chybov´a autorizace (401), chybn´y form´at odes´ılan´ych dat (415) nebo odesl´an´ı mnoho poˇzadavk˚u v kr´atk´em ˇcase (429). Posledn´ı skupinou stavov´ych k´odu (5XX) jsou chyby vznikl´e na serveru, nejzn´amˇejˇs´ı je stav 500, intern´ı chyba serveru.

6.2 Webov´ e aplikace

V´ysledn´e ˇreˇsen´ı je implementov´ano jako webov´a aplikace (sluˇzba). Webov´a aplikace bˇeˇz´ı v oknˇe prohl´ıˇzeˇce a komunikuje po protokolu HTTP, viz. sekce 6.1. V´yhodami jsou ˇz´adn´a instalace a ani aktualizace na stranˇe klienta, uˇzivatelsk´a data jsou pˇritom uloˇzena na produkˇcn´ım serveru, popˇr´ıpadˇe v cloudu. Urˇcit´e fragmenty str´anek lze jednoduˇse sd´ılet pomoc´ı konkr´etn´ıho url. Nev´yhodami je nutnost neust´al´eho pˇripojen´ı k internetu, r˚uzn´e podpory pro prohl´ıˇzeˇce a r˚uzn´e velikosti zobrazovac´ıch zaˇr´ızen´ı.

Nˇekter´e prohl´ıˇzeˇce ukl´adaj´ı data v mezipamˇeti (cache) kv˚uli zv´yˇsen´ı rychlosti naˇc´ıt´an´ı, napˇr. javascriptov´e soubory, a pˇri zmˇenˇe j´adra aplikace se klientovi nemus´ı zmˇeny ihned projevit. D´ale je potˇreba m´ıt na pamˇeti i konfiguraci serveru - pokud pouˇzijeme framework vyuˇz´ıvaj´ıc´ı vyˇsˇs´ı verzi PHP neˇz je nainstalovan´a na aplikaˇcn´ım serveru, nemus´ı vˇse stoprocentnˇe fungovat.

6.2.1 Architektura MVC

MVC architektura se ˇrad´ı k n´avrhov´ym vzor˚um pro tvorbu webov´ych aplikac´ı [11].

Tento pattern oddˇeluje logiku (Model) od v´ystupu (View), pˇriˇcemˇz dvˇe vrstvy spo- juje Controller. Zjednoduˇsenˇe lze toto chov´an´ı popsat n´asledovnˇe. Uˇzivatel zad´a url adresu, kter´a skrze router vol´a definovan´y controller pro danou url. Pokud url nee- xistuje, server vr´at´ı chybovou hl´aˇsku, nejˇcastˇeji chyba 404 Not found. Volan´a funkce (kter´a um´ı pˇrej´ımat parametry, jeˇz byly souˇc´ast´ı url) controlleru si vyˇz´ad´a od Mo- delu pˇr´ısluˇsn´a data. Model vˇetˇsinou pracuje s datab´az´ı. Controller data od Modelu zpracuje do podoby vhodn´e pro uˇzivatele a pˇred´a je View (napˇr. html ˇsablona).

Uˇzivateli se vr´at´ı data ve zmiˇnovan´e ˇsablonˇe. Nad MVC lze stavˇet i webov´e sluˇzby.

Pokud by v budoucnu API nemˇelo fungovat jako API, ale jako klasick´a webov´a apli- kace, staˇcilo by pouze routy zapsat do konfiguraˇcn´ıch soubor˚u pro webovou aplikaci

(32)

a vytvoˇrit pˇr´ısluˇsn´e html ˇsablony. MVC pattern ˇr´ık´a, ˇze Model nev´ı, kdo s jeho daty a jak pracuje, podobnˇe tomu je i u View - ten analogicky nev´ı odkud data poch´azej´ı.

6.3 V´ ybˇ er technologi´ı pro v´ yvoj

Tvorba komplexn´ıch webov´ych aplikac´ı se odr´aˇz´ı od znalost´ı jednotliv´ych progra- movac´ıch jazyk˚u a ostatn´ıch moˇznost´ı pro v´yvoj s nimi spojen´ych. Zde je nutn´e m´ıt povˇedom´ı o objektovˇe orientovan´em programov´an´ı v jazyce PHP, umˇet spr´avnˇe a rozumnˇe modelovat datab´aze (k tomu se v´aˇze i znalost jazyka SQL), vˇedˇet co je to HTML, kask´adov´e styly (CSS) a javascript. Vzhledem k tomu, ˇze pˇredchoz´ı zkuˇsenost s tˇemito prostˇredky byla nezbytn´ym pˇredpokladem t´eto pr´ace, nen´ı jim v textu jiˇz vˇenov´ana bliˇzˇs´ı pozornost. Nejkl´ıˇcovˇejˇs´ı f´az´ı pr´ace a cel´eho projektu je bezesporu API ˇc´ast (rozhran´ı pro z´aznam a zpˇetnou reprezentaci dat klient˚um), proto zde bylo nutn´e zvolit co nejlepˇs´ı technologii pro jej´ı n´avrh. Po pˇredchoz´ıch zkuˇsenostech s v´yvojem webov´ych aplikac´ı bylo i zde rozhodnuto vyuˇz´ıt existuj´ıc´ıch framework˚u. Pr´ace s frameworkem umoˇzˇnuje rychl´y v´yvoj aplikace a nen´ı nutno napˇr. ps´at vlastn´ı ˇreˇsen´ı MVC architektury, kter´e je pro vˇsechny aplikace stejn´e.

V´yhody uˇzit´ı frameworku jsou k nalezen´ı zde [24].

V´ysledn´y framework byl zvolen podle toho, aby v sobˇe obsahoval co nejv´ıce modul˚u pro co nejjednoduˇsˇs´ı tvorbu API. Konkr´etnˇe tedy mluv´ıme o:

1. Podpora routov´an´ı pro tvorbu RESTful API.

2. Odpovˇedi ve form´atu json.

3. Implementace autentizace uˇzivatel˚u bez knihoven tˇret´ıch stran.

4. Schopnost pracovat s r˚uzn´ymi typy datab´az´ı (relaˇcn´ı, NoSQL).

5. Dobr´a dokumentace.

Podle hodnocen´ı server˚u Hongiat [24] a Codersye [1], vlastn´ım otestov´an´ım vy- bran´ych ˇreˇsen´ı - Laravel, Nette s addonem Uplaboo ApiRouter a vyzkouˇsen´ım naps´an´ı vlastn´ıho ˇreˇsen´ı s vyuˇzit´ım r˚uzn´ych existuj´ıc´ıch bal´ıˇck˚u se jako vhodn´a volba pro naps´an´ı API jevilo vyuˇzit´ı PHP framework Laravel.

6.3.1 Laravel

PHP framework Laravel vznikl jako open source projekt pod MIT licenc´ı, jehoˇz zakladatelem je Taylor Otwell. Prvn´ı verze je datov´ana k pˇrelomu roku 2011 a 2012 [28]. Detailn´ı pops´an´ı funkˇcnosti a chov´an´ı by zdaleka pˇrekraˇcovalo rozsah t´eto pr´ace, proto byly vybr´any jen nejkl´ıˇcovˇejˇs´ı, jedineˇcn´e vlastnosti oproti ostatn´ım ˇreˇsen´ım ˇc´ast´ı frameworku.

(33)

Composer a instalace

Composer je program, kter´y stahuje knihovny pro projekty postaven´e nad PHP. Jin´e programovac´ı jazyky disponuj´ı podobn´ymi sluˇzbami - Python vyuˇz´ıv´a program pip, NodeJS zase bal´ıˇcek nmp. Oproti tˇemto sluˇzb´am vˇsak Composer stahuje knihovny a z´avislosti vˇzdy pro dan´y projekt, zmiˇnovan´e alternativy pro jin´e jazyky je instaluj´ı glob´alnˇe. Knihovny jsou stahov´any ze vzd´alen´eho serveru Packagist.org, pokud se vˇsak bal´ıˇcek v reposit´aˇri nevyskytuje, lze jej pˇridat do sloˇzky projektu manu´alnˇe.

V obou dvou pˇr´ıpadech pak staˇc´ı zapsat dle poˇzadovan´e syntaxe do konfiguraˇcn´ıho souboru composer.json a spustit proceduru pro aktualizaci bal´ıˇck˚u. T´ımto z´ısk´ame z´akladn´ı kostru projektu. Z Packagist reposit´aˇre se kromˇe samostatn´ych knihoven daj´ı st´ahnout i frameworky, coˇz je jedna moˇznost jak framework z´ıskat. Druh´a - a v´ıce doporuˇcovan´a - moˇznost instalace je pˇr´ımo pˇres sluˇzbu Laravel Installer, kter´a je dalˇs´ı nadstavbou Composeru. Oba pˇr´ıkazy ke staˇzen´ı jsou v n´asleduj´ıc´ı uk´azce zdrojov´eho k´odu:

composer create-project --prefer-dist laravel/laravel nazev_projektu composer global require "laravel/installer"

laravel new nazev_projektu

Uk´azka 3: Instalace Laravel frameworku a projektu

Pr´ace s datab´azemi a knihovna Jenssengers/MongoDB

Dalˇs´ı silnou str´ankou Laravelu jsou jeho pˇr´ıstupy pro pr´aci s datab´az´ı. Konkr´etnˇe jde o datab´azov´e migrace a moˇznost za bˇehu aplikace pouˇz´ıvat r˚uzn´e datab´aze (MySQL, NoSQL). V konfiguraˇcn´ım souboru database.php se do pole connections pˇrid´a dalˇs´ı nastaven´ı pro datab´azi s identifik´atorem, d˚uleˇzit´e je zm´ınit atribut driver (typ datab´aze). Pro MongoDB bylo tˇreba doinstalovat opˇet velice popul´arn´ı bal´ıˇcek Jenssegers/Laravel-mongodb. Bal´ıˇcky t´eto tˇr´ıdy jsou odvozeny od origin´aln´ıch tˇr´ıd ze z´akladn´ı instalace Laravelu, tud´ıˇz pak pˇri pr´aci s datab´az´ı nen´ı nutno rozliˇsovat, s jakou aktu´aln´ı datab´az´ı se pracuje. Staˇc´ı pˇridat pouze promˇennou connections, kter´a odpov´ıd´a identifik´atoru v config/database.php [33]. Migrace jsou sch´emata jednotliv´ych datab´azov´ych tabulek. V´yhoda migrac´ı spoˇc´ıv´a v tom, ˇze danou da- tab´azovou tabulku jednou nadefinujeme, pˇred´ame ji datab´aze (identifik´atory z kon- figuraˇcn´ıho souboru) nad kter´ymi m´a migrace probˇehnout a pˇri spuˇstˇen´ı migraˇcn´ıho skriptu php artisan migrate se dan´e tabulky vytvoˇr´ı. Pˇr´ınosem je i to, ˇze sch´ema da- tab´az´ı je souˇc´ast´ı projektu (coˇz napˇr. Nette nepodporuje) a v pˇr´ıpadˇe, ˇze je projekt verzov´an, lze se jednoduˇse dostat i na souˇcasnou verzi datab´aze.

Routov´an´ı

Mezi z´akladn´ı kameny frameworku - celkovˇe i pro jakoukoliv webovou aplikaci patˇr´ı bezpodm´ıneˇcnˇe router, neboli smˇerovaˇc. Jeho prim´arn´ım ´ukolem je zpracovat url

(34)

'connections' => [

'kmb_visio_main' => [

'driver' => 'mysql',

'host' => '127.0.0.1',

'port' => "3306",

'database' => "22631_kmb_visio_main", 'username' => "root",

'password' => 'root', 'unix_socket' => '', 'charset' => 'utf8',

'collation' => 'utf8_czech_ci',

'prefix' => '',

'strict' => true,

'engine' => null,

], ],

Uk´azka 4: Konfiguraˇcn´ı soubor pro datab´aze

a zavolat pˇr´ısluˇsn´y controller; pokud controller neexistuje, je vr´acena nejˇcastˇeji chyba 404 Not found. V zdrojov´em k´odu5je uk´azka definice dvou rout (v Laravelu).

Prvn´ı je pro pˇrihlaˇsov´an´ı uˇzivatel˚u - pokud je zavolan´y zdroj login() metodou POST, zavol´a se metoda login z controlleru LoginController v jmenn´em prostoru Auth.

Pokud chceme, aby byl zdroj pˇr´ıstupn´y pouze pro autorizovan´e uˇzivatele, vloˇz´ıme pˇr´ısluˇsn´e routy do pomysln´e ob´alky. Pˇri zavol´an´ı druh´eho zdroje v uk´azce je pˇri

´

uspˇeˇsn´em zpracov´an´ı vr´acena historie mˇeˇren´ı s dan´ym s´eriov´ym (unik´atn´ım) ˇc´ıslem.

Chce-li uˇzivatel historii mˇeˇren´ı pouze pro jednu veliˇcinu, odeˇsle poˇzadavek i s pa- rametrem measurand id. D´ıky tomuto z´apisu je moˇzno rychle a snadno pˇrid´avat a upravovat dalˇs´ı routy, napˇr´ıklad zmˇena HTTP metody, ´uprava parametr˚u aj.

Route::post('login', 'Auth\LoginController@login');

Route::group(['middleware' => 'auth:api'], function {

Route::get("devices/{serial_number}/hist/{measurand_id?}",

"MeasurementController@getAllDeviceHistory");

});

Uk´azka 5: Definice rout v prostˇred´ı Laravel

6.3.2 Ostatn´ı n´ astroje

Nette

Nette je dalˇs´ım z php framework˚u, kter´y spad´a pod Nette Foundation a jeho hlavn´ım autorem je David Grudl. Prvn´ı verze byla vyd´ana v roce 2009, je tˇret´ım nejpo- pul´arnˇejˇs´ım frameworkem na svˇetˇe [35]. V ˇCesk´e a Slovensk´e republice se vˇsak jedn´a

(35)

o v˚ubec nejv´ıce rozˇs´ıˇren´y framework, nad kter´ym bˇeˇz´ı spousta aplikac´ı. Kromˇe sa- motn´eho autora se na jeho v´yvoji pod´ıl´ı i ˇsirok´a program´atorsk´a komunita. Jeho sil- nou v´yhodou je, ˇze se skl´ad´a z modul˚u, kter´e funguj´ı nez´avisle na existenci jak´ychkoli jin´ych modul˚u. M˚uˇze se jednat napˇr´ıklad o modul formul´aˇr˚u, ˇsablonovac´ı syst´em Latte, Tracy neboli Ladˇenka pro debugov´an´ı a zpracov´av´an´ı chyb. Tento framework splˇnuje vˇsechny mnou definovan´e podm´ınky, a proto byl vybr´an k naprogramov´an´ı klientsk´e aplikace [18]. Jelikoˇz klientsk´a ˇc´ast nen´ı pro v´yznam t´eto pr´ace tak d˚uleˇzit´a, nebudu zde Nette hloubˇeji popisovat. D˚uvod, proˇc klient nen´ı ps´an ve stejn´em fra- meworku, slouˇz´ı jako demonstrace toho, ˇze se jedn´a o dvˇe naprosto odliˇsn´e aplikace, kter´e spolu nicm´enˇe pˇri spr´avn´em pouˇzit´ı mohou ´uspˇeˇsnˇe komunikovat, aniˇz by pro- gram´ator vˇedˇel, jak bude druh´a strana fungovat. D´ıky tomu lze API pouˇz´ıt naprosto v jak´emkoliv frameworku a dokonce i v aplikac´ıch, kter´e nejspu psan´e v jazyce PHP.

Grafick´e frameworky

Chart.js je javascriptov´a knihovna, kter´a obsahuje nˇekolik r˚uzn´ych typ˚u graf˚u [17].

Knihovna je pod licenc´ı MIT. Vybr´ana byla na z´akladˇe hodnocen´ı serveru [40]. Jako jedno z m´ala open-sourcov´ych ˇreˇsen´ı je tato knihovna plnˇe responzivn´ı a proto byla vybr´ana. Jej´ımi dalˇs´ımi pˇrednostmi jsou jednoduchost pˇri konfiguraci grafu, moˇznost st´ahnout pouze vybran´e grafy (napˇr. sloupcov´y) - coˇz m´a vliv na velikost a t´ım i rychlost naˇc´ıt´an´ı, d´ale pak pro vykreslov´an´ı vyuˇz´ıv´a HTML5 canvas. Semantic UI je css framework, kter´y nab´ız´ı komplexn´ı ˇreˇsen´ı vˇsech komponent, kter´e se bˇeˇznˇe objevuj´ı na webov´e str´ance. Jedn´a se o open-source projekt pod MIT licenc´ı. N´azvy selektor˚u jsou pojmenov´any v pˇr´ıvˇetiv´e formˇe, snaˇz´ı se o co nejlepˇs´ı napodoben´ı lidsk´eho jazyka, coˇz umoˇzˇnuje pˇrehlednost a srozumitelnost ve zdrojov´em k´odu [34].

Stejnˇe jako Nette framework jej vyuˇz´ıv´am pˇres ˇctyˇri roky a vyskytuje se rovnˇeˇz v prvn´ıch pˇeti nejlepˇs´ıch css frameworc´ıch podle hodnocen´ı serveru Hackeroon [37].

Knihovna Guzzle

Klientsk´a ˇc´ast m´a dle specifikace pro pr´aci s daty vyuˇz´ıvat v´yhradnˇe navrˇzen´e roz- hran´ı (KMB Visio), proto bylo tˇreba naj´ıt vhodn´y zp˚usob, jak vnˇe klientsk´e ˇc´asti s t´ımto rozhran´ım komunikovat. ˇReˇsen´ım je knihovna GuzzleHttp, kter´a je velice jednoduch´a na pouˇzit´ı. Nam´ısto programu cURL, kter´y ani nemus´ı b´yt vˇsude nain- stalov´an (jedn´a se o n´astroj pˇr´ıkazov´e ˇr´adky), je i odes´ıl´an´ı http poˇzadavk˚u mnohem jednoduˇsˇs´ı a m´enˇe pracn´e. Umoˇzˇnuje i odes´ıl´an´ı asynchronn´ıch dotaz˚u na server a v pˇr´ıpadˇe zmˇeny v API je ´uprava vol´an´ı v Guzzle jednoduˇsˇs´ı neˇz v cURL [12]. Do Nette existuje pˇr´ımo rozˇs´ıˇren´ı Guzzlette, tato tˇr´ıda vˇsak nebyla vyuˇzita z toho d˚uvodu, ˇze je na Nette z´avisl´a a pokud by byla klientsk´a ˇc´ast implementov´ana v jin´em fra- meworku, musela by se tato mezivrsta naprogramovat znovu.

Postman - n´astroj pro testov´an´ı API

Ani proces n´avrhu API se nevyhnul testov´an´ı, kter´e bylo ned´ılnou souˇc´ast´ı vytvoˇren´ı kvalitn´ı knihovny. Jednou ze z´akladn´ıch moˇznost´ı testov´an´ı je napˇr´ıklad utilitou cURL v pˇr´ıkazov´e ˇr´adce, kter´a nicm´enˇe zaˇcne b´yt ˇcasem nepohodln´a. Pˇri sestavov´an´ı

(36)

dotaz˚u lze lehce doj´ıt k chybˇe, odpovˇedi nejsou pˇr´ıliˇs uˇzivatelsky pˇr´ıvˇetiv´e a nelze snadno prohl´ıˇzet historii request˚u na API. To nav´ıc nejsou jedin´e nev´yhody, a proto bylo pouˇzito programu Postman, kter´y v´yˇse zm´ınˇen´e nedostatky eliminuje [36]. Apli- kace disponuje velice pˇr´ıjemn´ym uˇzivatelsk´ym prostˇred´ım, kter´e lze pouˇz´ıvat jako desktopovou aplikaci, nebo jako rozˇs´ıˇren´ı v prohl´ıˇzeˇci Google Chrome. Dalˇs´ı v´yhodou Postmanu je ukl´ad´an´ı jednotliv´ych dotaz˚u a odpovˇed´ı do kolekc´ı, kter´e se daj´ı sd´ılet mezi dalˇs´ı uˇzivatele k vz´ajemn´emu testov´an´ı naˇseho API.

References

Related documents

Kromˇ e fin´ aln´ı verze, kter´ a komplexnˇ e zpracov´ av´ a veˇsker´ e dan´ e poˇ zadavky, vzni- kala souˇ casnˇ e i verze, kter´ a fungovala bez pouˇ zit´ı detektoru

Ke kaˇ zd´ emu videu pouˇ zit´ emu pˇri testov´ an´ı byly hod- noty poˇ ctu osob, kter´ e proˇsly a poˇ ctu unik´ atn´ıch osob, kter´ e se ve videu objevily tak´ e

Mezi data ukl´ adan´ a do datab´ aze patˇr´ı informace o pool serveru, ke kter´ emu je tˇ eˇ zebn´ı klient aktu´ alnˇ e pˇripojen, informace o dobˇ e tˇ eˇ zby aktu´

Hlavním cílem bakalářské práce je vytvoření uživatelsky přívětivé multiplatformní apli- kace pro jednoduché zobrazování dat z měřicích přístrojů. Uživatel chce mít

Za pˇ redpokladu ´ uspˇ eˇ sn´ eho otestov´ an´ı by n´ asledovalo vyuˇ zit´ı odhadnut´ eho a verifikovan´ eho modelu pro predikci, nebo bliˇ zˇ s´ı anal´ yzu zkouman´

Po vytvoˇ ren´ı jednoduch´ eho regresn´ıho modelu metodou nejmenˇ s´ıch ˇ ctverc˚ u zaˇ c´ın´ a f´ aze statistick´ e verifikace a dalˇ s´ıho testov´ an´ı hypot´ ez

Potlaˇ cov´ an´ı odezvy existuj´ı dva druhy, Network Echo Cancellation (potlaˇ cov´ an´ı odezvy v s´ıt’ov´ ych sign´ alech) a Acoustic Echo Cancellation (potlaˇ cov´

Na z´ akladˇ e minim a maxim porovn´ avan´ ych element˚ u se vyhodnot´ı, zda elementy mohou nebo nemohou m´ıt spoleˇ cn´ y pr˚ unik, pokud elementy nemohou m´ıt spoleˇ cn´