VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
A p l i k a c e b e z d r á t o v ý c h s e n z o ro v ý c h s í t í p ro i n t e l i g e n t n í d o m y Bakalářská práce
Autor: Lukáš Tyc Vedoucí práce: Ing. Tomáš Richta Jihlava 2012
Vysoká škola polytechnická Jihlava Tolstého 16, 586 01 Jihlava
ZADÁNÍ BAKALÁŘSKÉ PRÁCE
Autor práce: Studijní program: Obor: Název práce: Cíl práce:
Ing. Tomáš Richta vedoucí bakalářské práce
Lukáš Tyc Elektrotechnika a informatika Aplikovaná informatika Aplikace bezdrátových senzorových sítí pro inteligentní domy Prostudujte a popište koncept bezdrátových senzorových sítí. Při studiu uvažujte jako cílové nasazení této technologie automatizovanou (inteligentní) správu domů. Uveďte také související technologie využívající jak drátový, tak bezdrátový přenos informací. Na základě popisu hypotetického inteligentního domu ovládaného z Internetu dodaného vedoucím práce navrhněte a sestavte návrh zapojení jednotlivých bezdrátových a výpočetních modulů pro tento dům. Při návrhu sestavení uvažujte využití výpočetních modulů Arduino a bezdrátových modulů ZigBee. Navržené sestavení zkonstruujte a vybavte softwarem umožňujícím vzdálenou simulaci chodu domu, tedy sběr dat ze senzorů a aktivaci funkčních prvků.
Ing. Bc. Michal Vopálenský, Ph.D. vedoucí katedry Katedra elektrotechniky a informatiky
ABSTRAKT Tato práce se zabývá experimentální implementací chytrého domu. Pro síť je využit opensorce software a hardware. Moduly mezi sebou komunikují přes ZigBee. Externí ovládací modul je spojen se sítí přes centrálu.
KLÍČOVÁ SLOVA ZigBee, Bezdrátové senzorové sítě, Arduino, Chytrý dům, JSON, Java EE
ABSTRACT This theses deals with experimental implementation of smart house. Network is used open-sorce software and hardware. Modules communicate with each other via ZigBee. Extern control module is connected to the network via center module.
KEYWORDS ZigBee, Wireless Sensor Network, Arduino, Smart house, JSON, Java EE
TYC, Lukáš Aplikace bezdrátových senzorových sítí pro inteligentní domy: bakalářská práce. Jihlava: Vysoká Škola Polytechnická Jihla, Katedra elektrotechniky a informatiky, 2012. 39 s. Vedoucí práce byl Ing. Tomáš Richta,
PODĚKOVÁNÍ Na tomto místě bych rád poděkoval svému vedoucímu práce Ing. Tomáši Richtovi za cenné rady a připomínky k práci. Dále bych chtěl poděkovat za trpělivost a poskytnutý prostor pro práci. Pak také děkuji za příležitost a námět k vypracování bakalářské práce.
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ . Byl/a jsem seznámen/a s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutím licence. V Jihlavě dne ...................................................... Podpis
OBSAH 1 Úvod
1
1.1
1
Cíle práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Teoretická část 2.1
2.2
2.3
2.4
Inteligentní dům
2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.1.1
Senzor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.1.2
Akční člen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.1.3
Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.4
Bezdrátové senzorové sítě . . . . . . . . . . . . . . . . . . . .
3
Komunikační platformy . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.1
KNX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.2
BACnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.3
ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.1
Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2
Typy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.3
Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Formát JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Návrh
16
3.1
Popis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2
Pasivní modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3
Aktivní modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4
Centrála . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5
Externí modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.6
Komunikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.6.1
Formát zpráv . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6.2
Přenos zprávy přes Ethernet . . . . . . . . . . . . . . . . . . . 20
3.6.3
Přenos zprávy přes xBee . . . . . . . . . . . . . . . . . . . . . 20
4 Implementace
22
4.1
Pasivní modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2
Aktivní modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3
4.4
4.2.1
Nastavení xBee . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.2
Poslání zpráv . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.3
Přijímaní zpráv . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.4
Provádění akce . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Centrála . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.3.1
Nastavení xBee . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.2
Posílání nastavení pro akční členy . . . . . . . . . . . . . . . . 27
4.3.3
Posílání dat ze senzorů . . . . . . . . . . . . . . . . . . . . . . 28
Externí modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4.1
Nastavení modulu . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4.2
Zobrazení senzorových dat modulu . . . . . . . . . . . . . . . 29
4.4.3
Nastavení zprávy pro modul . . . . . . . . . . . . . . . . . . . 31
4.4.4
Odesílání zprávy s nastavením modul . . . . . . . . . . . . . . 31
4.4.5
Přijímání dat ze senzorů . . . . . . . . . . . . . . . . . . . . . 32
5 Závěr
33
Literatura
34
Seznam symbolů, veličin a zkratek
36
Seznam obrázků
38
Seznam tabulek
39
KAPITOLA 1. ÚVOD
1
ÚVOD
Ceny energii stále stoupají a proto se člověk snaží optimalizovat a zefektivnit zdroje, které má. Toto zefektivnění se neprovádí jen u aut snížením jejich spotřeby, ale také u domů. V současné době se začíná stále více uvažovat o domech, které dokáží lépe hospodařit s energií a i jinak zpříjemňovat život jeho obyvatel. Takovýmto domům se říká chytrý dům nebo inteligentní budova. Oproti dřívějším dobám, kdy bylo možné tyto chytré domy najít pouze u bohatých lidí s luxusními vilami nebo v sídlech velkých společností, se nyní začínají objevovat i u obyčejných lidí. Toto téma mně přijde velice zajímavé, zejména kvůli různým druhům zařízení a technologií, které je potřeba poskládat do jednoho velkého celku tzv. chytrý dům. Tato koncepce mě navíc zaujala natolik, že jsem o jejím využití začal uvažovat i v soukromém životě.
1.1
Cíle práce
Cílem této práce je zkusit vytvořit základní sestavení pro chytrý dům. V tomto experimentu využiji open-source softwarové a hardwarové platformy. Dalším cílem je seznámit se s možností ovládání různých zařízení domu bez fyzické interakce se zařízením a také číst data ze senzorů v domě.
1
KAPITOLA 2. TEORETICKÁ ČÁST
2
TEORETICKÁ ČÁST
2.1
Inteligentní dům
Pod označením inteligentní dům nebo takzvaný chytrý dům rozumíme řídící systém, který dokáže automatizovat budovy nebo určené domácí činnosti. Mezi domácí činnosti, jenž mohou být ovládány chytrým domem, patří centrální ovládání světel, teploty, ventilace nebo klimatizace a ovládání různých domácích spotřebičů. Dále lze do systému chytrého domu integrovat i jiné systémy a to pro zabezpečení, zefektivnění spotřeby energií a v neposlední míře pro zlepšení pohodlí obyvatel budovy. Domácí řídící systém se skládá z elektronických zařízení, která spolu mohou komunikovat přes síť. V systému nalezneme tři druhy těchto zařízení. Prvním typem je senzor, který systému nahrazuje lidské smysly. Druhý nazýváme akční člen zástupce lidské končetiny. Poslednímu říkáme Hardwarový nebo Softwarový Controller, ten pro systém znamená to co mozek pro člověka. Při připojení zařízení k počítačové síti lze systém řídit přes počítač, smarthphone nebo jen webovým prohlížečem. Pokud je počítačová síť připojena k internetu, lze systém řídit i vzdáleně [1, 18, 17].
2.1.1
Senzor
Senzor je zařízení, které měří fyzikální veličinu. Naměřené hodnoty veličiny převádí na signál a ten lze přenášet do jiných zařízení jako vstupní informace. Přenášené naměřené hodnoty jsou buď digitální (binární) nebo analogové. Informace o podobě hodnot a měřítku musí být uvedeny ve specifikaci senzoru. Část senzorů, použitelných v domě, je vypsána v tabulce 2.1 [22, 11].
2.1.2
Akční člen
Do Akčních členů anglicky nazývaných Actuator řadíme všechny prvky, které provádí činnost nebo přesněji povely na základě zpracované informace. Nejčastějšími představiteli akčních členů jsou pohony nebo stykače a spínače.
2
2.1. INTELIGENTNÍ DŮM
KAPITOLA 2. TEORETICKÁ ČÁST
Typ senzoru
Sbíraná data
Dešťový senzor
detekuje déšť
Srážkoměr
množství spadlé vody
Pohybový senzor pohyb v prostoru Světelný senzor
intenzitu světelného záření
Teplotní senzor
teplotu
Barometr
atmosférický tlak
Větrný senzor
sílu větru
Vlhkoměr
vlhkost ve vzduchu
Tab. 2.1: Senzory použitelné v chytrém domě.
Akční člen lze v domech využít například pro zapnutí či vypnutí světel, topení, ventilace nebo klimatizace. Mimo to mohou v budovách otevírat a zavírat okna nebo dveře. Také dokáží ovládat motor protisluneční ochrany či vrat od garáže [13, 11].
2.1.3
Controller
Tento prvek obyčejně obsahuje průmyslový počítač určený pro automatizaci procesů. K zařízení se lze připojit za pomoci sériové linky RS-232 nebo RS-458, přičemž vyspělejší z nich mají dokonce přípojku do ethernetu nebo display. Přistroj je také vybaven množstvím vstupů a výstupů důležitých pro ovládání. Do určených vstupů se připojují senzory. Data ze senzorů se uvnitř zpracují a na základě předem definované logiky se výsledky zašlou na výstup, kde na ně čeká Akční člen. Controllery jsou schopny ovládat zařízení od strojů na výrobních pásech až po zařízení na automatické osvětlení [23].
2.1.4
Bezdrátové senzorové sítě
Bezdrátová senzorová síť je složena z autonomních senzorů rozprostřených v prostoru. Senzory jsou určeny k měření fyzikálních veličin jako je tlak, teplota a světlo.
3
2.2. KOMUNIKAČNÍ PLATFORMY
KAPITOLA 2. TEORETICKÁ ČÁST
Změřené veličiny se sítí přenesou do hlavního úložiště. Novější senzorové sítě umožňují obousměrnou komunikaci, lze je tedy kromě sledování i ovládat. Původně se senzorové sítě začaly používat v armádních projektech a postupně se začaly rozšiřovat i do mnoha jiných odvětví. Dnes si už těžko dokážeme představit zařízení bez senzorových sítí v takových oborech jako je průmyslové sledování a ovládání, ve zdravotnictví a v mnoha dalších. Bezdrátová senzorová síť je postavena z několika desítek až tisícovek uzlů zvaných "nodes". Ke každému uzlu je připojen jeden až několik senzorů. Uzel senzorové sítě má obvykle několik částí. První částí je rádiový vysílač, dnes i přijímač s interní nebo externí anténou, microcontroller a elektronický obvod. Obvod slouží jako rozhraní uzlu se senzorem a energetickým zdrojem. Topologie použitá v bezdrátových senzorových sítích se může změnit z jednoduché sítě typu hvězda až do pokročilé multi-hop mesh sítě. Tato pokročilá síť propojuje všechny viditelné prvky a zajišťuje přenos vlastních i cizích informací předáním mezi jednotlivými uzly. Bezdrátové senzorové sítě jsou velice oblíbené nejen pro svoji spolehlivost,ale také pro nízká cena a malou velikost senzorových uzlů. S využitím multi-hop mesh sítě se velice zjednodušilo přidávání dalších autonomních senzorových uzlů [19].
2.2
Komunikační platformy
Existuje ohromné množství výrobců, kteří vyrábí různé komponenty pro automatizaci průmyslu a budov. Při takto rozsáhlé základně výrobců se objevily problémy v kompatibilitě. Vzhledem k tomuto problému by musela být celá síť složena pouze z komponentů jediného výrobce. Pro odstranění takovéto nepříjemné situace, jakou je spojení komponent od různých výrobců, byly vytvořeny komunikační protokoly. Vzniklo hned několik rozličných protokolů pro různé velikosti, zaměření nebo specifikace systémů. V následujícím textu uvedu asi nejvýznamnější celosvětově rozšířené komunikační protokoly.
4
2.2. KOMUNIKAČNÍ PLATFORMY
2.2.1
KAPITOLA 2. TEORETICKÁ ČÁST
KNX
KNX je celosvětově rozšířený ISO, EN, ANSI a SAC standard pro ovládání domů a budov. KNX je výsledkem sblížení tří předchozích standardů EHS, BatiBus a EIB. Protokol je využíván v automatizovaných budovách na řízení osvětlení, zatmívání oken, klimatizace, ventilace, vytápění a audio/video nebo zabezpečení. Siemens, Bosh, GIRA, ABB, Control4, Merten, Cisco je jen část seznamu členu KNX Association, které se o standart KNX stará [5]. Základem KNX je sběrnice EIB, která zlepšuje vedení a usnadňuje zavedení do provozu oddělením přenosu řídících informací - tzv. telegram od obyčejného elektrického vedení. Další výhodou sběrnice je jasná certifikace a velká kompatibilita. Sběrnice je decentralizovaná, připojená zařízení mají svůj mikroprocesor a komunikují spolu bez centrály tedy Peer-to-peer. Informace se přenáší po dvouvodičové datové sběrnici.
Obr. 2.1: KNX struktura sítě rozdělená adresací na zóny [12]
5
2.2. KOMUNIKAČNÍ PLATFORMY
KAPITOLA 2. TEORETICKÁ ČÁST
Hierarchická struktura viz. obr. 2.1 je dělena do linií (line) a oddílů (area). Nejvýše je centrální nebo také páteřní linie (backbone line). Z páteřní linie může být odvozeno 15 oblastí (area). V každé oblasti může být až 15 linií. 256 zařízení lze připojit do jedné linie. Protokol podporuje hned několik přenosových médií. • KNX TP - pro přenos je využit kabel se dvěma kroucenými páry vodičů. Přesněji TP1 byl převzat z EIB s datovým tokem 9600 bit/s. Vodič musí splňovat parametry soustavy bezpečného malého napětí SELV, kterým vyhovují i napájecí zdroje a všechny připojené přístroje. Díky soustavě SELV se sběrnicový kabel může vést hned vedle silového vedení bez omezení souběžné délky. Při použití propojovacích konektorů na kabelu lze výrazně snížit montážní pracnost a náklady na instalaci. Podporované struktury jsou liniové, paprskové, stromové nebo jejich kombinace. Zakázané je naopak struktura kruhová, neboť se na sběrnici nikdy nesmí uzavřít smyčka. • KNX PL - používá silové vedení o datovém toku 1200 bit/s, což bylo také převzato z EIB. Produkty certifikované EIB a KNX PL110 spolu dokáží pracovat a komunikovat na stejné síti. Používá se modulace klíčovaného posunu v rozprostřeném spektru. Úvodní sekvence s náhodným rozdělením slotů řídí přístup k přenosovému médiu. Rozdělení adres obstarává BAU, které je vybavené náležitým numericky přizpůsobeným filtrem. • KNX RF - telegramy přenáší po rádiových signálech. Komunikační médium funguje na 868 MHz (Short Range Devices) frekvenčního pásma s maximálním výkonem 25mW a datovým tokem 16,384 kbit/s. Dokonce dokáže nejen jednosměrnou ale i obousměrnou komunikaci. Toto médium se vyznačuje nízkou energetickou náročností. V malých a středně velkých instalacích je třeba přeposílání požadavků jen v ojedinělých případech. • KNXnet/IP - se provozuje na IP telegramech. Jsou to všechna média s linkovou vrstvou patřící do normy ISO/IEC 802-2, což jsou například Ethernet a Arcnet.
6
2.2. KOMUNIKAČNÍ PLATFORMY
KAPITOLA 2. TEORETICKÁ ČÁST
Díky kompatibilitě s LAN sítí a také internetem lze telegramy tunelovat a routovat. Zde lze využít routery jako alternativu k USB data rozhraní přesněji TP linii nebo patření spojce. V novějších případech fast Ethernet nahrazuje obvyklé TP páteřní sítě.
Kontrol Zdroj. adresa 8 bit
Cílová adresa
16 bit
rout délka
17 bit
3
4
Data
CRC
max 16 x 8 bit
8 bit
Obr. 2.2: KNX telegram
Informace se mezi účastníky šíří prostřednictvím datových telegramů. Telegram obsahuje části ve stejném pořadí jako jsou popsány níže nebo obrázku 2.2. U každé části se také nalézá v hranatých závorkách údaj o velikost dané části. 1. kontrolní pole s prioritou telegramu [8 bit] 2. adresa odesílatele [16 bit] 3. příslušnou skupinovou adresu [17 bit] 4. routing číslo (pro telegramy přesahující linii nebo oblast) [3 bit] 5. délka telegramu [4 bit] 6. vlastní výkonný povel (zapnutí/vypnutí, nastavení atd.) [max 16 x 8 bit] 7. kontrolní hodnotu [8 bit] Vlastní posílání telegramu po sběrnici je znázorněno na obrázku 2.3. Čekací doba (podle periody) je vidět na jako T1. T2 znázorňuje mezeru mezi telegramem a potvrzením. Čas pro uvolnění sběrnice se vyskytuje pod T3 [6, 7].
2.2.2
BACnet
BACnet je komunikační protokol pro automatizaci budov a řízení. Z anglického výrazu získal i své jméno Building Automatization and Control network. Jedná se
7
2.2. KOMUNIKAČNÍ PLATFORMY
T1 -
Telegram (56-184 bit)
KAPITOLA 2. TEORETICKÁ ČÁST
T2- Potvrzení (8 bit)
T3 -
Obr. 2.3: Posílání telegramu po sběrnici
o ASHRAE, ANSI a ISO standardizovaný protokol. BACnet byl navržen pro komunikaci mezi jednotlivými zařízeními v inteligentní budově. Využívá se zejména pro řízení světel, topení, ventilace, klimatizace nebo v bezpečnostních systémech od alarmu přes odemykání dveří až k zjišťování požárů. Protokol také lze užít i v jiných zde nejmenovaných systémech. BACnet standardizuje reprezentaci dat jednotlivých zařízení jako jsou analogové či binární vstupy a výstupy, alarmy, časové programy a řídící smyčky. Touto standardizací BACnet umožnil propojení různých systémů od různých výrobců. Svoji politikou bez licenčních poplatků se stal celosvětově oblíbeným standardem. Mezi velkým množstvím firem podporujících BACnet nalezneme například Seimens, Johnson Controls, Honeywell a LG Electronics [15, 21].
Obr. 2.4: Složení architektůry BACnet [2]
BACnet obsahuje tři hlavní části. První část určuje metody jak reprezentovat zařízení standardním způsobem, tedy jak reprezentovat jakýkoliv objekt. Další část
8
2.2. KOMUNIKAČNÍ PLATFORMY
KAPITOLA 2. TEORETICKÁ ČÁST
popisuje zasílané zprávy počítačovou sítí pro ovládání a sledování zařízení, tedy popisuje služby. Třetí a poslední částí se definují sítě připojitelné k systému, jako je ARCNET nebo LonTalk. Architektůra BACnet na obrázku 2.4 vychází z modelu ISO/OSI [8].
2.2.3
ZigBee
ZigBee je specifikace pro vysokoúrovňový komunikační protokol užitý v malých a nízkoenergetických bezdrátových digitálních modulech. Tyto moduly jsou založeny na standardu IEEE 802.15.4 pro sítě PAN. Specifikace byla navržena jako jednodušší a levnější varianta než jiné bezdrátové PAN technologie, jako je například Bluetooth. ZigBee je využíváno v bezdrátových projektech, kde je žádána dlouhá výdrž baterií, bezpečnost sítě a nízká datová rychlost. ZigBee komunikuje v bezlicenčním rádiovém ISM pásmu, které je v Evropě na 868MHz, v USA s Australii na 915MHz a celosvětově na 2.4GHz. Přenosová rychlost se pohybuje od 20 do 900 Kb/s. Dále také využívá síť typu mesh, která poskytuje vysokou spolehlivost a možnost zvětšení vzdálenosti. Jsou přirozeně podporovány i sítě typu hvězda a strom. V této technologii se zařízení dělí do třech druhů. První a také nejdůležitější typ je takzvaný "Coordinátor", který musí být obsažen v každé síti přesně jednou. Je schopen mít v sobě uloženy informace o síti. Provádí základní údržbu a kontrolu parametrů sítě, působí jako centrála zabezpečení a uložiště pro 128 bitový zabezpečující klíč. V síti typu hvězda musí být centrálním prvkem a v typu strom kořenem. Druhým typem je "Router". Kromě zpracovávání vlastních zpráv funguje i jako prostředník, který předává data mezi ostatními zařízeními. Poslední je "Konečné zařízení"tzv. End Device, které obsahuje pouze funkcionalitu pro komunikaci s nadřízeným prvkem Coordinátorem nebo Routerem. Nepřeposílá cizí zprávy a proto může být prvek většinu času uspaný. Při uspání zařízení spotřebovává méně energie a prodlužuje tak výdrž na baterii. Také nepotřebuje tolik paměti jako Coordinátor nebo Router, a proto může být levnější na výrobu [1, 24]. ZigBee umožňuje užití dvou na sobě nezávislých adresací. První adresace používá rozšířenou adresu. Rozšířená adresa je statická šedesáti čtyř bitová adresa, která byla
9
2.3. ARDUINO
KAPITOLA 2. TEORETICKÁ ČÁST
definovaná při výrobě s garancí jedinečnosti. Rozšířenou adresu si lze představit jako MAC adresu v Ethernet síti. V druhé adresaci najdeme šestnácti bitové síťové adresy, které se dají přirovnat k IP adrese Ethernetové sítě. Tyto adresy přiřazuje Coordinátor, když se uzel připojí do sítě. U xBee Series 1, které je v projektu využito, lze tuto adresu nastavit v parametru "MY". Pro správnou identifikaci uzlů musí být tato adresa také jedinečná. [3] Nyní je uveden příklad jak mohou vypadat adresy. Obě adresy jsou stejného xBee Series 1 modulu v modu Coordinátor. 0013A200 406F6815 je rozšířená adresa zapsaná v hexadecimálním zápisu tak, jak se vyskytuje na modulu. Síťová adresa vypadá takto 0, což je hodnota obvykle přiřazovaná Coordinátoru.
2.3
Arduino
Arduino je open-source elektronická prototypová platforma. Hardware platforma obsahuje jednoduchý otevřený návrh Arduino desky s jednočipovým microcontrollerem Atmel AVR a se vstupně výstupní podporou přímo na desce. Po softwérové stránce se platforma skládá ze standardního programového překladače a zavaděče, který běží přímo na desce. Arduino lze přeprogramovávat za pomoci jazyku založeného na Wiringu. Syntaxí a knihovnami se velice podobá programovacímu jazyku C/C++ s trochou úprav a zjednodušení. Pro svoji mnohoúčelovost, modularitu a cenu je hojně vyhledávaná mezi kutily, návrháři a každým, kdo vytváří programovatelné obvody [20].
2.3.1
Hardware
Arduino deska obsahuje 8-bitový Atmel AVR microcontrollerem s doplňujícími prvky pro snadnější programování a začleňování do jiných obvodů. Jednou z největších výhod Arduina je způsob připojování. Ten dovoluje k desce s procesorem snadno připojit různé vyměnitelné přídavné moduly, kterým se říká shields. Tyto shieldy mohou přidávat základní desce Arduina různou další funkcialitu od připojení k ethernetu přes Zigbee až po připojení stejnosměrného motoru. Arduino využívá microcontrollery řady megaAVR, speciálně ATmega8, ATmega168, ATmega328, ATmega1280
10
2.3. ARDUINO
KAPITOLA 2. TEORETICKÁ ČÁST
a ATmega2560. Většina desek v sobě obsahuje 3 nebo 5 voltový lineární regulátor a krystal na 16 MHz nebo 8 MHz. Desky také obsahují vstupně výstupní piny, přes které je deska připojena ke zbytku obvodu. Pro příklad v Arduinu Uno je 6 analogových vstupních a 14 digitálních vstupně výstupních pinů. Z těchto 14 je šest pinů výstupních s PWM. Microcontroller Arduina je také předprogramován se zavaděčem, který jednoduše přehraje program do jednočipové flash paměti, na rozdíl od jiných zařízení s nutností externího programátora. Arduina byla při přeprogramování spojena s počítačem přes RS-232 sériovou linku. Nyní jsou desky připojeny přes USB port s naimplementovaným USB-toserial adaptérem [20].
2.3.2
Typy
Vyrábí se spousta různých typů desek, které obsahují různé konfigurace [14]. Zde v tabulce 2.2 uvádím desky, se kterými jsem se při experimentu seznámil. Typ
Fio
Uno
ADK
Microcontroller
ATmega328P
ATmega328
ATmega2560
Napětí
3,3 V
5V
5
Digitální (PWM) piny 14 (6)
14 (6)
54 (14)
Analogové piny
8
6
16
Flash paměti
32 KB
32 KB
256 KB
SRAM
2 KB
2 KB
8 KB
EEPROM
1 KB
1 KB
4 KB
Rychlost krystalu
8 MHz
16 MHz
16 MHz
Zvláštnost
konektor ZigBee
4 sériové linky
a
a USB host pro
bezdrátově
přeprogramova-
zařízení s An-
telný
droid OS
Tab. 2.2: Specifikace použitých Arduin.
11
2.4. FORMÁT JSON
2.3.3
KAPITOLA 2. TEORETICKÁ ČÁST
Software
Pro programování Arduin je doporučováno používat Arduino IDE. Tato multiplatformní aplikace je napsána v Javě a odvozena od vývojového prostředí pro programovací jazyk Processing a projektu Wiring. Je navržena pro představení programování nováčkům bez znalosti vývoje softwaru. IDE v sobě spojuje editor kódu, který zvýrazňuje syntaxi a závorky a automaticky odsazuje, s překladačem a nahráním na desku v jednom tlačítku. Arduino IDE v sobě obsahuje C/C++ knihovnu zvanou "Wiring"(ze stejnojmeného projektu), která velice zjednodušuje práci s vstupně-výstupními operacemi. Pro funkčnost programu je nutné nadefinovat dvě funkce : • setup() - funkce se jednou spustí na startu programu a je určená pro inicializaci • loop() - tělo této funkce se provádí opakovaně v nekonečné smyčce. Pro názornost zde uvádím jednoduchý program, který v intervalu jedna sekunda bliká LED diodou připojenou na digitální pin číslo 13 [14]:. #define LED_PIN 13
//nastaveni pinu, na kterém je LED dioda připojena
void setup () { pinMode (LED_PIN, OUTPUT);
// zapne pin diody na výstup
} void loop () { digitalWrite (LED_PIN, HIGH);
// rozsvítí LED diodu
delay (1000);
// počká jednu sekundu (1000 ms)
digitalWrite (LED_PIN, LOW);
// zhasne LED diodu
delay (1000);
// zase počká jednu sekundu
}
2.4
Formát JSON
JSON pojmenovává odlehčený textový otevřený formát dat pro jejich snadnou výměnu. Vznikl na podmnožině programovacího jazyka JavaScript Standard ECMA262 3rd Edition z prosince 1999. Jedná se o textový na jazyce zcela nezávislý formát.
12
2.4. FORMÁT JSON
KAPITOLA 2. TEORETICKÁ ČÁST
Formát využívá dobře známé konvence z programovacích jazyků jako je například Java, javaScript, Python a mnoha dalších. Díky svým vlastnostem je lehko čitelným a zapisovatelným člověkem i jednoduše analyzovatelným a generovatelným strojem. Formát využívá dvě struktury. První je kolekce párů název a hodnota. V různých jazycích jí realizuje jako objekt, záznam, struktury, hash tabulka, asociativní pole. Druhou strukturou se myslí tříděný seznam hodnot. Ten v jazycích vidíme jako pole, vektor, seznam. Za pomoci těchto struktur lze vytvořit reprezentaci snad každého objektu, který se zkonstruuje pro výměnu dat. Pro zápis těchto struktur do JSONu se využívá 5 konstrukcí s určenou syntaxí. Bílé znaky, jako je mezera nebo konec řádku, lze vkládat mezi jednotlivé hodnoty a syntaktické znaky.
Obr. 2.5: Syntaktický diagram objektu v JSON [16]
První popisovanou konstrukcí je objekt, jehož diagram vidíme na obrázku 2.5. Objekt je netříděná množina párů název a hodnota. Začíná znakem ""a končí znakem "".Za každým názvem následuje znak ":"a páry od sebe dělí znak ",".
Obr. 2.6: Syntaktický diagram pole v JSON [16]
Druhá struktura znázorňuje pole. Jak je vidět na obrázku 2.6, obsahuje setříděnou kolekci hodnot. Pole uvozuje znak "["a zakončuje znak "]". Hodnoty mezi sebou odděluje znak ",".
13
2.4. FORMÁT JSON
KAPITOLA 2. TEORETICKÁ ČÁST
Obr. 2.7: Syntaktický diagram hodnoty v JSON [16]
Další struktura je hodnota, kterou ukazuje obrázek 2.7. Pod pojmem hodnota rozumíme číslo, řetězec, true, false, null, pole nebo dokonce objekt. Uvedené struktury mohou být vnořené.
Obr. 2.8: Syntaktický diagram čísla v JSON [16]
Číslo z obrázku 2.8 se velice podobá číslům v programovacích jazycích. Hlavní rozdíl je v nepoužívání osmičkového a hexadecimálního zápisu. Řetězec na obrázku 2.9 obsahuje žádný nebo více znaků. Řetězec je uzavřen do dvojitých uvozovek a využívá takzvaných únikových sekvencích s použitím zpětného lomítka. Znak je znázorněn jako řetězec o jednom znaku. Je tedy jasné, že se JSON řetězec velmi shoduje s řetězcem programovacích jazyků.
14
2.4. FORMÁT JSON
KAPITOLA 2. TEORETICKÁ ČÁST
Obr. 2.9: Syntaktický diagram řetězce v JSON [16]
Pro názornost zde uvedu ukázku, jak takový JSON vypadá. Pro snadnější čitelnost jednotlivé řádky, které se při strojovém analýze ignorují, odřádkuji [16]. { "nazev" : "hodnota", "objekt": { "cisloO" :200, "retezec":"OK"}, "pole"
: ["jedna","dva"],
"cislo" : 1 }
15
KAPITOLA 3. NÁVRH
3
NÁVRH
3.1
Popis
V navrženém hypotetickém inteligentním domě bude spolupracovat několik druhů modulů. Činnost modulů se od sebe liší do stejné míry jako se od sebe liší konfigurace jednotlivých druhů. Nejhloupější částí systému jsou pasivní moduly, které provádí určenou akci pouze na základě zprávy. Chytřejší část nazýváme aktivní modul. Ten na rozdíl od předchůdce dokáže své provádění řídit podle definovaných pravidel, která se mohou v průběhu fungování systému měnit. Rozšířením aktivního modulu vznikne centrála, která zajišťuje shromažďování informací a distribuci nastavení nebo pravidel do ostatních modulů systému. Poslední a nechytřejší částí, která nemusí být přímo součástí systému ani být ve stejné budově jako řízený systém, je Externí modul. Externí modul sbírá informace ze systému přes centrálu a zpět posílá zprávy ovlivňující systém. Moduly, s výjimkou externího, mezi sebou udržují bezdrátové spojení, která zajišťuje spolehlivost komunikace. Pro komunikaci jsou využity XBee moduly Series 1, což jsou ZigBee moduly společností Digi. Pro vytvoření centrály a aktivních modulů je využito několik druhů otevřeného hardwaru Arduino.
3.2
Pasivní modul
Nejjednodušší modul celého systému se skládá z XBee modulu, zdroje energie, případně z nějakého senzoru. U tohoto modulu se využívá jednoho druhu xBee zprávy. "I/O Data Sample Rx Indicator"zpráva je určena pro odesílání naměřených dat ze senzorů do inteligentnějších modulů [4]. Pro svou jednoduchost a energetickou nenáročnost je jako zdroj energie uvažována obyčejná 3 Voltová baterie.
16
3.3. AKTIVNÍ MODUL
KAPITOLA 3. NÁVRH
Obr. 3.1: Jednoduché schéma Pasivního modulu.
3.3
Aktivní modul
Aktivní modul už v sobě obsahuje programovatelnou jednotku. Tato jednotka je založena na desce Arduino Uno nebo Arduino Fio. K programovací jednotce musí být připojeno XBee kvůli komunikaci s ostatními moduly systému. K jednotce lze také připojit další senzory a ovládací prvky. V programovací jednotce běží ovládací program tohoto modulu. Programy modulů dokáží provést základní činnosti, jako je automatické nastavení ovládacího prvku. Pro automatizování ovládacích prvků se využívá definovaných pravidel. Pravidla lze předefinovat zasláním zprávy z centrály. Pak je také v programovací jednotce nastaven interval mezi zasíláním zjištěných senzorových informací do shromažďovacího místa dat. Moduly s programovatelnou jednotkou Arduino Fio používají jako energetický zdroj Lithium-polymerovou baterii.
17
3.4. CENTRÁLA
KAPITOLA 3. NÁVRH
Obr. 3.2: Schéma ukázkového Aktivního modulu.
3.4
Centrála
Centrála patří mezi nejvýkonnější moduly systému, výkonnější už může být pouze externí modul. Pro zajištění dostatečně velkého výkonu programovatelné jednotky se sem umístí Arduino ADK na místo Una nebo Fia. Jinak se hardwarové vybavení shoduje s aktivním modulem. Základem činností prováděných v centrále je činnost aktivního modulu, ale na rozdíl od aktivního modulu zajišťuje také distribuci nových pravidel získaných od inteligentnějšího externího modulu. Tento modul slouží ke komunikaci celého systému s externím modulem. Bez tohoto modulu by se ostatní vnitřní moduly systému nedokázaly přizpůsobit požadavkům externího modulu. Prvek zajišťuje i shromažďování dat ze senzorů ostatních modulů a také odesílání shromážděných dat do externího modulu.
18
3.5. EXTERNÍ MODUL
KAPITOLA 3. NÁVRH
Obr. 3.3: Jednoduché schéma Centrála.
3.5
Externí modul
Změny v nastavení systému se provádí přes takzvaný externí modul. Modul jako jediný z celého systému přichází do kontaktu s uživatelem a obyvatelem domu. Pro snadné vzdálené ovládání je externí modul webová aplikace. Pro vytvoření webové aplikace je použita Java EE, přesněji Java Servlet. Komunikaci mezi externím modulem se zbytkem systému zajišťují přes ethernetovou počítačovou sít zprávy http. Server webové aplikace dostane zprávu, na kterou adekvátně odpoví. Http zpráva typu GET značí, že se systém, přesněji centrála, dotazuje na změny. Server zasílá změny zpět jako odpověď. Druhým očekávaným typem zprávy je zaslání nasbíraných dat ze senzorů modulů. Pro posílání nasbíraných dat se využívá http zpráva typu PUT.
19
3.6. KOMUNIKACE
3.6
KAPITOLA 3. NÁVRH
Komunikace
Komunikace v síti probíhá za pomoci zpráv. Tyto uživatelské zprávy v sobě přenáší adresáta a informace nutné k řízení celé sítě.
3.6.1
Formát zpráv
Zprávy jsou ve formátu JSON. Původně jsem uvažoval o užití formátu XML. Moduly mají však docela dost omezenou velikost datové paměti. Bylo vhodné zmenšit velikost jednotlivých zpráv a tím i související objem dat ke zpracování. Dalším důvodem pro zmenšení zasílaných zpráv byla maximální velikost zprávy, která lze zasílat přes xBee v API modu.
3.6.2
Přenos zprávy přes Ethernet
Centrála zažádá externí modul o řídící uživatelskou zprávu. Externí modul ve své odpovědi odešle tuto uživatelskou zprávu. Pro správné řízení za užití externího modulu musí být externí modul informován o činnosti v senzorové síti. Tento úkon zajišťuje centrální modul, který naměřené hodnoty senzorů a ostatní informace odesílá do externího modulu.
3.6.3
Přenos zprávy přes xBee
I přes použití formátu JSON xBee v API módu nedokáže poslat celou uživatelskou zprávu, která je delší než maximálně dovolená délka zprávy v xBee. Tento problém jsem vyřešil rozdělením uživatelské zprávy do více po sobě jdoucích zpráv posílaných přes xBee. Při odesílání uživatelské zprávy jí program rozdělí na části o dovolené délce. Tyto části jsou za sebou odeslány v nové zprávě s minimálním zpožděním. Přijímací strana netuší na kolik částí byla uživatelská zpráva rozdělena, proto příjemce zprávy při obdržení zprávy čeká definovaný interval na další zprávu. Pokud přijde v určeném intervalu další zpráva, příjemce předpokládá, že přišlá zpráva je další částí
20
3.6. KOMUNIKACE
KAPITOLA 3. NÁVRH
přicházející uživatelské zprávy. Zprávy s částmi uživatelské zprávy příjemce spojí v jednu zprávu. Pro odeslání zprávy je nutné znát adresu příjemce. Tuto adresu centrála (odesílatel) zjistí z uživatelské zprávy v níž je obsažena. Pro odeslání zpráv na centrálu je využita síťová šestnácti bitová adresa. Toto adresování jsem použil hlavně pro jednu svoji vlastnost. Síťovou adresu lze na xBee modulu nastavit na rozdíl od Rozšířené šedesáti čtyř bitové adresy, která je fyzicky závislá na xBee modulu a tedy nezměnitelná. Každý pasivní i aktivní prvek odesílá informace na centrálu. Pokud by bylo potřeba vyměnit z nějakého důvodu xBee modul centrály, musela by se rozšířená adresa změnit u všech vnitřních prvků sítě. U využití síťové adresy stačí změnit jen jednu adresu a to ještě na xBee modulu, který se vyměňuje.
21
KAPITOLA 4. IMPLEMENTACE
4
IMPLEMENTACE
4.1
Pasivní modul
Pasivní modul, přesněji xBee, řídí firmware od výrobce, nikoliv můj vlastní program. Činnost firmwaru lze přizpůsobit za pomocí parametrů. První parametr ID určuje takzvané PAN ID, jedná se o identifikaci sítě ve které bude modul komunikovat s ostatními moduly. Další tři parametry, které je nutné nastavit pro správné adresování, jsou DH,DL a MY. DH a DL určují rozšířenou nebo síťovou adresu příjemce posílané zprávy. Pokud je DH 0 a DL menší než hexadecimální hodnota FFFF jedná se o síťovou adresu jinak o rozšířenou adresu. Parametrem MY lze nastavit síťovou adresu u nastavovaného modulu. Parametr IR určuje interval mezi odesílání zpráv na adresu z DH a DL. Čas intervalu se nastavuje v milisekundách. Do hodnoty lze maximálně nastavit FFFF, což je přibližně šedesát pět a půl sekundy. Parametry s názvy od D0 do D8 označují jednotlivá nastavení podobně pojmenovaných pinů, které jsou na modulu xBee. Nultý až pátý pin dokáže zpracovat jak digitální tak i analogová data. Zbylé označené piny jsou určeny k zjišťování pouze digitálních hodnot. Nastavením parametru na hodnotu 2 respektive 3 dáme xBee vědět, že chceme znát analogovou respektive digitální hodnotu. Při odesílání zprávy se zjišťují pouze piny, které jsou nastaveny jako analogový nebo digitální vstup. Pro ukázku zde uvedu konfiguraci XBee v pasivním modulu se vstupem 0 a 3 na analogovou a digitální hodnotu: ATID 1234 ATDH 0 ATDL 0 ATMY 103 ATIR FFFF ATD0 2 ATD3 3
22
4.2. AKTIVNÍ MODUL
4.2
KAPITOLA 4. IMPLEMENTACE
Aktivní modul
Aktivní modul obsahuje obslužný program řízení Arduina, který je mozkem celého modulu. Na vstupy jsou připojeny senzory a na výstupy akční člen. Digitální piny Arduina se dokáží chovat jako vstupy, ale také jako výstupy. Aby Arduino vědělo, jak se má chovat na určitém portu, je nutné v programu definovat, jaký pin je vstupní a jaký výstupní. Arduino má za úkol provádět tři hlavní činnosti. První činností je odesílání informací ze senzorů na centrálu. Druhý úkon obstarává příjem zpráv z centrály a třetí provádí akci.
4.2.1
Nastavení xBee
V aktivním modulu se také vyskytuje modul xBee, který musí být pro správné fungování nakonfigurován. Pro správnou funkci je nutné nastavit parametr ID stejně jak je řečeno u Pasivního modulu. Pak je také vhodné nastavit MY. Další velice důležité parametry, které je nutné nastavit pro komunikaci mezi Arduinem a xBeem, jsou BD a AP. Parametr BD určuje rychlost přenosu dat sériového rozhraní mezi Arduinem a xBeem. V mém případě jsem se rozhodl použít 57600 baudu, což je hodnota 6 daného parametru. Druhý nutný parametr je AP, ten nastavuje API mód. API režim je určen pro komunikaci mezi dvěma zařízeními. Výhoda API režimu oproti normálnímu je kontrola na chyby a potvrzování přijetí. Hodnotu je nutné nastavit na 2. Tato hodnota zapíná API mód s únikovým znakem. Pro ukázku zde uvedu konfiguraci XBee užitý v mém ukázkovém aktivním modulu: ATID 1234 ATMY 2 ATBD 6 ATAP 2
23
4.2. AKTIVNÍ MODUL
4.2.2
KAPITOLA 4. IMPLEMENTACE
Poslání zpráv
Zapnutí API módu s únikovým znakem je podmínkou pro správné fungování Arduino knihovny "xbee-arduino" na obsluhu xBee [9]. Nejprve se vytvoří uživatelská JSON zpráva. Tato zpráva obsahuje adresu odesílatele a naměřené hodnoty ze vstupů přesněji senzorů. Adresa odesílatele je definovaná při překladu programu pro Aktivní modul. Naměřené hodnoty získává program z předem definovaných vstupních pinů, na kterých jsou připojeny měřící zařízení. Ukázka vytvoření JSON zprávy: String makeJSON(long Name){ String json="{\"name\":"; json+=String(Name); json+=",\"input\":{"; // vypsani vstupu(senzory) for(int i=0;i<(sizeof(inPin)/sizeof(int));i++){ json+="\"IN"; json+=inPin[i]; json+="\":"; json+=analogRead(inPin[i]); json+=","; } //smazani posledni prebitecne , if(json.endsWith(",")){ json=json.substring(0,json.length()-1); } //uzavreni zpravy json+="}}"; return json; } Po vytvoření zprávy se zpráva odešle na centrálu. Po jejím odeslání program ještě zjišťuje, zda byla zpráva odesilatelem přijata. Pokud je uživatelská zpráva delší
24
4.2. AKTIVNÍ MODUL
KAPITOLA 4. IMPLEMENTACE
než maximální možná odesilatelná, zpráva se pošle po částech. Ukázka odeslání zprávy na logickou adresu: void xBeeS1_send16(XBee xb,uint16_t adrs,String msg){ //pomocný retezec String tmp; //vytvoreni pozadavku Tx16Request txS1 = Tx16Request(); //nastaveni adresy txS1.setAddress16(adrs); //rozkouskovani na kratsi zpravy na nastavenou maximalni delku for(int i=0,delka=xBeeMax;i<msg.length();i=delka,delka=i+xBeeMax) { //pokud je posledni cast kratsi nez maximalni delka if (msg.length()<delka) delka=msg.length(); //nastaveni obsahu zpravy msg.substring(i,delka).getBytes(load,delka-i+1); txS1.setPayload(load); //nastaveni delky obsahu zpravy txS1.setPayloadLength(delka-i+1); //odeslani xb.send(txS1); //ocekavani potvrzeni prijeti zpravy if (xBeeS1_read(xb,1000,tmp)==0) lc_printAction("xBee poslal zpravu"); else lc_printAction("xBee Neposlal zpravu"); }; }
25
4.2. AKTIVNÍ MODUL
4.2.3
KAPITOLA 4. IMPLEMENTACE
Přijímaní zpráv
Na rozdíl od odesílání modul neustále očekává příchod zprávy. Pokud nějaká zpráva na modul přijde, program ještě čeká určenou dobu na přijetí další zprávy. Proč se očekává více zpráv rychle za sebou? Odpovědí je možnost posílání dlouhé zprávy, která může být rozdělené do více částí. //Nacteni prichozich zprav prislich v~maximalnim intervalu void xBeeS1_reads(XBee xb,String& s){ //pomocny retezec pro castecnou zpravu String tmp; //vyprazdneni retezce pro zprávu s=""; //ctení se opakuje dokud zprávy přichazí a nenastane chyba while(xBeeS1_read(xb,READ_TIME,tmp)==0)s+=tmp; } První, co se provede, je ověření JSON formátu. Pokud zpráva tímto ověřením neprojde, je další zpracování zastaveno a zpráva je zahozena. Po úspěšném prověření program zprávu zpracuje. Zpracování zprávy probíhá rozdělením zprávy po informacích. Informace o nastavení jednotlivých výstupů se uloží do pole pro ně určené. Důvodem pro uložení je možnost opětovného použití těchto informací. Pole má takovou velikost jako má Arduino množinu výstupů.
4.2.4
Provádění akce
Provádění akce vlastně znamená pouhé předání získané informace ze zprávy na výstup Arduina se zapojeným akčním členem. Při této činnosti je využito pole informací pro výstupy. Tuto činnost provádí zde ukázaná funkce: //zapsani hodnoty na vystupni pin urceny v~poli outPin void doActionPin(){ for(int i=0;i<(sizeof(outPin)/sizeof(int));i++)
26
4.3. CENTRÁLA
KAPITOLA 4. IMPLEMENTACE
analogWrite(outPin[i],readVal[outPin[i]]); }
4.3
Centrála
Centrála je asi nejdůležitějším prvkem celé sítě. Zprostředkovává předávání získaných informací ze sítě do externího modulu a také zpětné posílání příkazů nastavení pro jednotlivé prvky sítě. Centrála také obsahuje modulu xBee a ještě pro potřeby komunikace s externím modulem je vybaven připojením k Ethernet síti. Připojení Arduina k Ethernetu sítí zajišťuje Ethernet shield.
4.3.1
Nastavení xBee
Nastavení modulu je velice podobné konfiguraci Aktivního modulu. Hlavní rozdíl je v nastavení xBee na Coordinátor za pomoci parametru CE. Pokud je v CE parametru nastavena 1, xBee modul funguje jako Coordinator. Nastavení parametru MY u Coordinatoru bývá většinou nastavena na hodnotu 0. Aby xBee modul byl také v API módu s únikovým znakem, parametr AP obsahuje hodnotu 2. Pro ukázku zde uvedu konfiguraci XBee užitý v mém ukázkové centrále: ATID 1234 ATMY 0 ATCE 1 ATBD 6 ATAP 2
4.3.2
Posílání nastavení pro akční členy
Tato činnost se děje v určeném intervalu. Začíná odesláním GET zprávy přes Ethernet na externí modul. Následuje očekávání odpovědi obsahující JSON zprávu. Z této zprávy se po ověření správnosti formátu zjistí adresa aktivního modulu, pro kterého je zpráva určena.
27
4.4. EXTERNÍ MODUL
KAPITOLA 4. IMPLEMENTACE
Zpráva se odešle na určenou adresu xBee aktivního modulu. Po odeslání se čeká na odpověď, zda příjemce zprávu obdržel.
4.3.3
Posílání dat ze senzorů
Daná akce se provádí vždy na základě přišlé zprávy. Jak už bylo řečeno, startem pro toto chování je příchod zprávy od pasivního nebo aktivního modulu. Chováním se od sebe trochu liší podle typu odesílajícího modulu. První způsob značí činnost pro pasivní modul. Modul posílá "I/O Data Sample Rx Indicator"zprávu, která nemá správný formát uživatelské zprávy. Zpráva modulu se převede na uživatelskou zprávu obsahující data vstupů. V uživatelské zprávě musí být také uvedena adresa modulu, aby externí modul věděl, od koho zpráva pochází. Tuto adresaci musí rovněž zajistit centrála, proto centrála přidá do zprávy adresu odesílatele. Druhý způsob chování je určen pro aktivní modul. Zpráva z aktivního modulu už je zprávou uživatelskou ,která obsahuje adresu odesilatele, a není nutné jí tedy přeformátovat ani přidávat adresu. Dále se už činnost nerozchází. Postoupí se k přeposlání přijaté zprávy. Přes stejný Ethernet, jakým externí modul posílá zprávy do centrály, centrála odesílá došlou zprávu. Zpráva se odesílá jako PUT zpráva.
4.4
Externí modul
Externí modul obstarává rozhraní mezi senzorovou sítí a rozhodujícím členem, v tomto případě se myslí obyvatelem domu. Modul je vlastně webová aplikace založená na Javě EE. Webová aplikace obsahuje dvě velice jednoduché stránky s formuláři. Úvodní stránka zobrazuje již naměřené hodnoty na senzorech vybraného modulu. Ve druhé stránce se do formuláře se vyplňují udaje o nastavení, které se mají odeslat na modul senzorové sítě.
28
4.4. EXTERNÍ MODUL
4.4.1
KAPITOLA 4. IMPLEMENTACE
Nastavení modulu
Správné fungování webové aplikace zajišťuje Apache Tomcat. Uchovávání příchozích dat z modulu obstarává databáze, konkrétně PostgreSQL. Tato databáze se nalézá na stejné stroji jako je aplikační server. Aplikace má vlastní přístup do databáze pojmenované "arduin" pod uživatelským jménem "username" a heslem "password". Pokud potřebné tabulky v databázi nejsou, aplikace si je při jejich potřebě vytvoří.
4.4.2
Zobrazení senzorových dat modulu
Pro zobrazení dat ze senzorů je vytvořena úvodní stránka webové aplikace "index.jsp". Ve výběrovém poli formuláře se nachází v hexadecimální podobě název, přesněji adresa modulu systému, o kterém už má externí modul záznamy. Zobrazení záznamů chtěného modulu se provede pouhým výběrem modulu z pole hodnot daných v datové třídě ListName. Záznamy z modulu se po určení zobrazí v tabulce pod výběrovým polem. Zde je ukázka výběru modulu z index.jsp: <jsp:useBean id="nameBean" scope="page" class="servlet.data.ListName">
Načtení dat pro zobrazení zajišťuje servlet ShowData. Tento servlet obslouží POST požadavek od formuláře z index.jsp. Servlet se připojí do databáze s daty a dotáže se na všechny uložené záznamy od vybraného modul ve formuláři. Jednotlivé odpovědi se převedou do datových tříd ModuleHistoryRecord a ty se shromáždí do třídy ModuleHistory. Třída ModuleHistory tedy obsahuje všechny nalezené záznamy modulu a proto se této třídy využije k přenesení dat zpět na stránku, která údaje zobrazí jako tabulku. Ukázka výpisu tabulky z index.jsp: <jsp:useBean id="dataInfoBean" scope="page" class="servlet.data.ModuleHistory">
${label} |
${rec.getRecord().get(label)} |
30
4.4. EXTERNÍ MODUL
4.4.3
KAPITOLA 4. IMPLEMENTACE
Nastavení zprávy pro modul
Pro tuto činnost webová aplikace obsahuje druhou stránku "config.jsp". Tato stránka obsahuje formulář, který vytvoří zprávy pro modul. Formulář obsahuje stejné výběrové pole jako bylo u výše uvedeného zobrazování dat. Zde je toto pole užito hlavně kvůli zjednodušení výběru adresy chtěného modulu. Ve formuláři se dále nachází standardní potvrzovací a resetovací tlačítko. Dále jsou ve formuláři textové vstupy pro jednotlivé výstupy modulu. Tyto textové vstupy jsou zaznamenány v datové třídě Model. Očekávané hodnoty vstupů jsou celá čísla, na která je aplikace javaskriptově kontroluje přímo při zadávaní do formuláře: function check(name) { if(name.value!=""){ if(isNaN(name.value)){ alert(name.name+": Prosim zadavejte pouze cele cislo!"); name.focus(); return false; } else name.value=parseInt(name.value); }; return true; } Zpracování odeslaného formuláře obstarává servlet Control metodou pro požadavek POST. Ten předá jméno, přesněji adresu, a mapu zadaných výstupů modulu do statické proměnné datové třídy ModulData.
4.4.4
Odesílání zprávy s nastavením modul
Toto odesílání zařizuje stejný servlet Control jako nastavení zprávy, ale tentokrát metodou pro GET.
31
4.4. EXTERNÍ MODUL
KAPITOLA 4. IMPLEMENTACE
Práce servletu je zde velice jednoduchá. Čeká na žádost, která je popsaná u centrály. Po přijetí žádosti metoda vezme statickou proměnou, určenou při nastavení zprávy, a převede jí za pomocí knihovny Gson [10] do odpovědi ve formátu JSON. Pro názornost je zde uvedeno, jak vypadá posílaná odesílaná JSON zpráva od modul s adresou 103 (v hexadecimální podobě) a nastavenými vstupy 0 respektive 2 na hodnotu 0 respektive 254: {"name":259,"input":{"IN2":254,"IN0":0}}
4.4.5
Přijímání dat ze senzorů
Tento příjem také zajišťuje servlet Control nyní však metodou pro PUT. Servlet očekává PUT požadavek od centrály se zprávou s daty modulu. Metoda nejprve zkontroluje v hlavičce požadavku typ obsahu požadavku. Pokud zpráva není ve formátu JSON je požadavek zahozen a nic se neprovede. Jinak metoda přetvoří zprávu, opět díky Gson knihovny, do nové třídy ModulData. // pokud je v~hlavicce nastaven format zpravy na JSON if (request.getContentType().toLowerCase().contains("json")) { Gson gson = new Gson(); // nacteni JSON zpravy z~modulu ModulData arduinData = gson.fromJson(request.getReader(),ModulData.class); // ulozeni nactenich dat zpravy do databaze arduinData.dbInsert(connection); } Třída ModulData uloží přijaté informace jako je jméno s mapou hodnot vstupů do databáze. Při ukládání do databáze se ještě k záznamu přidá aktuální čas, který zjednodušuje orientaci záznamech historie modulu.
32
KAPITOLA 5. ZÁVĚR
5
ZÁVĚR
Hlavním úkolem této bakalářské práce je experiment vytvoření základu chytrého domu. V této práci popisuji vlastní návrh chytrého domu s využitím bezdrátové senzorové sítě a otevřeného hardwaru. Pro spojení jednotlivých modulů mezi sebou jsem využil bezdrátovou komunikaci založenou na specifikaci ZigBee. Obrovskou výhodou bezdrátové komunikace je možnost snadného dobudování sítě bez nutnosti stavebních úprav. Specifikace ZigBee má navíc velkou podporu od různých firem zabývajících se bezdrátovou automatizační technikou pro budovy. V inteligentních modulech jsem využil jako základ Arduino desky, a to pro svoji jednoduchost a modifikovatelnost. Externím modulem by mohla být i jiná než webová aplikace, například aplikace pro zařízení s operační systém Android, který lze přímo připojit do centrály. Aplikace pro Android mi ale nepřipadá tak univerzální jako jsou internetové stránky. Webová aplikace není nikterak závislá na operačním systému ovládacího přístroje a pokud je aplikace připojená na internet, je dostupná i z druhého konce světa. Pokud by se tento projekt měl objevit v praxi v domácnostech, bylo by vhodné zvýšit bezpečnost spojení přinejmenším šifrováním. V tuto chvíli lze zprávy ve spojích velice snadno podvrhnout a to zprávu jak se senzorovými daty tak s povely. Spojení centrály a externího modulu zahajuje sice centrála, ale pokud si jiný stroj přivlastní identitu externího modulu, centrála to nikdy nezjistí. Ve spoji centrály a aktivního modulu se také neověřuje totožnost stran. Pokud útočník zná ID sítě, adresu modulu a formát zprávy, může dát povel aktivnímu modulu bez informování centrály. Jedno z možných vylepšení se nabízí u zprávy s daty modulu. U této zprávy se adresa odesílatele definuje při překladu obslužného programu modulu. Při výměně ZigBee modulu je nutné pozměnit adresu v obslužném program. Tomu by se dalo předejít pomocí automatického zjišťování adresy z hlavičky ZigBee zprávy.
33
LITERATURA [1] Chrastinová, A.: Komponenty nízkoenergetické inteligentní domácnosti. Diplomová práce, České vysoké učení technické, 2008. [2] Cosby, S.: BACnet Architecture [online]. http://www.chipkin.com/articles/ bacnet-architecture, 2007-9-25 [cit. 2012-1-22]. [3] Digi:
XBee
ZigBee
Addressing
Knowledge
Base
Article
[online].
http://www.digi.com/support/kbase/kbaseresultdetl?id=2191,
[cit.
2012-1-22]. [4] Faludi, R.: Building Wireless Sensor Network. Gravenstein Highway North, Sebastopol, CA: O’Reilly, 2011. [5] knx.org: KNX Association [online]. http://www.knx.org, 2012-2-22 [cit. 20124-6]. [6] Köhler, W.: Simulation of a KNX network with EIBsec protocol extendions. Diplomová práce, Technische Universität Wien, 2008. [7] Pátík, P.: Signál jednotného času GPS v aplikacích inteligentních budov. Diplomová práce, Univerzita Tomáše Bati, 2006. [8] Pátík, P.: Návrh prvků a úloh sběrnicového sysému LonWorks v laboratoři Inteligentní budovy. Diplomová práce, Univerzita Tomáše Bati, 2008. [9] Rapp, A.: xbee-arduino [online]. 2011-12-21, http://code.google.com/ p/xbee-arduino/. [10] Singh,
I.;
Leitch,
J.:
xbee-arduino
[online].
2011-12-21,
http://code.google.com/p/google-gson/. [11] Somfy: line].
Technické
informace
o
KNX
/
EIB
systému
[on-
http://www.somfyarchitecture.cz/downloads/buildings/
technicke_informace_o_knx_systemu.pdf, [cit. 2012-2-22].
[12] Vojáček, A.: Sběrnice KNX pro řízení budov | Automatizace.HW.cz. http://automatizace.hw.cz/clanek/2006061001, 2006-6-10 [cit. 2012-1-22]. [13] Akční členy [online]. http://ari.wikidot.com/akcni-cleny, [cit. 2012-2-22]. [14] Arduino [online]. [cit. 2011-12-26], http://arduino.cc/. [15] BACnet® International [online]. http://www.bacnetinternational.net, [cit. 2011-12-26]. [16] Úvod do JSON [online]. [cit. 2012-4-11], http://www.json.org/json-cz.html. [17] Wikipedia: Building automation [online]. http://en.wikipedia.org/wiki/ Building_automation, 2011-12-11 [cit. 2012-1-21]. [18] Wikipedia: Home automation [online]. http://en.wikipedia.org/wiki/ Home_automation, 2011-12-11 [cit. 2012-1-21]. [19] Wikipedia: Wireless sensor network [online]. http://en.wikipedia.org/ wiki/Wireless_sensor_network, 2011-12-11 [cit. 2012-1-21]. [20] Wikipedia: Arduino [online]. http://en.wikipedia.org/wiki/Arduino, 201112-22 [cit. 2011-12-22]. [21] Wikipedia: BACnet [online]. http://en.wikipedia.org/wiki/BACnet, 201112-22 [cit. 2011-12-22]. [22] Wikipedia: Senzor [online]. http://cs.wikipedia.org/wiki/Senzor, 201112-22 [cit. 2011-12-22]. [23] Wikipedia:
Programmable
logic
controller
[online].
http://en.wikipedia.org/wiki/Programmable_Logic_Controller,
2011-
12-26 [cit. 2012-1-31]. [24] Wikipedia: ZigBee [online]. http://en.wikipedia.org/wiki/ZigBee, 2012-116 [cit. 2012-1-22].
SEZNAM SYMBOLŮ, VELIČIN A ZKRATEK EHS
European Home System
EIB
European Installation Bus
BAU Bus Access Unit BACnet Building Automatization and Control network ASHRAE American Society of Heating, Refrigerating and Air-Conditioning Engineers ANSI American National Standards Institute ISO
International Organization for Standardization
EN
European Norm
SAC
Standardization Administration of the People’s Republic of China
TP
Twisted Pair
SELV Safety Extra-Low Voltage PL
Powerline
RF
Radio frequency
BACnet BuildingAutomatization and Control network IEEE Institute of Electrical and Electronics Engineers PAN Personal Area Network ISM
Industrial, Scientific and Medical
PWM pulzní modulace ECMA European Computer Manufacturers Association MAC Media Access Control
JSON JavaScript Object Notation API
Application Programming Interface
SEZNAM OBRÁZKŮ 2.1
KNX struktura sítě rozdělená adresací na zóny [12] . . . . . . . . . .
5
2.2
KNX telegram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.3
Posílání telegramu po sběrnici . . . . . . . . . . . . . . . . . . . . . .
8
2.4
Složení architektůry BACnet [2] . . . . . . . . . . . . . . . . . . . . .
8
2.5
Syntaktický diagram objektu v JSON [16] . . . . . . . . . . . . . . . 13
2.6
Syntaktický diagram pole v JSON [16] . . . . . . . . . . . . . . . . . 13
2.7
Syntaktický diagram hodnoty v JSON [16] . . . . . . . . . . . . . . . 14
2.8
Syntaktický diagram čísla v JSON [16] . . . . . . . . . . . . . . . . . 14
2.9
Syntaktický diagram řetězce v JSON [16] . . . . . . . . . . . . . . . . 15
3.1
Jednoduché schéma Pasivního modulu. . . . . . . . . . . . . . . . . . 17
3.2
Schéma ukázkového Aktivního modulu. . . . . . . . . . . . . . . . . . 18
3.3
Jednoduché schéma Centrála. . . . . . . . . . . . . . . . . . . . . . . 19
SEZNAM TABULEK 2.1
Senzory použitelné v chytrém domě. . . . . . . . . . . . . . . . . . . .
3
2.2
Specifikace použitých Arduin. . . . . . . . . . . . . . . . . . . . . . . 11
PŘÍLOHA Obsah CD CD obsahuje složku se zdrojovými soubory. Zdrojové soubory jsou rozděleny do složek podle programovacího jazyka a modulu, pro který jsou určeny. Dále se na CD vyskytují nestandardní knihovny potřebné k přeložení zdrojového kód.