
Aujourd'hui, grâce au développement rapide de la microélectronique, des canaux de communication, des technologies Internet et de l'intelligence artificielle, le thème des maisons intelligentes devient de plus en plus pertinent. L'habitation humaine a subi des changements importants depuis l'âge de pierre et à l'ère de la révolution industrielle 4.0 et l'Internet des objets est devenu pratique, fonctionnel et sûr. Des solutions arrivent sur le marché qui transforment un appartement ou une maison de campagne en systèmes d'information sophistiqués, gérés depuis n'importe où dans le monde à l'aide d'un smartphone. De plus, la connaissance des langages de programmation n'est plus requise pour l'interaction homme-machine - grâce aux algorithmes de reconnaissance et de synthèse de la parole, une personne parle sa langue maternelle avec une maison intelligente.
Certains systèmes de maison intelligente actuellement sur le marché sont un développement logique des systèmes de vidéosurveillance basés sur le cloud, dont les développeurs ont réalisé le besoin d'une solution complète non seulement pour la surveillance, mais aussi pour la gestion des objets distants.
Nous vous proposons une série de trois articles, qui vous parleront de tous les principaux composants du système de maison intelligente cloud, personnellement développés par l'auteur et mis en service. Le premier article est consacré aux équipements clients terminaux installés à l'intérieur d'une maison intelligente, le second à l'architecture d'un système de stockage et de traitement de données cloud, et enfin, le troisième à une application cliente de gestion du système sur des appareils mobiles et fixes.
Équipement de maison intelligente
Tout d'abord, parlons de la façon de faire une maison intelligente à partir d'un appartement, d'un chalet ou d'un chalet ordinaire. Pour cela, en règle générale, il est nécessaire de placer l'équipement suivant dans la maison:
- capteurs mesurant divers paramètres environnementaux;
- actionneurs agissant sur des objets externes;
- un contrôleur qui effectue des calculs conformément aux mesures des capteurs et à la logique intégrée, et envoie des commandes aux actionneurs.
La figure suivante montre le schéma d'une maison intelligente, sur laquelle se trouvent des capteurs de fuite d'eau (1) dans la salle de bain, de température (2) et d'éclairage (3) dans la chambre, une prise intelligente (4) dans la cuisine et une caméra de vidéosurveillance (5) dans le couloir.

Actuellement, les capteurs sans fil fonctionnant selon les protocoles RF433, Z-Wave, ZigBee, Bluetooth et WiFi sont largement utilisés. Leurs principaux avantages sont la facilité d'installation et d'utilisation, ainsi que le faible coût et la fiabilité, car Les fabricants cherchent à mettre leurs appareils sur le marché de masse et à les mettre à la disposition de l'utilisateur moyen.
Les capteurs et actionneurs, en règle générale, sont connectés via une interface sans fil au contrôleur de maison intelligente (6) - un micro-ordinateur spécialisé qui intègre tous ces appareils dans un seul réseau et les contrôle.
Cependant, certaines solutions peuvent combiner simultanément un capteur, un actionneur et un contrôleur. Par exemple, une prise intelligente peut être programmée pour s'allumer ou s'éteindre selon un calendrier, et une caméra de vidéosurveillance basée sur le cloud peut enregistrer de la vidéo en fonction d'un signal de détecteur de mouvement. Dans les cas les plus simples, vous pouvez vous passer d'un contrôleur séparé, mais pour créer un système flexible avec de nombreux scénarios, il est nécessaire.
Pour connecter le contrôleur domestique intelligent au réseau mondial, un routeur Internet conventionnel (7) peut être utilisé, qui est depuis longtemps un appareil électroménager familier dans n'importe quelle maison. Il y a un autre argument en faveur du contrôleur de maison intelligente - si la connexion à Internet est perdue, la maison intelligente continuera de fonctionner normalement en raison du bloc logique stocké à l'intérieur du contrôleur, et non dans le service cloud.
ContrĂ´leur domestique intelligent
Le contrôleur du système de maison intelligente cloud discuté dans cet article a été développé sur la base du micro-ordinateur à carte unique
Raspberry Pi 3 modèle B + , qui a été publié en mars 2018 et dispose de ressources et de performances suffisantes pour les tâches de la maison intelligente. Il se compose d'un processeur Cortex-A53 à quatre cœurs avec une architecture ARMv8-A 64 bits, cadencé à 1,4 GHz, ainsi que 1 Go de RAM, Wi-Fi 802.11ac, Bluetooth 4.2 et un adaptateur Gigabit Ethernet qui fonctionne via le bus USB 2.0.

