Hogyan lehet a legerősebb és legbiztonságosabb otthoni automatizálási rendszert felépíteni

Ebben a cikkben megvitatom, hogyan építettem egy intelligens otthoni automatizálási rendszert az Angular és a Node.js segítségével egy Raspberry Pi-re anélkül, hogy bármilyen külső felhőszolgáltatásra támaszkodnék.

Bevezetés

Az elmúlt napokban néhány éjszakát töltöttem egy JavaScript-alapú otthoni automatizálási rendszer tervezésével és fejlesztésével, az Angular és a Node.js használatával. És mint minden más projekt esetében, a tervezés néhány mély kutatást végzett az interneten.

Kiderült, hogy rengeteg hal van a tengerben - rengeteg megoldás az otthoni automatizálási rendszer megvalósítására. Vannak, akik fizetős szolgáltatásokat kínálnak a „felhőben”, mások pedig elmagyarázzák, hogyan készíthet sajátot az MQTT nevű technológiával.

Egyik megoldásnak sem volt értelme számomra. Valamennyi lehetőség vagy drága volt, vagy kényelmetlen megvalósítással, vagy akár biztonsági hibákkal járt.

De mielőtt tovább mennénk, magyarázzuk el, mi az az MQTT. Az MQTT az MQ Telemetry Transport rövidítést jelenti . Ez egy közzétételi / feliratkozási, rendkívül egyszerű és könnyű üzenetküldési protokoll. Az MQTT korlátozott eszközökhöz és alacsony sávszélességű, nagy késési vagy megbízhatatlan hálózatokhoz készült.

A tervezési elvek szerint minimalizálni kell a hálózati sávszélességet és az eszközerőforrás-igényeket, miközben a megbízhatóságot és a szállítás bizonyos fokú biztonságát kell megkísérelni. Ezek az elvek arra is rávilágítanak, hogy a protokollt ideálissá tegye a csatlakoztatott eszközök feltörekvő „gép-gép” (M2M) vagy „tárgyak internete” világában, valamint olyan mobilalkalmazásokban, ahol a sávszélesség és az akkumulátor teljesítménye kiemelkedő.

Miért nem győztem meg az MQTT használatáról, vagy az interneten talált megoldások bármelyikéről? Két ok:

  1. Bár az MQTT technológia nagyon kényelmesnek tűnik az IoT-eszközök számára, mégis feleslegesnek gondoltam. A rendszer, amelyet a következő oktatóanyagban bemutatok, ugyanazon a közegen működik, ahol az IoT-eszközök élnek. Az MQTT „gyors” és „alacsony sávszélességű” előnyei lényegtelenné válnak. Ráadásul minden gond megvan a megvalósításban, és minden további többlet a további npm csomagokkal együtt, amelyek szükségesek ahhoz, hogy JavaScript környezetben működjön. Ehelyett csak általános JavaScript és Node.js könyvtárakat fogok használni, semmi több!
  2. Mi a helyzet a biztonsági résszel? Nos, nem vagyok nagy rajongója a „felhőnek” vagy a felhőszámításnak általában. Bizonyos esetekben nagyon előnyös lehet, de a legtöbb esetben csak felesleges. Gondoljon csak bele: miért lenne olyan szolgáltatása, amely a háztartási készülékek vezérléséhez szükséges ahhoz, hogy valahol máshol, a „felhőben” tárolja, és ne a saját hálózatában?

Azt gondolhatnánk, hogy a „felhő” lehetővé teszi, hogy az interneten keresztül hozzáférjen háztartási készülékeihez a világ bármely pontjáról.

De gondoljon erre: amikor az otthoni hálózatának nincs internetkapcsolata, a „felhő” feleslegessé válik. Ennél is fontosabb, hogy az otthoni automatizálási rendszert továbbra is hozzáférhetővé teheti az internetről a port-továbbítás segítségével, még akkor is, ha azt a helyi hálózatán tárolja.

Ekkor „kattintott” nekem, és arra gondoltam, hogy az egész rendszert egy Raspberry Pi-n tároljuk, és a helyi hálózatomban tartom.

A technológia

  1. Szoftver: Azért döntöttem az Angular és a Node.js mellett, mert JavaScript-alapúak, és már ismerem is. Végül is egy progresszív webalkalmazást akartam megtervezni és kifejleszteni, amely HTTP-n keresztül kommunikál az IoT-eszközeimmel - és a JavaScript minden szükséges funkciót felajánlott.
  2. Hardver: A rendszer olyan mikrovezérlőkkel működik, mint az Arduino Uno / Mega / Du / MKR1000, az Adafruit HUZZAH CC3000 és minden más, WiFi-kapcsolattal rendelkező mikrovezérlő. Az ESP8266- ot használom otthoni automatizálási rendszerem alapkomponenseként . Ez egy olcsó WiFi mikrochip mikrokontroller képességgel. Minden megvan, amire szükségem van, olcsó áron! Végül a rendszert valahol a helyi hálózatunkon kell üzemeltetnünk - tehát mi a jobb, mint a Raspberry Pi?

