vysoke´ ucˇeni´ technicke´ v brneˇ · 2016-09-29 · android je komplexní open source...

Post on 04-Jun-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

VYSOKE UCENI TECHNICKE V BRNEBRNO UNIVERSITY OF TECHNOLOGY

FAKULTA INFORMACNICH TECHNOLOGIIUSTAV POCITACOVE GRAFIKY A MULTIMEDII

FACULTY OF INFORMATION TECHNOLOGYDEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA

ZAHRADNI POCITAC

BAKALARSKA PRACEBACHELOR’S THESIS

AUTOR PRACE MAREK PODSEDNIKAUTHOR

BRNO 2014

VYSOKE UCENI TECHNICKE V BRNEBRNO UNIVERSITY OF TECHNOLOGY

FAKULTA INFORMACNICH TECHNOLOGIIUSTAV POCITACOVE GRAFIKY A MULTIMEDII

FACULTY OF INFORMATION TECHNOLOGYDEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA

ZAHRADNI POCITACGARDEN COMPUTER

BAKALARSKA PRACEBACHELOR’S THESIS

AUTOR PRACE MAREK PODSEDNIKAUTHOR

VEDOUCI PRACE Ing. PETR MUSILSUPERVISOR

BRNO 2014

AbstraktTato práce se zabývá návrhem a realizací systému ovládání zahradních periferií prostøed-nictvím dotykového displeje mobilního telefonu nebo tabletu. Práce zaèíná seznámením sdostupnými zaøízeními na trhu, programovacími jazyky Java a C++ a platformou Android.Dále je podrobnì rozepsán návrh v¹ech èástí systému a komunikace mezi nimi a výbìr hard-waru pro server. Následnì je popsána implementace a mno¾ina testù, kterými byly aplikacetestovány.

AbstractThis thesis describes design and realization of the system for garden device control via atouch display of a mobile phone or a tablet. Thesis begins with introduction to availablesolutions on market, Java and C++ programming languages and Android platform. Thenthe more detailed design of all parts of the system follows and a description of communi-cation between those parts and the server's hardware selection. Then the implementationand the set of test used for testing follows.

Klíèová slovaZahradní poèítaè, Android, Java, C++, NetBeans, Eclipse, BeagleBoard, TCP server

KeywordsGarden Computer, Android, Java, C++, NetBeans, Eclipse, BeagleBoard, TCP server

CitaceMarek Podsedník: Zahradní Poèítaè, bakaláøská práce, Brno, FIT VUT v Brnì, 2014

Zahradní Poèítaè

Prohlá¹eníXXX

. . . . . . . . . . . . . . . . . . . . . . .Marek Podsedník21. kvìtna 2014

PodìkováníTímto bych chtìl podìkovat svému vedoucímu panu Ing. Petru Musilovi za jeho vedení arady pøi tvorbì bakaláøské práce. Dále bych chtìl podìkovat �rmì Envinet a.s. za zapùjèenípoèítaèe BeagleBoard-xM.

c© Marek Podsedník, 2014.Tato práce vznikla jako ¹kolní dílo na Vysokém uèení technickém v Brnì, Fakultì informa-

èních technologií. Práce je chránìna autorským zákonem a její u¾ití bez udìlení oprávnìní

autorem je nezákonné, s výjimkou zákonem de�novaných pøípadù.

Obsah

1 Úvod 31.1 Struktura práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Zahradní poèítaèe 52.1 Obecnì o zahradních poèítaèích . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Zaøízení na trhu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.1 Gardena C 1060 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2.2 Irritrol PC Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.3 Extol Premium 8876175 . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.4 MobiLinc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2.5 Závìr z prùzkumu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Prostøedky, jazyky a vývojová prostøedí 83.1 OS Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.3 Jazyk C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.4 Vývojová prostøedí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.4.1 NetBeans C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.4.2 Android Development Tools (ADT) . . . . . . . . . . . . . . . . . . 11

4 Hardware 154.1 BeagleBoard-xM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154.2 Pøipojení periferií . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.2.1 USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.2.2 COM port (RS-232) . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.2.3 Analogové I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.2.4 Digitální I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5 Návrh 175.1 Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.1.1 Diagram serverové aplikace . . . . . . . . . . . . . . . . . . . . . . . 185.2 Klient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.3 Úloha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6 Komunikaèní protokol a struktura datových souborù 216.1 Komunikaèní protokol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216.2 Struktura datových souborù . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

6.2.1 Soubor zaøízení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

1

6.2.2 Soubor úloh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

7 Implementace 237.1 Implementace serveru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.1.1 Øe¹ené problémy serveru . . . . . . . . . . . . . . . . . . . . . . . . . 247.1.2 Chyby serveru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

7.2 Implementace klienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247.2.1 Øe¹ené problémy klienta . . . . . . . . . . . . . . . . . . . . . . . . . 257.2.2 chyby klienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

7.3 Implementace GUI klientské aplikace . . . . . . . . . . . . . . . . . . . . . . 26

8 Testy 288.1 Testovací podmínky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288.2 Test rychlosti sta¾ení dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288.3 Test rychlosti zji¹tìní stavu . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

9 Závìr 31

A U¾ivatelské rozhraní 33

2

Kapitola 1

Úvod

Poèítaèová technika se pomalu ale jistì stala nedílnou souèástí ka¾dodenního ¾ivota lidípo celém svìtì. Zaøízení, které je¹tì pøed nìkolika desítkami let zabíraly celé místnostise v dne¹ní dobì bez problému vejdou na stùl nebo do kapsy. Mnoho lidí si ji¾ nedoká¾epøedstavit ¾ivot bez mobilního telefonu. Vývoj se ale nezastavil a na trhu se objevují stáledùmyslnìj¹í zaøízení. V nedávné dobì to byly napøíklad tablety - fùze notebooku a mobil-ního telefonu. Tablet je dobrou ukázkou snahy vyvinout univerzální zaøízení, které v sobìspojuje výhody existujících zaøízení jako jsou kompaktní rozmìry, dlouhá výdr¾ na baterii,dostaèující výkon, velký displej a které zastoupí / nahradí stávající øe¹ení. Lze ho pou-¾ít k pøístupu na internet, sledování �lmù, hraní her, ètení elektronických knih, ale i kekanceláøské práci. Spolu se snahou vyvinout "dokonalé"zaøízení je i snaha minimalizovatèas a úsilí vynalo¾ené na vykonávání ka¾dodenních èinností. V souèasné dobì je aktuálnítrend tzv. "inteligentních domácností". Jedná se o systém správy periferií domácnosti jakoje osvìtlení, teplota, bezpeènostní systém, apod. Podmno¾inou inteligentních domácnostíjsou zahradní systémy, které se specializují na správu zahrady a blízkého okolí. Oproti do-mácím systémùm se více specializují na sbìr dat z rùzných èidel, naplánované úlohy, jako jepravidelné zalévání trávníku v urèitou dobu apod. Vìt¹inou se jedná o zaøízení - velmi jed-noduché poèítaèe, urèené pouze k tomuto úèelu. Cílem této bakaláøské práce bylo vyvinoutsystém - zahradní poèítaè, který by umo¾òoval ovládání zahradních periferií (zavla¾ovaèe,svìtla, apod.) pomocí mobilního zaøízení, jako je napøíklad vý¹e zmínìný tablet nebo mo-bilní telefon a navrhnout a zrealizovat pro tato zaøízení gra�cké u¾ivatelské rozhraní (GUI).

1.1 Struktura práce

Práce je rozdìlena do nìkolika kapitol. Kapitola 2 se podrobnìji zabývá tématem zahrad-ních poèítaèù a souèasnou situací na trhu a dostupností existujících zaøízení. Kapitola 3pojednává o operaèním sytému Android, pro který byla vyvinuta klientská aplikace, imple-mentaèních programovacích jazycích - Java a C++, a vývojových prostøedích pro zmínìnéjazyky. Kapitola 4 se zamìøuje na hardware (server, ke kterému jsou periferie pøipojeny) arùzné zpùsoby pøipojení periferií. Kapitola 5 popisuje návrh samotného zahradního poèí-taèe, rozdìlení na serverovou a klientskou èást, �lozo�i ovládání a princip funkce plánováníúloh a správy zaøízení. Navazující kapitola 6 popisuje struktury datových souborù a návrhkomunikèního protokolu. Kapitola 7 je rozdìlena do dvou hlavních èástí pro serverovoua klientskou èást. Dále dokumentuje implementaci projektu, pou¾itý hardware, konkrétníimplementaci serverové èásti, uchovávání dat, správu klientských zaøízení, konkrétní imple-

