Sådan bygger du det mest robuste og sikre hjemmeautomatiseringssystem

I denne artikel vil jeg diskutere, hvordan jeg byggede et Smart Home Automation System med Angular og Node.js på en Raspberry Pi uden at stole på nogen eksterne skytjenester.

Introduktion

I løbet af de sidste par dage tilbragte jeg nogle nætter med at designe og udvikle et hjemmeautomatiseringssystem baseret på JavaScript med brug af Angular og Node.js. Og som med ethvert andet projekt involverede planlægningen nogle dybe undersøgelser på Internettet.

Det viste sig, at der er masser af fisk i havet - masser af løsninger til, hvordan man implementerer et hjemmeautomatiseringssystem. Nogle tilbyder betalte tjenester i "skyen", og andre forklarer, hvordan man bygger sin egen ved hjælp af en teknologi kaldet MQTT.

Ingen af ​​løsningerne gav mening for mig. Alle muligheder var enten dyre eller havde ubelejlige implementeringer eller endda sikkerhedsfejl.

Men inden vi går videre, lad os forklare, hvad MQTT er. MQTT står for MQ Telemetry Transport . Det er en meget enkel og let messaging-protokol for publicering / abonnement. MQTT er designet til begrænsede enheder og lavbåndbredde, høj latenstid eller upålidelige netværk.

Designprincipperne er at minimere netværksbåndbredde og enhedens ressourcekrav, mens man forsøger at sikre pålidelighed og en vis grad af levering. Disse principper viser sig også at gøre protokollen ideel til den nye “maskine-til-maskine” (M2M) eller “Internet of Things” verden af ​​tilsluttede enheder og til mobile applikationer, hvor båndbredde og batteristrøm er på en præmie.

Hvorfor var jeg ikke overbevist om at bruge MQTT eller af nogen af ​​de løsninger, jeg fandt på internettet? To grunde:

  1. Mens MQTT-teknologien virker meget praktisk for IoT-enheder, troede jeg stadig, at den var unødvendig. Systemet, som jeg vil vise i følgende tutorial, fungerer i det samme medium, hvor IoT-enhederne lever. Alle fordele, som MQTT har for at være “hurtig” og have “lav båndbredde” bliver irrelevante. Der er desuden alt besværet, der er involveret i implementeringen, og alt det ekstra omkostninger med de ekstra npm-pakker, der kræves for at det kan fungere i et JavaScript-miljø. I stedet bruger jeg kun generiske JavaScript- og Node.js-biblioteker, intet mere!
  2. Hvad med sikkerhedsdelen? Nå, jeg er ikke en stor fan af “skyen” eller cloud computing generelt. I nogle tilfælde kan det være meget gavnligt, men i de fleste tilfælde er det bare unødvendigt. Tænk over det: hvorfor ville du have en tjeneste, der kræves til at kontrollere dine husholdningsapparater, der skal hostes et andet sted i "skyen" og ikke i dit eget netværk?

Man tror måske, at "skyen" giver mulighed for at få adgang til dine husholdningsapparater overalt i verden via internettet.

Men tænk over dette: Når dit hjemmenetværk ikke har internetforbindelse, bliver “skyen” overflødig. Mere vigtigt er det, at du stadig kan gøre dit hjemmeautomatiseringssystem tilgængeligt fra internettet ved hjælp af port-videresendelse, selvom det er hostet på dit lokale netværk.

Dette er, når det “klikkede” for mig, og jeg tænkte på at være vært for hele systemet på en Raspberry Pi og opbevare det i mit lokale netværk.

Teknologien

  1. Software: Grunden til, at jeg valgte Angular og Node.js, er fordi de er baseret på JavaScript, og jeg er allerede bekendt med det. Efter alt ville jeg designe og udvikle en progressiv webapp, der kommunikerer med mine IoT-enheder via HTTP - og JavaScript tilbød al den funktionalitet, jeg havde brug for.
  2. Hardware: Systemet fungerer med mikrokontroller som Arduino Uno / Mega / Du / MKR1000, Adafruit HUZZAH CC3000 og enhver anden mikrocontroller med en WiFi-forbindelse. Jeg bruger ESP8266 som en basiskomponent til mit hjemmeautomatiseringssystem . Det er en billig WiFi-mikrochip med mikrokontrollerfunktion. Det har alt hvad jeg har brug for og til en billig pris! Endelig er vi nødt til at være vært for systemet et eller andet sted på vores lokale netværk - så hvad er bedre end Raspberry Pi?