L'assemblage du contrôleur est très simple - le micro-ordinateur (1) est installé dans un boîtier en plastique (2), puis une carte microSD de 8 Go avec logiciel (3) et un contrôleur de réseau USB Z-Wave (4) sont insérés dans les emplacements correspondants. Le contrôleur domestique intelligent est connecté au secteur via un adaptateur secteur 5 V, 2,1 A (5) et un câble USB-micro-USB (6). Chaque contrôleur a un numéro d'identification unique, qui est enregistré dans le fichier de configuration au premier démarrage et est nécessaire pour l'interaction avec les services de maison intelligente dans le cloud.
Le logiciel du contrôleur domestique intelligent a été développé par l'auteur de cet article basé sur le
système d' exploitation
Linux Raspbian Stretch . Il comprend les principaux sous-systèmes suivants:
- processus serveur pour interagir avec l'équipement domestique intelligent et le cloud;
- interface utilisateur graphique pour configurer le contrôleur et les paramètres de fonctionnement;
- Bases de données pour stocker la configuration du contrôleur.
La base de données du contrôleur de maison intelligente est basée sur le SGBD
SQLite intégré et est un fichier sur la carte SD avec le logiciel système. Il sert de référentiel de la configuration du contrôleur - des informations sur l'équipement connecté et son état actuel, un bloc de règles de production logiques, ainsi que des informations nécessitant une indexation (par exemple, les noms de fichiers des archives vidéo locales). Lorsque le contrôleur est redémarré, ces informations sont enregistrées, ce qui permet de restaurer le contrôleur en cas de panne de courant.
L'interface graphique du contrôleur de maison intelligente est développée en PHP 7 en utilisant le microframework
Slim . Le serveur Web
lighttpd , qui est souvent utilisé dans les appareils embarqués en raison de ses bonnes performances et de ses faibles besoins en ressources, est responsable du fonctionnement de l'application.
(cliquez sur l'image pour l'ouvrir en plus haute résolution)La fonction principale de l'interface graphique est de connecter l'équipement domestique intelligent (caméras IP et capteurs) au contrôleur. L'application Web lit la configuration et l'état actuel du contrôleur et des périphériques connectés à partir de la base de données SQLite. Pour modifier la configuration du contrôleur, il envoie des commandes de contrôle au format JSON via l'API RESTful du processus serveur.
Processus serveur
Le processus serveur est un composant clé qui effectue tout le travail de base d'automatisation des processus d'information qui constituent le fondement d'une maison intelligente: réception et traitement de données sensorielles, émission d'actions de contrôle en fonction de la logique sous-jacente. Le but du processus serveur est d'interagir avec l'équipement domestique intelligent, de suivre les règles de la logique de production, de recevoir et de traiter les commandes de l'interface graphique et du cloud. Le processus serveur de ce contrôleur de maison intelligente est implémenté en tant qu'application multithread développée en C ++ et lancée en tant que service
systemd distinct du
système d' exploitation
Linux Raspbian .
Les principaux blocs du processus serveur sont:
- Gestionnaire de messages
- Serveur de caméras IP;
- Serveur d'appareils Z-Wave;
- Règles de logique de production du serveur;
- Base de données de configuration du contrôleur et du bloc de règles logiques;
- Serveur API RESTful pour interagir avec l'interface graphique;
- Client MQTT pour interagir avec le cloud.
Les blocs du processus serveur sont implémentés sous forme de flux séparés dont les informations sont transmises sous forme de messages au format JSON (ou de structures de données représentant ce format dans la mémoire du processus).