3

mentaci klientské èásti. V obou pøípadech jsou uvedeny problémy se kterými jsem se setkalpøi implementaci a pøípadné bugy. V kapitole 8 jsou uvedeny testy, které byly vytvoøeny protestování projektu, podmínky testování a výsledky testù. Kapitola 9 je závìreèné shrnutípráce, vyvození výsledkù z provedených testù a mo¾né pokraèování v práci. Dále jsou je¹tìuvedeny odkazy na pou¾itou literaturu a pøílohy.

4

Kapitola 2

Zahradní poèítaèe

Tento kapitola pojednává o stávajících øe¹eních na trhu zahradních poèítaèù a zavla¾ovacíchsystémù. Kapitola je rozdìlena do dvou èástí. První pojednává obecnì o situaci na trhuzavla¾ovacích poèítaèù, v druhé èásti jsou vybrána konkrétní zaøízení, která mají významnézastoupení na trhu nebo nabízí zajímavé øe¹ení. U ka¾dého zaøízení je podrobnìji rozebránajeho technická speci�kace, mo¾nost pøipojení rùzných senzorù a ostatních periferií a výhodya nevýhody konkrétního øe¹ení.

2.1 Obecnì o zahradních poèítaèích

Na trhu se vyskytuje mnoho druhù zaøízení od rùzných výrobcù v cenových kategoriíchod nìkolika stovek korun a¾ k cenám blí¾ícím se k hranici deseti tisícùm korun. Zaøízeníjsou rùznì funkènì vybavená pøièem¾ úroveò vybavenosti je vìt¹inou pøímo úmìrná cenì.Existují jednoúèelová zaøízení slou¾ící pouze k nastavení základních zavla¾ovacích programùovládaná prostøednictvím malých LCD displejù a minimem tlaèítek. Dále je mo¾né poøíditsi zaøízení, ke kterému lze pøipojit èidla pro mìøení vlhkosti apod. nebo pokroèilé systémy,které èasto umo¾òují pøipojení dodateèných modulù a mohou být kon�gurovány napøíkladz poèítaèových aplikací pro Windows, Android nebo iOS, v nìkterých pøípadech i ze speci-álních Linuxových distribucí. Zaøízení s sebou pøiná¹í, ale i mno¾ství kompromisù ? hlavnínevýhodou èasto bývá nepøíli¹ pøívìtivé ovládání.

2.2 Zaøízení na trhu

Následuje pøehled významných zaøízení na trhu.

2.2.1 Gardena C 1060

Patrnì nejroz¹íøenìj¹í na èeském trhu jsou zavla¾ovací poèítaèe znaèky Gardena. Pro srov-nání jsem vybral model C 1060. Zaøízení je vybaveno jednoduchým LCD displejem a ovládáse tøemi tlaèítky a jedním otoèným kno íkem. Dále lze nastavit individuální program projednotlivé dny. Je mo¾no nastavit a¾ 6 zavla¾ování za den, pøièem¾ maximální délka jed-noho zavla¾ování je 9 hodin 59 minut. Zavla¾ovací poèítaè mù¾e ovládat a¾ ¹est pøípojnýchpøístrojù s automatickým rozdìlovaèem vody. Zaøízení je napájeno vestavìnou baterií do-bíjenou solárními èlánky a lze k nìmu pøipojit de¹»ový senzor nebo èidlo pùdní vlhkosti.

Výhody:

5

• robustní provedení

• dobøe vyøe¹ené napájení

Nevýhody:

• nepøíli¹ komfortní ovládání obzvlá¹» ve spojení s relativnì nepøehledným displejem

• vysoká cena

2.2.2 Irritrol PC Control

Firma nabízí ¹irokou ¹kálu zahradních poèítaèù rùzných cenových kategorií. Zahradní sys-tém je tvoøen nìkolika zaøízeními v závislosti na zakoupené sadì. Nejdra¾¹í sada (PCW-12-EXT-PAK) obsahuje zavla¾ovací poèítaè s mo¾ností pøipojení de¹»ového a mrazovéhosenzoru a mo¾ností základního ovládání venkovního osvìtlení. Sada dále obsahuje vysíla-èku pro vzdálené ovládání systému, která je vybavena malým LCD displejem a nìkolikatlaèítky. Jedna stanice mù¾e naráz ovládat a¾ 12 zavla¾ovaèù. Spojením nìkolika zaøízenílze vybudovat sít o velikosti a¾ 48 zavla¾ovaèù. Zaøízení mù¾e být napájeno z výmìnnébaterie nebo pøímo z elektrické sítì. Kon�gurace zavla¾ovacích programù apod. mù¾e býtprovedena z dálkového ovládání nebo z aplikace pro stolní poèítaè poskytované spolu sezaøízením. Pro kon�guraci je potøeba pøipojit dálkové ovládání k PC prostøednictvím USBkabelu.

Výhody:

• mo¾nost kon�gurace zaøízení z PC

Nevýhody:

• pøíli¹ jednoduchý displej dálkového ovládání

• vysoká cena

2.2.3 Extol Premium 8876175

Jedná se o jednoduché jednoúèelové zaøízení. Kon�gurace zaøízení a zavla¾ovacích programùje provádìna prostøednictvím malého LCD displeje a nìkolika tlaèítek. Zavla¾ování mù¾ebýt naplánováno na libovolné dny v týdnu a lze nastavit i jeho délku. Zaøízení je napájenoètyømi bateriemi. Není mo¾né k nìmu pøipojit ¾ádné dodateèné senzory.

Výhody:

• nízká cena

Nevýhody:

• omezené mo¾nosti

• nízká odolnost

6

2.2.4 MobiLinc

MobiLinc je aplikace pro Android a iOS, která kromì ovládání zavla¾ování a osvìtlení zvládái ostatní domácí zaøízení jako jsou gará¾ová vrata, termostaty apod. - jedná se tedy o uni-verzální aplikaci. Základem je zaøízení, ke kterému lze pøipojit a¾ 256 periferií a ovládat jenapøíklad z mobilního telefonu nebo tabletu. Zaøízení je mo¾né pøipojit do sítì prostøednic-tvím ethernetového kabelu a lze k nìmu pøipojit senzory pro detekci pohybu, uzavøení dveøínebo unikající vody. Pro samotné ovládání zavla¾ování je tøeba dokoupit samostatný mo-dul (EZFlora Irrigation Controller), který umo¾òuje nastavit rùzné zavla¾ovací programy aovládat a¾ osm vodovodních ventilù.

Výhody:

• univerzální systém

• snadné ovládání

Nevýhody:

• neposkytuje tolik mo¾ností jako specializované zaøízení

• velmi vysoká cena

2.2.5 Závìr z prùzkumu

Hlavním problémem bývá neintuitivní ovládání, pøíli¹ná komplikovanost a u¾ivatelská ne-pøívìtivost. Vìt¹ina zaøízení je také orientována pouze na ovládání zavla¾ování (resp. jinouoblast ovládání zahradních periferií) a pokud chcete zároveò plnohodnotnì ovládat napø.osvìtlení a zavla¾ování, jste nuceni si poøídit více samostatných zaøízení. Vìt¹ina zaøízeníneumo¾òuje mìøení stávající situace v zahradì (de¹»ové senzory, apod.), zpìtná vazba na-pøíklad v podobì senzoru vlhkosti pùdy není ani zdaleka samozøejmostí.

Na trhu je stále spousta místa pro konkurenèní zaøízení, co¾ také dokazují neustálevznikající nová øe¹ení.

7

Kapitola 3

Prostøedky, jazyky a vývojováprostøedí

Tato kapitola pojednává o prostøedcích pou¾itých pøi vývoji projektu. První èást kapitolyse zabývá operaèním systémem Android, na kterém pobì¾í klientská aplikace, která budeu¾ivateli slou¾it k ovládání zaøízení. Dal¹í èást kapitoly je vìnovaná popisu programovacíchjazykù a vývojových prostøedích.

3.1 OS Android

