Homebridge + Domoticz. Piloter des objets connectés MySensors avec Siri sur iOS • Domotique et objets connectés à faire soi-même

Vous avez développé vos propres objets connectés à base d’Arduino (ou ESP8266) et MySensors, voici comment faire pour les piloter à la voix grâce à Siri ou depuis la nouvelle application Maison (HomeKit) d’iOS10. Dans ce premier tutoriel, nous allons installer et configurer Homebridge avec Domoticz.

Configuration requise

Pour réaliser ce tutoriel vous aurez besoin des éléments suivants.

Un Raspberry Pi 3 (ou 2) avec Domoticz installé et configuré. Si vous débutez en domotique ou sur Domoticz, voici une série d’article pour bien commercer :

Une Gateway MySensors. Pour ce tutoriel, j’ai utilisé une Gateway réseau à base d’ESP8266 d’après ce précédent tutoriel. A la date d’écriture de ce tutoriel, la version 2 de la librairie MySensors n’est pas encore officiellement supportée mais elle fonctionne très bien.

Un iPhone fonctionnant sous iOS 9 ou iOS10. Pour cet article, j’ai utilisé un iPhone 6S sous iOS10.

Installer et configurer Homebridge pour Domoticz

Homebridge est un projet Open Source développé par Nick Farina (Github, site internet). Homebridge est un projet modulaire auquel on peut ajouter des plugins en fonction du matériel que l’on souhaite ajouter à son iPhone (ou iPad). Il en existe déjà plus de 260 (la liste complète ici). Il existe des plugins pour les principaux logiciels domotique (Domoticz, Home Assistant, OpenHAB, Jeedom, FHEM…) et pour de nombreux matériels (Ampoules Philips Hue, NAS Synology…)

Pour installer et configurer Homebridge, je vous conseille de suivre ce tutoriel. J’ai rencontré des difficultés de configuration avec Domoticz en suivant le tutoriel officiel (même si la procédure est similaire à la fin). Avant de commencer, assurez vous que votre système est à jour

sudo apt-get update
sudo apt-get upgrade

Si vous venez d’installer Domoticz depuis l’image officielle, il faut déjà étendre la partition pour que celle-ci prenne la totalité de la place disponible sur la carte SD. Domoticz s’installe maintenant beaucoup plus facilement sur une image Raspbian (ou tout autre OS équivalent), cette opération n’est plus nécessaire. Pour en savoir plus, suivez ce tutoriel.
sudo raspi-config
Puis Option 1 – Expand Filesystem. Ensuite Finish et enfin Allow reboot.

Installation de nodejs

Avant d’installer Homebridge, il est nécessaire d’installer Nodejs. Suivez les étapes suivantes qui correspondent à votre modèle de Raspberry. On commence par supprimer le nodejs déjà existant sur le système pour installer la version 6.3.1 (version conseillée pour le projet Homebridge).

Attention. Vérifiez l’impact sur d’autres projets qui utilisent Nodejs avant de vous lancer.

Sur Raspberry Pi 2 ou supérieur

sudo apt-get remove nodejs
sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*} /var/db/receipts/org.nodejs.*
hash -r
wget https://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-armv7l.tar.gz
tar -xvf node-v6.3.1-linux-armv7l.tar.gz
cd node-v6.3.1-linux-armv7l
sudo cp -R * /usr/local/
cd ~/

Raspberry Pi A/B/B+ (anciens modèles)

sudo apt-get remove nodejs
sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*} /var/db/receipts/org.nodejs.*
hash -r
wget https://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-armv6l.tar.gz
tar -xvf node-v6.3.1-linux-armv6l.tar.gz
cd node-v6.3.1-linux-armv6l
sudo cp -R * /usr/local/
cd ~/

Installation de Homebridge et eDomoticz

Maintenant, nous pouvons installer Homebridge et le plugin eDomoticz

sudo apt-get install libavahi-compat-libdnssd-dev
sudo npm set prefix '/usr' -g
sudo npm install -g homebridge --unsafe-perm
sudo npm install -g homebridge-edomoticz --unsafe-perm

Petites explications pour ceux qui ne connaissent pas npm

  • Le -g permet de rendre le package utilisable globalement. Sans le -g, le package n’est utilisable que depuis le répertoire d’installation. Dans ce cas tout est téléchargé dans le répertoire de npm et tous les autres packages peuvent l’utiliser.
  • L’option –unsafe-perm permet de passer outre les éventuels messages d’erreurs lors de l’installation