Le composant principal du processus serveur est le
gestionnaire de messages , qui achemine les messages au format JSON pour tous les blocs du processus serveur. Les types de champs d'informations de message JSON et les valeurs qu'ils peuvent accepter sont répertoriés dans le tableau:
Par exemple, un message provenant d'un détecteur de mouvement de caméra ressemble à ceci:
{ "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" }
Logique de production
Pour recevoir ou envoyer un message du répartiteur, le bloc de processus serveur s'abonne à des messages d'un certain type. L'abonnement est une règle logique de production du type
"Si ... alors ..." , présentée au format JSON, et un lien vers le gestionnaire de messages à l'intérieur du bloc de processus serveur. Par exemple, pour que le serveur de caméras IP puisse recevoir des commandes de l'interface graphique et du cloud, vous devez ajouter la règle suivante:
{ "if": { "and": [{ "equal": { "deviceId": "1616453d-30cd-44b7-9bf0-************" } }, { "equal": { "messageType": "command" } } ] }, "then": { "result": "true" } }
Si les conditions spécifiées dans l'
antécédent (côté gauche) de la règle sont vraies, la
règle (côté droit) de la règle est exécutée et le gestionnaire obtient l'accès au corps du message JSON. L'antécédent prend en charge les opérateurs logiques qui effectuent la comparaison des paires clé-valeur JSON:
- égal à "égal";
- différent de "not_equal";
- moins "moins";
- plus "plus";
- inférieur ou égal à "less_or_equal";
- supérieur ou égal à Greater_or_equal.
Les résultats de la comparaison peuvent être reliés entre eux à l'aide des opérateurs de l'algèbre booléenne:
- Et "et";
- OU "ou";
- PAS "pas".
Ainsi, en écrivant des opérateurs et des opérandes en notation polonaise, il est possible de former des conditions assez complexes avec un grand nombre de paramètres.
Le même mécanisme exact, basé sur les messages JSON et les règles de production au format JSON, est utilisé dans le bloc du serveur logique de production pour représenter les connaissances et faire une inférence logique à l'aide des données sensorielles des capteurs de maison intelligente.
À l'aide d'une application mobile, un utilisateur crée des scripts selon lesquels une maison intelligente devrait fonctionner. Par exemple:
"Si le capteur d'ouverture de la porte d'entrée a fonctionné, allumez la lumière dans le couloir .
" L'application lit les identifiants des capteurs (capteur d'ouverture) et des actionneurs (prise intelligente ou lampe intelligente) dans la base de données et génère une règle logique au format JSON, qui est envoyée au contrôleur domestique intelligent. Ce mécanisme sera abordé plus en détail dans le troisième article de notre série, où nous parlerons d'une application cliente pour la gestion d'une maison intelligente.
Le mécanisme de logique de production décrit ci-dessus est implémenté à l'aide de la bibliothèque
RapidJSON , un analyseur SAX du format JSON en C ++. La lecture et l'analyse cohérentes d'un tableau de règles de production facilitent l'implémentation de la fonction de correspondance des données dans les antécédents:
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); } } }
Ici,
pFact est une structure contenant des paires clé-valeur d'un message JSON,
m_Rules est un tableau de chaînes de règles de production. La comparaison du message entrant et de la règle de production est effectuée dans la fonction
reader.Parse (ruleStream, ruleHandler) , oĂą
ruleHandler est un objet contenant la logique des opérateurs booléens et des opérateurs de comparaison.
sRuleId est un identifiant de règle unique, grâce auquel il est possible de stocker et de modifier des règles dans la base de données d'un contrôleur de maison intelligente.
m_pActions - un tableau avec les résultats de l'inférence logique: messages JSON contenant des éléments cohérents de la base de règles et transmis au gestionnaire de messages afin que les flux d'abonnés puissent les traiter.
Les performances de RapidJSON sont comparables Ă la fonction
strlen () , et les exigences minimales en termes de ressources système permettent à cette bibliothèque d'être utilisée dans des périphériques intégrés. L'utilisation de messages et de règles logiques au format JSON vous permet de mettre en œuvre un système flexible d'échange d'informations entre tous les composants du contrôleur de maison intelligente.
Capteurs et actionneurs Z-Wave
Le principal avantage d'une maison intelligente est qu'elle peut mesurer indépendamment divers paramètres environnementaux et exécuter des fonctions utiles selon la situation. Pour ce faire, des capteurs et des actionneurs sont connectés au contrôleur de maison intelligente. Dans la version actuelle, il s'agit d'appareils sans fil fonctionnant selon le protocole
Z-Wave à une fréquence spécialement allouée de
869 MHz pour la Russie. Pour leur travail, ils sont combinés en un réseau maillé, dans lequel des répéteurs de signaux sont présents pour augmenter la zone de couverture. Les appareils disposent également d'un mode d'économie d'énergie spécial - ils passent la plupart du temps en mode veille et n'envoient des informations que lorsque leur état change, ce qui peut prolonger considérablement la durée de vie de la batterie intégrée.