Android je komplexní open source platforma zahrnující v sobì operaèní systém, middleware,u¾ivatelské rozhraní a aplikace. [2] Android je vyvíjen uskupením Open Handset Alliance,které je tvoøeno �rmami jako Google, HTC, Intel, NVIDIA atd. Cílem tohoto uskupeníbylo vyvinout otevøený standard pro mobilní zaøízení.[1] Vývoj zaèal v øíjnu roku 2003,kdy skupina lidí vedená Andym Rubinem v Kalifornii zalo¾ila spoleènost Android Inc. Odva roky pozdìji byla spoleènost odkoupena �rmou Google Inc. a tým pod vedením AndyhoRubina vyvinul platformu zalo¾enou na Linuxovém jádøe. 5. listopadu 2007 bylo zalo¾enouskupení Open Handset Alliance a byl pøedstaven Android - open source mobilní platformazalo¾ená na jádøe Linuxu ve verzi 2.6. Eric Schmidt v té dobì prohlásil, ¾e jejich cílem nenípouze vytvoøit Google telefon, ale platformu, kterou bude mo¾né pou¾ít na mnoha rùznýchtelefonních modelech (podobnì jako napøíklad stávající OS pro osobní poèítaèe). O týdenpozdìji bylo uvedeno Android SDK pod licencí open source. Vize Erica Schmidta se vyplnila- v dne¹ní dobì je OS Android na vìt¹inì chytrých telefonù.

Model operaèního systému Android je tvoøen pìti vrstvami. Obecnì je Android OS kon-cipován podobnì jako klasické operaèní systémy pro stolní poèítaèe. Nejni¾¹í vrstvu tvoøíjádro. Jedná se o mezivrstvu mezi hardwarem a vy¹¹ími vrstvami operaèního systému. Já-dro je zalo¾eno na linuxovém jádøe ve verzi 2.6. Novìj¹í verze Androidu vyu¾ívají novìj¹íverze linuxového jádra. Je vyu¾ito mnoha vlastností Linuxu, jako napøíklad správa sítí,podpora správy pamìti, zabudované ovladaèe nebo multitaskingu. Systém narozdíl od Li-nuxu nepodporuje gra�cké u¾ivatelské rozhraní X Window System nebo úplnou sadu GNUknihoven. Jádro bylo pou¾ito také z dùvodu snadné pøenositelnosti.

Dal¹í vrstvou systému jsou nativní knihovny napsané v jazycích C a C++, které jsouvyu¾ívány rùznými komponentami systému. Dal¹í vrstva, která se také oznaèuje jako An-droid Runtime, obsahuje aplikaèní virtuální stroj pro programovací jazyk Java - DalvikVirtual Machine (DVM).[4] Jedná se o alternativu k standardnímu Java Virtual Machine

8

(JVM), který není narozdíl od jazyka Java volnì ¹iøitelný. Standardní virtuální stroj jetaké nároèný na systémové zdroje, co¾ je dal¹í dùvod, proè nebyl pou¾it. Z jazyka Javabyly pro pou¾ití na Androidu odstranìny knihovny pro gra�cké u¾ivatelské rozhraní prostandradní OS pro PC - awt (Abstract Window Toolkit) a jSwing, které byly nahrazenyknihovnami pro gra�cké u¾ivatelské rozhraní Androidu. Samotný pøeklad aplikace pro Dal-vik se od pøekladu pro JVM li¹í v dal¹ím mezikroku mezi kódem v Javì a spustitelnouaplikací. Dalvik nejprve kód aplikace napsaný v Javì pøelo¾í do tzv. Java byte kódu pomocístejného kompilátoru, který je pou¾íván pøi pøekladu Java aplikací. Ten je následnì pøelo¾enpomocí Dalvik kompilátoru do Dalvik byte kódu, který je poté spu¹tìn na DVM. Ka¾dáspu¹tìná Android aplikace má svùj vlastní proces a vlastní instanci DVM. Dal¹í vrstvouje Application framework, která je nejdùle¾itìj¹í pro vývojáøe aplikací pro Android. Po-skytuje pøistup k slu¾bám, které mohou být pou¾ity pøímo v aplikaci. Jedná se napøíklado zpøístupòování dat v jiných aplikacích, pøístupu k prvkùm u¾ivatelského rozhraní, prácise stavovým øádkem (stav baterie, hodiny, upozornìní od aplikací, apod.), aplikace bì¾ícína pozadí (napøíklad budík, naplánované události v kalendáøi, . . .), hardware zaøízení nakterém operaèní systém Android bì¾í atd. Základní sada slu¾eb zahrnuje:

• Activity manager: øídí bìh aplikací

• Noti�cation manager: umo¾òuje aplikaci vyu¾ívat stavový øádek pro zobrazování upo-zornìní

• Content provider: pøístup k obsahu jiných aplikací

• Resource manager: pøístup k datovým souborùm, gra�ce, textùm, apod.

• Prvky View: jedná se o analogii komponent (napø. Delphi nebo jSwing v Javì), jsouzde tlaèítka, labely, textová pole, comboboxy, atd.

Poslední vrstva je tvoøena základními aplikacemi. Jedná se o aplikace jako SMS program,kontakty, program pro volání, prohlí¾eè, e-mailový klient a dal¹í aplikace. Aplikace jako SMSnebo kontakty døíve tvoøily nemìnnou souèást mobilních telefonù.

Operaènímu systému Android pravidelnì vychází nové verze. Pro aktualizaci na novìj¹íverzi bylo u star¹ích verzí Androidu nutné pøipojit mobilní telefon k PC prostøednictvímUSB kabelu a pøehrát mu �rmware podobnì jako u sta¹ích telefonù bez Androidu. Novìj¹íverze Androidu u¾ si doká¾í aktualizace stáhnout samy, podobnì jako jako operaèní systémyna PC.

3.2 Java

Java je tøídnì zalo¾ený objektovì orientovaný jazyk. Díky své pøenositelnosti je pou¾ívánna velkém mno¾ství rùzných druhù zaøízení - od èipových karet, pøes sí»ové prvky jakojsou routery, a¾ po mobilní zaøízení a stolní poèítaèe.[5] Jazyk byl vyvinut �rmou SunMicrosystems, která jej pøedstavila 23. kvìtna roku 1995. Dne 8. kvìtna roku 2007 bylaJava uvolnìna jako open source. Existuje nìkolik edicí Javy, v závislosti na cílovém zaøízení[7]:

• Java ME (Micro Edition) - vestavìné zaøízení

• Java SE (Standard Edition) - osobní poèítaèe

9

• Java EE (Enterprise Edition) - rozsáhlé systémy pracující na nìkolika vzájemnì spo-lupracujících poèítaèích

Syntaxe jazyka vychází z jazykù C a C++ a dále ji rozvíjí o dal¹í mo¾né zápisy kon-strukcí. Vzhledem k tomu, ¾e je jazyk objektovì orientovaný, jsou v¹echny datové typytvoøeny objekty (s vyjímkou osmi základních datových typù). Java je intepretovaný ja-zyk - zdrojový kód napsaný v jazyce Java se nepøekládá do zdrojového kódu závislého nakonkrétní architektuøe, ale do bajtkódu, který je poté interpretován JVM bì¾ícím na kon-krétní platformì. Výsledný bajtkód je tedy pøenositelný mezi JVM bì¾ícími na rùznýcharchitekturách. Døíve se na cílové platformì Java bajtkód pøekládal do strojového kóduarchitektury. To zrychlilo vykonávání programù, ale znaènì zpomalilo jejich start. Nyní sepou¾ívá HotSpot compiler, který pøekládá do strojového kódu jenom èasto pou¾íváné èástiprogramu. Java neumo¾òuje pou¾ívání ukazatelù (pointerù), pøíkazu goto (ten se nedopo-ruèuje pou¾ívat ani u jazyku ni¾¹í úrovnì jako je napøíklad jazyk C) nebo správu pamìti. Otu se stará tzv. Garbage Collector. Programátor v Javì tedy nemusí uvolòovat alokovanoupamì», Garbage Collector ji uvolní, jakmile se pøestane pou¾ívat. Odpadává tak potøebakontroly uvolòování pamìti programátorem, co¾ bylo zdrojem èastých chyb. I tak je v¹akmo¾né v Javì zpùsobit pamì»ový únik (memory leak), spí¹ ale úmyslnì programátorem,který zná pøesnou funkènost GC.

