Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Domotique avec Raspberry Pi 2 (Windows 10 IoT Core)

Composants et fournitures

Raspberry Pi 2 Modèle B
× 1
HSRel5 - I²C-Bus-Relaisplatine
Carte relais avec 5 relais, 3 GPIO et connexion I2C, prend en charge le montage sur les distributeurs d'alimentation, basée sur PCF8574 .
× 1
HSRel8(+8) - 8fach-Relaisplatine
Carte relais avec 8 relais, 8 GPIO et connexion I2C, prend en charge le montage sur les distributeurs d'alimentation, basée sur MAX7311 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
Carte d'extension de port avec 16 GPIO et connexion I2C, prend en charge le montage sur les distributeurs d'alimentation, basée sur MAX7311.
× 1
DR-60-12 Hutschienen Netzteil 12V / 54W
Alimentation 12V pour tous les appareils
× 1
Hutschienen Netzteil 15W 5V 3A ; MeanWell, DR-30-5
Alimentation 5V pour tous les appareils
× 1
Bouclier de prototypage pour Raspberry Pi
Utilisé pour ajouter une LED pour l'indication d'état et une entrée d'interruption protégée pour les cartes d'entrée. Fournit également une borne à vis à 3 pôles pour des connexions fiables.
× 1
I2C-Buffer HS
Le décaleur de niveau I2C comprenant les résistances pull-up requises, etc., prend en charge le montage sur les distributeurs d'alimentation, basé sur P82B96 .
× 1
Arduino Nano R3
Utilisé comme pont entre les capteurs DHT22 et le bus I2C.
× 1
Expéditeur et récepteur 433Mhz
Pour la prise en charge des relais sans fil.
× 1

Applications et services en ligne

Microsoft Visual Studio 2015
Logiciel Arduino (IDE)

À propos de ce projet

