MagicMirror², on recommence depuis le début

Récemment, j’ai écrit un article pour installer mon MagicMirror². Ce tutoriel est tout à fait fonctionnel. Malheureusement, pas dans mon cas car j’avais des versions de packages trop anciennes (cf. node.js). Je vais vous expliquer comment j’ai remédié à cela. :-)

J’ai acheté mon Raspberry Pi en juin 2016. J’en avais fait l’acquisition pour tester Gladys. A cette période, la version 2 de Gladys sortait des cartons et avaient peu de plugins pour agrémenter le tout.
Je l’ai donc laissé un peu de côté en attendant le bon moment pour réaliser mon deuxième projet pour ce petit bijoux.

Incompatibilité

J’avais installé toutes les librairies nécessaires pour Gladys et elle-même également. Or, ces versions sont conflictuelles avec ce que MagicMirror² désire. Je vais être honnête, ça me prendrait plus de temps de désinstaller chaque composant plutôt que de refaire la carte SD à partir de l’image de Raspbian fourni par raspberry.org.

Recommençons

Le premier point est de refaire la carte SD avec l’image 2018-04-18-raspbian-stretch issue du site officiel. Cela aura pour effet de repartir de zéro.

Cela fait, on remet la carte SD dans le Raspberry PI pour un redémarrage. Ce dernier point se passe quand même rapidement. Il n’y a pratiquement rien à faire. Les choses sont bien ficelées.

Installation de packages

Il est nécessaire d’installer quelques petits packages pour assurer leur disponibilité au moment voulu :

sudo apt-get install git zip unzip curl wget

Oui, ce n’est pas vraiment nécessaire avec une installation fraîche. Toutefois, cette action permettra de mettre tout le monde au même niveau.

Mise à jour des packages

Comme dans le précédent tutoriel, j’ai mis à jour les packages et le firmware :

sudo apt-get update; sudo apt-get upgrade; sudo apt-get autoremove; sudo rpi-update; sudo apt-get clean

A la fin de cette ligne, je vide le cache puis un redémarrage : sudo reboot

Installation de Node et MagicMirror²

Le redémarrage étant fait, on va maintenant lancer les scripts initiaux :
Node.js

wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | sudo bash
node -v

MagicMirror²

bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)"

J’ai vu qu’une branche develop était présente et des commits sur cette branche réglaient quelques bugs. Alors, je passe à cette branche :

cd ~/MagicMirror/
git checkout -b develop
git pull

Après cela, on peut lancer l’installation :

npm install

Tout s’est bien passé pour mon installation. Cool.

Installation des modules

Pour mes besoins actuels, j’utilise les modules suivants :

Le principe d’installation est le même pour tous les modules :

cd ~/MagicMirror/modules/
git clone https://github.com/user/mmm-nom-module

Soit :

cd ~/MagicMirror/modules/
git clone https://github.com/tataille/MMM-FreeBox-Monitor.git
git clone https://github.com/spectroman/mmm-moon-phases.git
git clone https://github.com/edward-shen/MMM-page-indicator.git
git clone https://github.com/edward-shen/MMM-pages.git

Pour le reste, la configuration des modules se fait dans le fichier ~/MagicMirror/config/config.js

Configuration du fichier config.js

Comme le demande la documentation de MagicMirror², on doit copier ~/MagicMirror/config/config.js.sample vers ~/MagicMirror/config/config.js
Cela dit… Je ne vais pas faire ça. :-D

En effet, je vais faire en sorte d’avoir une version du fichier config.js qui soit versionnée sur un git.
Comme tout projet git, il n’est pas possible de cibler sur un fichier purement et simplement (comme le ferait svn par exemple). De ce fait, j’ai créé sur Gitlab.com un projet qui sera en mode privé.

On peut nommer ce projet "magicmirror_config" pour faire simple.
Depuis le terminal, je tape les lignes suivantes :

cd ~/
git clone https://gitlab.com/user/magicmirror_config.git

Maintenant, je crée un lien symbolique dans ~/MagicMirror/config/ pointant vers ~/magicmirror_config/config.js

cd ~/MagicMirror/config/
mv config.js config.js.old
ln -s ~/magicmirror_config/config.js config.js

Par la même occasion, j’ai fait la même chose avec le fichier ~/MagicMirror/css/custom.css. Pratique pour personnaliser son affichage graphiquement.

cd ~/MagicMirror/css/
mv custom.css custom.css.old
ln -s ~/magicmirror_config/custom.css custom.css

Démarrage automatique de MagicMirror²

Comme indiqué dans https://github.com/MichMich/MagicMirror/wiki/Auto-Starting-MagicMirror, il est possible de lancer automatiquement MagicMirror² au démarrage. Pour cela, il est nécessaire d’installer PM2 sur la machine.
Le script d’installation de MagicMirror² le fait. Mais j’ai eu un souci que je ne saurais identifier pour le moment. Je verrai cela plus tard.

Le script a bien installé pm2 mais n’a pas fait les liens symboliques pour ce stretch. Cela se trouve dans /opt/nodejs/bin/.
Sur stretch, on fait un lien vers /etc/alternatives/ puis de là, un lien dans /usr/bin/.
Voici le code à taper dans Terminal :

sudo ln -s /opt/nodejs/bin/pm2 /etc/alternatives/pm2
sudo ln -s /etc/alternatives/pm2 /usr/bin/pm2
sudo ln -s /opt/nodejs/bin/pm2-dev /etc/alternatives/pm2-dev
sudo ln -s /etc/alternatives/pm2-dev /usr/bin/pm2-dev
sudo ln -s /opt/nodejs/bin/pm2-docker /etc/alternatives/pm2-docker
sudo ln -s /etc/alternatives/pm2-docker /usr/bin/pm2-docker
sudo ln -s /opt/nodejs/bin/pm2-runtime /etc/alternatives/pm2-runtime
sudo ln -s /etc/alternatives/pm2-runtime /usr/bin/pm2-runtime

Créer un fichier de démarrage de MagicMirror²
Pour nous simplifier la tâche, il est conseillé de créer un fichier bash :

cd ~
nano mm.sh

Puis d’ajouter les lignes suivantes :

cd ~/MagicMirror
DISPLAY=:0 npm start

On enregistre le tout. Puis on le rend exécutable.

chmod +x mm.sh

Démarrer MagicMirror² avec PM2

C’est vraiment tout simple :

pm2 start mm.sh

Activer le démarrage du script
On doit être sûr que le script soit lancé au démarrage. Pour cela, on sauvegarde les réglages actuels de PM2 :

pm2 save

Contrôler son MagicMirror² via PM2

Avec MagicMirror fonctionnant via PM2, on dispose d’outils pratiques :

Redémarrer MagicMirror

pm2 restart mm

Arrêter MagicMirror

pm2 stop mm

Afficher les logs MagicMirror

pm2 logs mm

Afficher les informations sur le processus MagicMirror

pm2 show mm