Sur le marché, vous pouvez maintenant trouver un assez grand nombre d'appareils Z-Wave différents. À titre d'exemple, considérons quelques-uns:
- La prise intelligente Zipato PAN16 peut mesurer les paramètres suivants: consommation électrique (kW / h), puissance (W), tension (V) et courant (A) dans le secteur. Il dispose également d'un interrupteur intégré avec lequel vous pouvez contrôler l'appareil électrique connecté;
- Le capteur de fuite Neo Coolcam détecte la présence de liquide renversé en fermant les contacts de la sonde à distance;
- Le détecteur de fumée Zipato PH-PSG01 se déclenche lorsque des particules de fumée pénètrent dans la chambre de l'analyseur de gaz;
- Le capteur de mouvement Neo Coolcam analyse le rayonnement infrarouge du corps humain. De plus, il y a un capteur de lumière (Lx);
- Le multi-capteur Philio PST02-A mesure la température (° C), l'exposition à la lumière (%), l'ouverture de la porte, la présence d'une personne dans la pièce;
- Clé USB Z-Wave Contrôleur de réseau ZME E UZB1, auquel les capteurs sont connectés.
Il est très important que les appareils et le contrôleur fonctionnent à la même fréquence, sinon ils ne se verront tout simplement pas au moment de la connexion. Jusqu'à 232 appareils peuvent être connectés à un contrôleur de réseau Z-Wave, ce qui est suffisant pour un appartement ou une maison de campagne. Pour étendre la zone de couverture du réseau à l'intérieur, une prise intelligente peut être utilisée comme répéteur de signal.

Dans le processus de serveur du contrôleur de maison intelligente, discuté dans le paragraphe précédent, le serveur Z-Wave est responsable de l'interaction avec les appareils Z-Wave. Pour obtenir des informations des capteurs, il utilise la bibliothèque
OpenZWave en C ++, qui fournit une interface pour l'interaction avec un contrôleur USB du réseau Z-Wave et fonctionne avec de nombreux capteurs et actionneurs. La valeur du paramètre environnemental mesurée par le capteur est enregistrée par le serveur Z-Wave sous la forme d'un message JSON:
{ "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" }
Il est ensuite transmis au gestionnaire de messages du processus serveur afin que les threads abonnés puissent le recevoir. Le principal abonné est le serveur logique de production, qui compare les valeurs des champs de message dans les antécédents des règles logiques. Les résultats de la sortie logique contenant les commandes de contrôle sont renvoyés au gestionnaire de messages et de là , ils vont au serveur Z-Wave, qui les décode et les envoie au contrôleur USB du réseau Z-Wave. Ensuite, ils tombent dans l'appareil exécutif, qui change l'état de l'environnement, et la maison intelligente fait donc un travail utile.
(cliquez sur l'image pour l'ouvrir en plus haute résolution)Les appareils Z-Wave sont connectés dans l'interface graphique du contrôleur domestique intelligent. Pour ce faire, rendez-vous sur la page avec la liste des appareils et cliquez sur le bouton "Ajouter". La commande add via l'API RESTful entre dans le processus serveur et est ensuite envoyée par le gestionnaire de messages au serveur Z-Wave, ce qui place le contrôleur USB Z-Wave en mode d'ajout de périphérique spécial. Ensuite, sur l'appareil Z-Wave, vous devez effectuer une série d'appuis rapides (3 appuis en 1,5 seconde) sur le bouton de service. Un contrôleur USB connecte l'appareil au réseau et envoie des informations à ce sujet au serveur Z-Wave. Cela, à son tour, crée un nouvel enregistrement dans la base de données SQLite avec les paramètres du nouveau périphérique. Après un intervalle de temps prédéterminé, l'interface graphique revient à la page de la liste des appareils Z-Wave, lit les informations de la base de données et affiche le nouvel appareil dans la liste. Dans le même temps, chaque appareil reçoit son propre identifiant unique, qui est utilisé dans les règles d'inférence de production et lorsqu'il travaille dans le cloud. Le fonctionnement de cet algorithme est illustré dans le diagramme UML:
(cliquez sur l'image pour l'ouvrir en plus haute résolution)Connexion caméra IP
Le système de maison intelligente cloud discuté dans cet article est une modernisation du système de vidéosurveillance cloud, également développé par l'auteur, qui est sur le marché depuis plusieurs années et possède de nombreuses installations en Russie.
Pour les systèmes de vidéosurveillance dans le cloud, l'un des problèmes aigus est le choix limité d'équipements avec lesquels l'intégration peut être réalisée. Le logiciel responsable de la connexion au cloud est installé à l'intérieur du caméscope, ce qui sollicite immédiatement son matériel - le processeur et la quantité de mémoire libre. Cela explique principalement le prix plus élevé des caméras de surveillance vidéo basées sur le cloud par rapport aux caméras IP conventionnelles. En outre, une longue étape de négociations avec les fabricants de caméras de vidéosurveillance est nécessaire pour accéder au système de fichiers des caméras et à tous les outils de développement nécessaires.

