Návrh aplikace
Project Westpon Inteligentní simulátor budov
Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich
Project Westpon
Specifikace požadavků
1. Úvod 1.1.
Účel dokumentu Tento dokument má za účel detailně popsat návrh naší aplikace a to jak statickou, jak i dynamickou část. Převážně ho tvoří okomentované UML diagramy popisující každý problém, na který jsme během návrhu aplikace narazili.
1.2.
Reference a odkazy Při vývoji projektu byl použit systém, který umožňuje schraňovat veškeré materiály, které v průběhu vývoje vznikly v přehledné formě. Webová adresa do systému je: http://kenai.com/projects/westpon/
1.3.
Obecné informace Návrh projektu by se měl číst postupně a bez přeskakování jednotlivých částí. V případě, že přečtete dokument od začátku až do konce, neměla by vám chybět žádná důležitá informace a měli byste pochopit návrh celého projektu simulátoru inteligentních budov.
2|Stránka
Project Westpon
Specifikace požadavků
2. Business návrh 2.1.
Doménový model
Na Obrázku č.1 je znázorněn model struktur, ze kterých se skládá budova. Hlavní stavební kámen představuje třída BuildingObject. Tento objekt má svoje jméno a id, které ho jednoznačně určuje. To umožňuje aplikaci poskytovat API pro načítání a změnu dat libovolného objektu budovy. BuildingObjekty se dělí na dva druhy. První z nich, SimpleObject, představuje jednoduchý objekt, který má v sobě obsaženu pouze svoji polohu a velikost. Mezi tyto objekty patří například senzory, aktuátory, ale i dveře a okna. Oproti tomu ComposedObject reprezentuje objekt složený z dalších objektů. Toto složení je zaznamenáno pomocí třídy Ground, které obsahuje čtvercovou síť. V každém poli této čtvercové sítě je uložena informace o tom, jaký BuildingObject tuto pozici zabírá. Mezi složené objekty patří například podlaží. class Obj e... BuildingObj ect -
Position -
depth: int height: int width: int
SimpleObj ect
+is on position 1
Id: int Name: string
ComposedObj ect
Ground
+has description of +belongs composition to 1
1
-
content
+has size 1 Dimension -
x: int y: int z: int
Obrázek č.1: Diagram business objektů struktury budovy Na obrázku č.2 je zobrazeno konkrétní složení budovy. Ta je reprezentována třídou Building. Tato třída v sobě kromě svého id a jména nese navíc ještě informaci o jednotlivých patrech, jejich počtu a pořadí. Její výška je určena součtem výšek jednotlivých pater. Dále je v budově uložena také informace o jejím okolním prostoru. Mapa budovy (Ground) se pak skládá z jejího půdorysu a tohoto okolního prostoru. Třída Floor reprezentuje jednotlivá patra. Tvar podlaží je určen půdorysem budovy. Patro v sobě obsahuje informaci o jednotlivých pokojích, které se v něm nacházejí. Jeho mapa 3|Stránka
Project Westpon
Specifikace požadavků
(Ground) se pak skládá z okolního prostoru a půdorysu budovy, který je vyplněn místnostmi. Část půdorysu, ve které se nenachází žádná místnost, představuje nevyplněnou část, tedy zeď. Patro v sobě dále nese informaci o své výšce. Pokoj představuje třída Room. Tato třída v sobě nese informaci o jednotlivých senzorech a aktuátorech, které se v něm nachází. Dále v sobě má uložen seznam všech otvorů ve zdi. Mezi ně patří okna, která vedou z pokoje do okolního prostoru budovy, dveře, které vedou mezi dvěma pokoji ve stejném patře a schody, které spojují dva pokoje v sousedních patrech. class Building
BuildingObject Obj ects::ComposedObj ect
Floor
Building
+consists of 0..*
+is on floor
1
1
1
+has outer space 1
+consints of
Room
0..* 1 +is in room
1 +from
1 +to
+is in room +is filled with Status -
state: int
+is in room
Obj ects::SimpleObj ect
HoleInWall
1
1
Actuator
Sensor
currentTemperature: int
DoorOrWindow
Stairs
HeatSensor
Heating -
1 BuildingObject
Dev ice
+has status 1
0..*
-
currentTemperature: int
Obrázek č.2: Konkrétní struktura budovy
4|Stránka
Project Westpon
Specifikace požadavků
Třída HoleInWall je jednoduchý objekt, který reprezentuje již zmíněný otvor ve zdi. Ať už ji tvoří okno, dveře nebo schody, má v sobě vždy uloženu informaci o původním prostoru a prostoru, do kterého vede. Poslední jednoduchý objet je zařízení (Device). Tato zařízení jsou rozmístěna po jednotlivých pokojích a okolním prostoru budovy. Dělí se na dva druhy, Sensor a Actuator. Sensor představuje typ zařízení, který měří a ukládá hodnoty svého okolí. Příkladem senzoru je teplotní senzor. Oproti tomu Actuator je zařízení, které ovlivňuje svoje okolí. Jeho příkladem je topení, protože mění teplotu místnosti. Každé zařízení má v sobě seznam svých aktuálních hodnot. Mezi ně patří například cílová teplota u topení nebo naměřená teplota u teplotního senzoru. Kromě toho má každé zařízení ještě svůj stav (Status). Jeho nejjednodušší reprezentace je binární status, který zaznamenává, jestli je zařízení vypnuté nebo zapnuté.
2.2.
Aktivity diagram
act v ytv oření budo...
Uživatel
Uživatel vytváří novou budovu
Změní název podlaží
Změní v ýšku podlaží
Edituj e místnosti
Edituj e otv ory v e zdech
Rozmístí zařízení po patře
Vyplní název budov y
Vybere podlaží k editaci
Určí počet pater
Chce editovat nějaké podlaží? [Ano] [Ne] Konec
Určí tv ar půdorysu budov y
Založí nov ou budov u
Vytv oří určený počet prázdných podlaží
Uloží tv ar půdorysu budov y
Uloží tv ar půdorysu podlaží
Uloží změny v podlaží
Systém
Nastav í v elikost půdorysu budov y
Obr č.3: Aktivity diagram vytvoření modelu budovy Aktivity diagram popisuje postup, kterým je vytvořena budova. Uživatel nejdříve vyplní název, počet pater a velikost půdorysu budovy. Aplikace data zpracuje. Vytvoří novou budovu a určený počet prázdných pater. Uživatel dále určí velikost půdorysu, který bude budova zabírat. Aplikace tento půdorys uloží jak jako půdorys budovy, tak i jako půdorys každého patra. Zbylé místo je označeno jako okolní prostor. Poté uživatel edituje jednotlivá patra. Jejich Editace probíhá ve dvou krocích. V prvním kroku uživatel rozmístí místnosti, otvory ve zdech, patro pojmenuje a nastaví jeho výšku. V druhém kroku už edituje rozložení senzorů v jednotlivých místnostech. Následně se editované patro uloží. Pokud už uživatel nechce editovat žádné patro, vytváření budovy končí.
5|Stránka
Project Westpon
Specifikace požadavků
3. Architektura aplikace 3.1.
Diagram balíčků Na začátek bych uvedl trochu teorie. To, co z javy známe jako projekt a balíčky, se v C# nazývá solution a projecty. Jedná se pouze o změnu názvu, jinak obě dvojice pojmů znamenají to samé. Pokud bychom měli být přesní, řekli bychom, že na obrázku č.4 je znázorněn diagram projektů. Aplikace se skládá ze čtyř projektů. Největší jsou UserInterface, který se stará o celé GUI a správ událostí, které uživatel generuje a Business. Ten obstarává celou business logiku aplikace, obsluhuje simulaci a podobně. Protože projekt UserInterfase volá metody z projektu Business, je na něj závislý. Další dva projekty Communicator a Physical module obstarávají komunikace s externími aplikacemi, které reprezentují lidský modul, fyzikální modul a neuronovou síť. Tyto balíčky implementují API, které popisuje komunikaci. pkg Class Mo... UserInterface
Business
Communication
Physical Module
Obrázek č. 4 Package diagram
3.2.
Datový model
3.2.1. Business vrstva Business vrstva je uložena v balíčku Business a reprezentuje obchodní logiku aplikace. Kromě objektů doménového modelu, který je popsán výše, obsahuje ještě obslužné třídy, které s tímto modelem pracují a zprostředkovávají ho ostatním vrstvám. Jejich struktura je zobrazena na obrázku. Veškerá komunikace s grafickou vrstvou probíhá pomocí interfacu IBusinessFasade. Tento interface obsahuje metody pro načtení a uložení nové budovy, spuštění a zastavení simulace a práci s externími moduly. Třída BusinessFasade, která toto rozhraní implementuje, je 6|Stránka
Project Westpon
Specifikace požadavků
navržena jako singleton, aby k ní bylo možné přistoupit odkudkoli z prezentační vrstvy, bez nutnosti uchovávání reference. Další důležitá třída je třída Simulator. Jak její název napovídá, ukládá v sobě všechna data potřebná k simulaci inteligentní budovy. Budova, která je v simulátoru uložena, je dále předávána BusinessFasade, která umožňuje její získání v prezentační vrstvě. Dále Simulator obsahuje také informaci o tom, jestli je aktuálně spuštěna simulace, nebo jestli uživatel edituje data. BusinessFasade obsahuje také referenci na instanci třídy implementující rozhraní IBuildingLoader, které umožňuje serializaci budovy. K disposici je jak serializér do binárního souboru, tak i serializér do XML (BinBuildingLoader a XmlBuildingLoader). Další důležitou částí business vrstvy je sběrnice Communicator. Tato sběrnice sbírá události, které nastanou v simulátoru (zapnutí, vypnutí) a v budově (změna struktury, změna hodnoty na aktuátoru nebo sensoru). Po odchycení události se na sběrnici zavolá příslušná metoda, která na ni zareaguje. V tomto případě upozorní externí moduly na změnu stavu simulace nebo pro ně zajímavých hodnot. Sběrnice funguje také opačným směrem. Pokud dostane data od externího modulu, upozorní budovu, aby tato data zpracovala. Budova pak rekurzivně projde celou svoji strukturu a změny aplikuje. Podrobné složení business vrstvy včetně všech vnitřních metod a proměnných naleznete v přiloženém souboru s dokumentací aplikace. class Class Mo... «interface» IBusinessFasade
«interface» ISimulator
BusinessFasade
Simulator
«interface» IBuilding
Building
«interface» IBuildingLoader
BinBuildingLoader
Communicator
XmlBuildingLoader
«interface» ICommunicator
Obrázek č.5: Struktura business vrstvy 7|Stránka
Project Westpon
Specifikace požadavků
3.2.2. Prezentační vrstva class Class Mo...
Button
GeneralView
GridFragmentView
RoomFragmentView
OuterSpaceFragmentView
FloorFragmentView
ComposedObj ectView
Obj ectWithPositionView
HoleInWallView
ActuatorView
Dev iceView
SensorView
Obrázek č.6: Struktura náhledů na objekt v prezentační vrstvě V prezentační vrstvě je na mnoha místech potřeba vykreslit náhled patra, jak už k editaci, tak i k pouhému prohlížení simulace. Toto vykreslení obstarává algoritmus, který z business vrstvy načte plán aktuálního podlaží. Ten je tvořen čtvercovou sítí. Algoritmus poté projde celou síť a vytvoří si podle ní svoji vlastní, která neobsahuje objekty budovy, ale instance třídy GeneralView a jejích potomků. Konkrétní třída, že které se vytvoří instance, se vybírá dynamicky podle typu objektu, který se nachází v budově na dané pozici (Např. Actuator a ActuatorView nebo Room a RoomFragmentView). Protože třída GeneralView dědí od třídy Button, je možné ji vykreslit a pokud se vykreslí celá nová čtvercová síť, vznikne náhled vybraného podlaží. Ze stejného důvodu je také možné na objekty navěsit obslužné metody, které se spustí, pokud dojde ke kliknutí na objekt. Tyto metody například přidají danou část půdorysu do pokoje, vytvoří dveře do vedlejšího pokoje a podobně nebo načtou hodnoty aktuátoru. Původní objekty budovy jsou navíc stále uloženy v grafických, takže je možné rovnou přistoupit k jejich metodám a pracovat s nimi.
8|Stránka
Project Westpon
Specifikace požadavků
Obrázek č.7: Posloupnost oken průchodu aplikací Stavový diagram na obrázku č.7 popisuje návaznost oken a dialogů. Po spuštění aplikace se zobrazí úvodní obrazovka Welcome Screen. Ta vám nabízí dvě možnosti. Můžete zvolit načtení modelu budovy ze souboru a tím rovnou zobrazit náhled simulace. V opačném případě vás čeká průchod několika dialogy, které dohromady tvoří editor modelu budovy. Jako první se vám zobrazí dialog Create new building. V tohoto dialogu vyplníte jméno budovy, její rozměry a počet pater. Po potvrzení pomocí Outer Space creatoru a Building Creatoru vyznačíte na čtvercové síti půdorys budovy a oblast, ve které se nachází pouze okolní prostor. Pokud už jste s tvarem spokojeni, zbývá pouze naplnit patra pokoji, ty pospojovat dveřmi a schody, umístit okna a nakonec i jednotlivá zařízení. Toho docílíte tak, že v dialogu Floor Picker vyberete patro, které chcete přizpůsobit a následně v okně Floor Creator vytvoříte pokoje, opět pomocí čtvercové sítě. Můžete umisťovat také schody a okna s dveřmi. Ty se po kliknutí do čtvercové sítě přichytí na nejbližší zeď a tím určí svoji pozici. Poté můžete přejít do Floor Decoratoru, ve kterém pomocí klikání umístíte zařízení a celé patro uložíte. Nakonec se vám znovu zobrazí Floor Picker a vy můžete opět vybrat patro k editaci nebo potvrdit kompletní vytvoření vámi namodelované budovy.
9|Stránka
Project Westpon
Specifikace požadavků
4. Rozhraní s ostatními aplikacemi 4.1.1. Fyzikální modul Fyzikální modul bude vložen jako DLL knihovna a komunikace mezi ním a simulátorem inteligentních budov bude probíhat po předem určeném rozhraní, které bude tvořeno dvěma interface. V první fázi si při spuštění aplikace simulátor nareferencuje instanci modulu a modul si zaregistruje tento simulátore. Tento krok je z důvodů, aby o sobě modul i simulátor navzájem věděli. Ve druhé fázi si modul zažádá o model celé budovy, který mu bude simulátorem navrácen. Tento krok je proveden metodou (getBuildingParameters). Následně si modul zažádá o informace o teplotách v jednotlivých pokojích pomocí metody (getRoomTemperature). Veškeré případné změny bude simulátor modulu hlásit pomocí eventy, která bude mít v sobě jednoznačné id zařízení, na kterém se něco změnilo, a modul si již zažádá o nové informace od simulátoru.
Obr č.8: Popis komunikace s fyzikálním modulem Simulátor pomocí metody RegisterSimulator() zavolá fyzikální modul, tímto modul získá referenci na Simulátor. Modul zavolá metodu RegisterPhysicalModel() a tím předá Simulátoru referenci na sebe. Dále probíhá komunikace pouze pomocí metod UpdateBuilding() a UpdateTemperatureSettings() pro přenos serializovaných dat. class ClassDiagram «interface» IPhysicalModuleFacade + +
RegisterSimulator(ISimulatorFacade) : void UpdateBuildingModel(String) : void
«interface» ISimulatorFacade + +
RegisterPhysicalModel(IPhysicalModuleFacade) : void UpdateTemperatureSettings(String) : void
Obrázek. č.9: Rozhraní pro komunikaci s fyzikálním modulem 10 | S t r á n k a
Project Westpon
Specifikace požadavků
4.1.2. Neuronová vrstva Komunikace mezi naším simulátorem a neuronovou sítí bude probíhat pomocí dvou websevice a předem domluvených rozhraní. Následuje popis metod, které do těchto rozhraní patří. Naše aplikace bude poskytovat rozhraní s těmito metodami:
RequestWholeModel () Tato metoda serializuje strukturu budovy a výsledek zveřejní pomocí webservice. Neuronová sít si poté může tuto strukturu stáhnout.
setValues (Map <string, double>) Nastaví nové hodnoty na zařízeních budovy. Kolekce obsahuje klíče, které představují Id objektů, a hodnoty, které se mají na těchto objektech nastavit.
getValues() : Map <string, double> Tato metoda vrátí všechny hodnoty zařízení, které se změnily. Nová hodnota je vždy identifikována pomocí Id zařízení
Neuronová síť bude poskytovat rozhraní s těmito metodami:
ModelReady() Touto metodou bude neuronová síť upozorněna, že je pro ni připraven nový model budovy a že si o něj může zažádat zavoláním metody RequestNewModel()
ModelChanged () Touto metodou bude neuronová síť upozorněna, že se změnily hodnoty nějakého zařízení v budově a má si o ně zažádat pomocí metody getValues()
11 | S t r á n k a
Project Westpon
Specifikace požadavků
sd sequence OurSystem
Neuron Network
ModelReady()
RequestWholeModel()
setValues(Map <string, double> values)
*ModelChanged()
getValues() :Map <string, double> values
setValues(Map <string, double> values)
ModelReady()
RequestWholeModel()
Obr. č.10: Příklad komunikace s neuronovou sítí
12 | S t r á n k a
Project Westpon
Specifikace požadavků
5. Diagram nasazení
Obrázek č.11: Deployment diagram aplikace Celá naše aplikace bude spuštěna na jednom osobním počítači s operačním systémem Windows pod platformou .NET 4.0 a skládá se ze dvou částí, naší spustitelné aplikace a dll knihovny Physical Model, které je vytvořena skupinou 4ML. Aplikace navíc pomocí protokolu http komunikuje s externí webservice.
13 | S t r á n k a
Project Westpon
Specifikace požadavků
6. Přiložené dokumenty K návrhu je přiložena vygenerovaná dokumentace, která detailně popisuje celou implementaci.
14 | S t r á n k a
Project Westpon
Specifikace požadavků
7. Závěr Aplikace byla navržena tak, aby byla lehce rozšiřitelná jak o další objekty, které jsme do modelu budovy nezahrnuli, tak i o další externí moduly, se kterými bude komunikovat. Společně s tím, že bude šířena jako open source tak získává obrovský potenciál být využita v praxi jako simulátor inteligentních budov.
15 | S t r á n k a