Cloud Smart Home. Deel 1: Controller en sensoren

Cloud Smart Home. Deel 1: Controller en sensoren

Dankzij de snelle ontwikkeling van micro-elektronica, communicatiekanalen, internettechnologieën en kunstmatige intelligentie wordt het onderwerp slimme huizen tegenwoordig steeds relevanter. Menselijke huisvesting heeft aanzienlijke veranderingen ondergaan sinds het stenen tijdperk en in het tijdperk van de industriële revolutie 4.0 en het internet der dingen is het comfortabel, functioneel en veilig geworden. Er komen oplossingen op de markt die van een appartement of landhuis een complex informatiesysteem maken dat overal ter wereld met een smartphone wordt bestuurd. Bovendien vereist mens-machine-interactie geen kennis van programmeertalen meer: ​​dankzij spraakherkenning en synthese-algoritmen spreekt iemand in zijn moedertaal met een smart home.

Sommige slimme thuissystemen die momenteel op de markt zijn, zijn een logische ontwikkeling van cloudvideobewakingssystemen, waarvan de ontwikkelaars zich realiseerden dat er behoefte was aan een alomvattende oplossing, niet alleen voor monitoring, maar ook voor het beheren van objecten op afstand.

We presenteren onder uw aandacht een serie van drie artikelen, die u vertellen over alle hoofdcomponenten van een cloud smart home-systeem, persoonlijk ontwikkeld door de auteur en in gebruik genomen. Het eerste artikel is gewijd aan de terminal-clientapparatuur die in een smart home is geïnstalleerd, het tweede aan de architectuur van het cloudopslag- en gegevensverwerkingssysteem, en ten slotte het derde aan de clientapplicatie voor het beheer van het systeem op mobiele en stationaire apparaten.

Slimme thuisapparatuur

Laten we eerst eens kijken hoe we van een gewoon appartement, datsja of huisje een slim huis kunnen maken. Om dit te doen, is het in de regel noodzakelijk om de volgende apparatuur in huis te plaatsen:

  1. sensoren die verschillende omgevingsparameters meten;
  2. actuatoren die op externe objecten inwerken;
  3. een controller die berekeningen uitvoert op basis van sensormetingen en ingebedde logica, en commando's geeft aan actuatoren.

De volgende afbeelding toont een schema van een smart home, waarop zich sensoren bevinden voor waterlekkage (1) in de badkamer, temperatuur (2) en verlichting (3) in de slaapkamer, een smart stopcontact (4) in de keuken en een videobewakingscamera (5) in de gang.

Cloud Smart Home. Deel 1: Controller en sensoren

Momenteel worden draadloze sensoren die werken met de protocollen RF433, Z-Wave, ZigBee, Bluetooth en WiFi veel gebruikt. Hun belangrijkste voordelen zijn het gemak van installatie en gebruik, evenals de lage kosten en betrouwbaarheid Fabrikanten streven ernaar hun apparaten op de massamarkt te brengen en toegankelijk te maken voor de gemiddelde gebruiker.

Sensoren en actuatoren zijn in de regel via een draadloze interface verbonden met een smart home controller (6) - een gespecialiseerde microcomputer die al deze apparaten in één netwerk combineert en bestuurt.

Sommige oplossingen kunnen echter tegelijkertijd een sensor, een actuator en een controller combineren. Een slimme stekker kan bijvoorbeeld worden geprogrammeerd om volgens een schema in of uit te schakelen, en een cloudvideobewakingscamera kan video opnemen op basis van een bewegingsdetectorsignaal. In de eenvoudigste gevallen kun je het zonder een aparte controller stellen, maar om een ​​flexibel systeem met veel scenario's te creëren is het wel noodzakelijk.

Om de smart home controller met het wereldwijde netwerk te verbinden, kan een gewone internetrouter (7) worden gebruikt, die al lang een gebruikelijk huishoudelijk apparaat in elk huis is geworden. Hier is er nog een argument vóór een smart home-controller: als de verbinding met internet wegvalt, zal het smart home normaal blijven functioneren dankzij het logische blok dat in de controller is opgeslagen, en niet in de cloudservice.

Slimme huiscontroller

De controller voor het cloud smart home-systeem dat in dit artikel wordt besproken, is ontwikkeld op basis van een single-board microcomputer Framboos Pi 3 model B+, dat in maart 2018 werd uitgebracht en voldoende middelen en prestaties heeft voor slimme thuistaken. Het bevat een quad-core Cortex-A53-processor gebaseerd op 64-bit ARMv8-A-architectuur, geklokt op 1.4 GHz, evenals 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 en een gigabit Ethernet-adapter die werkt via USB 2.0 .