D'un autre côté, toutes les caméras IP modernes ont des protocoles standard pour interagir avec d'autres équipements (en particulier les DVR). Ainsi, l'utilisation d'un contrôleur séparé qui se connecte à l'aide du protocole standard et diffuse des flux vidéo des caméras IP vers le cloud offre des avantages compétitifs importants pour les systèmes de vidéosurveillance dans le cloud. De plus, si le client avait déjà installé un système de vidéosurveillance basé sur de simples caméras IP, il devient possible de l'étendre et de le transformer en une maison intelligente nuageuse à part entière.
Le protocole le plus populaire pour les systèmes de vidéosurveillance IP, qui est désormais pris en charge par tous les fabricants de caméras IP sans exception, est le
profil ONVIF S , dont les spécifications existent dans le langage de description des services Web
WSDL . En utilisant les utilitaires de la
boîte à outils
gSOAP ,
il est possible de générer le code source des services fonctionnant avec des caméras IP:
$ 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
En conséquence, nous obtenons un ensemble de fichiers d'en-tête «* .h» et de source «* .cpp» en C ++, qui peuvent être placés directement dans une application ou une bibliothèque séparée et compilés à l'aide du compilateur GCC. En raison des nombreuses fonctions, le code est volumineux et nécessite une optimisation supplémentaire. Le micro-ordinateur Raspberry Pi 3 modèle B + a des performances suffisantes pour exécuter ce code, mais s'il est nécessaire de porter le code sur une autre plate-forme, il est nécessaire de choisir correctement l'architecture du processeur et les ressources système.
Les caméras IP qui prennent en charge la norme ONVIF, lorsqu'elles fonctionnent sur un réseau local, sont connectées à un groupe de multidiffusion spécial avec l'adresse
239.255.255.250 . Il existe un protocole
WS-Discovery , qui vous permet d'automatiser la recherche d'appareils sur le réseau local.
L'interface intelligente du contrôleur de maison intelligente implémente la fonction de recherche de caméras IP en langage PHP, ce qui est très pratique lors de l'interaction avec des services Web via des messages XML. Lorsque vous sélectionnez les éléments de menu
Périphériques> Caméras IP> Numériser , l'algorithme de recherche pour les caméras IP démarre, affichant le résultat dans un tableau:
(cliquez sur l'image pour l'ouvrir en plus haute résolution)Lors de l'ajout d'une caméra au contrôleur, vous pouvez spécifier les paramètres selon lesquels elle interagira avec le cloud. À ce stade également, un identifiant d'appareil unique lui est automatiquement attribué, grâce auquel il peut être facilement identifié à l'avenir dans le cloud.

Ensuite, un message est généré au format JSON contenant tous les paramètres de la caméra ajoutée et envoyé au processus serveur du contrôleur de maison intelligente via la commande RESTful API, où les paramètres de la caméra sont décodés et stockés dans la base de données interne SQLite, et sont également utilisés pour démarrer les threads de traitement suivants:
- établir une connexion RTSP pour recevoir des flux vidéo et audio;
- transcodage audio des formats G.711 mu-Law, G.711 A-Law, G.723, etc. au format AAC;
- transcoder les flux vidéo H.264 et audio AAC vers le conteneur FLV et les transmettre au cloud en utilisant RTMP;
- établir une connexion avec le point d'extrémité du détecteur de mouvement de caméra IP via le protocole ONVIF et son interrogation périodique;
- générer périodiquement une image d'aperçu miniature et l'envoyer au cloud à l'aide du protocole MQTT;
- enregistrement local de flux vidéo et audio sous forme de fichiers séparés au format MP4 sur une carte SD ou Flash d'un contrôleur de maison intelligente.

Pour établir une connexion avec les caméras, transcoder, traiter et enregistrer les flux vidéo dans le processus serveur, les fonctions de la bibliothèque
FFmpeg 4.1.0 sont utilisées.
Dans l'expérience de test de performance, 3 caméras ont été connectées au contrôleur:
- HiWatch DS-I114W (résolution - 720p, format de compression - H.264, débit binaire - 1 Mb / s, son mu-Law G.711);
- Microdigital MDC-M6290FTD-1 (résolution - 1080p, format de compression - H.264, débit binaire - 1 Mb / s, sans son);
- Dahua DH-IPC-HDW4231EMP-AS-0360B (résolution - 1080p, format de compression - H.264, débit binaire - 1,5 Mb / s, son AAC).

