2017-05-19

L'une des fonctionnalités très utiles du micrologiciel pour les commutateurs Sonoff de Theo Arends, Sonoff-MQTT-OTA-Arduino, est la possibilité de le mettre à jour par WiFi. On dit mise à jour en mode OTA, un calque de l'anglais Over the air (OTA) updating. Cette capacité est prête à être utilisée : sur le site Web du commutateur Sonoff sélectionnez Update firmware (mettre à jour le micrologiciel) et téléchargez la nouvelle version du micrologiciel à partir de l'ordinateur de bureau ou d'un serveur Web sur le réseau local. Il n'est donc plus nécessaire d'avoir un accès physique au Sonoff pour mettre son logiciel à jour à l'exception de la première programmation du commutateur à l'aide d'un câble USB-TTL.

Il n'y a rien à configurer ni à installer pour mettre à niveau le micrologiciel à partir d'un fichier sur l'ordinateur de bureau. De même, s'il existe déjà un serveur HTTP sur un ordinateur connecté au réseau local, alors il n'y a qu'à copier le nouveau fichier binaire de micrologiciel Sonoff vers un répertoire quelque part sur le chemin local du serveur. Autrement, il faudra installer un serveur HTTP.

La section suivante montre comment mettre à niveau le micrologiciel du commutateur en téléchargeant un fichier depuis l'ordinateur de bureau. Le reste du billet est consacré à l'installation d'un serveur HTTP sur le Raspberry Pi qui héberge le système domotique afin de mettre à niveau le micrologiciel du commutateur en utilisant ce serveur.