Cloud Smart Home. Deel 1: Controller en sensoren

Het monteren van de controller is heel eenvoudig: de microcomputer (1) wordt in een plastic behuizing (2) geïnstalleerd, vervolgens worden een 8 GB geheugenkaart in microSD-formaat met software (3) en een USB Z-Wave-netwerkcontroller (4) geïnstalleerd. de bijbehorende slots. De smart home controller wordt via een 5V, 2.1A voedingsadapter (5) en een USB – micro-USB kabel (6) op de voeding aangesloten. Elke controller heeft een uniek identificatienummer, dat bij de eerste lancering in het configuratiebestand wordt geschreven en dat nodig is voor interactie met smart home-services in de cloud.

De smart home controller-software is door de auteur van dit artikel ontwikkeld op basis van het besturingssysteem Linux Raspbian-stretch. Het bestaat uit de volgende hoofdsubsystemen:

  • serverproces voor interactie met smart home-apparatuur en de cloud;
  • grafische gebruikersinterface voor het instellen van de configuratie- en bedrijfsparameters van de controller;
  • database voor het opslaan van de controllerconfiguratie.

Cloud Smart Home. Deel 1: Controller en sensoren

databank smart home controller is geïmplementeerd op basis van een ingebed DBMS SQLite en is een bestand op een SD-kaart met systeemsoftware. Het dient als opslag voor de controllerconfiguratie - informatie over de aangesloten apparatuur en de huidige status ervan, een blok met logische productieregels, evenals informatie die indexering vereist (bijvoorbeeld bestandsnamen van een lokaal videoarchief). Wanneer de controller opnieuw wordt opgestart, wordt deze informatie opgeslagen, waardoor het mogelijk is om de controller te herstellen in geval van een stroomstoring.

Grafische interface smart home controller ontwikkeld in PHP 7 met behulp van een microframework Slim. De webserver is verantwoordelijk voor het draaien van de applicatie. lighttpd, vaak gebruikt in embedded apparaten vanwege de goede prestaties en de lage resourcevereisten.

Cloud Smart Home. Deel 1: Controller en sensoren
(klik op de foto om deze in hogere resolutie te openen)

De belangrijkste functie van de grafische interface is het verbinden van smart home-apparatuur (IP-bewakingscamera's en sensoren) met de controller. De webapplicatie leest de configuratie en huidige status van de controller en de daarop aangesloten apparaten uit de SQLite database. Om de controllerconfiguratie te wijzigen, verzendt het besturingsopdrachten in JSON-formaat via de RESTful API-interface van het serverproces.

Serverproces

Serverproces - een sleutelcomponent die al het hoofdwerk verricht op het gebied van het automatiseren van informatieprocessen die de basis vormen van een slim huis: het ontvangen en verwerken van sensorische gegevens, het uitvoeren van controleacties afhankelijk van de ingebedde logica. Het doel van het serverproces is om te communiceren met smart home-apparatuur, logische productieregels uit te voeren, opdrachten van de grafische interface en de cloud te ontvangen en te verwerken. Het serverproces in de betreffende smart home-controller is geïmplementeerd als een multi-threaded applicatie ontwikkeld in C++ en gelanceerd als een afzonderlijke service systemd besturingssysteem Linux Raspbian.

De belangrijkste blokken van het serverproces zijn:

  1. Berichtbeheerder;
  2. IP-cameraserver;
  3. Z-Wave-apparaatserver;
  4. Server van productie logische regels;
  5. Database met configuratie van de controller en blok met logische regels;
  6. RESTful API-server voor interactie met de grafische interface;
  7. MQTT-client voor interactie met de cloud.

Serverprocesblokken worden geïmplementeerd als afzonderlijke threads, waartussen informatie wordt overgedragen in de vorm van berichten in JSON-formaat (of datastructuren die dit formaat vertegenwoordigen in procesgeheugen).

Cloud Smart Home. Deel 1: Controller en sensoren

Het belangrijkste onderdeel van het serverproces is berichtenbeheerder, dat JSON-berichten naar alle serverprocesblokken routeert. De typen JSON-berichtinformatievelden en de waarden die ze kunnen accepteren, staan ​​vermeld in de tabel:

soort apparaat
protocol
berichtType
apparaatStatus
commando

camera
ONVIF
sensorgegevens
on
streamen(Aan/Uit)

sensor
Z-Wave
commando
korting
opname (aan/uit)

effector
MQTT
businessLogicRegel
streamen(Aan/Uit)
evice(toevoegen/verwijderen)

bedrijfslogica
configuratieGegevens
opname (aan/uit)

Bluetooth
apparaatStatus
fout

wifi

rf

Een bericht van een camerabewegingsmelder ziet er bijvoorbeeld als volgt uit:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566293475475",
	"clientType": "gateway",
	"deviceId": "1616453d-30cd-44b7-9bf0-************",
	"deviceType": "camera",
	"protocol": "onvif",
	"messageType": "sensorData",
	"sensorType": "camera",
	"label": "motionDetector",
	"sensorData": "on"
}

