Select Git revision
6-tervezes.tex
6-tervezes.tex 33.28 KiB
\chapter{Tervezés}
\chapterintro{
Az előzetes kutatás szerint ismerkedem a projekthez illő technológiákkal,
megkeresem a megvalósításhoz használt eszközöket és megválasztom azokat az arra
vetett megkötéseinket figyelembe véve. Miután konkretizáltam a projekt kereteit,
a megvalósítandó rendszer tervezésével foglalkozom. A mikrokontroller az ESP32
hardver platfomon, Rust szoftveres környezetben valósul meg. Az okosotthon
integrációhoz a rendszer vezetékes hálózaton MQTT protokollon fog kommunikálni
a Home Assistant okosotthon szoftverrel. A választott technológiákkal ismerkedem
és megindoklom a választásaimat helyesség, biztonság, a fejlesztés kényelmessége
és a későbbi bővíthetőség szempontjai alapján.
}
\section{Döntések}
\label{dontesek}
\paragraph{} \Aref{feladat}. fejezetben definiáltuk a rendszer alapfeladatait.
A megvalósításához meg kell választanom a megfelelő hardveres platformot és
szoftveres környezetet, figyelve a megismert biztonságtechnikai kérdésekre. A
döntéseknél figyelembe veszem a már létező kereskedelmi rendszerek sajátosságait
és megoldásait; azok előnyei és hátrányai között keresem a kompromisszumot.
A központi egységhez az Espressif ESP32 platformcsaládját választom, a
szoftveres implementációt Rust programozási nyelven, a hivatalos Rust alapú
framework használatával fogom megvalósítani. Az ESP32 viszonylag olcsó,
általános célú mikrokontroller. Szoftveres támogatottsága az elmúlt néhány
évben növekvő figyelmet élvez, különösen a Rust programozási nyelv körében.
\cite{rust-iot} Ez a hardver és szoftver kombináció az iparágban meglehetősen
újkeletűnek mondható például egy Arduino és a hozzá tartozó széleskörű hardveres
és szoftveres támogatottsággal szemben. Vitatható, hogy egy biztonságkritikus
rendszer megvalósításában ésszerű döntés lenne, ha a gyártó által ajánlott
és szélesebb körben használatos C/C++ alapú ESP-IDF framework-öt használnám,
a fiatalabb, kevésbé elterjedt változattal szemben. Azért nem így döntöttem,
mert \aref{inf-bizt}. fejezetben a szoftverbiztonság fényében fontosnak
tartom a memóriabiztonságot. Legalább olyan fontosnak, hogy az már a tervezés
legelején kereteket szabjon. Ezért válaszottam a Rust-ot, ami fundamentálisan
a memóriabiztonságra épülő rendszerek programozására akalmas alacsony szintű
nyelv.
A rendszerem kizárólag vezetékes kommunikációt fog alkalmazni. Ez
\aref{kereskedelmi}. fejezetben megismert két kategória közül a hagyományos
rendszerekre jellemző. Láttuk, hogy előny az egyszerűbb architektúra, de
hátrány a rugalmatlanság. Célom, hogy ne adjunk esélyt a kommunikációs médiumon
való információ kiszivárgására, ezért ez a fizikai biztonságon fog múlni.
A rendszeren belül titkosításra emiatt nincs szükség, de a külső hálózaton
mindenképpen kell, ezért erre alkalmas integrációs protokollt fogok választani.
A külső hálózati interfész szerepében egy Ethernet vezérlőt választok,
ami például egy WiFi rádió modulhoz képest kevesebb hibaforrást jelent az
architektúra egyszerűsége miatt szoftver oldalon is. A látott rugalmatlanság itt
nem lesz jellemző -- az okosotthon integráció fogja ellensúlyozni.
Az okosotthon integrációhoz előszor meg kell választanom, milyen szoftverrel
kell tudnia a rendszernek kommunikálnia. Ha ezt megtettem, ezután a
kommunikációhoz használt protokollt pontosítom. Ahogy \aref{kereskedelmi}.
fejezetben láttuk, hogy a DIY rendszerek mindegyike önmagában egy IoT platform
is, a gyártó által kiadott zárt szoftverrel együtt. Illetve a nagy hátrányuk
az volt, hogy a legtöbb esetben előfizetés keretében volt elérhető a teljes
funkcionalitás, vagyis hosszútávú költségek magasak voltak. A mi rendszerünknek
azt a célt tűzöm ki, hogy egy nyílt ökoszisztéma legyen, azaz a hardveres
megoldások és a szoftver forrása nyílt és szabadon felhasználható legyen.
Ne legyenek egyáltalán hosszútávú költségek, illetve a rövidtávú költségek
keretében csak a rendszer anyagára legyen számottevő. Ezekkel a megkötésekkel
a rendszer mechanikai telepítése és a szoftveres telepítés időköltsége
kompromitál. A megkötést az integrációra is érvényesítem, ezért az okosotthon
megoldások körében a helyileg futtatott, ``self-hosted'', nyílt forrású és
szabadon felhasználható szoftverek körében szeretnék elsősorban integrációra
lehetőséget keresni. Ezeknek a Home Assistant okosotthon felel meg, ezzel
a szoftvercsomaggal fog integrációt élvezni a rendszerem, ami a feladatban
megfogalmazott feltételeknek megfelel. Továbbá a feladatban említett értesítési
módok mindegyikét lehetséges vele használni. \cite{hass-integrations} A