Mise à jour 2 : Le projet grandit encore et de nombreuses nouvelles fonctionnalités sont déjà implémentées (comme un client Twitter et l'intégration de Telegram-Bots). Veuillez consulter le référentiel GitHub et les notes de version pour en savoir plus sur les nouvelles fonctionnalités (ou suivez-moi sur Twitter) . J'espère pouvoir mettre à jour cette page de projet dès que possible.

Mise à jour 1 : Tout d'abord, je veux dire "merci" à tous ceux qui ont lu cette page de projet et m'ont donné leur avis (soit en privé, soit dans les commentaires). C'était très amusant de présenter ce projet à Maker Faire Rome 2015 et Microsoft Technical Summit 2015 et les futurs événements sont toujours en attente. J'ai ajouté quelques photos des événements.

Je développe une solution domotique depuis 3 ans. Cela comprend l'installation physique du matériel et le développement du logiciel.

Fonctionnalités

À l'heure actuelle, les fonctionnalités suivantes sont prises en charge.

Entrées

  • Bouton poussoir (BUSCH-JAEGER 2020US)
  • Détecteur de mouvement (Abus 360 ° BW8085)
  • Température de la pièce (Mon propre appareil basé sur DHT22)
  • Humidité de la pièce (Mon propre appareil basé sur DHT22)
  • État de la fenêtre (ouverte ou fermée à l'aide du contact reed Honeywell Slimline)
  • Lever, coucher de soleil, température et humidité (extrait d'OpenWeatherMap)

Sorties

  • Lampe (plafonnier) (pilotée par relais, pas de gradation)
  • Prise (pilotée par relais, pas de gradation)
  • Volet roulant (fenêtre) (piloté par deux relais pour monter et descendre)
  • Ventilateur (plafond) (entraîné par 3 relais pour chaque vitesse)
  • Ventilateur de salle de bain (entraîné par 2 relais pour chaque vitesse)

Autres fonctionnalités

  • La solution contient une application Web pour iOS, Android, Windows, Mac OSX qui peut être utilisée pour contrôler les actionneurs virtuels. La configuration de l'application Web est chargée à partir du contrôleur (instance Windows IoT).
  • Tous les événements générés par les entrées et les sorties peuvent être publiés sur un Microsoft Azure Event Hub et/ou enregistrés dans un fichier CSV.
  • Le contrôleur (instance Windows IoT) fournit un traçage basé sur UDP qui peut être affiché à l'aide d'une application de console. La trace est très détaillée et peut être utilisée pour trouver des bogues ou des actionneurs mal connectés, etc.
  • Des actionneurs personnalisés peuvent être ajoutés pour prendre en charge davantage de matériel.
  • Les sorties physiques peuvent être combinées aux sorties logiques.
  • Animations (les sorties physiques d'une sortie logique peuvent être animées).
  • L'ensemble du système est conçu pour être aussi résistant que possible aux erreurs/défaillances matérielles. Même si plusieurs composants principaux sont déconnectés/cassés, le système restant fonctionne toujours comme prévu (par exemple, certaines des cartes du salon ne sont pas accessibles en raison d'une panne matérielle, mais la salle de bain fonctionne toujours comme prévu)  
  • Prise en charge des relais distants 433 Mhz.


Le concept

Alors que nous rénovions notre maison il y a 3 ans, j'ai décidé de mettre en place ma propre solution domotique. L'idée principale derrière la mise en œuvre est de tout contrôler depuis le distributeur d'alimentation à l'aide de relais. En raison de cette décision, chaque bouton, lampe, prise, volet roulant, etc. doit être connecté par son propre câble via l'actionneur au distributeur de courant. Un bus tel que KNX ou EIB n'est pas requis.

Remarque :En raison du fait que je vis en Allemagne, chaque composant est conçu pour fonctionner avec l'alimentation 230V. D'autres types d'alimentations peuvent nécessiter des modifications supplémentaires. L'installation des câbles 230 V (NYM), des nouveaux distributeurs électriques, etc. se fait par mon préféré électricien et non par moi-même.


Matériel

Le nouveau distributeur électrique

Nous avons installé un nouveau distributeur d'électricité qui est responsable des deux étages de notre maison.

Le bus I2C

En général, le bus I2C n'est pas conçu pour fonctionner avec des câbles plus longs mais il est possible d'augmenter la longueur au maximum possible en utilisant quelques astuces (je ne connais pas la raison de chaque optimisation mais ce sont les choses que j'ai trouvées sur le WWW).

  • Conduisez le bus à 5 V. Le RaspberryPi pilote le bus à 3,3 V, un décaleur de niveau I2C (P82B96) est donc requis. C'est le premier (et le seul) appareil qui est ajouté au RaspberryPi 2 (appelé Controller dans ma solution). Le câble pour cette connexion doit être aussi court que possible. La spécification permet de faire fonctionner le bus jusqu'à 15 V, mais les esclaves comme le PCF8574 ne prennent en charge que 5 V max.
  • Utilisez un câble à paires torsadées comme CAT7. Il est important d'utiliser une paire pour SDA&GND et une autre pour SCL&GND. N'utilisez pas un seul câble à paire torsadée pour SDA&SCL. Assurez-vous également que le blindage du câble est connecté au PE (en Allemagne).
  • Préférez un câble toronné. Cela rend plus complexe la connexion de tout, mais augmentera la longueur du câble.
  • Ajoutez des résistances de rappel avec 10 k à la fin du bus pour SDA et SCL.
  • Limiter la vitesse du bus à 100 kbits (mode standard) même si les esclaves prennent en charge des vitesses plus rapides.
  • Inclure un tampon I2C (P82B96). Le circuit intégré peut être utilisé comme un décaleur de niveau ou peut être utilisé pour séparer le bus en segments physiques. J'ai utilisé l'un de ces tampons dans le distributeur d'alimentation. Le tampon doit être placé au milieu du bus.

Ce bus I2C optimisé est utilisé pour connecter chaque carte au sein du distributeur d'alimentation.


Les cartes relais (sorties)

CCTools d'Allemagne vend des cartes avec des relais qui peuvent être connectés au bus I2C. Il est également possible d'acheter les cartes en tant que pièces détachées ou la carte de circuit imprimé uniquement. Cela permet de remplacer l'extenseur de port par des alternatives compatibles avec les broches. Le premier est requis car les adresses disponibles des appareils sont limitées. J'ai ajouté des supports pour le relais et les circuits intégrés afin de pouvoir les remplacer plus facilement si l'un d'eux est cassé. Un autre point est que je peux utiliser un PCA9555D au lieu d'un MAX7311 car le PCA9555D est moins cher et peut être commandé plus facilement (en Allemagne).

Le HSRel5 la carte relais possède 5 relais et 3 GPIO . Tous les ports requis proviennent du PCF8574 interne Extenseur de port 8 bits qui a 8 GPIO . Les 5 premiers sont utilisés pour les relais et les 3 derniers peuvent être utilisés pour d'autres sorties. Les relais nécessitent 12 V pour fonctionner, ce qui ne peut pas être fourni par l'extension de port (qui ne peut piloter qu'une LED). Donc, un pilote de relais est nécessaire. Les relais sont connectés au pilote de relais et le pilote de relais en retour est connecté à un onduleur. Cet onduleur est requis, car l'état de tous les ports de l'extension de port est ÉLEVÉ une fois que le circuit intégré est alimenté. Cela fermera tous les relais, ce qui est un comportement involontaire.

Conclusion : Si le premier relais doit être fermé, il est nécessaire d'envoyer 00011110 (MSB) à l'extenseur de port à l'aide du bus I2C. Cela définira le premier port sur LOW (les autres ports sont également mis à jour). Le premier port de l'extension de port est câblé à la première entrée de l'onduleur. Et la première sortie de l'onduleur est câblée à la première entrée du pilote de relais (ULN2803). En tant que dernière partie de la chaîne, le relais est câblé à la première sortie du pilote de relais.

Une autre carte relais de CCTools est le HSRel8(+8) qui utilise un MAX7311 comme extenseur de port et contient 8 relais et 8 GPIO . Cette carte n'a pas besoin d'onduleur matériel. Cela signifie qu'un ÉLEVÉ état pour un relais au HSRel5 signifie OFF et un ÉLEVÉ état au HSRel8(+8) signifie ON. Ce comportement différent est géré par le pilote de ces périphériques et fait partie du logiciel.

Chaque lampe, douille, etc. est connectée à l'un de ces relais. Chez moi, j'utilise actuellement 8 HSRel5 et 4 HSRel8 . J'utilise également des cartes avec des relais statiques et d'autres types de relais, mais pour faire court, je n'entrerai pas dans les détails ici. Le HSRel5 est la carte relais la plus simple. Mais le PCF8574 n'autorise que 8 adresses distinctes. Le PCF8574 Un est le même extenseur de port mais a 8 adresses différentes. Cela signifie que 16 HSRel5 peut être câblé au I2C autobus.


Les extenseurs de ports (entrées)

Les boutons, les détecteurs de mouvement et les commutateurs à lames (pour les fenêtres) sont câblés à une carte appelée I2C-Port16 HS depuis CCTools . Cette carte contient un extenseur de port (MAX7311 ), des résistances de rappel (5 V, 10 K) pour chaque port et des condensateurs en céramique (100NF ). La carte peut être utilisée avec une alimentation 12V ou 5V. Les condensateurs en céramique sont utilisés pour filtrer le bruit (filtre glitch).

Chaque dispositif d'entrée (bouton, détecteur de mouvement, interrupteur à lames) possède son propre câble menant au distributeur d'alimentation. Un CAT7 câble est utilisé pour chaque périphérique d'entrée car il doit avoir un blindage, qui est connecté avec PE (terre de protection). Les spots qui ont plus d'un bouton comme les boutons des volets roulants peuvent être connectés en utilisant un seul CAT7 câble.

Au niveau du distributeur d'alimentation, chaque périphérique d'entrée est câblé à un port de l'extension de port et GND . En raison des résistances de rappel, l'état des ports est ÉLEVÉ par défaut. Appuyez sur le bouton pour connecter le port à GND ce qui se traduit par un FAIBLE état du port. Les détecteurs de mouvement et les contacts Reed fonctionnent également de cette façon.

Une interruption partagée le câble est câblé à toutes les cartes d'entrée. Ce câble est tiré par défaut. Dans le cas d'un changement d'état sur l'un des extenseurs de port, l'extenseur de port correspondant définira l'état de l'interruption à FAIBLE. Ce comportement empêche l'interrogation continue de tous les extenseurs de port utilisant le bus I2C. Le logiciel du Pi2 n'interroge que le GPIO correspondant. Si l'état de l'interruption-GPIO a été modifié, l'état actuel de chaque carte d'entrée est interrogé en conséquence et les événements sont déclenchés si nécessaire.


Raspberry Pi 2

Le Raspberry Pi 2 exécute Windows 10 IoT et est monté avec un boîtier personnalisé sur le distributeur d'alimentation. Il dispose également d'un bouclier de prototypage avec une LED d'état, l'interruption port avec une résistance pull-up (10K ), une résistance de protection (1K ), et un condensateur céramique (100NF ) pour le filtrage des parasites. Tous les câbles peuvent être câblés à l'aide d'un bornier à vis.

Capteur de température et d'humidité

La température et l'humidité actuelles dans chaque pièce/endroit (actuellement 10) sont mesurées à l'aide d'un DHT22 (AOSONG). Ce capteur fournit la température et l'humidité actuelles à l'aide d'un protocole propriétaire qui ne prend pas en charge l'adressage. Cela nécessite que chaque capteur soit câblé à un microcontrôleur. Pour ma solution, j'ai décidé d'ajouter un Arduino Nano V3.0 comme esclave de l'I2C bus. L'Arduino Nano lit les valeurs de tous les capteurs connectés toutes les 2,5 secondes et les met en cache localement. Ces valeurs peuvent être lues à partir de l' Arduino Nano après avoir envoyé l'identifiant du port (0-10). C'est le même comportement lors de la lecture de données à partir de registres utilisant le bus I2C.

La température et l'humidité sont affichées sur l'application Web à l'aide de deux vues différentes.

L'icône sur le côté droit de l'humidité ("Luftfeuchtigkeit" ) indique s'il existe ou non un risque accru de formation de moisissures sur les murs. Une valeur inférieure à 60 % est vert , moins de 70 % est jaune et au-dessus de 70 % est rouge.

L'application Web fournit également un aperçu de tous les capteurs.


Configuration matérielle

L'image suivante illustre une configuration matérielle au niveau du distributeur d'alimentation à l'aide de cartes d'entrée et de sortie. L'alimentation 12 V/5 V et les connexions N/PE ne sont pas illustrées.

Relais à distance 433Mhz

Lors de la migration et de la documentation du projet au cours de ce défi, j'ai également développé l'unité émettrice 433Mhz qui est commodément cachée dans un boîtier simple avec les capteurs de température et d'humidité.

Cette fonction rend les cartes relais facultatives. L'Arduino Nano qui est responsable du DHT22 Les capteurs (température et humidité) envoient également les signaux 433Mhz. L'expéditeur (FS1000A ) est monté avec le capteur de température et d'humidité dans un boîtier dans une pièce centrale de la maison. Pour augmenter encore plus la portée de l'émetteur, il est en plus alimenté en 12V (fonctionne également avec 3.3 mais à courte portée).


L'un des principaux problèmes des relais distants est qu'ils n'envoient aucune information d'état. Il est donc tout à fait possible pour l'utilisateur d'introduire des changements d'état dans le système en utilisant la télécommande d'origine. Pour forcer la synchronisation, la solution logicielle met automatiquement à jour l'état toutes les 5 secondes. Cela permet de maintenir l'état affiché sur l'application Web aussi fiable que possible (mais rendant inutile l'utilisation des télécommandes d'origine).

Les relais à distance peuvent être utilisés dans chaque automatisation et offrent les mêmes fonctionnalités que les relais d'une carte de relais.

Les codes de la télécommande 433Mhz ne peuvent actuellement être configurés manuellement que via un circuit construit sur une carte de prototypage. Ces codes sont ensuite copiés dans la configuration. Le frittage le croquis du circuit imprimé requis est référencé ci-dessous et l'Arduino sketch se trouve dans le référentiel dans le dossier CK.HomeAutomation.SensorsBridge\RemoteCodeFinder .


La litière numérique pour chat

La litière pour chat pour notre chat est placée dans la salle de stockage qui manque malheureusement de fenêtre pour laisser entrer de l'air frais après utilisation. En raison de ce problème, la box est connectée à un ancien inutilisé cheminée. Devant le tube qui est relié au conduit de fumée, il y a un ventilateur câblé à un relais au niveau du répartiteur de puissance. Un détecteur de mouvement au débarras détecte même le chat et démarre le ventilateur pendant quelques minutes.

Le bac à litière pour chat a sa propre icône sur l'application Web qui permet de contrôler le ventilateur à distance.

En analysant les journaux générés et en filtrant par les changements d'actionneurs correspondants (Azure SQL DB ou fichier CSV), il nous est possible de suivre l'utilisation de la litière du chat au fil du temps et donc d'améliorer les intervalles de nettoyage requis.


Logiciel

Avant la sortie de Windows 10 IoT, le logiciel fonctionnait sur un G120 de électronique GHI en utilisant le .NET Micro Framework dans la version 4.3. Mais principalement en raison du manque de performances (120 Mhz, 16 Mo de RAM et interprète), toutes les fonctionnalités prévues ne fonctionnaient pas comme prévu.

Il y a quelques semaines, j'ai commencé à migrer la base de code pour qu'elle s'exécute en tant que tâche d'arrière-plan Windows 10 IoT, tout en ajoutant des fonctionnalités telles que l'intégration Microsoft Azure.

Le référentiel référencé ci-dessous contient la solution Visual Studio 2015 et tous les projets qui en dépendent. C'est tout ce qui est nécessaire pour utiliser le Raspberry Pi 2 comme contrôleur domotique, tout en étant ouvert à l'extension en écrivant des pilotes personnalisés pour d'autres cartes relais ou capteurs.


Projets

Les projets de la solution logicielle sont regroupés en :

  • Application (contient l'application Web)
  • Contrôleurs (contient le projet de démarrage pour le Pi et la configuration maison)
  • SDK (contient tous les projets partagés)

CK.HomeAutomation.TraceViewer

Ce projet contient une application console qui affiche les messages de trace envoyés par le contrôleur (instance Pi2). Actuellement, toutes les notifications sont envoyées en continu à une adresse de diffusion à l'aide d'un socket UDP. Par conséquent, l'ouverture d'un port (par exemple 19227) au niveau du pare-feu est nécessaire. J'utilise TraceViewer principalement pour trouver des bogues et/ou des erreurs de configuration.

Toutes les classes requises pour envoyer des notifications se trouvent dans le projet CK.HomeAutomation.Notifications .


CK.HomeAutomation.Networking

Ce projet contient l'implémentation d'un serveur HTTP basique. Le serveur HTTP est requis pour l'application Web et fournit des informations d'état au format JSON et accepte les demandes avec des changements d'état.

Le serveur HTTP est également capable d'héberger l'application Web. En raison de noms de packages différents, le contenu de l'application Web doit être téléchargé manuellement dans le dossier de destination à l'aide du partage SMB administratif.

Dossier cible : \\[IP]\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\app


CK.HomeAutomation.Controller.*

Chaque projet dans les Contrôleurs le dossier est un projet de démarrage mise en œuvre d'une tâche d'arrière-plan IoT . Jusqu'à ce qu'une documentation détaillée soit fournie, on peut utiliser ces projets (actuellement en cours d'utilisation dans ma maison) comme exemple.

De plus, je fournis le projet CK.HomeAutomation.Controller.Empty comme point de départ pour jouer avec la solution. REMARQUE :Le contrôleur nommé Cave qui est responsable de l'éclairage du jardin et du parking n'est pas couvert dans cette documentation.

Avant de tester la solution, vous devez vous familiariser avec les tâches suivantes :

  • Configuration d'un Raspberry Pi2 avec Windows 10 IoT à partir de zéro (https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Connectez-vous au Raspberry Pi2 à l'aide d'une session à distance Microsoft PowerShell (https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Déploiement d'une application Windows universelle sur le Raspberry Pi2.

Le répertoire de la solution comprend également un petit PowerShell script appelé SetupRaspberryPi.ps1 pour exécuter une chaîne commune de commandes pour configurer le Raspberry Pi2. Il est recommandé mais pas obligatoire d'exécuter le script (assurez-vous d'ajuster tous les paramètres IP en fonction de votre propre infrastructure ).

Actionneurs.CK.HomeAutomation

Ce projet offre le plus haut niveau d'abstraction. La maison, les pièces et chaque actionneur comme les boutons-poussoirs, les lampes, les prises, etc. sont mis en œuvre dans ce projet et proposent des événements et des méthodes spéciaux en fonction des caractéristiques de chaque actionneur.

Les salles peuvent être créées à l'aide d'une API fluide qui rend la configuration facile à lire et à comprendre.

MotionDetector - Actionneur

Cet actionneur est utilisé pour détecter les personnes et les mouvements dans les pièces. J'utilise le détecteur de mouvement BW8085 360° de Abus qui est monté au plafond de chaque pièce.

La mise en œuvre d'un actionneur de détecteur de mouvement fournit deux événements. Le premier des deux est le MotionDetected événement qui est déclenché si un mouvement est détecté. Le détecteur de mouvement physique maintient la sortie à un ÉLEVÉ niveau jusqu'à ce qu'aucun autre mouvement ne soit détecté, auquel point le deuxième événement DetectionCompleted est licencié.

L'image suivante montre une entrée pour un détecteur de mouvement dans l'application Web. Chaque détecteur de mouvement peut être désactivé (dans le logiciel uniquement) à l'aide de l'application Web. Le point rouge indique qu'un mouvement est actuellement détecté.

Bouton - Actionneur

Cet actionneur représente un bouton poussoir physique. Le bouton a deux événements qui indiquent qu'il a été enfoncé. L'événement PressedShort est déclenché si le bouton a été enfoncé pendant une courte durée (<1,5 seconde), tandis que l'événement PressedLong n'est déclenché que si le bouton a été enfoncé pendant une durée plus longue (> 1,5 seconde). Le deuxième événement est également déclenché automatiquement si la durée (1,5 seconde) est dépassée et que le bouton-poussoir n'est pas relâché. Ces deux événements permettent des boutons avec de multiples fonctionnalités.

Exemple :

La solution contient également un VirtualButton . Ce bouton implémente la même interface (IButton ) et peut être « appuyé » à l'aide de l'application Web uniquement.


Prise, Lampe, BinaryStateOutput - Actionneur

La classe de base BinaryStateOutput est utilisé pour chaque actionneur qui supporte un état binaire (ON et OFF ) seul. Des exemples pour ces actionneurs sont Socket et Lampe . L'implémentation de base fournit des méthodes de mise à jour (ON et OFF ) ou basculer l'état. Boutons peut interagir avec des objets implémentant le IBinaryStateOutputActuator , cela permet l'ajout de plusieurs actionneurs personnalisés.

L'image suivante montre le modèle pour chaque sortie d'état binaire. L'icône sur le côté gauche est différente pour les prises et les lampes. Icônes personnalisées comme la bouteille de poison au "Mückenstecker " peut être définie à l'aide du fichier de configuration (Configuration.js ) pour l'application Web.

Actionneurs binaires combinés

Chaque actionneur physique de type BinaryStateOutput peut être utilisé pour créer un actionneur d'état binaire logique. Un actionneur doit être réglé sur « maître », ce qui est nécessaire pour déterminer le nouvel état si l'état doit être basculé. L'actionneur a son propre ID et peut être utilisé comme n'importe quel autre actionneur à sortie d'état binaire (l'interface requise est implémentée).

Un avantage important de cette implémentation est la façon dont les mises à jour d'état sont gérées. Habituellement, le nouvel état d'une sortie d'état binaire est directement affecté à chaque appareil un par un via le bus I2C. Ce comportement crée des délais courts mais visibles entre chaque mise à jour de l'état de l'actionneur. Le CombinedBinaryStateActuator empêche ce retard en utilisant le suivi des modifications internes.

Exemple :

StateMachine - Actionneur

More complex states than ON and OFF are possible to configure using the StateMachine . This actuator allows multiple states for ports (relays) or other binary output actuators.

Example with a fan:

The state machine provides methods to turn it off or moving to the next state. The state is reset to OFF if the last state of the state machine has been reached and the initial state should be applied next.

Another use case for the state machine is creating templates or "moods" for a couple of other actuators.

Example mood:

The method WithTurnOffIfStateIsAppliedTwice ensures that the state of the state machine will change to OFF if a particular trigger has been activated a second time as the configured state is still active (Example :Pressing the push button for "DeskOnly " will activate the "DeskOnly " mood. If the push button is pressed again while the "DeskOnly " mood is still active, the actuator applies the OFF Etat. A dedicated push button for the OFF state is not needed.).

The following image shows the template for state machines. The caption and image of each state can be changed using the configuration file of the web app.

TemperatureSensor / HumiditySensor

The values for temperature and humidity are read using the I2C sensors bridge. Both values are read from a single physical device but separated into an actuator for temperature and an actuator for humidity. The values are automatically polled every 10 seconds.


Home Automation !=Home Control

As mentioned before the importing thing is automation. Without automations, the whole solution is only one big remote for the home. This solution provides several automations:


AutomaticTurnOnAndOffAutomation

This automation sets the connected binary state outputs to ON. A push button or motion detector can be used as the trigger. It is required to specify the desired duration of the ON Etat. The state is set to OFF if that range exceeds. The state is automatically set to OFF if the specified range is exceeded. An optional time range can be provided in which the automation rule is enabled. Predefined ranges for "day only " or "night only " are available (requires a weather station object).

Example:

AutomaticRollerShutterAutomation

This automation is used to move several roller shutters automatically according to several conditions. One of these conditions is sunrise and sunset which means that the roller shutters are automatically moving up at sunrise and moving down at sunset (requires a weather station object). It is also possible to add a diff to sunrise and sunset. According to the sunrise and sunset feature, it is possible to specify a time for "do not open before" which will ensure that the roller shutter is never opened before that point in time has been reached. Another condition is the outside temperature (also requires a weather station object), which enables the roller shutters to be closed automatically if the outside temperature exceeds a certain value like for example 28°C. This feature is intended for roof windows.

The position of the roller shutter is also tracked via time measuring. The required duration between up and fully closed must be configured.

Example:

The following screenshot shows an entry for roller shutters at the web app. The progress bar over the buttons is showing the current position.

AutomaticConditionalOnAutomation

This automation is used to set the state of several binary state outputs to ON while conditions are matching. This automation is used for lamps in the garden which are only ON la nuit. It is possible to specify one time range for the ON state and multiple time ranges for the OFF Etat. It is also possible to use sunrise and sunset for the ON state (requires a weather station object).

Example:

General automation and complex conditions

The latest feature of the new implementation is a generic automation and condition framework. The generic automations are designed to execute custom actions if the configured conditions are met. This is checked every time a trigger is invoked via a push button, motion detector, interval or any other code.

Weather station

Many of the automations and conditions are depend on environment conditions like the current weather, sunrise and sunset times, outside temperature or humidity. All of these information is currently provided every 60 seconds by a virtual weather station backed by WebApi of OpenWeatherMap. The virtual weather station is implemented using the interface IWeatherStation , this makes it easy to seamlessly integrate physical stations located in garden.


CK.HomeAutomation.Hardware

This project contains the drivers for all currently supported input and output devices. Specifically the relay boards, input boards from CCTools and 433Mhz remote switches. The driver and source code of the Arduino Nano (sensor bridge and 433Mhz sender) is included too. All higher level objects like actuators and automations are implemented against interfaces to add an abstraction layer to the concrete bare to the metal hardware classes. This makes it easy to later add further drivers for other boards and sensors.


CK.HomeAutomation.Telemetry

This project contains two components. The first one is a CSV writer which writes every changed state to the "LocalState" directory of the package. This file can be downloaded from the Pi2 using the administrative SMB share: \\192.168.1.15\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\BinaryStateOutputActuatorChanges.csv .

Example content of the the CSV file:

The second component is the AzureEventHubPublisher . This component sends events for any state has change and the values of any sensor change to an Microsoft Azure EventHub . Events are also generated if push buttons are pressed or motion is detected. The solution contains the SQL scripts for creating the required SQL database tables and the required query for a StreamAnalytics job (in folder #Azure).

Every changed actuator state generates to entries at the Azure SQL base de données. The first entry contains the START event and the new state. The second entry contains the END event with the total duration of that state in seconds.

I already created some reports using a free Microsoft PowerBI Compte.

WebApp

The software solution contains the project CK.HomeAutomation.App . This project is a web app building on top of AngularJS , jQuery and Bootstrap . The room configuration is read from the controller (Pi2) and the UI is generated according to the existing rooms.

The web app can be opened directly from the file system using the index.html  file or uploaded to a web server. The file Configuration.js  is used to configure and translate the web app. The IP address of the Controller (Pi2 instance) must be set in the configuration file.

The web app can be added to the home screen of iOS only if it is hosted at a web server (I am personally using a BananaPi with nginx). Adding a web app to the home screen is described here: http://www.tech-recipes.com/rx/44908/ios-add-website-shortcut-to-home-screen/

Hosting the web app at the Raspberry Pi2 is already in progress but currently not supported completely.

Terminal

The web app also runs at the living room. An old iPad 3 is used as the terminal.

Avenir

The solution described above is still under development and will get more features in the future. Some of the planned are: 

  • Support for actuators based on infra red signals (like an RGB-LED-Strip).
  • Support for XML based configuration files in addition to code based configuration.
  • Implementation of a dedicated tablet web app with a different layout.
  • Support for reed switches for windows which are showing the state at the web app.
  • Libraries with drivers for devices from other manufacturers (like 433Mhz remote switches).
  • Controlling of the valves of the heating system (outputs and temperature reading already implemented).
  • Alarm system which sends notifications if motion is detected or windows are opened (requires implementation of point 4).
  • A hardware weather station.
  • Automatically closing roller shutters if the window is open and rain is detected (the currently used weather API already provides the required information).
  • More Unit Tests.
  • Detailed documentation at the GitHub wiki.
  • Animations (this feature was already implemented using NETMF but I was not able to migrate it completely within the time range of the IoT contest)

If you are interested to contribute to this project (hardware, software, documentation or anything else), feel free to contact me.

Code

CK.HomeAutomation
This repository contains the complete solution including the SDK, WebApp and my personal configuration.https://github.com/chkr1011/CK.HomeAutomation.git

Schémas

This is the circuit which us required to read the 433Mhz codes from the remote control. The sketch contains the circuit board of the DHT22 sensor which is mounted at every room. The shield contains a status LED and screw terminals for the I2C bus and the interrupt. This is a regular temperature and humidity sensor which conains a 433Mhz sender. Only one is required for the entire home.

Processus de fabrication

  1. Enregistreur de température Raspberry Pi
  2. Surveillance à distance de la météo à l'aide de Raspberry Pi
  3. Tag de capteur à Blynk à l'aide de Node-RED
  4. Capteur de mouvement utilisant Raspberry Pi
  5. Surveillez la température de votre maison à l'aide de votre Raspberry Pi
  6. Windows 10 IoT Core – Lecture des impulsions de fréquence cardiaque
  7. DOMOMATISATION RASPBERRY PI
  8. Windows 10 IoT Core sur Raspberry Pi 2 – Données du capteur Adafruit
  9. Windows 10 IoT Core et SHT15