Productielogica

Om een ​​bericht van de coördinator te ontvangen of te verzenden, abonneert het serverprocesblok zich op berichten van een bepaald type. Abonnement is een logische productieregel van het type "Als dan...", gepresenteerd in JSON-indeling, en een link naar de berichtenhandler in het serverprocesblok. Om de IP-cameraserver bijvoorbeeld opdrachten van de GUI en de cloud te laten ontvangen, moet u de volgende regel toevoegen:

{
	"if": {
	    "and": [{
		"equal": {
		    "deviceId": "1616453d-30cd-44b7-9bf0-************"
		}
	    },
	    {
		"equal": {
		    "messageType": "command"
		}
	    }
	    ]
	},
	"then": {
	    "result": "true"
	}
}

Als de voorwaarden vermeld in antecedent (linkerkant) als de regels waar zijn, dan is er voldaan gevolg (rechterkant) regels, en de handler krijgt toegang tot de hoofdtekst van het JSON-bericht. Het antecedent ondersteunt logische operatoren die JSON-sleutelwaardeparen vergelijken:

  1. is gelijk aan "gelijk";
  2. niet gelijk aan "not_equal";
  3. minder "minder";
  4. meer "groter";
  5. kleiner dan of gelijk aan "less_or_equal";
  6. groter dan of gelijk aan "groter_of_gelijk".

De vergelijkingsresultaten kunnen aan elkaar worden gerelateerd met behulp van Booleaanse algebra-operatoren:

  1. En en"
  2. Of of";
  3. Niet niet".

Door operators en operanden in de Poolse notatie te schrijven, kunt u dus behoorlijk complexe voorwaarden creëren met een groot aantal parameters.

Precies hetzelfde mechanisme, gebaseerd op JSON-berichten en productieregels in JSON-formaat, wordt gebruikt in het productielogica-serverblok om kennis weer te geven en logische gevolgtrekkingen uit te voeren met behulp van sensorische gegevens van smart home-sensoren.

Met behulp van een mobiele applicatie creëert de gebruiker scenario's volgens welke het slimme huis zou moeten functioneren. Bijvoorbeeld: “Als de sensor voor het openen van de voordeur wordt geactiveerd, doe dan het licht in de gang aan”. De applicatie leest de identifiers van sensoren (openingssensor) en actuatoren (smart socket of smart lamp) uit de database en genereert een logische regel in JSON-formaat, die naar de smart home controller wordt gestuurd. Dit mechanisme zal in meer detail worden besproken in het derde artikel van onze serie, waar we zullen praten over de clientapplicatie voor het beheren van een smart home.

Het hierboven besproken productielogicamechanisme wordt geïmplementeerd met behulp van de bibliotheek SnelleJSON — SAX-parser voor JSON-formaat in C++. Door een reeks productieregels opeenvolgend te lezen en te parseren, kunt u de functie voor gegevensvergelijking eenvoudig implementeren in antecedenten:

void CRuleEngine::Process(PProperties pFact)
{
    m_pActions->clear();

    rapidjson::Reader   reader;
    for(TStringMap::value_type& rRule : m_Rules)
    {
        std::string sRuleId   = rRule.first;
        std::string sRuleBody = rRule.second;

        CRuleHandler            ruleHandler(pFact);
        rapidjson::StringStream ruleStream(sRuleBody.c_str());
        rapidjson::ParseResult  parseResult = reader.Parse(ruleStream, ruleHandler);
        if(!parseResult)
        {
            m_Logger.LogMessage(
                        NLogger2::ePriorityLevelError,
                        std::string("JSON parse error"),
                        "CRuleEngine::Process()",
                        std::string("RuleId: ") + sRuleId);
        }

        PProperties pAction = ruleHandler.GetAction();
        if(pAction)
        {
            pAction->Set("ruleId", sRuleId);
            m_pActions->push_back(pAction);
        }
    }
}