Ez nem egy kódolási útmutató, ahol mélyen belemerülök a kódolásba, mivel ez a projekt nyílt forráskódú, és mindent közzé fogok tenni a GitHub-on. Csak bemutatom, hogyan valósíthatja meg saját otthoni automatizálási rendszerét, és minden lépést végigcsinálok. Ha egy fejlesztő kérjük villáját a tárat és vegyenek részt a fejlesztéséhez.

A beállítás

Becslések szerint körülbelül 40 percet vesz igénybe az egész telepítés befejezése, valamint az az idő, amit online töltünk a telepítési hibák megoldására.

Ami szükséges?

Raspberry Pi szükséges. Példámban Raspberry Pi 3-at használok, de a legtöbb verzióval működnie kell. A szükséges alkatrészek a következők:

  1. Raspberry Pi tábla
  2. MicroSD kártya (10-es osztály ajánlott 16 GB-os vagy nagyobb)
  3. USB MicroSD kártyaolvasó vagy SD kártya adapter
  4. HDMI monitor és USB billentyűzet (csak ideiglenesen szükséges a Raspberry Pi első indításához)
  5. Ethernet kábel (nem szükséges a Raspberry Pi 3-hoz, mivel beépített WiFi-t használ)

A Raspbian OS telepítése a Raspberry Pi-re

A Raspbian egy ingyenes operációs rendszer, amely Debian Linux alapú, és a Raspberry Pi-re van optimalizálva.

A fej nélküli „LITE” verziót ajánlom . Nincs asztali környezete vagy grafikus felhasználói felülete, és távolról elérhető ugyanazon a hálózaton lévő számítógépről vagy eszközről SSH-n keresztül. A dolgokat egyszerűen tartjuk, mivel csak így jutunk hozzá a Raspberry Pi-hez. A LITE verzió rendelkezik minden olyan funkcióval, amelyet keresünk.

  1. Töltse le a legújabb Raspbian képet a hivatalos Raspberry Pi webhelyről.
  2. Flashelje a Raspbian operációs rendszer képét az SD kártyára az Etcher vagy bármely más, az Ön által választott OS képégető szoftver segítségével.

A Raspberry Pi beállítása

Ahhoz, hogy a Raspberry Pi készen álljon az indításra, tennünk kell:

  1. Helyezze be a MicroSD kártyát a Raspberry Pi-be
  2. Csatlakoztassa az USB billentyűzetet és a HDMI kábelt
  3. Csatlakoztassa az Ethernet kábelt, vagy ha van Raspberry Pi 3 készüléke, és WiFi-t szeretne használni, akkor a következő részben állítsa be a hálózatot

Amikor a Raspberry Pi befejezte az indítást, jelentkezzen be felhasználónévvel piés jelszóvalraspberry

A WiFi engedélyezése és csatlakozás a hálózathoz

Hagyja ki ezt a lépést, ha Ethernet kábellel csatlakozik.

  1. Nyissa meg a „wpa-supplicant” konfigurációs fájlt
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

2. adja hozzá a következőket a fájl aljához, miközben hozzáadja a wifi nevét és jelszavát:

network={
 ssid="your_networks_name" psk="your_networks_password"
}

3. Nyomja Ctrl+Xmeg a gombot a kód mentéséhez. Erősítse meg YakkorEnter

4. Indítsa újra a Raspberry Pi-t a következő paranccsal:

$ sudo reboot

Az SSH engedélyezése, valamint a felhasználónév és jelszó módosítása

Most, hogy a Raspberry Pi csatlakozik az internethez, ajánlott megváltoztatni az alapértelmezett jelszót.

  1. Nyissa meg a Raspberry Pi konfigurációs eszközt, kattintson a „Felhasználói jelszó módosítása” második lehetőségre, és kövesse az utasításokat
$ sudo raspi-config

2. Válassza az 5. „Interfacing Options” lehetőséget, majd aktiválja az SSH-t

3. Indítsa újra a Raspberry Pi-t. Amikor elkészül, engedélyezte az SSH-t, és készen áll az asztali számítógépéről távolról történő elérésre

$ sudo reboot

A Raspberry Pi távoli hozzáférésének konfigurálása

Végül az a rész, amikor telepítjük a szükséges szoftvert a Raspberry Pi-re. Ez a rész közvetlenül a Pi-n hajtható végre a terminálon keresztül egy HDMI-monitor és egy USB-billentyűzet segítségével. A kényelem érdekében - és mivel engedélyezzük a távoli SSH kapcsolatot - egy másik asztali környezetből fogunk csatlakozni. Ez a legjobb és legegyszerűbb módja a Pi távolról történő elérésének és vezérlésének, amikor változtatásokra és konfigurációkra van szükség.