Java podobnì jako C++, Delphi nebo napø. C s posixovými vlákny umo¾òuje vývojvícevláknových aplikací. Mezi hlavní nevýhody Javy patøí její vy¹¹í nároènost na zdrojepoèítaèe. Tento problém je obzvlá¹» viditelný u men¹ích aplikací, kde pamì»ové nároky JVMnejsou oproti aplikaci zanedbatelné. Mezi dal¹í výhody patøí absence bezznaménkových typù(unsigned) a preprocesoru, který se dá napøíklad v jazyce C øídit pomocí rùzných direktiv.

3.3 Jazyk C++

Jazyk C++ vyvinul roku 1983 Bjarne Stroustrup jako nadstavbu jazyka C. Spoleènì sjazykem Java patøí mezi nejpou¾ívanìj¹í programovací jazyky. Konstrukènì vychází z jazykaC, do kterého pøidává mo¾nost pou¾ítí tøíd. Narozdíl od jazyka Java není pou¾ití tøíd vjazyce C++ povinné - kód lze psát do funkce main podobnì jako v jazyce C. Jazyk C++obsahuje 9 primitivních datových typù + 5 bezznaménkových variant. Dal¹í souèástí jazykajsou ¹ablony, které roz¹iøují znovupou¾itelnost kódu tím, ¾e umo¾òují psát algoritmy bezurèeného datového typu. Jazyk C++ podobnì jako Java umo¾òuje de�novat více funkcíse stejným jménem li¹ící se poètem nebo datovými typy parametrù. Pøi volání funkce sevybere ta s odpovídajícími parametry. Narozdíl od Javy nepou¾ívá Garbage Collector, tak¾espráva pamìti je plnì v re¾ii programátora.

3.4 Vývojová prostøedí

Následující podkapitola se zabývá pou¾itými vývojovými prostøedími pøi práci na projektu.

3.4.1 NetBeans C++

Jedná se o open source IDE (vývojové prostøedí) napsané v Javì.[6] Je mo¾né ho provozovatna ruzných operaèních systémech jako je Microsoft Windows, Linux, OS X nebo Solarisu.Vývoj zaèal v roce 1996 na Karlovì univerzitì v Praze. V roce 1997 Roman Stanìk vytvoøilspoleènost a zaèal NetBeans IDE prodávat. V roce 1999 byla �rma koupena spoleèností

10

Sun Microsystems a NetBeans IDE bylo o rok pozdìji uvolnìno jako open source. V roce2010 byla spoleènost Sun Microsystems koupena Oraclem a spoleènì s ní i NetBeans IDE.NetBeans je v tomto projektu pou¾ito na vývoj aplikaci v C++, proto¾e umo¾òuje meziplatformní (Windows - Angstrom Linux) vzdálený pøeklad pøes SFTP. Byla pou¾ita verze7.4, proto¾e novìj¹í verze 8.0 obsahuje bug, kvùli kterému vzdálený pøeklad nefunguje.

Popis vývojového prostøedí NetBeans

Obrázek 3.1: U¾ivatelské rozhraní NetBeans IDE.

V levé èásti okna prostøedí se nachází Project Inspector, kde je seznam aktivních pro-jektù. Dolní èást okna zabírají zálo¾ky obsahující konzolový výstup. Zobrazuje se zde postuppøekladu aplikace, popøípadì chyby, pokud se projekt nepodaøilo pøelo¾it. Pokud se jednáo konzolovou aplikaci, zobrazuje se zde i její výpis. V horní èásti je stejnì jako u vìt¹inyokenních aplikací menu, které slou¾í pro nastavení vývojového prostøedí a spou¹tìní funkcí.Pod ním se nachází nástrojová li¹ta pro práci s projektem. Zde lze spou¹tìt pøeklad pro-jektu, ladìní, atd. Pro mo¾nost vzdáleného pøekladu je potøeba nastavit tzv. remote host(vzdálený cíl). Toho dosáhneme nastavením cíle ve vlastnostech konkrétního projektu.

3.4.2 Android Development Tools (ADT)

Jedná se o plugin do vývojového prostøedí Eclipse. Na stránkách Androidu je mo¾né si hostáhnout vèetnì Eclipse IDE, v kterém je u¾ plugin nainstalován, a SDK a AVD Manageru.

SDK Manager SDK Manager je aplikace slou¾ící ke správì:

• SDK

11

• nástrojù pro pøeklad

• podpùrných knihoven

• knihoven zpìtné kompatibility

• sta¾ení jednotlivých API pro rùzné verze Androidu

• podpory pro ARM a Atom procesory

• ovladaèe USB, atd.

• slu¾eb Google Play

Prostøednictvím toho programu lze vybrat po¾adované balíèky a zahájit jejich sta¾ení.O jejich integraci se postará samotná aplikace.

AVD Manager

AVD Manager slou¾í k vytváøení virtuálních zaøízení s operaèním systémem Android. Navirtuálním zaøízení lze testovat aplikace stejným zpùsobem jako by se jednalo o reálnézaøízení. Programátor buï mù¾e pou¾ít nìkteré s pøedde�novaných virtuálních zaøízení,které emuluje existující tablet/mobilní telefon nebo de�novat nové. U virtuálního zaøízenílze nastavit:

• jméno

• API (verzi OS Android)

• procesor

• velikost pamìti RAM

• velikost vnitøního ulo¾i¹tì

• velikost SD karty (lze pou¾ít i image karty ze souboru)

• . . .

Obecnì je lep¹í pou¾ít skuteèné zaøízení, pokud máme nìjaké k dispozici, proto¾e emu-lace trvá dlouho a zatì¾uje PC, ale jinak se jedná o dobrý zpùsob jak vyzkou¹et bìh aplikacena zaøízení s jinou verzí Androidu pro otestování kompatibility apod.

Popis prostøedí Eclipse s pluginem ADT

Eclipse se dr¾í stejného rozvr¾ení jako NetBeans IDE. V levé èásti je Package Explorer,který obsahuje seznam aktivních projektù. Ka¾dý projekt je tvoøen nìkolika slo¾kami:

• "src"obsahuje v balíècích zdrojové soubory napsané v Javì

• "libs"obsahuje knihovny pøipojené k projektu

• "res"obsahuje zdroje aplikace, které jsou rozdìleny do nìkolika dal¹ích podslo¾ek

12

Obrázek 3.2: U¾ivatelské rozhraní Eclipse IDE s pluginem ADT.

• slo¾ky "drawable-xxx"obsahují obrázky, pou¾ité v aplikaci; ka¾dý obrázek se mù¾evyskytovat v nìkolika rùzných rozli¹eních, z kterých se pou¾ije ten, který bude vyho-vovat rozli¹ení displeje cílového zaøízení

• "layout"obsahuje xml soubory popisující vzhled jednotlivých oken aplikace a kompo-nent

• "menu"obsahuje xml soubor de�nující vzhled hlavního panelu aplikace

• "values-xx"obsahuje soubory s de�novanými textovými a èíselnými konstantami vsouborech xml a styly aplikace

• soubor "AndroidManifest.xml", ve kterém jsou uvedeny nastavení aplikace, jaké po¾a-davky bude mít aplikace na cílové zaøízení (napø. pøístup k síti, pøístup ke kontaktùm,apod.)

Ve spodní èásti aplikace je jsou kromì zálo¾ky Console (viz. NetBeans) je¹tì zálo¾kyProblems, na které se zobrazují problémy a varování týkající se zdrojového kódu a zdrojo-vých souborù (xml, . . .). Dal¹í dùle¾itou zálo¾kou je "LogCat", kde je monitorován celkovýbìh aplikace a stav zaøízení. Zobrazují se zde napøíklad informace o tom, kolik snímkùaplikace nevykreslila, proto¾e byla zaneprázdnìná nìèím jiným, obsah zásobníku v pøípadìneo¹etøení vyjímky, informace o stavu timerù, stisku tlaèítek apod.

V horní èásti obrazovky je menu pro nastavení vývojového prostøedí a pod ním jenástrojová li¹ta, z které lze pøekládat, spou¹tìt a ladit aplikaci. Eclipse automaticky nabídnepøipojené zaøízení s Androidem, pokud je k dispozici, nebo je mo¾né vybrat nìkteré ze

13

seznamu existujících virtuálních zaøízení. Dále lze z nástrojové li¹ty spustit vý¹e zmínìnéSDK a AVD Managery.