Hier pFact — een structuur die sleutel-waardeparen uit een JSON-bericht bevat, m_Regels - reeks reeks productieregels. De vergelijking van het binnenkomende bericht en de productieregel wordt uitgevoerd in de functie reader.Parse(ruleStream, ruleHandler)Waar regelHandler is een object dat de logica van Booleaanse operatoren en vergelijkingsoperatoren bevat. sRuleId — een unieke regelidentificatie, waardoor het mogelijk is regels op te slaan en te bewerken in de smart home controller-database. m_pActions — een array met de resultaten van logische gevolgtrekking: JSON-berichten die de consequenties van de regelsbasis bevatten en verder naar de berichtenbeheerder worden verzonden, zodat abonneethreads deze kunnen verwerken.

RapidJSON-prestaties zijn vergelijkbaar met de functie strlen()en de minimale systeembronvereisten staan ​​het gebruik van deze bibliotheek in ingebedde apparaten toe. Door het gebruik van berichten en logische regels in JSON-formaat kunt u een flexibel systeem van informatie-uitwisseling tussen alle componenten van de smart home controller implementeren.

Z-Wave-sensoren en actuatoren

Het belangrijkste voordeel van een slimme woning is dat deze onafhankelijk verschillende parameters van de externe omgeving kan meten en afhankelijk van de situatie nuttige functies kan uitvoeren. Hiervoor worden sensoren en actuatoren op de smart home controller aangesloten. In de huidige versie zijn dit draadloze apparaten die gebruikmaken van het protocol Z-Wave op een speciaal toegewezen frequentie 869 MHz Voor Rusland. Om te kunnen werken, worden ze gecombineerd tot een mesh-netwerk, dat signaalversterkers bevat om het dekkingsgebied te vergroten. De apparaten hebben ook een speciale energiebesparende modus: ze brengen het grootste deel van de tijd door in de slaapmodus en verzenden alleen informatie als hun status verandert, wat de levensduur van de ingebouwde batterij aanzienlijk kan verlengen.

Cloud Smart Home. Deel 1: Controller en sensoren

Er zijn inmiddels een vrij groot aantal verschillende Z-Wave-apparaten op de markt te vinden. Laten we een paar voorbeelden bekijken:

  1. De Zipato PAN16 smart socket kan de volgende parameters meten: elektriciteitsverbruik (kWh), vermogen (W), spanning (V) en stroom (A) in het elektriciteitsnet. Ook heeft hij een ingebouwde schakelaar waarmee je het aangesloten elektrische apparaat kunt bedienen;
  2. De Neo Coolcam-leksensor detecteert de aanwezigheid van gemorste vloeistof door de contacten van de externe sonde te sluiten;
  3. De Zipato PH-PSG01 rooksensor wordt geactiveerd wanneer rookdeeltjes de gasanalysatorkamer binnendringen;
  4. De Neo Coolcam bewegingssensor analyseert de infraroodstraling van het menselijk lichaam. Daarnaast is er een lichtsensor (Lx);
  5. Multisensor Philio PST02-A meet temperatuur (°C), licht (%), deuropening, aanwezigheid van een persoon in de kamer;
  6. Z-Wave USB Stick ZME E UZB1 netwerkcontroller, waarop sensoren zijn aangesloten.

Het is erg belangrijk dat de apparaten en de controller op dezelfde frequentie werken, anders zien ze elkaar simpelweg niet op het moment van verbinding. Op één Z-Wave-netwerkcontroller kunnen maximaal 232 apparaten worden aangesloten, wat voldoende is voor een appartement of een landhuis. Om het netwerkdekkingsgebied binnenshuis uit te breiden, kan een smart socket als signaalversterker worden gebruikt.

Cloud Smart Home. Deel 1: Controller en sensoren