Tehát alapvetően így érheti el távolról a Raspberry Pi parancssori felületét egy másik számítógépről vagy ugyanazon hálózat bármely eszközéről az SSH használatával. Ez kétféle módon történhet:

  1. A Parancssor vagy a PowerShell használatával (asztali számítógépen használom a Windows rendszert) cserélje le felhasználónevével és IP-címével
$ ssh [email protected]

Ha nem ismeri az IP-címet, írja hostname -I"be a következőt: „ Raspberry Pi” parancssorba.

2. A második módszer egy olyan kliens program használata, mint a PuTTY vagy bármely másműködő kliens SSH szoftver. Itt van egy egyszerű útmutató a PuTTY használatához.

A szükséges szoftver telepítése a Raspberry Pi-re

Bármi telepítése előtt ajánlott frissíteni a Raspberry Pi operációs rendszerét és csomagjait. Ha ezt rendszeresen végzi, az naprakész marad.

  1. Frissítse a rendszercsomagok listáját a következő paranccsal:
$ sudo apt-get update

2. Frissítse az összes telepített csomagot a legújabb verzióra:

$ sudo apt-get dist-upgrade

3. Töltse le és telepítse a Node.js legújabb verzióját:

// To download$ curl -sL //deb.nodesource.com/setup_8.x | sudo -E bash -
// To install$ sudo apt-get install -y nodejs
// Check if the installation was successful:$ node -v

4. Telepítse az Angular CLI-t globálisan:

$ npm install -g @angular/cli

5. Telepítse a Git verzióvezérlő rendszert:

$ sudo apt-get install git

Az adatbázis telepítése (MongoDB)

Szükségünk van egy adatbázisra a regisztrált felhasználók és hitelesítő adataik tárolásához. Itt vannak a szükséges lépések:

  1. Telepítse a MongoDB-t
$ sudo apt-get install mongodb

2. Indítsa el a MongoDB folyamatot

$ sudo service mongodb start

3. Indítsa el a mongo Shell-et

$ mongo

3. Hozzon létre egy adatbázist „smarthaus” néven

$ use smarthaus

A MongoDB-ben az alapértelmezett adatbázis teszt. Ha nem hozott létre adatbázist, akkor a gyűjtemények a teszt adatbázisban lesznek tárolva.

A Smart Haus telepítése

1. Ellenőrizze az aktuális munkakönyvtárat a következő paranccsal:

$ pwd
/* It will probably print "/home/pi" where "pi" is the current user directory */

Javasoljuk, hogy a projekt adattárát klónozza a pi felhasználói könyvtárába, de ha biztos benne, navigálhat másutt.

2. Klónozza az adattárat:

$ git clone //github.com/ameer157/smarthaus.git

Ne felejtsen el navigálni a könyvtárban a következők használatával:

$ cd smarthaus

Mielőtt bármilyen npm csomagot telepítene az „npm install” használatával, kérjük, olvassa el az npm útmutatót az engedélyek kijavításához, hogy megtanulja, hogyan lehet kijavítani a telepítés során felmerülő „ EACCESS ” hibákat. Ez nagyon fontos, mivel megakadályozza az npm engedélyezési hibákat, és lehetővé teszi a csomagok globális telepítését sudo használata nélkül. A sudo és az npm használata nem ajánlott, és kerülni kell .

3. Telepítse az összes szükséges csomagot a projekthez:

$ npm install

A Node.js szerver indítása

A szerver elindítása előtt fel kell építenünk a projektet az Angular CLI eszközzel. Végül pedig úgy konfiguráljuk a Raspberry Pi-t, hogy az mindig elindítsa a kiszolgálót.

  1. Készítse el a projektet az alábbiak felhasználásával:
$ ng build --prod

2. Szerkessze a rc.localfájlt nano:

$ sudo nano /etc/rc.local

3. Adja hozzá a következőt a sorhoz, mielőtt exit 0kilépne, és mentse a fájlt:

su pi -c 'cd /home/pi/smarthaus/backend && sudo node server.js > log.txt &'

A Node.js szerver készen áll! A rendszer minden rendszerindításkor lefut, és a naplókat ugyanabban a könyvtárban menti egy „log.txt” fájlba.

Futtassuk most, és nézzük meg, hogy működik-e ez a parancs:

$ sudo node server

A rendszer a hálózat bármely eszközéről elérhető a Raspberry Pi IP-címén keresztül.

Kérjük, megy előre, és villáját a projekt és vegyenek részt a fejlődő a hiányzó részeket?

Vége

Kaptunk magunknak egy működő otthoni automatizálási rendszert, amely biztonságosan működik a helyi hálózatunk Raspberry Pi-jén, a „felhő” vagy más szerver használata nélkül.

A Raspberry Pi a Fingbox és a router mellett ül a nappaliban?

Remélem tetszett olvasni,

Kérem, kövesseés megosztani több technikai cuccért ??