Les trois flux ont été simultanément émis vers le cloud, le transcodage du son a été effectué uniquement à partir d'une seule caméra, l'enregistrement des archives locales a été désactivé. L'utilisation du processeur était d'environ 5%, l'utilisation de la RAM était de 32 Mo (par processus), 56 Mo (total avec le système d'exploitation).
Ainsi, environ 20 à 30 caméras (selon la résolution et le débit binaire) peuvent être connectées au contrôleur de maison intelligente, ce qui est suffisant pour un système de surveillance vidéo d'un chalet à trois étages ou d'un petit entrepôt. Dans les tâches nécessitant des performances élevées, vous pouvez utiliser un nettop avec un processeur multicœur Intel et un système d'exploitation Linux Debian Sarge. Actuellement, le contrôleur est en cours d'essai et les données sur ses performances seront mises à jour.
Interaction avec le cloud
Cloud smart home stocke les données des utilisateurs (vidéos et mesures des capteurs) dans le cloud. L'architecture de stockage cloud sera discutée plus en détail dans le prochain article de notre série. Parlons maintenant de l'interface de transmission des messages d'information du contrôleur de maison intelligente vers le cloud.
Les états des appareils connectés et les mesures des capteurs sont transmis à l'aide du protocole
MQTT , qui est souvent utilisé dans les projets IoT en raison de sa simplicité et de son efficacité énergétique. MQTT utilise un modèle client-serveur lorsque les clients s'abonnent à certaines rubriques du courtier et publient leurs messages. Le courtier envoie des messages à tous les abonnés selon les règles déterminées par le niveau de QoS (Quality of Service):
- QoS 0 - au plus une fois (pas de garantie de livraison);
- QoS 1 - au moins une fois (avec confirmation de livraison);
- QoS 2 - exactement une fois (avec confirmation de livraison supplémentaire).
Dans notre cas,
Eclipse Mosquitto est utilisé comme courtier MQTT. Le nom du sujet est l'identifiant unique du contrôleur de maison intelligente. Le client MQTT à l'intérieur du processus serveur s'abonne à cette rubrique et y traduit les messages JSON provenant du gestionnaire de messages. Inversement, les messages du courtier MQTT leur sont envoyés dans le gestionnaire de messages, qui les multiplexe ensuite vers ses abonnés au sein du processus serveur:

Pour transmettre des messages sur l'état du contrôleur de maison intelligente, le mécanisme des messages enregistrés messages
retenus du protocole MQTT est utilisé. Cela vous permet de surveiller correctement les moments de reconnexion lors de pannes de courant.
Le client MQTT a été développé sur la base de l'implémentation de la bibliothèque
Eclipse Paho en C ++.
Les flux multimédias H.264 + AAC sont envoyés vers le cloud à l'aide du protocole RTMP, où un cluster de serveurs multimédias est responsable de leur traitement et de leur stockage. Pour répartir de manière optimale la charge dans le cluster et sélectionner le serveur multimédia le moins chargé, le contrôleur de maison intelligente fait une demande préliminaire à l'équilibreur de charge cloud et envoie ensuite uniquement le flux multimédia.
Conclusion
L'article a examiné une mise en œuvre spécifique d'un contrôleur de maison intelligente basé sur le micro-ordinateur Raspberry Pi 3 B +, qui peut recevoir, traiter des informations et gérer des équipements à l'aide du protocole Z-Wave, interagir avec des caméras IP à l'aide du protocole ONVIF et également échanger des données et des commandes avec le cloud Service de protocole MQTT et RTMP. Un moteur logique de production a été développé sur la base d'une comparaison des règles logiques et des faits présentés au format JSON.
Maintenant, le contrôleur de maison intelligente est en cours d'essai dans plusieurs installations de Moscou et de la région de Moscou.
Dans la prochaine version du contrôleur, il est prévu de connecter des appareils d'autres types (RF, Bluetooth, WiFi, filaire). Pour la commodité des utilisateurs, la procédure de connexion des capteurs et des caméras IP sera transférée vers l'application mobile. Il existe également des idées pour optimiser le code de processus du serveur et porter le logiciel sur le système d'exploitation
OpenWrt . Cela permettra d'économiser sur un contrôleur séparé et de transférer les fonctionnalités d'une maison intelligente vers un routeur domestique ordinaire.