In het smart home controller-serverproces dat in de vorige paragraaf is besproken, is de Z-Wave-server verantwoordelijk voor de interactie met Z-Wave-apparaten. Het maakt gebruik van een bibliotheek om informatie van sensoren te ontvangen OpenZWave in C++, dat een interface biedt voor interactie met de Z-Wave-netwerk-USB-controller en werkt met een verscheidenheid aan sensoren en actuatoren. De waarde van de door de sensor gemeten omgevingsparameter wordt door de Z-Wave-server vastgelegd in de vorm van een JSON-bericht:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566479791290",
	"clientType": "gateway",
	"deviceId": "20873eb0-dd5e-4213-a175-************",
	"deviceType": "sensor",
	"protocol": "zwave",
	"messageType": "sensorData",
	"homeId": "0xefa0cfa7",
	"nodeId": "20",
	"sensorType": "METER",
	"label": "Voltage",
	"sensorData": "229.3",
	"units": "V"
}

Het wordt vervolgens doorgestuurd naar de berichtenbeheerder van het serverproces, zodat abonneethreads het kunnen ontvangen. De hoofdabonnee is de productielogicaserver, die de berichtveldwaarden matcht in de antecedenten van de logische regels. De gevolgtrekkingsresultaten met besturingsopdrachten worden teruggestuurd naar de berichtenbeheerder en gaan van daaruit naar de Z-Wave-server, die ze decodeert en naar de USB-controller van het Z-Wave-netwerk stuurt. Vervolgens gaan ze de actuator binnen, die de toestand van omgevingsobjecten verandert, en het slimme huis verricht zo nuttig werk.

Cloud Smart Home. Deel 1: Controller en sensoren
(klik op de foto om deze in hogere resolutie te openen)

Het verbinden van Z-Wave apparaten gebeurt in de grafische interface van de smart home controller. Ga hiervoor naar de pagina met een lijst met apparaten en klik op de knop “Toevoegen”. Het add-commando via de RESTful API-interface komt het serverproces binnen en wordt vervolgens door de berichtenbeheerder naar de Z-Wave-server verzonden, waardoor de Z-Wave-netwerk-USB-controller in een speciale modus wordt gezet voor het toevoegen van apparaten. Vervolgens moet u op het Z-Wave-apparaat een reeks snelle drukken (3 keer drukken binnen 1,5 seconde) op de serviceknop maken. De USB-controller verbindt het apparaat met het netwerk en stuurt informatie daarover naar de Z-Wave-server. Dat creëert op zijn beurt een nieuwe vermelding in de SQLite-database met de parameters van het nieuwe apparaat. Na een bepaald tijdsinterval keert de grafische interface terug naar de Z-Wave-apparaatlijstpagina, leest informatie uit de database en geeft het nieuwe apparaat in de lijst weer. Elk apparaat krijgt zijn eigen unieke identificatie, die wordt gebruikt in productie-inferentieregels en bij het werken in de cloud. De werking van dit algoritme wordt weergegeven in het UML-diagram:

Cloud Smart Home. Deel 1: Controller en sensoren
(klik op de foto om deze in hogere resolutie te openen)

IP-camera's aansluiten

Het cloud smart home-systeem dat in dit artikel wordt besproken, is een upgrade van het cloud-videobewakingssysteem, eveneens ontwikkeld door de auteur, dat al enkele jaren op de markt is en veel installaties heeft in Rusland.

Voor cloudvideobewakingssystemen is een van de acute problemen de beperkte selectie van apparatuur waarmee integratie kan worden uitgevoerd. De software die verantwoordelijk is voor de verbinding met de cloud wordt in de videocamera geïnstalleerd, wat meteen serieuze eisen stelt aan de hardware: de processor en de hoeveelheid vrij geheugen. Dit verklaart vooral de hogere prijs van cloud CCTV-camera’s vergeleken met reguliere IP-camera’s. Bovendien is er een lange onderhandelingsfase met fabrikanten van CCTV-camera's nodig om toegang te krijgen tot het camerabestandssysteem en alle noodzakelijke ontwikkelingstools.

Cloud Smart Home. Deel 1: Controller en sensoren

Aan de andere kant hebben alle moderne IP-camera's standaardprotocollen voor interactie met andere apparatuur (met name videorecorders). Het gebruik van een afzonderlijke controller die via een standaardprotocol verbinding maakt en videostreams van IP-camera's naar de cloud uitzendt, biedt dus aanzienlijke concurrentievoordelen voor cloudvideobewakingssystemen. Als de klant bovendien al een videobewakingssysteem heeft geïnstalleerd op basis van eenvoudige IP-camera's, wordt het mogelijk om dit uit te breiden en er een volwaardig cloud smart home van te maken.