Dette vil ikke være en kodningsvejledning, hvor jeg dykker dybt ned i kodning, da dette projekt er open source, og jeg vil offentliggøre alt på GitHub. Jeg vil kun demonstrere, hvordan du implementerer dit eget hjemmeautomatiseringssystem og vil gennemgå hvert trin. Hvis du er en udvikler, bedes du opbevare arkivet og involvere dig i at forbedre det.

Opsætningen

Jeg estimerer, at det vil tage cirka 40 minutter at afslutte hele denne opsætning plus enhver tid brugt online på at søge efter løsninger til installationsfejl.

Hvad skal der til?

En Raspberry Pi er påkrævet. I mit eksempel bruger jeg en Raspberry Pi 3, men den skal fungere med de fleste versioner. De nødvendige komponenter er:

  1. Hindbær Pi bord
  2. MicroSD-kort (A klasse 10 med 16 GB eller højere anbefales)
  3. En USB MicroSD-kortlæser eller SD-kortadapter
  4. HDMI-skærm og et USB-tastatur (kræves kun midlertidigt til den første opstart af Raspberry Pi)
  5. Ethernet-kabel (ikke nødvendigt til Raspberry Pi 3, da det har indbygget WiFi)

Installation af Raspbian OS på Raspberry Pi

Raspbian er et gratis operativsystem baseret på Debian Linux, og det er optimeret til Raspberry Pi.

Jeg anbefaler den hovedløse “LITE” -version. Det har intet desktopmiljø eller nogen grafisk brugergrænseflade, og det er eksternt tilgængeligt fra en computer eller enhed på det samme netværk via SSH. Vi holder tingene enkle, da dette er den eneste måde, hvorpå vi får adgang til Raspberry Pi. LITE-versionen har al den funktionalitet, vi leder efter.

  1. Download det nyeste Raspbian-billede fra det officielle Raspberry Pi-websted.
  2. Flash Raspbian OS-billedet til SD-kortet med Etcher eller en hvilken som helst anden OS-billedbrændingssoftware efter eget valg.

Opsætning af Raspberry Pi

For at gøre Raspberry Pi klar til opstart skal vi:

  1. Indsæt MicroSD-kortet i Raspberry Pi
  2. Tilslut USB-tastaturet og HDMI-kablet
  3. Tilslut Ethernet-kablet, eller hvis du har en Raspberry Pi 3 og vil bruge WiFi, skal du oprette netværket i næste afsnit

Når Raspberry Pi er færdig med at starte op, skal du logge ind ved hjælp af brugernavn piog adgangskoderaspberry

Aktivering af WiFi og forbindelse til netværket

Spring dette trin over, hvis du vælger at oprette forbindelse med et Ethernet-kabel.

  1. Åbn konfigurationsfilen "wpa-supplicant"
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

2. tilføj følgende nederst i filen, mens du tilføjer dit wifi-navn og din adgangskode:

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

3. Tryk på for Ctrl+Xat gemme koden. Bekræft med YderefterEnter

4. Genstart Raspberry Pi med følgende kommando:

$ sudo reboot

Aktivering af SSH og ændring af brugernavn og adgangskode

Nu hvor Raspberry Pi er forbundet til internettet, anbefales det at ændre standardadgangskoden.

  1. Åbn Raspberry Pi-konfigurationsværktøjet, og klik på den anden mulighed "Skift brugeradgangskode", og følg instruktionerne
$ sudo raspi-config

2. Vælg valgmulighed 5 “Interfacing Options” og aktiver derefter SSH

3. Genstart Raspberry Pi. Når det er op, har du SSH aktiveret, og det er klar til at få adgang til eksternt fra din stationære computer

$ sudo reboot

Konfiguration af fjernadgang til Raspberry Pi

Nu, endelig, den del, hvor vi installerer den nødvendige software på Raspberry Pi. Denne del kan udføres direkte på Pi gennem terminalen ved hjælp af en HDMI-skærm og et USB-tastatur. For nemheds skyld - og da vi aktiverer ekstern SSH-forbindelse - skal vi oprette forbindelse fra et andet skrivebordsmiljø. Dette er den bedste og nemmeste måde at få fjernadgang til og kontrollere Pi'en, når der er behov for ændringer og konfigurationer.