Table des matières

  1. Mise à niveau WiFi par téléversement d'un fichier
  2. Choix du serveur HTTP lighttpd
  3. Installation de lighttpd sur un Raspberry Pi
  4. Mise à niveau WiFi par serveur HTTP

  1. Mise à niveau WiFi par téléversement d'un fichier
  2. La première étape consiste à engendrer l'image binaire du croquis Arduino de Theo Arends. Démarrez l'EDI d'Arduino et chargez le croquis Sonoff ~/Arduino/Sonoff-MQTT-OTA-Arduino/sonoff.ino.

    Cliquez sur Vérifier/Compiler dans le menu Croquis ou utilisez le raccourci Ctrl R pour compiler l'esquisse vers un fichier binaire. Une fois que la compilation a été effectuée, la fenêtre de messages au bas de l'EDI affichera quelque chose comme

    Archiving built core (caching) in: /tmp/arduino_cache_935355/core/core_esp8266_esp826...

    Même si la compilation est terminée, ne fermez pas l'EDI. Comme indiqué dans le message, la sortie est stockée dans un répertoire temporaire qui sera effacé lorsque l'EDI est fermé.

    Ouvrez le site Web du commutateur Sonoff avec un navigateur de l'ordinateur de bureau. Dans le cas présenté ici, son adresse est 192.168.0.12. Cliquez sur le bouton Firmware upgrade (mise à niveau du micrologiciel) comme indiqué dans le panneau de gauche de l'image suivante.

    Examinez la section Upgrade by file upload (mise à niveau par téléchargement de fichier) de la page suivante comme illustré dans le panneau central ci-dessus. Cliquez sur le bouton Parcourir... et utilisez le navigateur de fichiers de l'ordinateur de bureau pour sélectionner l'image binaire de l'esquisse. Ce fichier se nomme sonoff.ino.bin et se trouve dans le répertoire temporaire nommé arduino_build_xxxxxx où le nombre xxxxxx est variable. Une fois que le fichier image a été sélectionné, cliquez sur le bouton Start upgrade (démarrer la mise à niveau) toujours dans la section Upgrade by file upload.

    Le Sonoff affichera une nouvelle page indiquant qu'il récupère le fichier (voir le panneau supérieur droit ci-dessus). Lorsque l'opération est terminée, une nouvelle page sera affichée dans le navigateur Web (panneau inférieur droit) indiquant que le fichier a été téléchargé et que le micrologiciel est en cours de mise à niveau. Dans quelques secondes, vous pouvez cliquer sur le bouton Main menu (menu principal). Le micrologiciel sera mis à jour.

    Si vous avez modifié un paramètre dans le fichier user_config_.h du croquis sonoff.ino, il ne sera probablement pas reflété dans la configuration du commutateur après la mise à niveau. C'est parce que, le micrologiciel de Theo Arends conserve les données de configuration dans le système de fichiers du ESP8266 (spiffs) qui n'est pas mis à jour lorsque le micrologiciel est mis à niveau. De cette façon, des choses comme le numéro d'index Domoticz du commutateur ne sont pas perdues. Les données de configuration peuvent être réinitialisées aux valeurs par défaut définies dans le nouveau croquis. Cliquez sur le bouton Configuration du menu principal, puis sur le bouton Reset Configuration (réinitialiser la configuration) pour atteindre cet objectif. Vous aurez probablement à mettre à jour le numéro d'index Domoticz, le thème MQTT, le champ Friendly Name et ainsi de suite.

    Comme mentionné ci-dessus, lorsque l'EDI Arduino est fermé, les deux répertoires temporaires qu'il a créés seront effacés. Vous voudrez peut-être copier le fichier binaire ailleurs pour une utilisation future. Une autre possibilité est de le télécharger sur un serveur HTTP sur le Raspberry Pi qui héberge déjà le serveur domotique et qui se chargera de téléverser le fichier binaire vers le commutateur. Le reste de cette publication examine cette option.

  3. Choix du serveur HTTP lighttpd
  4. Sans doute il y a un débat sur quel serveur HTTP est le meilleur. Je suis également certain qu'il y a une branche de ce débat qui se concentre sur quel serveur est le meilleur pour un Raspberry Pi de framboise. Au moins trois prétendants bien connus, Apache, lighttpd, Nginx, peuvent être installés sur le Raspberry Pi. Il y a probablement une discussion animée sur quel serveur utiliser avec le Raspberry Pi 3 par opposition à une ancienne version de l'ordinateur à carte unique. Je ne souhaite pas participer à cette discussion et je n'ai aucun doute que chacun de ces trois serveurs est acceptable.

    Je décrirai une installation minimaliste de lighttpd sur n'importe quel modèle du Raspberry Pi qui est déjà l'hôte d'un système domotique simplement parce que c'était le dernier serveur HTTP que j'ai installé sur un Raspberry Pi. J'ai trouvé l'installation simple et ça fonctionne.

  5. Installation de lighttpd sur un Raspberry Pi
  6. Pour installer le serveur HTTP lighttpd, tapez la commande d'installation typique.

    pi@domo:~ $ sudo apt-get install lighttpd

    Le serveur sera téléchargé ainsi tous les autres paquets requis. Le serveur sera automatiquement mis en marche et configuré pour démarrer par défaut après un redémarrage.

    Démarrez un navigateur sur un ordinateur de bureau connecté au réseau local et utilisez-le pour rejoindre le nouveau serveur HTTP. Dans mon cas, il se trouve à l'adresse IP suivante: 192.168.0.22. Si tout va bien, vous verrez une page Web qui commence comme suit


    Placeholder page

    The owner of this web site has not put up any web pages yet. Please come back later.

    You should replace this page with your own web pages as soon as possible.
    ...

    Après on peut y lire

    Cependant, en affichant le contenu de /etc/lighttpd/lighttpd.conf on peut voir

    pi@domo:~ $ cat /etc/lighttpd/lighttpd.conf server.modules = ( "mod_access", "mod_alias", "mod_compress", "mod_redirect", # "mod_rewrite", ) server.document-root = "/var/www/html" ...
    que /var/www/html est le véritable chemin du répertoire des documents du serveur.

    En vérifiant le contenu de ce répertoire, on peut confirmer qu'il contient la page vue dans le navigateur.

    pi@domo:~ $ ls /var/www/html index.lighttpd.html

    J'ai décidé de placer l'image binaire du micrologiciel Sonoff de Theo Arends dans un sous répertoire.

    pi@domo:~ $ $ sudo mkdir /var/www/html/bin pi@domo:~ $ ls /var/www/html bin index.lighttpd.html

    Filezilla sera utilisé pour copier les nouvelles versions du micrologiciel vers ce répertoire comme expliqué dans le billet intitulé Gestion du travail avec un Raspberry Pi étêté. J'ai constaté que je devais changer le propriétaire des répertoires pour faire cela. Tout d'abord, j'ai ajouté l'utilisateur pi au groupe www-data et je me suis assuré que ce groupe possédait tous les répertoires et fichiers dans le répertoire racine du serveur HTTP comme suggéré dans la plupart des guides pour L'installation de serveurs HTTP. J'ai également modifié les autorisations des fichiers.

    pi@domo:~ $ sudo usermod -a -G www-data pi pi@domo:~ $ sudo chown www-data:www-data /var/www pi@domo:~ $ sudo chmod 775 /var/www

    Malheureusement, cela ne fonctionnait pas comme je le voulais. Je ne pouvais pas copier des fichiers depuis mon bureau à l'aide de Filezilla. De plus, en travaillant dans le répertoire du serveur HTTP, je devais être l'utilisateur www-data (en utilisant le préambule sudo -u www-data ...). En transférant la propriété du répertoire à l'utilisateur pi

    pi@domo:~ $ sudo chown pi:pi /var/www
    tout fonctionnait comme je le voulais. Une question persiste: est-il nécessaire que pi soit un membre du groupe www-data ?

    C'est tout ce qu'il faut pour activer le mode OTA. Il n'est pas nécessaire d'installer php, MySQL ou autre chose.

  7. Mise à niveau WiFi par serveur HTTP
  8. Cette procédure est assez similaire à ce qui a été montré pour la mise à niveau par téléchargement de fichier. D'abord, compilez le croquis de Sonoff dans l'EDI Arduino pour créer le fichier image binaire. Deuxièmement, copiez ce fichier dans le répertoire du document du serveur HTTP. Troisièmement, utilisez le site Web d'un commutateur Sonoff pour mettre à niveau son propre micrologiciel.

    Les détails de la première étape sont
    1. Démarrez l'EDI Arduino sur l'ordinateur de bureau.
    2. Ouvrir le croquis Sonoff, ~/Arduino/Sonoff-MQTT-OTA-Arduino/sonoff.ino. Pour ce faire, cliquez sur Ouvrir dans le menu Fichier.
    3. Cliquez sur Vérifier/Compiler dans le menu Croquis ou appuyez sur le raccourci clavier Ctrl R pour le compiler vers un fichier binaire.
    4. Gardez l'EDI Arduino ouvert jusqu'à ce que la prochaine étape soit terminée.

    Voici comment le fichier binaire compilé sur l'ordinateur bureau est copié vers le Raspberry Pi exécutant les serveurs Domoticz et lighttpd.

    1. Démarrez Filezilla sur l'ordinateur de bureau.
    2. Connectez-vous au Raspberry Pi.
    3. Désactivez la navigation synchronisée si elle est activée. Ceci peut se faire en appuyant sur l'avant-dernier bouton de la barre d'outils (avec des flèches verte et jaune).
    4. Accédez au répertoire /var/www/html/bin sur le panneau de droite (site distant qui est le Raspberry Pi).
    5. Accédez au répertoire /tmp/arduino_build_xxxxxx sur le panneau de gauche (site local qui est l'ordinateur de bureau).
    6. Double-cliquez sur le micrologiciel, sonoff.ino.bin dans le panneau de gauche, pour le copier sur l'ordinateur distant.

    L'EDI Arduino peut être fermé à ce stade. La dernière étape est presque la même que dans la première section ci-dessus.

    1. À l'aide d'un navigateur sur l'ordinateur de bureau, ouvrez le site Web du commutateur Sonoff visé. Encore une fois, dans cet exemple, son adresse IP est 192.168.0.12.
    2. Cliquez sur le bouton Firmware upgrade (mise à niveau du micrologiciel) comme indiqué dans le panneau de gauche de l'image suivante.
    3. Dans la section Upgrade by web server (mise à niveau par serveur Web) de la page suivante, qu'on peut voir dans le panneau de droite ci-dessus.
      • Assurez-vous que le champs OTA Url contient la bonne adresse du fichier image du micrologiciel sur le serveur HTTP.
      • Cliquez sur le bouton Start upgrade (démarrer la mise à niveau).

    Encore une fois, il sera nécessaire de réinitialiser la configuration pour charger les paramètres modifiés dans user_config.h. Voir la fin de la première section ci-dessus pour les détails.