Récupérez l’adresse Mac du votre Raspberry PI. Ce n’est pas noté mais sans cette configuration (astuce trouvée ici), vous risquez de ne pas réussir à détecter la passerelle Homebridge sur iPhone (ou iPad). Exécutez ifconfig. L’adresse Mac du RPI se trouve à droite de HWaddr.

Créez un répertoire dédié à Homebridge

mkdir ~/.homebridge

Puis ouvrez le fichier de configuration dans un éditeur de texte (pico ou nano).

sudo nano ~/.homebridge/config.json

Collez cette configuration par défaut qui pourra servir de base pour un serveur Domoticz existant. Modifiez la valeur de la clé username en saisissant l’adresse Mac du Raspberry Pi.

Vous pouvez en profiter pour attribuer votre code Pin.

{
    "bridge": {
        "name": "Homebridge",
        "username": "ADRESSE_MAC_PI",
        "port": 51826,
        "pin": "031-45-154"
    },
    "description": "Configuration file for (e)xtended Domoticz platform.",
    "platforms": [
        {
            "platform": "eDomoticz",
            "name": "eDomoticz",
            "server": "127.0.0.1",
            "port": "8080",
            "ssl": 0,
            "roomid": 0,
            "mqttenable": 1,
            "mqttserver": "127.0.0.1",
            "mqttport": "1883",
            "mqttauth": 0,
            "mqttuser": "",
            "mqttpass": ""
        }
    ],
    "accessories": []
}

Enregistrez le fichier de configuration avec CTRL+X puis O (ou Y).

Maintenant, vous pouvez lancer Homebridge

sudo homebridge

Premier démarrage. Aucun appareil configuré sous Domoticz

Au démarrage, Homebridge recherche tous les dispositifs (appareils) configurés sur Domoticz et les rend visible par un iPhone ou un iPad relié au réseau local.

Ajout d’un objet MySensors sous Domoticz

Pour les besoins de ce tutoriel, j’ai préparé un petit objet connecté qui est composé d’un contacteur ainsi que d’une Led pour simuler l’allumage et l’extinction d’une lampe. On pourrait très facilement remplacer la Led par un relai pour piloter une lampe ou l’ouverture d’un portail électrique par exemple.

Pour réaliser ce montage, vous aurez besoin des éléments suivants :

Schéma du montage

Le module radio nRF24L01+ doit être alimenté en 3,3Volts. D’autre part, l’alimentation 3,3V de certaines cartes est de qualité moyenne. Il est préférable d’utiliser une platine de câble qui dispose d’un meilleur régulateur de tension.

Code du projet

Avec la version 2 de MySensors, il est possible d’ajouter un (ou des) noeud à une gateway. Voici donc le code d’une Gateway WiFi ESP8266 qui permet de remonter l’état d’un contacter (détecter l’ouverture d’une porte par exemple) et de simuler d’allumage/extinction d’une lampe à l’aide d’une Led.

Avant de téléverser le code dans votre ESP8266, modifiez les paramètres suivants :

  • : le nom du réseau WiFi
  • MY_ESP8666_PASSWORD : et le mot de passe
  • MY_IP_ADDRESS : le mieux est de fixer l’adresse ip de la Gateway..
  • MY_IP_GATEWAY_ADDRESS et SUBNET qui correspond à votre routeur
/**
 * The MySensors Arduino library handles the wireless radio link and protocol
 * between your home built sensors/actuators and HA controller of choice.
 * The sensors forms a self healing radio network with optional repeaters. Each
 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
 * network topology allowing messages to be routed to nodes.
 *
 * Created by Henrik Ekblad 
 * Copyright (C) 2013-2015 Sensnology AB
 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
 *
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 *******************************
 *
 * REVISION HISTORY
 * Version 1.0 - Henrik EKblad
 * Contribution by a-lurker and Anticimex, 
 * Contribution by Norbert Truchsess 
 * Contribution by Ivo Pullens (ESP8266 support)
 * 
 * DESCRIPTION
 * The EthernetGateway sends data received from sensors to the WiFi link. 
 * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
 *
 * VERA CONFIGURATION:
 * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. 
 * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
 *
 * LED purposes:
 * - To use the feature, uncomment WITH_LEDS_BLINKING in MyConfig.h
 * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
 * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
 * - ERR (red) - fast blink on error during transmission error or recieve crc error  
 * 
 * See http://www.mysensors.org/build/esp8266_gateway for wiring instructions.
 * nRF24L01+  ESP8266
 * VCC        VCC
 * CE         GPIO4          
 * CSN/CS     GPIO15
 * SCK        GPIO14
 * MISO       GPIO12
 * MOSI       GPIO13
 * GND        GND
 *            
 * Not all ESP8266 modules have all pins available on their external interface.
 * This code has been tested on an ESP-12 module.
 * The ESP8266 requires a certain pin configuration to download code, and another one to run code:
 * - Connect REST (reset) via 10K pullup resistor to VCC, and via switch to GND ('reset switch')
 * - Connect GPIO15 via 10K pulldown resistor to GND
 * - Connect CH_PD via 10K resistor to VCC
 * - Connect GPIO2 via 10K resistor to VCC
 * - Connect GPIO0 via 10K resistor to VCC, and via switch to GND ('bootload switch')
 * 
  * Inclusion mode button:
 * - Connect GPIO5 via switch to GND ('inclusion switch')
 * 
 * Hardware SHA204 signing is currently not supported!
 *
 * Make sure to fill in your ssid and WiFi password below for ssid & pass.
 */

