Accueil / Domotique / Domoticz / Tester des logiciels domotique sur Raspberry Pi 3 grâce à Docker

Tester des logiciels domotique sur Raspberry Pi 3 grâce à Docker

Nous avons vu dans l’article précédent comment installer et le Docker Toolbox pour tester des logiciels domotique simplement sur Mac et PC. Maintenant que Docker est supporté officiellement par la fondation Raspberry, il est très facile de l’installer. Nous allons en profiter pour tester quelques logiciels domotique. Pour réaliser cet article, j’ai suivi le tutoriel d’Alex Ellis.

Préparer le Raspberry

Matériel et logiciels nécessaires

Pour faire fonctionne Docker correctement, il est recommandé d’utiliser un modèle B 2/3 ou un Pi Zero (si vous avez la chance d’en posséder un !).

Allez récupérer Raspbian Jessie Lite ici. La version Lite est suffisante pour faire fonctionner Docker. Elle n’inclut aucune interface graphique.

Si vous ne l’avez pas encore, récupérez etcher ici.

Préparer la carte SD

Que vous soyez sur Mac ou PC, le plus facile est d’utiliser etcher (tutoriel si besoin) pour préparer la carte SD.

Configurer le Raspberry Pi 3 (WiFi, clavier, langue…)

Si vous avez un Raspberry Pi 3, suivez ce tutoriel pour configurer correctement votre Raspberry Pi.

Installer Docker

Maintenant que nous avons un Raspberry correctement configuré, il ne reste plus qu’à installer Docker. Une seule ligne sera nécessaire.

curl -sSL get.docker.com | sh

Soyez patient, il faut déjà télécharger Docker puis l’installer sur le Raspberry. Comptez environ 10 minutes. Si tout s’est bien passé, vous devriez avoir le rapport d’informations.

Vérifions que Docker fonctionne correctement en saisissant la commande suivante dans le Terminal.

docker version

Maintenant on va permettre à Docker de démarrer automatiquement à lancement du Raspberry.

sudo systemctl enable docker

Si vous souhaitez ajouter d’autres utilisateurs au Pi, exécutez cette commande

sudo usermod -aG docker pi

On pourrait lancer manuellement le deamon Docker mais j’ai rencontré des problèmes lors de mon test. Je vous conseil donc de faire un reboot.

sudo reboot

Voilà, Docker est prêt.

Trouver des images rpi à installer

Vous pouvez trouver des images Docker pour Raspberry sur github, mais le plus facile est encore d’aller sur le hub officiel.

Le Raspberry étant basé sur un processeur ARM, les images doivent inclure des sources adaptées pour celui-ci. Pour les identifier plus facilement, les images sont pré-fixées rpi (ou armhf). Saisissez simplement rpi dans le champ de recherche. Il y en a un peu plus de 2000 au moment de l’écriture de cet article. C’est le moment de voir comment ça fonctionne sur un exemple concret. Nous allons installer et tester 2 logiciels domotique Jeedom et Domoticz.

Test de l’image Docker Jeedom

De même que sur Mac et PC, nous allons devoir installer une image de mysql ainsi qu’une image de Jeedom adaptée au Raspberry. J’ai suivi les instructions de sbeuzit disponibles ici (en Anglais).

On commence par installer l’image rpi-jeedom-data pour permettre de stocker de manière permanente les données de la base mysql.

sudo docker pull sbeuzit/rpi-jeedom-data
sudo docker run --name jeedom-data sbeuzit/rpi-jeedom-data

Puis on installe la base mysql. Remplacez MOT_DE_PASSE_MYSQL par votre mot de passe (il vous sera nécessaire pour configurer la connexion à la base de données dans Jeedom).

sudo docker pull hypriot/rpi-mysql
sudo docker run --name jeedom-mysql -e MYSQL_ROOT_PASSWORD=MOT_DE_PASSE_MYSQL --volumes-from jeedom-data -d hypriot/rpi-mysql

Enfin on installe le container Jeedom. Avant d’executer la commande, changez l’adresse Mac par celle de votre Raspberry. Vous pouvez l’obtenir facilement avec la commande ifconfig. Elle se trouve à droite de HWaddr.

sudo docker run -d --link jeedom-mysql:mysql --name jeedom --mac-address="xx:xx:xx:xx:xx:xx" -p 80:80 -p 8083:8083 -p 443:443 sbeuzit/rpi-jeedom

Si vous avez un appareil connecté, par un exemple une clé Zwave.me ou RFXCom, vous pouvez spécifier le chemin du device à exposer au container. Pour cela ajoutez –device=/dev/ttyACM0:/dev/ttyACM0.

