Mise à jour: 2017-11-22
Cette continuation du billet du 17 mai, Programmation du
Sonoff dans l'EDI Arduino (1), montre comment j'ai téléversé le
micrologiciel Sonoff-MQTT-OTA-Arduino
de Theo Arends
sur un commutateur Wifi Sonoff
de ITEAD. Ce micrologiciel est complet tout en permettant une prise en charge
simple
du commutateur avec le programme de domotique Domoticz.
Prérequis
Un serveur MQTT doit être installé sur le réseau local. Le Raspberry Pi qui est l'hôte du logiciel de domotique est aussi l'hôte de Mosquitto mqtt sur mon réseau. Voir ici pour les instructions (an anglais seulement) sur l'installation de ce serveur.
Avant d'installer Sonoff-MQTT-OTA-Arduino il faut installer
pubsubclient, une bibliothèque MQTT pour Arduino de
Nick O'Leary. On commence en clonant le dépôt avec le logiciel de
version Git, puis on copie les fichiers source de la
bibliothèque dans un sous répertoire du répertoire
~/Arduino/libraries
Si l'on n'a pas Git
, on peut télécharger une archive Zip
de la dernière version de la bibliothèque. On obtient cette archive du
site githup de pubsubclient. Cliquer sur le bouton vert
Clone or download, puis
cliquer sur Download ZIP et
sauvegarder l'archive pubsubclient-master.zip
dans un dossier.
Après, il faut extraire les deux fichiers du répertoire
pubsubclient-master/src/
dans le dossier
~/Arduino/libraries/pubsubclient
. Attention aux minuscules et
majuscules qu'on doit distinguer dans Linux.
Il faut modifier la taille maximum des paquets MQTT dans le fichier
PubSubClient.h
. La valeur du paramètre doit
être augmentée à au moins 4OO octets. J'ai opté pour 512 octets. Cette
définition se trouve à la ligne 26 du fichier.
... // MQTT_MAX_PACKET_SIZE : Maximum packet size #ifndef MQTT_MAX_PACKET_SIZE #define MQTT_MAX_PACKET_SIZE 512 #endif
Obtenir le micrologiciel Sonoff-MQTT-OTA-Arduino
Comme à l'étape précédente, on peut cloner le dépôt de Theo Arends pour
obtenir Sonoff-MQTT-OTA-Arduino
dans le dossier
~/Arduino
.
Comme auparavant, on peut aussi obtenir Sonoff-MQTT-OTA-Arduino
sans Git
. Le code est disponible du site GitHub de l'auteur. Cliquer sur le bouton vert
Clone or
download, puis cliquer sur
Download ZIP et
sauvegarder l'archive Sonoff-MQTT-OTA-Arduino-master.zip
dans un
dossier.
Il n'est pas nécessaire de tout extraire de l'archive. Il suffit
d'extraire le contenu du répertoire
Sonoff-MQTT-OTA-Arduino-master/sonoff/
dans le dossier
~/Arduino/sonoff
.
Paramétrage de Sonoff-MQTT-OTA-Arduino
Si l'on double-clique le fichier
~/Arduino/Sonoff-MQTT-OTA-Arduino/sonoff/sonoff.ino
(installation
avec Git
) ou ~/Arduino/sonoff/sonoff.ino
(installation à partir de l'archive), l'EDI Arduino sera automatiquement lancé
et le croquis avec tous ses composants seront chargés dans l'éditeur. On peut
aussi lancer l'EDI Arduino puis ouvrir le même fichier avec le choix
Ouvrir...
du menu Fichier
ou en appuyant sur les deux
touches CtrlO.
Puisque j'ai un bon nombre de Sonoff à programmer, j'ai modifié le fichier
user_config.h
en tenant compte des adresses du réseau WiFi et du
serveur MQTT locaux.
Inutile de spécifier la constante DOMOTICZ_RELAY_IDX1
ici.
L'index Domoticz de chaque Sonoff sera différent.
De plus, cet index a plus d'une fois été modifié alors que j'ai expérimenté
avec le logiciel de domotique. Plus loin, je montrerai comment définir cette
valeur.
Si je comprends correctement, "pool.ntp.org" est un «nbsp;site virtuel » de serveurs de temps fournis bénévolement pour réduire la charge sur les serveurs de temps de premier niveau. Le domaine "ca.pool.ntp.org" correspond aux serveurs situés au Canada et "0.ca.pool.ntp.org" est un serveur aléatoire dans ce domaine.
À la lecture de deux paragraphes du site www.pool.ntp.org, il faudrait probablement examiner cette utilisation de ce service.
Si votre fournisseur d'accès possède un serveur de temps ou si vous connaissez un bon serveur de temps près de chez vous, vous devriez utiliser celui-ci et non pool.ntp.org : vous obtiendrez probablement une heure plus précise et utiliserez moins de ressources réseau. Si vous ne connaissez qu'un serveur de temps près de chez vous, vous pouvez bien sûr utiliser celui-ci et deux serveurs de pool.ntp.org.
Si vous synchronisez un réseau à pool.ntp.org, veuillez configurer un de vos ordinateurs comme serveur de temps et synchroniser les autres ordinateurs à celui-là. (Vous devrez vous renseigner, mais ce n'est pas difficile. Et il y a toujours le forum comp.protocols.time.ntp.)Éventuellement, le Raspberry Pi qui accueille Domoticz pourrait fournir le temps aux Sonoff.
Au Canada, l'heure avancée commence le deuxième dimanche de mars et se termine le premier dimanche de novembre (ref). Puisque j'ai pris la peine de modifier TIME_DST et TIME_STD, aussi bien utiliser ces définitions d'où la valeur 99 pour APP_TIMEZONE.
Conserver les changements au fichier user_config.h
en cliquant sur le bouton Enregistrer
ou sur le choix
Enregister
dans le menu Fichier
ou en appuyant
sur les touches Ctrl S.
Téléversement du micrologiciel vers le Sonoff
La procédure pour téléverser le micrologiciel est la même que celle
utilisée dans le billet précédent pour téléverser le croquis Blink
- Brancher le convertisseur USB-série au Sonoff ( plus d'explications).
- Cliquer sur le menu
Croquis
puis sur le choixVérifier/Compiler
ou frapper sur les touches Ctrl R pour s'assurer que le croquis est correct. Si tout se passe bien, le fichier binairesonoff.ino.bin
sera engendré dans le répertoire/tmp/arduino_build_xxxxx
(où xxxxx change d'une compilation à la suivante). C'est ce fichier qui sera téléversé vers le Sonoff. - Cliquer sur le menu
Outils
- Sélectionner
"Generic ESP8266 Module
vers le bas de la liste déroulante dans la rubriqueType de carte:
. - Sélectionner le mode d'accès à la mémoire flash (
Flash Mode
). Le modeDIO
fonctionnait bien auparavant. Cependant, il semble que ITEAD a modifié le type de mémoire dans le Sonoff et il faut utiliser le modeDOUT
qui est un peu moins rapide. Voir l'astuce du 14 juillet de Theo Arends à ce sujet. Si le téléversement se déroule correctement mais le dispositif ne fonctionne pas après, il faut définitivement recommencé avec le modeDOUT
. (Mise à jour: 2017-11-22) - Sélectionner
"1M(64K SPIFF)"
de la liste déroulante dans la rubriqueFlash Size:
- Sélectionner le port de la connexion USB dans la rubrique
Port:
. Comme j'avais mentionné il s'agit du port virtuel/dev/ttyUSB0
sur mon ordinateur muni d'Ubuntu 14.04 LTS. Sur un ordinateur Windows ce sera quelque chose commeCOM3
.
- Mettre le Sonoff en mode programmation
- Si le Sonoff est sous tension, débrancher ou déconnecter Vcc.
- Appuyer et garder enfoncé l'interrupteur tactile du Sonoff.
- Mettre le Sonoff sous tension (Vcc = 3,3V).
- Relâcher l'interrupteur tactile.
- Téléverser le croquis compilé vers le Sonoff. Il y a au moins trois
façons de s'y prendre :
- On peut cliquer sur la flèche droite dans la barre d'outils.
- On peut appuyer sur les touches CtrlU simultanément.
- On peut cliquer sur le menu
Croquis
et puis sur le choixTéléverser.
- La compilation et le téléversement prendront quelques dizaines de secondes.
Pendant ce temps, lancer le moniteur série de l'EDI Arduino
Il y a au moins trois façons de s'y prendre :
- On peut cliquer sur l'icône
Moniteur série
à l'extrémité droite de la barre d'outils. - On peut appuyer sur les touches Ctrl Maj M simultanément.
- On peut cliquer sur le menu
Outils
et puis sur le choixMoniteur série
.
- On peut cliquer sur l'icône
- Quand l'opération est terminée, le Sonoff quittera le mode programmation
et le micrologiciel de Theo Arends s'exécutera. On peut voir ci-dessous
une partie de l'information qui sera transmise sur le port en série.
Noter l'adresse IP du serveur Web du Sonoff. On l'utilisera pour définir l'index Domoticz du commutateur.
Contrôle du Sonoff avec Domoticz
L'intégration du commutateur Sonoff programmé avec
Sonoff-MQTT-OTA-Arduino
avec le logiciel de domotique
Domoticz est facile. Si le « matériel MQTT »
est déjà installé Domoticz, c'est un processus en
deux étapes. En premier, dans Domoticz, il faut créer
un commutateur virtuel sur le matériel virtuel nommé
Dummy (Does nothing, use with virtual switches only)
qui sera utilisé pour activer ou désactiver le commutateur matériel. Voici un
aperçu rapide de la démarche nécessaire.
- Cliquer sur l'onglet Réglages.
- Cliquer sur le choix Matériel dans le menu.
- Si le matériel virtuel
Dummy (Does nothing, ...)
existe déjà, passez à l'étape suivante.- Compléter les champs
Nom: =Virtuel
, and
Type: =Dummy (Does nothing...
qu'on sélectionne dans la liste déroulante. - Cliquer sur le bouton au bas de la page. Le matériel virtuel sera rajouté au tableau au haut de la page.
- Compléter les champs
- Cliquer sur dans le matériel virtuel.
- Nommer le capteur (
Test-Sonoff
dans cet exemple, mais choisir un nom plus adapté en réalité) et fixer le Type de capteur: àInterrupteur
. - Cliquer sur le bouton . Un message confirmant la création du dispositif apparaîtra brievement à l'écran.
- Cliquer sur l'onglet Réglages de nouveau.
- Cliquer sur le choix Dispositifs dans le menu.
- Repérer le numéro d'index (colonne idx) de l'interrupteur nouvellement créé.
Pour la deuxième étape, le Sonoff devrait être branché et relié à une
lampe pour facilement procéder à sa configuration. J'ai trouvé utile de modifier
une vieille rallonge pour lampes pour faire cette vérification à répétition.
Sur la photographie, l'on peut voir que j'ai coupé la rallonge pour garder que
les deux connecteurs avec une petite longueur du câble dont j'ai dénudé les
extrémités. J'ai soudé les fils en cuivre torsadés pour
faciliter l'insertion dans les connexions du Sonoff. D'ailleurs, j'ai ajouté des
tubes thermorétrécisable sur ces quatre gaines pour une meilleure manutention.
Cette rallonge est tellement vieille que la fiche électrique n'est pas
polarisée. Alors du ruban collant vert marque clairement la mise à terre
(aussi marquée N comme sur le Sonoff).
La configuration du Sonoff se résume à spécifier le numéro d'index (idx)
de l'interrupteur virtuel qui le représente dans
Domoticz. Ceci se fait en utilisant le serveur Web
du Sonoff dont l'adresse IP a été récupérée dans le moniteur série
de l'EDI Arduino lors du téléversement du micrologiciel. Si l'on a pas cette
adresse alors on peut obtenir la liste de toutes les adresses IP utilisées sur
le réseau local avec les commandements
nmap -sn 192.168.0.0/24 ou
fping -r 2 -aqg 192.168.0.0/24.
Je trouve plus facile d'utiliser
NetX sur une tablette Android, car les dispositifs ESP8266
d'Espressif (tel qu'utilisé dans le commutateur Sonoff) sont identifiés avec
cette application.
- Lancer un fureteur tel Firefox et accéder au serveur
Web du Sonoff à son adresse. Dans notre cas c'est
192.168.0.137
qu'il faut entrer dans la barre adresse. La page d'accueil, à gauche sur l'image ci-dessous, devrait s'afficher.
- Cliquer sur le bouton Toggle pour allumer et éteindre la lampe connectée au Sonoff. C'est la meilleure façon de s'assurer que l'on a bien le bon serveur Web.
- Cliquer sur Configuration puis sur le bouton Configure Domoticz. L'écran de configuration au centre de l'image ci-dessus devrait apparaître.
- Changer le numéro Idx au numéro d'index de l'interrupteur virtuel nouvellement créé. Dans cet exemple, cet index était 55.
- Cliquer sur le bouton Save pour sauvegarder ce changement.
- Cliquer sur le bouton Configuration menu puis sur le bouton Configure Other. L'écran de configuration à droite de l'image ci-dessus devrait apparaître.
- On peut alors donner un nom plus convivial au dispositif. J'ai choisi de lui donner le même nom que l'interrupteur virtuel dans Domoticz. Cette étape est évidemment facultative.
- Cliquer sur Configuration menu puis sur
Main menu. Si le changement ne semble pas prendre effet, on pourra toujours cliquer sur Restart ou, à la rigueur, débrancher puis rebrancher le Sonoff.
Ces deux étapes seront répétées pour chaque Sonoff additionnel.
Si le « matériel MQTT » n'est pas déjà installé dans Domoticz, voici comment procéder.
- Cliquer sur l'onglet Réglages.
- Cliquer sur le choix Matériel dans le menu.
- Si le matériel
MQTT Client Gateway with LAN interface
existe déjà dans le tableau passer à l'étape suivante.- Compléter les champs
Nom: =MQTT
, et
Type: =MQTT Client Gateway with LAN interface
qu'on sélectionne dans la liste déroulante. - Cliquer sur le bouton
MQTT
sera rajouté au tableau au haut de la page.
au bas de la page.
Le matériel
- Compléter les champs
- Cliquer sur la ligne
MQTT Client Gateway with LAN interface
. - Sélectionner
out
pour Publish Topic: dans la liste déroulante. - Cliquer le bouton à gauche sous le tableau du matériel.
Notez que ceci n'a besoin d'être fait qu'une seule fois.
Il ne reste qu'à vérifier que tout fonctionne. Cliquez sur l'icône de l'interrupteur virtuel nouvellement créé qu'on retrouve sur l'onglet Interrupteurs. Cliquez sur l'interrupteur tactile du Sonoff et l'état de l'icône de l'interrupteur virtuel devrait refléter l'état du Sonoff. La rétroaction dans ce sens est plus lente, il faut compter une seconde ou deux avant que l'état de l'interrupteur virtuel change.