Het populairste protocol voor IP-videobewakingssystemen, dat nu zonder uitzondering door alle IP-camerafabrikanten wordt ondersteund, is ONVIF Profile S, waarvan de specificaties bestaan ​​in een beschrijvingstaal voor webservices wsdl. Hulpprogramma's uit de toolkit gebruiken gSOAP Het is mogelijk om broncode te genereren voor diensten die werken met IP-camera's:

$ wsdl2h -o onvif.h 
	https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 
	https://www.onvif.org/ver10/events/wsdl/event.wsdl 
	https://www.onvif.org/ver10/media/wsdl/media.wsdl 
	https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

$ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h

Als resultaat krijgen we een set header “*.h” en bronbestanden “*.cpp” in C++, die rechtstreeks in een applicatie of een aparte bibliotheek kunnen worden geplaatst en gecompileerd met behulp van de GCC-compiler. Door de vele functies is de code groot en vereist aanvullende optimalisatie. De Raspberry Pi 3 model B+ microcomputer heeft voldoende prestaties om deze code uit te voeren, maar als het nodig is om de code naar een ander platform te porten, is het noodzakelijk om de juiste processorarchitectuur en systeembronnen te selecteren.

IP-camera's die de ONVIF-standaard ondersteunen, worden bij gebruik op een lokaal netwerk aangesloten op een speciale multicast-groep met het adres 239.255.255.250. Er is een protocol WS-ontdekking, waarmee u het zoeken naar apparaten op het lokale netwerk kunt automatiseren.

De grafische interface van de smart home controller implementeert een zoekfunctie voor IP-camera's in PHP, wat erg handig is bij interactie met webservices via XML-berichten. Bij het selecteren van menu-items Apparaten > IP-camera's > Scannen Het algoritme voor het zoeken naar IP-camera's wordt gestart en geeft het resultaat weer in de vorm van een tabel:

Cloud Smart Home. Deel 1: Controller en sensoren
(klik op de foto om deze in hogere resolutie te openen)

Wanneer u een camera aan de controller toevoegt, kunt u de instellingen opgeven op basis waarvan deze met de cloud zal communiceren. Ook in dit stadium krijgt het automatisch een unieke apparaat-ID toegewezen, waarmee het later gemakkelijk binnen de cloud kan worden geïdentificeerd.

Cloud Smart Home. Deel 1: Controller en sensoren

Vervolgens wordt er een bericht in JSON-formaat gegenereerd met daarin alle parameters van de toegevoegde camera en via het RESTful API-commando naar het serverproces van de smart home controller gestuurd, waar de cameraparameters worden gedecodeerd en opgeslagen in de interne SQLite-database, en worden wordt ook gebruikt om de volgende verwerkingsthreads te starten:

  1. het tot stand brengen van een RTSP-verbinding om video- en audiostreams te ontvangen;
  2. transcoderen van audio van G.711 mu-Law, G.711 A-Law, G.723, enz. formaten. naar AAC-formaat;
  3. het transcoderen van videostreams in H.264-formaat en audio in AAC-formaat naar een FLV-container en deze via het RTMP-protocol naar de cloud verzenden;
  4. via het ONVIF-protocol een verbinding tot stand brengen met het eindpunt van de bewegingsdetector van de IP-camera en deze periodiek opvragen;
  5. periodiek een miniatuurvoorbeeld genereren en deze via het MQTT-protocol naar de cloud verzenden;
  6. lokale opname van video- en audiostreams in de vorm van afzonderlijke bestanden in MP4-formaat op een SD- of Flash-kaart van de smart home controller.

Cloud Smart Home. Deel 1: Controller en sensoren

Voor het tot stand brengen van een verbinding met camera's, het transcoderen, verwerken en opnemen van videostreams in het serverproces worden functies uit de bibliotheek gebruikt FFmpeg 4.1.0.