14

Kapitola 4

Hardware

Jako hardware na kterém pobì¾í server jsem zvolil BeagleBoard-xM.[3] Pùvodnì mìl serverbì¾et na poèítaèi Odroid-u3, který je témìø po v¹ech stránkách lep¹í ne¾ BeagleBoard-xM.Bohu¾el se v¹ak vyskytnuly technické problémy s jedním z pøídavných modulù a jeliko¾v dobì výbìru hardware byl jediný distributor výrobce (HardKernel), který sídlí v Ji¾níKorei, nestihl by se modul vymìnit vèas.

4.1 BeagleBoard-xM

Jedná se o open source jednodeskový poèítaè navr¾ený spoleèností Texas Instruments.Byl navr¾et malým týmem in¾enýrù za úèelem výuky open source hardwaru a softwaru.BeagleBoard-xM má rozmìry pøibli¾nì 75 x 75 mm a je schopný fungovat jako plnohod-notný poèítaè. Je proto vhodný pro pou¾ití jako domácí server nebo multimediální centrum.Hlavní výhodou oproti vý¹e zmínìnému Odroid-u3 je pøítomnost vìt¹ího mno¾ství portù,zejména pak plnohodnotného COM portu, který lze pou¾ít napøíklad pro kon�guraci zaøí-zení, pøipojení periferií nebo diagnostiku. BeagleBoard-xM je vybaven procesorem AM37x1GHz ARM Cortex-A8 procesorem a 512 MB LPDDR pamìti RAM. BeagleBoard-xM dis-ponuje následujícími konektory:

• ètyøi USB 2.0 porty

• MMC/SD konektor

• DVI-D port

• S-Video port

• USB mini AB konektor

• Ethernetový konektor (RJ-45)

Je dodáván s následujícími operaèními systémy:

• Angstrom Linux (pouze textový re¾im bez GUI)

• Android

• Ubuntu

15

• XBMC

Na funkci serveru bohatì postaèuje vý¹e zmínìný Angstrom Linux. Pokud by mìl býtpou¾it jako napøíklad domácí multimediální centrum nebo jako stolní poèítaè, byl by patrnìvhodnìj¹í Android v prvním pøípadì, popøípadì Ubuntu v druhém pøípadì.

4.2 Pøipojení periferií

Je nìkolik zpùsobù, jak pøipojit k BeagleBoardu zaøízení jako zavla¾ovaèe, svìtla, vlhko-mìry, apod.

4.2.1 USB

Jedná se o sbìrnici, pøes kterou se bì¾nì pøipojují periferie k poèítaèi. Pro pøipojení za-hradních periferií není moc vhodná, proto¾e se taková zaøízení s USB konektory praktickynevyrábí (s vyjímkou USB teplomìrù).

4.2.2 COM port (RS-232)

Sériová linka je co se týèe pou¾ití u osobních poèítaèù na ústupu a bývá nahrazena USBkonektorem. Co se týèe periferií, stále jsou dostupné jednoduché zaøízení jako teplomìry,vlhkomìry a jiná èidla. Mimo rámec zahradních periferií se s sériovým portem vyrábí rùznáPLC, analyzátory apod.

4.2.3 Analogové I/O

Vhodné pro pøipojení jak vstupních tak výstupních zaøízení. Je k dispozici mnoho druhùsenzorù pro mìøení rùzných velièin jako je napìtí, proud, vlhkost, intenzita osvìtlení, tep-lota, apod. stejnì jako velké mno¾ství výstupních zaøízení. Nevýhodou je, ¾e se analogovévstupy vìt¹inou nachází jen ve formì pøídavného modulu, který je potøeba k poèítaèi pøi-pojit napøíklad pomocí vý¹e zmínìné sériové linky nebo USB portu.

4.2.4 Digitální I/O

Hlavní výhodou digitálních vstupù a výstupù je, ¾e ve vìt¹inì pøípadù jsou dostupné pøímona na desce poèítaèe a obvykle v dostateèném mno¾ství. Opìt je k dostání spousta vstup-ních i výstupních periferií. Nevýhodou je, ¾e na vstupu mù¾e být pouze logická nula nebologická jednièka. Tento problém lze obejít pou¾itím více digitálních vstupù (a pøípadnìdekodéru), èím¾ mù¾eme simulovat více druhù hodnot nebo pomocí pulznì-¹íøkové modu-lace (PWM). Ve vìt¹inì pøípadù jsou ale dostaèující hodnoty logická 0 a 1. V pøípadì tétopráce jsou pou¾ity pro pøipojení zaøízení právì digitální vstupy. Program v¹ak poèítá i spou¾itím jiných zpùsobù pøipojení periferií. Staèí doimplementovat fyzickou komunikaci sezaøízeními.

16

Kapitola 5

Návrh

Obsahem této kapitoly je podrobný rozbor návrhu práce. Kapitola je rozdìlená do nìkolikasekcí, které se zabívají tematickými celky návrhu. Projekt je rozdìlen na dvì hlavní èásti - naserverovou a klientskou èást. Server provádí naplánované úlohy a komunikuje s pøipojenýmiklienty a vykonává jejich pøíkazy. Komunikace je navazována pøostøednictvím sítì Ethernet.[8]

Obrázek 5.1: Schéma projektu.

Aby se mohli klienti k serveru pøipojit, musí mít server veøejnou adresu (nedoporuèeno)nebo musí být napøíklad s klienty ve stejné privátní síti, popøípadì VPN síti. Druhá mo¾nostje v rámci domácnosti pravdìpodobnìj¹í, mo¾né jsou samozøejmì obì varianty.

17

5.1 Server

Jako server je oznaèována mno¾ina hardwaru a serverové aplikace, která na nìm bì¾í.Fyzicky se jedná o miniaturní poèítaè BeagleBoard-xM, na kterém je spu¹tìna konzolováaplikace napsaná v jazyce C++. Poèítaè je pøipojen k Ethernetové síti prostøednictvím sí»o-vého konektoru. Pro pøipojení na server není vy¾adována ¾ádná autentizace, pøedpokládáse, ¾e server i klienti jsou na spoleèné privátní síti dostupné napøíklad pouze èelnùm rodiny.

5.1.1 Diagram serverové aplikace

Aplikace je rozdìlená do dvou hlavních vláken, které se vytvoøí po spu¹tìní aplikace. Vláknaspolu komunikují prostøednictvím dvou souborù - souboru zaøízení a souboru úloh, a sta-vových promìnných. Hned po svém vytvoøení naète seznam úloh. Poté v nekoneèném cyklukontroluje, zda komunikaèní vlákno nenastavilo pøíznak, ¾e je potøeba aktualizovat seznamúloh. V tom pøípadì opìt naète úlohy ze souboru a ulo¾í si je do seznamu. Dále vláknozpracování úloh periodicky prochází seznam úloh a pokud je èas provést úlohu, provede ji(aktivovat / deaktivovat výstup). Komunikaèní vlákno v nekoneèném cyklu èeká, dokud sek nìmu nepøipojí klient. Jakmile se k nìmu pøipojí, vytvoøí pro nìj samostatné komunika-èní vlákno a v nadøazeném vláknì èeká na dal¹ího klienta. V novì vytvoøeném vláknì èeká,a¾ mu klient po¹le zprávu. Komunikace je øízena klientem. Server èeká a¾ mu klient po¹lezprávu, provede pøíkaz ve zprávì a v pøípadì, ¾e zpráva vy¾aduje odpovìï, po¹le serverzprávu klientovi. Jakmile pøijde od klienta zpráva s po¾adavkem na ukonèení komunikace,server klienta odpojí a zru¹í vlákno.

5.2 Klient