Så dybest set er det sådan, du kan få adgang til kommandolinjegrænsefladen til en Raspberry Pi eksternt fra en anden computer eller en hvilken som helst enhed på det samme netværk ved hjælp af SSH. Dette kan gøres på to måder:

  1. Brug kommandoprompten eller PowerShell (jeg bruger Windows på en stationær computer), erstatt med dit brugernavn og IP-adresse
$ ssh [email protected]

Hvis du ikke kender IP-adressen, skal du skrive “ hostname -I"i kommandolinjen Raspberry Pi.

2. Den anden metode er at bruge et klientprogram som PuTTY eller et hvilket som helst andetfungerende klient SSH-software. Her er en nem guide til brug af PuTTY.

Installation af den nødvendige software på Raspberry Pi

Før du installerer noget, anbefales det at opdatere Raspberry Pi's operativsystem og pakker. Hvis du gør dette regelmæssigt, bliver det opdateret.

  1. Opdater listen over systempakker ved hjælp af følgende kommando:
$ sudo apt-get update

2. Opgrader alle dine installerede pakker til deres seneste version:

$ sudo apt-get dist-upgrade

3. Download og installer den nyeste version af Node.js:

// 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. Installer den kantede CLI globalt:

$ npm install -g @angular/cli

5. Installer Git-versionskontrolsystemet:

$ sudo apt-get install git

Installation af databasen (MongoDB)

Vi har brug for en database til lagring af de registrerede brugere og deres legitimationsoplysninger. Her er de nødvendige trin:

  1. Installer MongoDB
$ sudo apt-get install mongodb

2. Start MongoDB-processen

$ sudo service mongodb start

3. Start mongo Shell

$ mongo

3. Opret en database kaldet “smarthaus”

$ use smarthaus

I MongoDB er standarddatabase test. Hvis du ikke oprettede nogen database, gemmes samlinger i testdatabasen.

Installation af Smart Haus

1. Kontroller den aktuelle arbejdsmappe ved hjælp af denne kommando:

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

Det anbefales at klone projektets lager under pi's brugerkatalog, men du kan navigere et andet sted, hvis du er sikker.

2. Klon lageret fra:

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

Sørg for at navigere inde i biblioteket ved hjælp af:

$ cd smarthaus

Inden du installerer nogen npm-pakker, der bruger "npm-installation", henvises til npm-vejledningen for at rette tilladelser for at lære, hvordan du løser eventuelle " EACCESS " -fejl, du måtte opleve under installationen. Dette er meget vigtigt, da det forhindrer eventuelle npm-tilladelsesfejl og giver dig mulighed for at installere pakker globalt uden brug af sudo. Brug af sudo med npm anbefales ikke og bør undgås .

3. Installer alle de nødvendige pakker til projektet:

$ npm install

Start af Node.js-serveren

Før vi starter serveren, skal vi opbygge projektet ved hjælp af Angular CLI-værktøjet. Og endelig konfigurerer vi Raspberry Pi, så den kører serveren, når den starter op.

  1. Byg projektet ved hjælp af:
$ ng build --prod

2. Rediger rc.localfilen ved hjælp af nano:

$ sudo nano /etc/rc.local

3. Tilføj følgende på linjen inden exit 0afslut og gem filen:

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

Node.js-serveren er nu klar! Det kører ved hver opstart af systemet og gemmer logfiler under den samme mappe i en "log.txt" -fil.

Lad os køre det nu og se om det fungerer ved hjælp af denne kommando:

$ sudo node server

Systemet er nu tilgængeligt fra enhver enhed på dit netværk via Raspberry Pi's IP-adresse.

Gå videre og gaffel dette projekt og bliv involveret i udviklingen af ​​de manglende dele?

Slutningen

Vi fik os et fungerende hjemmeautomatiseringssystem, der kører sikkert på en Raspberry Pi i vores lokale netværk uden brug af “skyen” eller en andens server.

Min Raspberry Pi sidder ved siden af ​​min Fingbox og router i stuen?

Jeg håber du nød at læse,

Følg venligstog del for mere tech ting ??