Si vous voulez que tous ces containers démarrent automatiquement au démarrage du Pi, ajouter l’option –restart=always à chaque docker run.

Avant d’aller plus loin, vérifions que tous les containers sont bien lancés avec la commande sudo docker ps -a. L’option -a permet d’afficher en détail la liste de container et connaitre l’état et l’identifiant.

jeedom-docker-ps-a-liste-container-raspberry-pi-3
Liste de containers à l’aide de la commande docker ps -a (état, id, nom)

Avant de terminer l’installation de Jeedom, il nous faut connaitre l’adresse ip de la base de données mysql. Exécutez la commande suivante en remplaçant ID_CONTAINER par l’id trouvé avec la commande ps ou simplement par jeedom-mysql.

docker inspect ID_CONTAINER

Dans la section NetworkSettings, vous trouverez l’adresse ip de la base de données à la clé IPAddress.

jeedom-docker-adresse-ip-mysql
Récupérer l’adresse ip de mysql

Une autre solution consiste à « rentrer » dans le container et faire un ping sur le container mysql

docker exec -ti jeedom bash
  puis
ping jeedom-mysql

Ctrl + C pour arrêter le ping. Exit pour sortir du container.

Nous pouvons maintenant ouvrir un navigateur et saisir l’adresse suivante dans l’url

http://IP_PI_JEEDOM:8083

On arrive à la page de connexion à la base de données mysql. Remplissez les champs en fonction de votre configuration :

  • Database hostname : remplacez localhost par l’adresse ip de la machine mysql précédemment trouvée
  • Database port : ne rien changer (sauf modification de votre part)
  • Database username : laisser root
  • Database password : celui que vous avez choisi pour la clé MYSQL_ROOT_PASSWORD
  • Database name : jeedom
jeedom-docker-configuration-mysql-raspberry-pi-3
Configuration de la connexion à la base de données mysql

Appuyez sur Proceed. Jeedom va terminer la configuration et probablement faire une ou deux petites mises à jour au passage.

jeedom-installation-terminee-docker-raspberry-pi-3
Bienvenue sur Jeedom sur Raspberry Pi 3 fonctionnant avec Docker

Et voilà un Jeedom parfaitement fonctionnel !

Tester l’image Docker de Domoticz pour rpi

Installez l’image de Domoticz pour Raspberry. Cette image s’installe et fonctionne très bien.

Ensuite, configurez la commande docker run qui correspond à votre configuration

docker run -v /etc/localtime:/etc/localtime -v /SOMEPATH/domoticz.db:/root/domoticz/domoticz.db:rw -p 8080:8080 --name domoticz --restart=always -d allardvdb/rpi-domoticz

Quelques explications (en détail ici) :

  • docker run -d allardvdb/rpi-domoticz : la commande docker run habituelle
  • –restart=always : permet de relancer le container après un redémarrage du Raspberry (optionnel)
  • -v /etc/localtime:/etc/localtime : Utilise le temps de la machine hôte (optionnel)
  • --device=/dev/ttyUSB0 : expose au container l’appareil relier sur le port USB /dev/ttyUSB0 du raspberry (optionnel)
  • -v /CHEMIN/domoticz.db:/root/domoticz/domoticz.db : pour utiliser une sauvegarde d’un ancien Domoticz (optionnel)
  • -p 8080:8080 expose le port 8080 du container sur le port 8080 du Raspberry (attention à ne pas utiliser un port déjà utilisé par autre chose)

Pour cet article, cela donne

docker run -p 8080:8080 --name domoticz --restart=always -d allardvdb/rpi-domoticz

Ouvrez maintenant un navigateur et saisissez

http://IP_RPI_DOMOTICZ:8080

Et voilà, Domoticz est parfaitement fonctionnel. Vous pouvez voir au passage que Jeedom et Domoticz fonctionnent (sans rien faire !) sur le même Raspberry sans aucun problème. La magie de Docker !

domoticz docker rapsberry pi3

Quelques astuces pour utiliser Docker

Voici en vrac quelques commandes très utiles pour utiliser Docker facilement dans le cadre d’une box domotique.

Commande Explication option utile
docker ps -a Permet de lister les containers et connaitre leur statut
docker run Créé un container –restart=always : permet de lancer le container automatiquement au démarrage. Pratique pour un serveur domotique !

–device : pour exposer un appareil relié au Raspberry et pouvoir l’utiliser dans le container

docker start NOM Démarre le container
docker stop NOM Arrête le container
docker rm NOM Efface le container (et toutes les données)
docker inspect NOM Permet de récupérer des infos, par exemple l’adresse ip d’une base de données mysql