#include 
#include 

// Enable debug prints to serial monitor
#define MY_DEBUG 

// Use a bit lower baudrate for serial prints on ESP8266 than default in MyConfig.h
#define MY_BAUD_RATE 9600

// Enables and select radio type (if attached)
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#define MY_GATEWAY_ESP8266

#define MY_ESP8266_SSID "SSID"
#define MY_ESP8266_PASSWORD "PASSWORD"

// Enable UDP communication
//#define MY_USE_UDP

// Set the hostname for the WiFi Client. This is the hostname
// it will pass to the DHCP server if not static.
// #define MY_ESP8266_HOSTNAME "sensor-gateway"

// Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
#define MY_IP_ADDRESS 192,168,1,20

// If using static ip you need to define Gateway and Subnet address as well
#define MY_IP_GATEWAY_ADDRESS 192,168,1,1
#define MY_IP_SUBNET_ADDRESS 255,255,255,0

// The port to keep open on node server mode 
#define MY_PORT 5003      

// How many clients should be able to connect to this gateway (default 1)
#define MY_GATEWAY_MAX_CLIENTS 3

// Controller ip address. Enables client mode (default is "server" mode). 
// Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere. 
//#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 68

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE

// Enable Inclusion mode button on gateway
// #define MY_INCLUSION_BUTTON_FEATURE
// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60 
// Digital pin used for inclusion mode button
#define MY_INCLUSION_MODE_BUTTON_PIN  3 

 
// Flash leds on rx/tx/err
// #define MY_LEDS_BLINKING_FEATURE
// Set blinking period
// #define MY_DEFAULT_LED_BLINK_PERIOD 300

// Led pins used if blinking feature is enabled above
#define MY_DEFAULT_ERR_LED_PIN 16  // Error led pin
#define MY_DEFAULT_RX_LED_PIN  16  // Receive led pin
#define MY_DEFAULT_TX_LED_PIN  16  // the PCB, on board LED

#if defined(MY_USE_UDP)
  #include 
#else
  #include 
#endif

#include 

#define CHILD_ID_CONTACTEUR 0
#define CHILD_ID_LED 1
#define CHILD_ID_LEVELBAT 2
#define CONTACTEUR_PIN D3         // Broche sur laquelle est attaché le contacteur (2 ou 3 si on veut 
#define LED_PIN D1                // Broche sur laquelle est branchée l'actionneur (LED, Relay...)
#define FREQ_ENVOI 10000          // Force l'envoi d'état au bout de 2s
boolean etatPrecedent = false;
unsigned long dernierEnvoi = 0;
MyMessage msgContacteur(CHILD_ID_CONTACTEUR, V_TRIPPED);
MyMessage msgLed(CHILD_ID_LED,V_LIGHT);