Klientská aplikace slou¾í pro vizuální reprezentaci naplánovaných úloh a pøipojených za-hradních periferií. V¹echna data jsou ulo¾ena na serveru a klientská aplikace zji¹»uje stavzasílání dotazù na server a zpracováním zpìtné vazby ze serveru. Klient mù¾e libovolnì pøi-dávat, upravovat a mazat úlohy, registrovat nebo mazat pøipojená zaøízení a zji¹»ovat jejichaktuální stav. Aplikace je tvoøena jedním hlavním oknem, které obsahuje okno se dvìmizálo¾kami. První zalo¾ka obsahuje seznam zaøízení rozdìlený do dvou skupin - vstupní avýstupní zaøízení. Druhá zálo¾ka obsahuje seznam úloh. Jak seznam zaøízení, tak seznamúloh lze podle libosti upravovat, pøidávat nová zaøízení/úlohy popøípadì stávající mazat. Pocelou dobu spu¹tìní aplikace je dostupný hlavní panel s akcemi mezi které patøí nastaveníaplikace, sta¾ení kon�gurace ze serveru, odeslání kon�gurace na server a zji¹tìní stavu za-øízení (napøíklad, jestli svìtla svítí, jestli èidla detekují dé¹» apod.). Zji¹tìní stavu zaøízeníse neprovádí periodicky, ale stisknutím tlaèítka, proto¾e se pøedpokládá, ¾e úlohy budoutrvat hodnì dlouhou dobu (hodiny i více) a nepøedpokládá se, ¾e by se stav mìnil ka¾dýchpár sekund, to samé platí napø. o de¹»ových senzorech. Jednotlivá zaøízení je také mo¾nékdykoliv manuálnì zapnout nebo vypnout. Je v¹ak mo¾né, ¾e tato akce bude kolidovat snastaveným plánem (resp. v harmonogramu je úloha, která po manuálním vypnutí zaøízenízase zapne). V takovém pøípadì je potøeba odstranit danou úlohu z plánu.

5.3 Úloha

Jedná se o základní datovou strukturu, kterou server vykonává. Uloha je rozdìlena na dvìhlavní èásti - na hlavièku úlohy a podmínku. V hlavièce úlohy je ulo¾eno, jakého zaøízení

18

se úloha týká, v jaký èas se má úloha provést, jestli se má zaøízení zapnout nebo vypnout apøípadnì po jaké dobì se má úloha opakovat. Podmínka je tvoøena zaøízením, jeho¾ stavuse týká, aritmetického porovnání a konstanty. Podmínka mù¾e, ale nemusí být v úlozepøítomna. Mù¾eme tak napøíklad vytvoøit úlohu: "Zapni zavla¾ovaè èíslo 1, pokud senzor2 nedetekuje dé¹»".

19

Obrázek 5.2: Diagram serverové aplikace.

20

Kapitola 6

Komunikaèní protokol a strukturadatových souborù

Tato kapitola podrobnì popisuje komunikaèní protokol pou¾ívaný serverovou a klientskouaplikací a strukturu datových souborù, které slou¾í k výmìnì informací mezi jednotlivýmivlákny serverové aplikace.

6.1 Komunikaèní protokol

Tato podkapitola pojednává o komunikaèním protokolu pou¾ívaným pro komunikaci meziserverem a klientem. V tabulce ní¾e jsou uvedeny pøíkazy, které klient mù¾e poslat serveru.V pøípadì, ¾e server na pøíkaz odpovídá, je to u nìj uvedeno.

6.2 Struktura datových souborù

Na serveru jsou ulo¾eny dva soubory - soubor se seznamem zaøízení a soubor se seznamemúloh.

6.2.1 Soubor zaøízení

Jedná se o binární soubor. Na prvních ètyøech bajtech je ulo¾ené èíslo ozaèující poèetzaøízení v souboru. Dále následují za sebou ulo¾ené struktury zaøízení.

6.2.2 Soubor úloh

Jedná se o binární soubor. Na prvních ètyøech bajtech je ulo¾ené èíslo ozaèující poèet úlohv souboru. Dále následují za sebou ulo¾ené struktury úloh.

21

Pøíkaz VlastnostADD pøidání nové úlohysyntaxe ADD;akce;èas provedení;podmínka;opakovat za;èíslo pinu zaøízení;

podmínka pin;podmínka operace;podmínka konstanta;jméno úlohy;pøíklad ADD;0;1368563090;1;600;136;135;2;1;AIO pøidání nového zaøízení

syntaxe AIO;vstupní výstupní;èíslo pinu zaøízení;jméno zaøízení;ikonka;pøíklad AIO;1;139;senzor1;2;BYE ukonèení komunikace se serveremCIO vymazání seznamu zaøízení èekajících na ulo¾eníCLR vymazání seznamu úloh èekajících na ulo¾eníGET dotaz na úlohy ulo¾ené na serveru

odpovìï GET;poèet úloh; následuje seznam úloh ve formátu viz. funkce ADDGIO dotaz na zaøízení ulo¾ené na serveru

odpovìï GIO;poèet zaøízení; následuje seznam zaøízení ve formátu viz. funkce AIOREA naètení hodnoty zaøízení

syntaxe REA;èíslo pinu zaøízení;odpovìï REA;hodnota;RES znovunaètení (resetnutí) v¹ech zaøízeníSAV pøíkaz k ulo¾ení novì pøidaných úloh do souboruSIO pøíkaz k ulo¾ení novì pøidaných zaøízení do souboru

Tabulka 6.1: Pøíkazy komunikaèního protokolu.

22

Kapitola 7

Implementace

Tato kapitola podrobnìji rozebírá implementaci jednotlivých èástí projektu, jejich¾ návrhbyl popsán v døívìj¹ích kapitolách.

7.1 Implementace serveru

Server tvoøí tøi zdrojové soubory.

gardenLib.cpp

Zde se nachází funkce pro práci s datovými soubory, zápisu do systémových souborù a rùznépomocné funkce. První funkce runCommand() slou¾í k spou¹tìní pøíkazù v terminálu, kteréjsou nutné pro práci se systémem (resp. k nastavování a ètení hodnot pinù a nastavováníjejich smìru - vstupní/výstupní). Následující funkce strRunCommand() se od pøedchozífunkce li¹í tím, ¾e vrací výsledek spu¹tìného pøíkazu jako výsledek. Obì funkce maji jakovstupní parametr jméno pøíkazu. Dal¹ími významnými funkcemi jsou funkce pro zápis anaètení úloh ze souboru. V aplikaci existují dva seznamy úloh, do jednoho se naèítají úlohyze souboru a vykonávají se v nìm ulo¾ené úlohy, do druhého seznamu se zapisují úlohypøijaté od klienta. Obsah tohoto souboru se pak zapí¹e do souboru. Obì funkce mají jakovstupní parametr jméno souboru. Analogicky jsou pak implementovány funkce pro zápisa naètení zaøízení do seznamu. Opìt existují dva seznamy a pracuje se s nìma stejnýmzpùsobem jako u seznamu úloh. Dále následují funkce parseXXXMessage() pro zpracováníparametrù pøíchozích zpráv ADD, AIO a REA. V¹echny tøi funkce pøijímají jako parametrøetìzec obsahující zprávu a vrací strukturu zaøízení, úlohy, popøípadì stav (hodnotu 0 nebo1) zaøízení. Dal¹í dvojicí funkcí jsou funkce na sestavení textu zprávy GET a GIO. Funkcepøeètou obsah souborù, který je identický s obsahem seznamù zaøízení a úloh, sestaví z nìjzprávu a tu vrátí jako textový øetìzec. Dále následují pomocné funkce na zji¹tìní velikostisouborù a typové konverze.

gardenLib.h

Jedná se o hlavièkový soubor k vý¹e zmínìnému zdrojovému souboru. Obsahuje deklaracistruktur seznamù úloh a zaøízení. Dále jsou v nìm deklarovány dva seznamy pro úlohy adva seznamy pro zaøízení.

23

main.cpp

Soubor obsahuje hlavní funkci programu. Na zaèátku se vytvoøí dvì vlákna pro provádìníúloh a komunikaci zmínìná v návrhu. Poté následuje cyklus while, ve kterém vlákno èeká,ne¾ se neukonèí ostatní vlákna. Pøi implementaci jsem pou¾il posixová vlákna z knihovnypthread.h. Vlákno zpracování úloh zaèíná naètením úloh a zaøízení ze souboru. Poté sev nekoneèné smyèce kontrolují pøíznaky, ¾e je potøeba aktualizovat seznam zaøízení neboúloh. Pokud není potøeba nic aktualizovat, projde se v cyklu seznam úloh a porovnáváse jejich èas ulo¾ený ve struktuøe. Pokud se rovná -1, znamená to, ¾e je potøeba úlohuprovést hned, tudí¾ se jí nastaví aktuální èast, aby automaticky pro¹la dal¹í podmínkou.Pokud má úloha star¹í ne¾ aktuální èas, zkontroluje se, jestli jestli se má úloha provádìtperiodicky. Pokud ano, pøièítá se èas za jaký se má úloha opakovat tak dlouho, dokudse nerovná nebo není vy¹¹í ne¾ aktuální èas. Tato funkce je u¾iteèná, pokud byl servernìjakou dobu vypnutý. Naplánované úlohy se budou dál provádìt a nehrozí, ¾e se provedenìjaká jednorázová funkce z minulosti, jako napøíklad otevøení brány. Pokud je èas vykonatúlohu, zkontroluje se, jestli je splnìna podmínka pro její provedení (pokud má podmínku)a pøípadnì se provede (resp. se zapí¹e logická jednièka nebo nula na pin). Pokud je úlohaperiodická, pøidá se nová úloha s èasem posunutým o periodu. Poté se provedená podmínkaodstraní.

