L'histoire de la façon dont j'ai automatisé l'appartement en utilisant Node-RED. Partie II

La suite tant attendue du post sur l'automatisation de l'appartement . Dans cette partie, je parlerai de l'éclairage, d'un système multimédia et de capteurs de sécurité.



Éclairage


Pour contrôler l'éclairage, plusieurs composants sont utilisés:

  • rideaux motorisés;
  • éclairage dimmable.

Éclat


La lumière dans les chambres est divisée en deux zones. J'utilise des lampes LED dimmables ikeev. J'utilise trois modules de contrôle:
Gradateur intégré FIBARO Dimmer 2
Built-in gradateur FIBARO Dimmer 2

Double relais intégré FIBARO Double Switch 2x1.5kW
intégré à double relais FIBARO Double 2x1.5kW de commutation

Relais intégré FIBARO Single Switch 2.5kW
Relais intégré FIBARO Commutateur unique 2.5kW

Dimmer peut choisir automatiquement un procédé de gradation (sur les bords d' attaque et de fuite de la phase) et calibrage de minimum et maximum de luminosité. Étant donné que j'avais un système à trois fils à l'avance pour toutes les prises, je n'ai pas eu à utiliser de dérivation. Les lampes LED ne scintillent pas et ne s'allument pas en l'absence de tension. Pour les modules dimmables, j'utilise des commutateurs de sonnerie afin que vous puissiez régler la luminosité.


Schéma de câblage du gradateur à trois fils

Voici comment ça fonctionne:

  • - , ( ).
  • - , — . . , .
  • , , . — .
  • , . , 1% .
  • , 15 .
  • , .














Comme je l'ai écrit plus tôt, toutes les fenêtres de mon appartement donnent sur une avenue animée avec des lumières vives. Pour résoudre le problème de la lumière vive des lampes la nuit ou en été du soleil brillant, j'utilise des volets roulants motorisés.

Au début, je voulais acheter des kits prêts à l'emploi, mais les prix étaient très élevés et je n'aimais pas le schéma de couleurs. Cette idée a dû être abandonnée et assembler plusieurs ensembles par eux-mêmes.

Sur les moteurs 220 V, le choix était restreint: le Somfy français ou le Dooya chinois. Somfy est plus silencieux, mais aussi plus cher, le choix s'est donc porté sur les moteurs Dooya DM35S. Je les ai commandés avec des attaches sur le "Aliexpress". Le moteur possède deux interrupteurs de fin de course qui règlent la position maximale et minimale.


Moteur avec supports

Le problème suivant était le tuyau pour enrouler les rideaux. Selon les règles de l'e-mail, vous pouvez envoyer un colis ne dépassant pas 180 cm, et l'une des fenêtres que j'ai a plus de 2 mètres. Sur le marché de la construction le plus proche, j'ai trouvé un tuyau en aluminium du diamètre souhaité - 50 mm. Après avoir installé les moteurs dans les tuyaux, il reste à trouver des rideaux occultants. J'ai commandé le tissu dans mes tailles à "Aliexpress" après avoir convenu avec le vendeur qu'il m'enverrait uniquement le tissu, sans mécanismes.


Le rideau fixe assemblé Les

rideaux sont commandés à l' aide du rouleau FIBARO obturateur 2 module de commande de store Z-Wave. Persienne


module de commande

Le module est intégré dans la prise. Pour de tels modules, il est conseillé de poser immédiatement des douilles profondes pour pousser le module, les fils et l'interrupteur. Le module a suffisamment de paramètres, y compris la réponse aux alarmes, le calcul de la consommation d'énergie, l'étalonnage avec des interrupteurs de fin de course.


Interrupteur assemblé Des

rideaux sont installés dans chaque pièce et dans la cuisine. Vous pouvez contrôler les rideaux soit par les commutateurs situés à côté d'eux, soit en utilisant une interface ou un script.

Les rideaux s'abaissent automatiquement lorsque le crépuscule s'installe et que les lumières s'allument dans la rue. Ils augmentent en fonction de l'heure programmée pour chaque chambre en semaine et le week-end. S'il fait sombre à l'extérieur, la lumière commence à s'allumer en douceur dans la pièce où le rideau est baissé.

Les jours ouvrés et les week-ends sont calculés selon le calendrier de production téléchargé. Vous pouvez reconfigurer l'heure le lendemain pour chaque pièce à l'aide de la commande télégramme. Avant de plier les rideaux en fonction du «réveil», un message de télégramme arrive avec la possibilité de confirmer, d'annuler et de reprogrammer pendant 30 minutes. Si l'action ne suit pas, les rideaux se replient automatiquement. Les jours de beau temps, les rideaux règlent automatiquement leur position en fonction de l'éclairage de la pièce et de l'heure, et vérifient également si la lumière est allumée ou non. Dès réception de la commande «Vacances», tous les rideaux de toutes les pièces sont baissés. Rideau de gestion Scénario de gestion rideau Scénario








Exemple de travail

Système multimédia


J'ai de nombreux appareils multimédias avec différentes télécommandes dans le salon, et je voulais les contrôler avec un seul bouton.

Sur Internet, j'ai trouvé des codes IR séparés pour allumer et éteindre l'amplificateur, le téléviseur et le séparateur HDMI. À l'aide du script Python pronto_broadlink, ils ont été transcodés en base64, puis convertis en un tableau d'octets et écrits dans la base de code IR. Par conséquent, il n'est plus nécessaire de savoir maintenant dans quel état se trouve l'appareil: vous pouvez simplement renvoyer le signal.

Étant donné que mon amplificateur est assez ancien et ne sait pas comment traiter une image 4K via HDMI, j'ai acheté un séparateur HDMI. Il vous permet de diviser le signal vidéo et audio en deux HDMI séparés: l'un d'eux est connecté à l'amplificateur, le second au téléviseur.


Amplificateur et autres appareils

Pour le moment, j'ai deux sources audio et vidéo: un ordinateur de bureau et un serveur. Depuis l'interface, vous pouvez allumer tous les appareils pour la lecture avec un seul bouton, dans un seul cas, la réception du signal sera configurée sur le répartiteur du serveur et dans le second - de l'ordinateur. À l'avenir, il est prévu de connecter les consoles de jeux au répartiteur.

Si tout le monde quitte la maison, tous les appareils multimédias sont éteints. Scène de contrôle des médias




Le système de présence fonctionne sur 6 détecteurs de mouvement et un détecteur d'ouverture de porte avant. Si, après l'ouverture et la fermeture de la porte, aucun capteur de présence ne s'est déclenché, un message sera envoyé à Telegram à un certain intervalle avec confirmation. Si aucune action n'est entreprise dans les deux minutes ou si le bouton «Ok» est enfoncé, le système passe en mode «Hors domicile». Si un mouvement se produit à ce moment, la commande est annulée et le message est supprimé.

J'ai essayé d'utiliser BLE, mais dans mon cas, cela ne fonctionnait pas très stable et dépendait fortement de l'émetteur du téléphone. Détection automatique de présence




Capteurs de sécurité


Des dispositifs de verrouillage Gidrolock sont installés sur les conduites d'eau . Lorsque le fil de commande est court-circuité en phase, l'actionneur ferme le robinet; lorsqu'il est déconnecté, il s'ouvre. Les deux variateurs sont connectés à un relais intégré Philio à contact sec.

Gidrolock
L'entraînement du

relais Gidrolock est contrôlé par des capteurs NEO Coolcam Z-Wave situés dans les zones de fuites potentielles. Tous les capteurs sont directement associés au relais, de sorte que l'eau s'arrête sans la participation du contrôleur. Pour empêcher le robinet de devenir aigre, toutes les deux semaines la nuit, il s'ouvre et se ferme automatiquement. Diagramme d'automatisation de lecteur lorsque Philio fume un capteur




la ventilation est coupée pour ne pas gonfler le feu. En même temps, un message est envoyé à la discussion par télégramme et le capteur grince de façon dégoûtante.

Autres capteurs et appareils



Autoriser le serveur


Ce module est une implémentation simple d'un service d'autorisation.
Il existe deux méthodes http: l'une vérifiera si la demande provient du réseau interne et si oui, elle autorisera l'utilisateur en lui délivrant un jeton JWT. Le jeton JWT est chiffré à l'aide de RSA 256, la clé privée doit être enregistrée dans le fichier à côté de lui. Si la demande ne provient pas du réseau interne, l'utilisateur sera redirigé vers la page de connexion, où il devra saisir le login et le mot de passe et se connecter. Comme la séparation en utilisateurs n'est pas supposée, le fichier de connexion et le mot de passe sous forme cryptée (SHA 512) sont à proximité dans le fichier de configuration.

Serveur MQTT


Le serveur MQTT est implémenté à l'aide du composant aedes .

Le serveur monte sur deux ports: interne, pour la communication avec le serveur, sans autorisation, et externe, qui implémente WebSocket. Tous les clients frontaux se connectent via un socket et passent l'authentification lors de l'autorisation, en s'abonnant à la rubrique et en publiant n'importe quel message. Le jeton JWT reçu du serveur d'autorisation arrive et est validé à l'aide de la clé publique. Pour les demandes du serveur, la validation n'a pas lieu.

Noeuds personnalisés-Noeuds RED


Lors de l'écriture de l'automatisation, il était nécessaire d'implémenter un nœud supplémentaire et deux pour finaliser.

J'ai dû modifier node-red-contrib-openzwave , car ma demande de tirage n'a été acceptée qu'après 7 mois, mais maintenant vous pouvez utiliser la bibliothèque à partir de npm. Le raffinement consistait à lancer un événement de suppression de nœud.



Le nœud MQTT a également été finalisé. En fait, le principal raffinement en est l'extraction de l'ID du client connecté et sa réécriture lorsqu'il est envoyé dans la file d'attente. Ici, vous pouvez vous en tirer avec la fonctionnalité de sous-flux. Il était également censé transférer toutes les données à l'entrée du nœud MQTT, mais ce n'était pas utile.



Pour contrôler les rideaux et les robinets d'eau, un nœud de planification était requis. À l'époque, la bibliothèque était trop riche en fonctionnalités et ne prenait pas en charge une implémentation simple à l'aide de CRON. Mon implémentation est assez simple: un planning peut être pris soit à l'entrée d'un noeud soit défini en interne. Il est possible d'annuler le planning. Sous le capot, le nœud-calendrier est utilisé .



De face


Chaque composant actif de l'appartement, qui se retrouve dans l'automatisation, est un module à l'avant. Chaque module est autonome et contient tous les composants nécessaires au rendu. Les modules sont divisés en deux agrégations: statique et Z-Wave. Les modules doivent implémenter une seule interface.

Interface
export interface INode {
    id: string;
    type: NodeTypes;
    name: string;
    addWidget: ComponentClass<AddProps> | StatelessComponent<AddProps>;
    model: INodeModelConstructor;
    service?: INodeServiceConstructor;
    smallComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    bigComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogEditComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogViewComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
}


Exemple d'implémentation
class Widget extends BaseWidget implements INode {
    model: INodeModelConstructor = Model;
    manufacturerid: string = '0x0086';
    producttype: string = '0x1a02';
    productid: string = '0x0064';
    addWidget: StatelessComponent<AddProps> = AddWidget;
    service: INodeServiceConstructor = Service;
    smallComponent: StatelessComponent<WidgetProps<Model>> = SmallComponent;
    bigComponent: StatelessComponent<WidgetProps<Model>> = BigComponent;
    dialogEditComponent: ComponentClass<WidgetProps<Model>> = DialogEditComponent;
    dialogViewComponent: ComponentClass<WidgetProps<Model>> = DialogViewComponent;
}
export default Widget;


Pour les modules statiques - par exemple, les climatiseurs - vous devez implémenter un entrepôt de données à l'avant. Une telle implémentation n'est pas pratique, dans le bon sens, elle doit être changée en un seul référentiel.

Pour les modules Z-Wave, j'ai organisé un référentiel commun et le suivi de toutes les modifications.

Le module implémente l'affichage de deux manières:

  • pour les "grands" écrans (tablette, ordinateur);
  • pour les téléphones.

Selon le type d'appareil, le contrôle tactile ou de la souris sera sélectionné.

L'application est construite à l'aide de webpack + babel: selon les paramètres actuels, elle est assemblée pour les deux dernières versions de Firefox, Chrome, Chrome Android.

Caractéristiques des codes sources


Les sources

All Flow sont désactivées, afin de ne pas lancer d'erreurs dans le journal. Le noeud de configuration pour Z-Wave est supprimé: il est bogué s'il ne trouve pas le contrôleur Z-Wave et laisse tomber le Node-RED entier. Ça devrait ressembler a quelque chose comme ca:


Pour que le chargeur de calendrier de travail fonctionne, vous devez vous inscrire sur data.gov.ru , y obtenir un jeton et le saisir après access_token:


Les prévisions météorologiques sont téléchargées sur darksky.net toutes les 15 minutes. Il a également besoin d'un jeton, vous devez vous inscrire et entrer le jeton après la prévision, aux coordonnées:


Pour envoyer des notifications de télégramme, vous devez obtenir votre bot, le saisir dans le nœud de configuration du télégramme et écrire l'ID de chat si nécessaire. Dans le cas de mon Flow, c'est un sous-flux: les



sources sont divisées en avant et en arrière. Dans la partie arrière se trouve:

  • Autoriser le serveur.
  • Serveur MQTT.
  • Modules Node-RED personnalisés.
  • Flux exportés dans un seul fichier, qui peuvent être téléchargés sur votre propre compte ou sur une instance distincte pour les tests.
  • Un projet pour Node-RED, dans lequel vous devez installer les modules puis charger uniquement le Flow exporté (les modules sont déjà dans le projet).
  • Sauvegarde Mongo-base.

Vous pouvez trouver des informations d'installation plus détaillées dans le fichier readme du référentiel github .

Des plans


Il est prévu d'utiliser le microphone d'un smartphone ou d'une tablette murale pour la commande vocale. Je prévois de déployer mon système open-source sur un serveur basé sur CMU Sphinx .

Je prévois également d'assembler un module de prise et de transmission des relevés des compteurs de plomberie et d'électricité.

Il convient également d'envisager l'utilisation de statistiques cumulées pour divers paramètres afin d'optimiser l'automatisation.

Conclusion


À l'heure actuelle, j'ai réalisé une automatisation presque complète de la maison selon mes besoins - pour maintenir un climat et un éclairage confortables dans la maison. En raison d'une certaine automatisation, il a été possible de réduire la consommation d'électricité (environ 1 500 ₽ en hiver par rapport au même équipement sans automatisation), tant du côté des éléments chauffants que du côté éclairage.

Bien sûr, il y a encore des bugs dans les algorithmes, mais je les rattraperai un jour, au moins je vais dans cette direction. Le système fonctionne de manière stable, je ne vois aucun frein, malgré la très faible vitesse du protocole Z-Wave.

Bien sûr, le système ne se paiera pas au détriment des économies, il s'agit plus d'une question de confort. Une telle automatisation est très humide en termes de petites choses comme la fermeture et l'ouverture des rideaux, le contrôle de la lumière. Lorsque vous êtes dans un appartement ordinaire, vous oubliez parfois d’allumer ou d’éteindre les lumières et vous n’ouvrez pas les rideaux du tout.

J'ajuste rarement le système de climatisation avec mes mains, mais parfois vous devez allumer ou éteindre le climatiseur ou régler la température de la batterie. En général, je suis satisfait du système qui en résulte: il laisse moins de temps à consacrer aux ajustements. En cas de panne du contrôleur, toutes les fonctionnalités resteront en place (seule l'automatisation tombera). La fonctionnalité de la coupure d'eau sera également préservée. Si je décide de vendre l'appartement, je supprimerai facilement toute l'automatisation. Ou laissez-le en place, mais vendez plus.

All Articles