void setup() {
  pinMode(CONTACTEUR_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(CONTACTEUR_PIN, HIGH);
  digitalWrite(LED_PIN, HIGH);
}

void presentation()  {
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("Gateway MySensors v2", "1.0");

  // Register all sensors to gateway (they will be created as child devices)
  present(CHILD_ID_CONTACTEUR, S_DOOR);
  present(CHILD_ID_LED, S_LIGHT);
}


void loop()      
{     
  uint8_t etat;
  unsigned long tempsActuel = millis();
  
  // Read contact state / Lit l'état du contacteur
  etat = digitalRead( CONTACTEUR_PIN ); // == LOW;
  if ( etat != etatPrecedent || ( tempsActuel - dernierEnvoi  > FREQ_ENVOI ) ) {
    etatPrecedent = etat;
    dernierEnvoi = tempsActuel;
    Serial.print("Etat du contacteur modifie ");
    Serial.println(etat ? "Ouvert " : "Ferme" );
    send( msgContacteur.set( etat ? "1" : "0" ) );  
  }

  delay(5); 
}

void receive(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
  if (message.isAck()) {
     Serial.println("This is an ack from gateway");
  }
  
  if (message.type == V_LIGHT) {
     // Change relay state
     bool state;
     state = message.getBool();
     digitalWrite(LED_PIN, state? LED_OFF:LED_ON);
     // Store state in eeprom
     saveState(CHILD_ID_LED, state);

     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   } 
}

Configuration des dispositifs sous Domoticz

Pour tout savoir sur comment ajouter un objet MySensors sous Domoticz, suivez ce tutoriel, sinon voici les étapes à suivre (en accéléré).

Ajoutez une Gateway MySensors Lan dans Réglages -> Matériel. Indiquez l’adresse ip de la Gateway et le port. Donnez un nom, puis Ajouter.


Ajoutez les dispositifs depuis Réglages -> Dispositifs -> appuyer sur la flèche verte en face de chaque dispositif à ajouter. Donnez un nom au dispositif. Après ajout, la flèche devient bleue.

Allez dans les Interrupteurs et modifiez les affichages si besoin.

Relancez maintenant Homebridge pour voir les dispositifs qui seront visibles par iOS.

Configurer l’application Maison sur iPhone ou iPad

Sur votre iPhone ou iPad (de préférence sous iOS10 minimum), lancez l’application Maison.

Votre iPhone (ou iPad) doit être connecté au réseau local en WiFi pour pouvoir ajouter un pont et des accessoires. Tapez sur Ajouter un accessoire.

Ecran d’accueil de l’application Maison

Si tout est bien configuré, vous devez avoir un accessoire nommé Homebridge qui apparaît. Sélectionnez le.

Pont Homebridge trouvé !

Saisissez manuellement (ou tentez votre chance avec la reconnaissance optique) le code Pin affiché sur le Terminal.

Saisie du code Pin

On patiente quelques instants durant le jumelage du pont.

Jumelage en cours

Et voilà!

Pont Homebridge correctement ajouté

Vous pouvez donner un nouveau nom au pont et attribuer un lieu. Comme c’est un pont vers un serveur domotique, l’intérêt est limité.

On peut attribuer un lieu (pas très utile pour Domoticz)

Maison propose ensuite d’ajouter le premier dispositif exposé. Dans ce cas, la lampe (simulée par une Led). Attribuez lui un lieu et modifiez son icône (interrupteur, ampoule ou ventilateur). On peut le modifier à tout moment en appuyant longtemps sur l’icône depuis l’écran d’accueil de Maison puis détail.

Idem pour le contacteur de porte

Et le contacteur de porte

C’est terminé ! Vous pouvez également voir à quoi ressemblent les icônes actives des accessoires.

Verrouillez votre iPhone et ouvrez le centre de notification. Glissez vers le panneau vers droite deux fois pour accéder au panneau des favoris de Maison.

Est-ce que ça marche en dehors de chez moi ?

Voici ce que vous pourrez faire en fonction de votre matériel (allez sur cette page Apple pour tout savoir)C’est ici que réside le principal intérêt d’utiliser l’application Maison (HomeKit) d’iSO10 . Vous n’avez pas besoin d’exposer votre serveur domotique à internet. C’est iOS (HomeKit) et les serveurs Apple via votre compte iCloud qui s’occupe de tout et ce de manière parfaitement sécurisé. Mais pour que ça fonctionne, il faut disposer d’un matériel compatible HomeKit à la maison et celui-ci doit être allumé (…et chargé).

  • Pour contrôler des accessoires à distance
    • Apple TV de 3ème génération. Il n’est pas possible d’accéder aux caméras de surveillance HomeKit.
    • Apple TV de 4ème génération équipé de tvOS 9.0 ou supérieur
  • Pour configurer les automatisations et les autorisations des utilisateurs
    • Apple TV de 4ème génération sous tvOS 10
    • iPad sous iOS 10

En résumé, vous aurez donc besoin d’un iPad assez récent (iPad Air par exemple) ou d’une Apple TV de 4ème génération (pour pouvoir créer des scénarios simples). Lorsque vous utilisez Maison en dehors de chez vous, il faudra attendre quelques secondes le pour que’HomeKit récupère la connexion avec le matériel jouant le rôle de répéteur (hub HomeKit). L’Apple TV de 3ème génération reste utilisable mais les fonctions sont plus limitées (impossible d’utiliser une caméra domotique, créer des automatismes, gérer les utilisateurs).

Vous rencontrez des problèmes en dehors de chez vous

Ne vous attendez pas à une réponse immédiate de vos actions lorsque votre iPhone n’est plus relié en WiFi à Domoticz (ou n’importe quel appareil certifié HomeKit). Il faut un certain temps pour qu’une action remonte dans iCloud puis redescende sur l’iPad ou l’Apple TV de votre domicile. Même si iCloud a fait de gros progrès en terme de fiabilité et de performances, il y a un temps de latence qui peut aussi provenir de votre connexion 4G (ou 3G). Disons qu’un délai de quelques secondes n’est pas inhabituel.

Autre constatation, le statut des accessoires n’est pas actualisé en temps réel dans le centre de notification. Par exemple, si un contacteur remonte l’ouverture d’une porte, l’icône correspondante ne sera pas activée. Le statut d’un accessoire n’est mis à jour qu’à l’affichage du panneau ou lors d’une action manuelle depuis le panneau.

Enfin dernier point, Homebridge est un projet “border line”. Il n’est pas inclus dans un produit certifié Apple. On reste dans le DIY, ça fonctionne très bien mais de temps en temps…

Piloter à la voix vos dispositifs Domoticz avec Siri

Maintenant que tout fonctionne dans Maison, il est temps de tester la commande vocale avec Siri.

Essayons d’allumer la lumière du salon => “Dis Siri allume la lumière du Salon”.

De même pour éteindre dites “éteins la lumière du salon”.

Enfin, demandons à Siri si la porte est fermée : “Dis Siri la porte est-elle ouvert”.

Liste des commandes qui fonctionnent avec Siri et conseils

Pour que Siri soit en mesure de faire le lien avec l’accessoire Domoticz, nommez le exactement par sa désignation. Plutôt que de mettre des désignation à rallonge, le mieux est d’attribuer un lieu à chaque accessoire. Ca permet à Siri de faire le lien plus facilement. Par exemple, au lieu d’attribuer “lumière du salon”, donnez le nom “lumière” et créez un lieu “Salon”. Sinon lorsqu’on demande allume “lumière salon”ça ne marche pas. Si vous avez de nombreux accessoires, vous avez intérêt à standardiser vos désignations, sinon gare au mal de tête pour se souvenir du nom donné à la lampe du grenier ;-).