Komunikaèní vlákno nejprve vytvoøí socket pro pøijímání pøíchozích spojení. Jako èísloportu se pou¾ije 9000, pokud není zadáno jiné jako parametr pøi spu¹tìní programu. Potése naslouchá, dokud se nepøipojí klient. Po pøipojení klienta se mu vytvoøí vlákno (jednáse o konkurentní tcp server, kde konkurentnost je øe¹ena více vlákny). V novì vytvoøenémvláknì se sna¾í èíst ze socketu a èeká na pøíchozí zprávy na které reaguje podle protokoluv kapitole 6. Jakmile pøijde zpráva "BYE", zavøe se socket, a vlákno se ukonèí. Aplikacese ukonèí stiknutím ctrl+c. Program zachytí signál, ukonèí v¹echny smyèky ve vláknech,vlákna dají povel k ukonèení hlavního vlákna programu a ukonèí se.

7.1.1 Øe¹ené problémy serveru

• Pøi implementaci jsem narazil na problém pøi znovuvytváøení socketu po pádu apli-kace. To jsem vyøe¹il pou¾itím funkce setsockopt(), která vynutí pøepsání socketu zminulé instance aplikace.

• Dal¹ím problémem byla synchronizace vláken. Tu jsem vyøe¹il globálními promìnými,které vlákna pou¾ívají jako komunikaèní prostøedek.

• Posledním problémem bylo ukonèení aplikace, které jsem ji¾ zmínil v pøedchozí kapi-tole.

7.1.2 Chyby serveru

• Pokud se klient odpojí od serveru bez zaslání zprávy "BYE", zaène server vypisovatna standardní výstup bílé znaky. Dal¹í klienti se ale mohou normálnì pøipojit. Pokudse k serveru nepøipojujete z nìjakého tcp klienta a nezapomenete nakonec poslatukonèující pøíkaz, nemìla by tato situace nikdy nastat.

7.2 Implementace klienta

V¹echny zdrojové soubory jsou v balíku cz.gclient.gardenclient.

24

ExpandableListAdapter.java

Obsahuje adaptér pro expandovatelný listView, co¾ je komponenta slou¾ící pro zobrazovánísezamù zaøízení a úloh.

IOpin.java a TaskItem.java

jsou sobory obsahující storage tøídy (obdoba struktur na stranì serveru).

TabListener.java

Soubor obsahuje metody pro pøepínání mezi jednotlivými zálo¾kami.

Tab1Fragment.java a Tab2Fragment.java

Soubory obsahující fragmenty (obsahy zálo¾ek). Obì tøídy obsahují metody pro inicializaciseznamù pro zobrazení úloh/zaøízení a jejich naplnìní. Dále de�nují metody, pro klinutí najednotlivé polo¾ky seznamu. Obì tøídy obsahují metody pro vytvoøení kontextového menupro práci s vybranou polo¾kou.

Global.java

Tøída obsahuje de�nice v¹ech objektù pou¾ívaných rùznými tøídami aplikace. Jsou zdede�novány instance listù, z kterých se vytváøí seznamy zaøízení a úloh v zálo¾kách, de�niceglobálních promìnných, které slou¾í pro signalizaci stavù a synchronizaci vláken. Aplikaceobsahuje dva listy pro zaøízení a dva listy pro úlohy. S jedním se pracuje na datové úrovnia druhý slou¾í pro zrcadlení dat a jejich gra�cké zobrazení. Po ka¾dé zmìnì datovéholistu se volá metoda na synchronizaci dané dvojice listù. Tøída dále obsahuje metody proparsování pøíchozích zpráv, které jsou analogie jejich protìj¹kù na stranì serveru. Dáleobsahuje metodu pro pøepoèty vyjádøení èasu v C++ (poèet sekund uplynulých od epochy)do srozumitelného zápisu data a èasu a metodu pro opaènou konverzi. Souèástí tøídy je imetoda pro zji¹tìní indexu v listu zaøízení. U listu zaøízení si datový list a list pro zobrazenína zálo¾ce strukturálnì neodpovídají, proto¾e zaøízení jsou roztøízena do dvou listù - navstupní a výstupní zaøízení.

MainActivity.java

Tøída obsahuje metody pro inicializaci jednotlivých èástí aplikace, zpracovává akce kliknutína jednotlivá tlaèítka v hlavním panelu a obsahuje vlákna pro komunikaci se serverem (tcpkomunikace nesmí být na Androidu v hlavním vláknì).

Soubory XML ze slo¾ky "layout"obsahují de�nice vzhledù jednotlivých komponent azálo¾ek.

Soubor main.xml obsahuje de�nice tlaèítek na hlavním panelu aplikace.Soubory XML ze slo¾ky "values"obsahují de�nice textových konstant.

7.2.1 Øe¹ené problémy klienta

• Jedním z hlavních problémù pøi vývoji aplikace bylo vytváøení vlastních komponenta adaptérù (pøidávání funkènosti komponentám a jejich reakce na rùzné podnìty odu¾ivatele). Øe¹ení triviálních problémù, jako zobrazení obrázku ve vlastní komponentì

25

nebo vytvoøení kontextového menu po kliknutí na její polo¾ku se proto nìkdy protáhlona celé hodiny. O�ciální tutoriály málokdy pomohly problém vyøe¹it a proto nezbývalonic jiného ne¾ hledat rùzné metody øe¹ení a zkou¹et, která z nich funguje. Doká¾u sipøedstavit, ¾e hodnì vývojáøù - nováèkù by to od vývoje aplikací pro Android odradilo.

• Dal¹ím problémem bylo, ¾e pokud se klient dotazoval serveru moc rychle, a pøíkazy nastranì serveru vy¾adovaly vy¹¹í øe¾ii, mohly se zprávy v socketu hromadit a server jepak pøeèetl jako jednu zprávu. Tento problém jsem vyøe¹il pøidáním krátkých èekánímezi zasíláním pro server èasovì nároèných pøíkazù, ikdy¾ pravdìpodobnì lep¹í bybylo na stranì serveru implementovat zpracování zøetìzených zpráv.

7.2.2 chyby klienta

• ©patné zachytávání vyjímky pøi pøipojování se k serveru. Mù¾e se tedy stát, ¾e aplikacemísto zahlá¹ení chyby spadne.

7.3 Implementace GUI klientské aplikace

Tato podkapitola pojednává o implementaci navr¾eného gra�ckého rozhraní klientské apli-kace pro Android.

Obrázek 7.1: Klientská aplikace.

Aplikace je tvoøena dvìmi zálo¾kami. Hlavní panel obsahuje pìt tlaèítek:

• "ozubené koleèko"slou¾í pro nastavení ip adresy a èísla portu serveru, ke kterému seaplikace pøipojuje

26

• "¹ipka nahorù"slou¾í k odeslání stávající kon�gurace zaøízení a úloh na server

• "¹ipka dolù"slou¾í ke sta¾ení aktuálních seznamù zaøízení a úloh ze serveru

• "i v krou¾ku"slou¾í pro naètení aktuálních stavù pøipojených zaøízení (klient se ser-veru dotá¾e pouze na zaøízení, které jsou v seznamu); ikonky u jednotlivých zaøízeníre ektují stav jednotlivých zaøízení (napøíklad: zhasnutá ¾árovka = svìtla nesvítí,modrá kapka = de¹»ový senzor detekuje dé¹»)