In het prestatietestexperiment werden 3 camera's op de controller aangesloten:

  1. HiWatch DS-I114W (resolutie - 720p, compressieformaat - H.264, bitrate - 1 Mb/s, geluid G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (resolutie - 1080p, compressieformaat - H.264, bitrate - 1 Mb/s, geen geluid);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (resolutie - 1080p, compressieformaat - H.264, bitrate - 1.5 Mb/s, AAC-audio).

Cloud Smart Home. Deel 1: Controller en sensoren

Alle drie de streams werden tegelijkertijd naar de cloud uitgevoerd, de audiotranscodering werd vanaf slechts één camera uitgevoerd en de lokale archiefopname was uitgeschakeld. CPU-belasting was ongeveer 5%, RAM-gebruik was 32 MB (per proces), 56 MB (totaal inclusief besturingssysteem).

Zo kunnen er ongeveer 20 - 30 camera's op de smart home controller worden aangesloten (afhankelijk van de resolutie en bitrate), wat voldoende is voor een videobewakingssysteem voor een huisje met drie verdiepingen of een klein magazijn. Voor taken die hogere prestaties vereisen, kunt u een nettop gebruiken met een multi-core Intel-processor en Linux Debian Sarge OS. De controller wordt momenteel proefgedraaid en de gegevens over de prestaties ervan zullen worden bijgewerkt.

Interactie met de cloud

Een cloud-based smart home slaat gebruikersgegevens (video- en sensormetingen) op in de cloud. De architectuur van cloudopslag zal in meer detail worden besproken in het volgende artikel in onze serie. Laten we het nu hebben over de interface voor het verzenden van informatieberichten van de smart home controller naar de cloud.

Via het protocol worden de statussen van aangesloten apparaten en sensormetingen verzonden MQTT, dat vanwege zijn eenvoud en energie-efficiëntie vaak wordt gebruikt in Internet of Things-projecten. MQTT maakt gebruik van een client-servermodel, waarbij klanten zich abonneren op specifieke onderwerpen binnen de makelaar en hun berichten publiceren. De makelaar stuurt berichten naar alle abonnees volgens regels die worden bepaald door het QoS-niveau (Quality of Service):

  • QoS 0 - maximaal één keer (geen leveringsgarantie);
  • QoS 1 - minimaal één keer (met ontvangstbevestiging);
  • QoS 2 - precies één keer (met extra leveringsbevestiging).

In ons geval gebruiken we Eclipse Mosquito. De onderwerpnaam is de unieke identificatie van de smart home controller. De MQTT-client binnen het serverproces abonneert zich op dit onderwerp en vertaalt JSON-berichten die afkomstig zijn van de berichtenbeheerder ernaar. Omgekeerd worden berichten van de MQTT-broker doorgestuurd naar de berichtenbeheerder, die ze vervolgens multiplext naar zijn abonnees binnen het serverproces:

Cloud Smart Home. Deel 1: Controller en sensoren

Om berichten over de status van de smart home controller te verzenden wordt gebruik gemaakt van het mechanisme van opgeslagen berichten bewaarde berichten MQTT-protocol. Hiermee kunt u de timing van heraansluitingen tijdens stroomstoringen correct controleren.

De MQTT-client is ontwikkeld op basis van de bibliotheekimplementatie Verduistering Paho in C++-taal.

H.264 + AAC-mediastreams worden via het RTMP-protocol naar de cloud gestuurd, waar een cluster van mediaservers verantwoordelijk is voor de verwerking en opslag ervan. Om de belasting in het cluster optimaal te verdelen en de minst belaste mediaserver te selecteren, doet de smart home controller een voorlopig verzoek aan de cloud load balancer en verzendt daarna pas de mediastream.

Conclusie

In het artikel werd een specifieke implementatie onderzocht van een smart home controller op basis van de Raspberry Pi 3 B+ microcomputer, die informatie kan ontvangen, verwerken en apparatuur kan besturen via het Z-Wave-protocol, kan communiceren met IP-camera’s via het ONVIF-protocol, en ook gegevens kan uitwisselen en opdrachten met de cloudservice via MQTT- en RTMP-protocollen. Er is een productielogica-engine ontwikkeld op basis van een vergelijking van logische regels en feiten, gepresenteerd in JSON-formaat.

De smart home controller wordt momenteel getest op verschillende locaties in Moskou en de regio Moskou.

De volgende versie van de controller is van plan om andere soorten apparaten aan te sluiten (RF, Bluetooth, WiFi, bedraad). Voor het gemak van gebruikers wordt de procedure voor het aansluiten van sensoren en IP-camera's overgebracht naar de mobiele applicatie. Er zijn ook ideeën voor het optimaliseren van de serverprocescode en het porten van de software naar het besturingssysteem OpenWrt. Hiermee bespaar je op een aparte controller en breng je de functionaliteit van een smart home over naar een reguliere huishoudrouter.

Bron: www.habr.com

Voeg een reactie