Voici une liste d’actions (non exhaustive) que vous pouvez réaliser à la voix avec Siri (d’après cette liste)

Commande Siri (mot clé d’action) Exemples d’utilisation Accessoire Lieu Consigne
Allume Allume la lumière dans la chambre. Lumière chambre
Éteins Eteins la lumière Lumière
Éteins la lumière dans la chambre de Chloé Lumière Chambre de Chloé
Tamise Tamise la lumière Lumière
Règle Règle la luminosité sur 50 % 50%
Règle le thermostat sur 21° au rez-de-chaussée Thermostat Rez-de-chaussée 21°C
Mets Mets le chauffage sur 22° Chauffage 22°C
Allume
Baisse Baisse la lumière de la cuisine Lumière Cuisine
Réduis Réduis de moitié l’éclairage de la salle à manger Salle à manger

Vous pouvez aussi créer et déclencher des scènes. Pour le convoquer, il suffit de dire son nom, par exemple “Dis Siri Bonjour”.

Pour créer un scène, allez dans les Pièces,


Appuyez sur le Plus puis  Ajouter un scène. Il existe déjà des scènes existantes dans la liste.

On termine la configuration. Par exemple la scène Bonjour permet d’allumer toutes les lampes du salon.

C’est prêt.

Premières conclusions et conseils

Homebridge est un projet Open Source supporté par une grande communauté. Son architecture très ouverte a permis le développement de nombreux plugins tiers. Le plugin eDomoticz est très complet et réactif pour les actionneurs. Allumer, éteindre une lampe répond instantanément. La mise à jour de l’état d’un contacteur est plus longue, il n’est pas rare de devoir attendre presque une minute.

Coté iOS, l’intégration de dispositifs Domoticz est très simple et intuitive. Vous pourrez même piloter votre installation depuis votre iPhone hors de la maison sans avoir à rendre votre Raspberry Pi disponible sur internet. C’est un vrai gage de sécurité. Coté scénarios, l’application Maison est beaucoup moins évoluée que les logiciels domotique, mais la combinaison de deux solutions est vraiment très souple et agréable d’utilisation.

Mises à jour

  • 2/01/2017 : modification de la procédure d”installation de nodejs.

Avez-vous aimé cet article ?