• "plus"slou¾í k pøidání nové úlohy/zaøízení; po stisknutí tlaèítka se otevøe okno propøidání nové úlohy/zaøízení Pøi dlouhém kliknutí na polo¾ku v seznamu se otevøekontextové menu, ve kterém je mo¾né vybrat akci, jakou chceme provést s danýmzaøízením/úlohou.

27

Kapitola 8

Testy

Tato kapitola pojednává o testech, kterými jsem serverou a klientskou aplikaci podrobil.

8.1 Testovací podmínky

Serverová aplikace bì¾í na BeagleBoard-xM zmínìném v pøedchozích kapitolách. Serverje pøipojen Ethernetovým kabelem k access pointu. Klientská aplikace byla testována natabletu ASUS fonepad7, který je do privátní sítì pøipojen pøes WiFi. Na serveru ani tabletunebì¾í ¾ádné dal¹í aplikace pou¾ívající stejné rozhraní pro pøipojení k síti.

8.2 Test rychlosti sta¾ení dat

Poèty úloh/zaøízení prodleva pøed vykreslením4 úlohy, 4 zaøízení 104ms4 úlohy, 6 zaøízení 103ms6 úlohy, 6 zaøízení 105ms6 úlohy, 8 zaøízení 103ms8 úlohy, 8 zaøízení 103ms

Tabulka 8.1: Test rychlosti sta¾ení dat.

Cílem testu bylo zmìøit dobu mezi kliknutím na tlaèítko pro sta¾ení kon�gurace a zob-razením výsledkù na obrazovce. Z principu komunikace vyplývá, ¾e by se mìla s lineárnìse zvy¹ujícím poètem úloh/zaøízení lineárnì zvy¹ovat doba prodlevy. Re¾ie vynalo¾ená nazapoènutí komunikace je mnohonásobnì vy¹¹í ne¾ na pøenos informací o zaøízeních.

8.3 Test rychlosti zji¹tìní stavu

28

test asus fonepad7 prestigio multipad 4 samsung gt551test 1 199 201 214test 2 203 206 203test 3 210 202 211test 4 199 207 212test 5 207 199 204test 6 202 210 214test 7 203 212 206test 8 201 203 209test 9 206 214 204test 10 214 206 207prùmìr 204,4 206 208,4

Tabulka 8.2: Test rychlosti zji¹tìní stavu - 2 zaøízení. Údaje jsou v milisekundách.

test asus fonepad7 prestigio multipad 4 samsung gt551test 1 215 214 201test 2 198 204 206test 3 202 202 207test 4 211 204 214test 5 207 209 201test 6 200 202 210test 7 213 209 200test 8 211 201 202test 9 211 204 212test 10 214 216 203prùmìr 208,2 206,5 205,6

Tabulka 8.3: Test rychlosti zji¹tìní stavu - 3 zaøízení. Údaje jsou v milisekundách.

Z testu vyplývá podobnì jako z pøedchozího, ¾e poèty zaøízení mají na dobu vykonávánípøíkazu jen malý vliv. Paradoxnì v nìkterých pøípadech zji¹tìní stavu vy¹¹ího poètu zaøízenískonèí rychleji ne¾ ni¾¹ího poètu zaøízení.

29

test asus fonepad7 prestigio multipad 4 samsung gt551test 1 209 198 199test 2 206 207 217test 3 198 211 209test 4 216 199 206test 5 214 203 205test 6 203 201 201test 7 201 208 204test 8 205 204 202test 9 215 202 204test 10 207 202 210prùmìr 207,4 203,5 205,7

Tabulka 8.4: Test rychlosti zji¹tìní stavu - 4 zaøízení. Údaje jsou v milisekundách.

test asus fonepad7 prestigio multipad 4 samsung gt551test 1 200 198 201test 2 201 207 202test 3 207 214 214test 4 209 201 206test 5 199 212 205test 6 201 203 209test 7 202 201 199test 8 203 214 201test 9 210 211 204test 10 201 206 205prùmìr 203,3 206,7 204,6

Tabulka 8.5: Test rychlosti zji¹tìní stavu - 5 zaøízení. Údaje jsou v milisekundách.

test asus fonepad7 prestigio multipad 4 samsung gt551test 1 199 211 201test 2 203 216 202test 3 201 205 206test 4 207 199 201test 5 202 214 211test 6 214 202 201test 7 201 201 203test 8 203 201 214test 9 206 201 204test 10 205 208 202prùmìr 204,1 205,8 204,5

Tabulka 8.6: Test rychlosti zji¹tìní stavu - 6 zaøízení. Údaje jsou v milisekundách.

30

Kapitola 9

Závìr

Cílem této práce bylo vytvoøit systém ovládání zahradních periferií prostøednictvím dotyko-vého displeje mobilního telefonu nebo tabletu. V rámci práce byl vytvoøen systém rozdìlenýna dvì aplikace. Serverová aplikace slou¾í k ovládání techniky a senzorù pøipojených pøesdigitální vstupy a výstupy serveru. Klientská aplikace slou¾í pro vzdálené ovládání peri-ferií prostøednictvím tcp komunikace se serverem. Aplikace umo¾òuje libovolnou správuúloh a zaøízení a vytváøení komplexnìj¹ích harmonogramù díky podmínìnému provádìníúloh a reakcí na události. Testována byla pøedev¹ím rychlost odezvy od serveru na akceu¾ivatele klientské aplikace. Vzhledem k velmi nízkým pøenosùm dat díky úspornému pro-tokolu trvají reakce pouze desítky milisekund, pøièem¾ vìt¹inu èasu vìnovanému pøenosuzabírá navazování spojení se serverem. Z principu komunikace vyplývá, ¾e s lineárnì sezvy¹ujícím poètem zaøízení/úloh se bude také lineárnì zvy¹ovat doba pøenosu dat. Z testuv¹ak vyplývá, ¾e zvìt¹ování poètu pøená¹ení zaøízení/úloh má tak malý vliv na dobu trvánípøenosu, ¾e chyba vzniklá ostatními elementy pøenosu znaènì zkresluje jeho výsledky. Pøizdvojnásobení poètu úloh a zaøízení pøenos dokonce trval krat¹í dobu. Téma práce je velmi¹iroké a je mnoho zpùsobù, jak ji zdokonalit nebo vylep¹it. Zde uvádím nìkolik zpùsobù,jak by ¹la práce rozvinout.

• -gra�cká reprezentace umístìní senzorù a ostatních periferií na mapì - obzvlá¹» uvelkého mno¾ství zaøízení by to zlep¹ilo pøehlednost.

• -pøidání alternativních zpùsobù pøipojení periferií - obzvlá¹» analogových vstupù avýstupù.

31

Literatura

[1] Industry Leaders Announce Open Platform for Mobile Devices. 2007, [online] cit.2014-05-20.URL http://www.openhandsetalliance.com/press_110507.html

[2] Android (operaèní systém). 2014, [online] cit. 2014-05-20.URLhttp://cs.wikipedia.org/wiki/Android_(opera%C4%8Dn%C3%AD_syst%C3%A9m)

[3] BeagleBoard. 2014, [online] cit. 2014-05-20.URL http://en.wikipedia.org/wiki/BeagleBoard

[4] Dalvik (software). 2014, [online] cit. 2014-05-20.URL http://en.wikipedia.org/wiki/Dalvik_(software)

[5] Java (programovací jazyk). 2014, [online] cit. 2014-05-20.URL http://cs.wikipedia.org/wiki/Java_(programovac%C3%AD_jazyk)

[6] NetBeans. 2014, [online] cit. 2014-05-20.URL http://en.wikipedia.org/wiki/NetBeans

[7] HEROUT, P.: Java. Praha : Kopp, 2002, ISBN 80-7232-328-9.

[8] wireless java, L.: Qusay H. MAHMOUND. Sebastopol USA: O'Reilly & Associates,Inc., 2002, ISBN 978-0596002435.

32

Pøíloha A

U¾ivatelské rozhraní

Obrázek A.1: U¾ivatelské rozhraní - Nastavení.

33

Obrázek A.2: U¾ivatelské rozhraní - Menu zaøízení.

Obrázek A.3: U¾ivatelské rozhraní - Úprava zaøízení.

34

Obrázek A.4: U¾ivatelské rozhraní - Úlohy.

Obrázek A.5: U¾ivatelské rozhraní - Menu úlohy.

35

Obrázek A.6: U¾ivatelské rozhraní - Úprava úlohy.

36

top related