Cet article a été rédigé avec soin par Jonathan Braley.

Il s’appelle comme moi, mais il a un oiseau sur l’épaule, il ne faut pas nous confondre !

photo Jonathan Braley

On ne présente plus la domotique, nous l’avons fait précédemment.

Trois années se sont écoulées depuis la mise en place mouvementée de la domotique chez moi pour le contrôle de mes volets. Pendant tout ce temps, j’ai bien tenté d’installer Zoneminder pour gérer les caméras, mais ça n’a jamais voulu fonctionner via l’installation docker.

Ayant peu de temps et toujours un nouveau jeu qui sortait à tester, j’ai un peu délaissé les nouvelles installations. Mais en bon devops, j’ai toujours continuer les mises à jour de ma Debian, en faisant plusieurs sacrifices et en espérant que le conbee reparte à chaque fois. En 3 ans, j’ai fini par prendre la confiance. Et donc lorsque j’ai eu enfin le temps de me relancer dessus, j’ai fait l’erreur de croire que tout se passerait bien. Pourtant, je devrais savoir que dans le monde merveilleux de l’informatique, il se cache toujours un monstre …

Le front end c’est un monde magnifique, le back end est un abysse noir abritant des monstres

Lorsque tout fout le camp

Gonflé à bloc, j’ai décidé de faire l’update de ma Debian buster vers une bullseye. Et c’est là que tout est allé de travers…

J’ai d’abord fait une backup des différentes configurations pour les dockers. Pour le dongle conbee, je n’ai normalement rien à faire car il mémorise les équipements auxquels il a été connecté.

Je commence donc ensuite la mise à jour de l’OS, je mets à jour apt, et je lance l’upgrade. Jusque là tout se passe bien, la mise à jour des paquets marche, le système se met à jour et voilà, j’ai une Debian bullseye. Mais forcément, la domotique ne fonctionne plus, comme on aurait pu s’y attendre, et pire la Debian freeze. Un premier restart puis un second. Rien n’y fait, le serveur continue de freeze. Je fais des checks, tente de voir si certains paquets ne sont toujours pas à jour. Et là, révélation, apt est cassé, je n’ai pas accès aux repos et le système ne répond plus.

Y a-t-il un pilote dans l’avion, pilote qui transpire à grosse goutte

Bon, tant pis, entre une mise à jour et une réinstallation il n’y a pas de grande différence, donc je me lance dans une réinstallation. Je télécharge la dernière Debian, crée une clé usb bootable et lance l’installation. Première étape ok. Deuxième étape, on prépare les disques et on lance l’installation. Huit heures plus tard, l’installation tourne toujours et elle reste bloquée à une étape. C’est peut être la net install qui n’est pas bonne. On télécharge l’iso complète et on recommence. Erreur à l’installation, je n’ai plus le message d’erreur en tête mais l’erreur semble en rapport avec l’installation 64bit. Je me résous donc à télécharger une Debian i386 et l’installation fonctionne.

Il est donc maintenant temps de préparer l’installation des composants et de remettre le repository pour phoscon et là patatra… Il n’existe plus de version debian du repository phoscon ! Il existe une version raspbian, une version Ubuntu qui ne fonctionne évidemment pas sur Debian, mais plus de Debian… Et presque 2 ans après la sortie de bullseye, la réponse des mainteneurs du repo laisse penser que cela ne changera pas de sitôt.

Ordinateur qui à pris la poussière, qui est plein de toiles d’araignées

Roll back

J’ai perdu le contrôle des volets depuis 24h et tout semble vouloir m’empêcher de faire la mise à jour.

Il ne me reste plus que quelques idées pour récupérer la domotique rapidement :

  • mettre à jour le NUC et séparer l’installation du phoscon
  • passer sous ubuntu mais pour un serveur, comme beaucoup de monde je préfère Debian
  • on roll back sur buster vu qu’on sait que ça fonctionne

La première solution n’est pas réalisable. Je n’ai pas le matériel et je ne souhaite pas attendre que quelque chose arrive sur le marché pour pouvoir contrôler les volets, avec toujours pour idée de limiter les coûts.

La seconde solution parle d’elle-même. Pour moi, Ubuntu est surtout à utiliser pour une workstation. Ce n’est pas comme si j’avais des problèmes de stabilité sur des systèmes stables…

Je n’ai plus d’autre choix que de repasser sur buster.

Je prends donc ma machine à remonter le temps et je réinstalle mon NUC exactement comme il était un peu plus de 24h auparavant. En une heure et quelques redémarrages pour que le conbee soit pris en compte, j’ai de nouveau le contrôle des volets.

Doctor Who, tardis dans l’espace

Maintenant que ça marche on continue

Ayant toujours du temps et étant revenu sur quelque chose de stable, j’ai décidé de tester les détecteurs de mouvement que j’avais commandés 3 ans auparavant.

Alors que je m’attendais à ce que soit compliqué, la mise en place du premier détecteur sur le conbee n’a pris que quelques secondes. Il s’est connecté pratiquement immédiatement et il a été détecté par HomeAssistant (HA) aussi rapidement.

J’ai donc pu mettre en place des scénarios faisant s’ouvrir les volets d’une pièce lorsque le détecteur de mouvement de cette pièce se déclenche.

Control room image

Finaliser l’installation des outils

Maintenant que l’installation est fonctionnelle, on peut reprendre l’installation de Zoneminder et je suis maintenant déterminé à comprendre pourquoi l’installation Docker ne fonctionne pas. Je passe donc un certain temps ( quelques heures… ) à lire les différents posts à propos de la version Docker. Et surprise, en creusant, j’ai pu trouver un bon nombre de personnes ayant le même souci mais aucune solution pour réussir à le faire fonctionner sauf peut-être d’avoir le docker network en Host.

Comme je n’ai pas envie de configurer d’outils non liés à HA en network host, j’ai donc abandonné l’installation Docker de Zoneminder et j’ai directement fait l’installation sur le NUC. Bien entendu, ça a demandé quelques modifications de configuration pour Apache dont les ports entraient en conflit avec la configuration du HA.

Et enfin, Zoneminder fonctionne, j’ai accès à l’interface. Il faut maintenant réussir à connecter des caméras de surveillance dessus et à gérer l’enregistrement.

big brother is watching you

On s’équipe

C’est parti, j’achète le matériel, tout ce qu’il faut pour mettre en place la vidéo surveillance et les alarmes. Je pars sur du matériel pas cher et dépense environ 300€. J’investis dans 2 caméras Imou life, des détecteurs de mouvement, une alarme et des badge bluetooth nutale.

J’ai été obligé de changer la caméra que je possédais jusque là car les instructions sont en chinois et que je ne les trouve pas en français ou en anglais.

Une fois tout l’équipement arrivé, il est temps de faire l’installation.

Homer et Bart Simpsons, en train de faire les courses

Vidéo surveillance

J’ai 2 caméras Imou2 à installer, une pour surveiller la pièce principale de mon appartement qui va être connectée à Zoneminder et une pour surveiller mes animaux qui restera connectée et accessible uniquement sur l’application Imou life.

La première étape est de faire l’installation de la caméra sur Zoneminder. Pour cela, on ajoute un moniteur auquel on va tout d’abord donner un nom puis sur lequel on ajoute dans la source la configuration rtsp, protocole vidéo pour les caméra de surveillance. La configuration rtsp peut se trouver sur les forums de Zoneminder, ils ont des exemples en fonction des marques et parfois même plus précisément sur les modèles.

On ajoute aussi la configuration ONVIF si la caméra est compatible avec ce protocole et ça fonctionne ! Le Zoneminder me permet de voir le flux vidéo de la caméra et l’enregistre. Bon, ça aurait été trop beau si tout fonctionnait proprement du premier coup. Lorsque l’on lance le flux vidéo, l’enregistrement mange tout le CPU et la RAM. N’y connaissant rien, je teste certains points mais n’arrive pas à aboutir à ce que je veux, il est temps de retourner sur les forums.

Ordinateur portable en feu

Configuration vidéo

Après une après-midi de recherche, je modifie ces premiers points de configuration :

  • la configuration du buffer de Zoneminder : en diminuant les paramètres et le nombre d’images en buffer, on permet de limiter la consommation de RAM. Dans la configuration de base, il consomme toute la mémoire et la SWAP.
  • ensuite il faut diminuer la capture-resolution dans la configuration Source de Zoneminder. Il faut au préalable modifier les paramètres de la caméra, sur l’Imou2 il faut utiliser un utilitaire : SMARTPSS, qui permet de reconfigurer la caméra et donc de changer la qualité de capture.
  • diminuer les FPS de capture de la caméra pour le mettre à la même taille que le buffer, afin de ne pas demander à Zoneminder de faire des opérations supplémentaires.

Homer simpsons, We’ve been watching you on the surveillance camera

Enregistrement des vidéos

Maintenant il faut configurer Zoneminder pour enregister les vidéos. Bien entendu, cela pose de nouveaux problèmes :

  • Rétention : pouvoir conserver les vidéos un certain temps. Légalement, les sociétés ne peuvent conserver les vidéos que 30 jours mais lorsque l’on filme chez soi cela ne s’applique pas.
  • Accessibilité : les vidéos doivent être consultables facilement en ligne.
  • Prévenir la coupure : il faut que les vidéos soient accessibles même dans le cas d’une coupure électrique.
  • Le coût de l’enregistrement : par défault, Zoneminder enregistre par événement qui débute lorsque l’enregistrement commence et s’arrête lorsque son état change et qu’il doit arrêter l’enregistrement ou qu’on arrête manuellement l’événement. Cela crée des fichiers en 2 formats, des images jpeg et un film mp4. Le nombre d’images augmentant à grande vitesse, cela prend énormément de place.

J’ai donc vérifié parmi les options de Zoneminder. Elles sont assez limitées, l’enregistrement peut se faire en local, en utilisant un ftp ou en uploadant sur AWS S3. Comme je préfère GCP, j’ai crée un bucket pour enregistrer les vidéos. Il reste juste un point qui me dérange : je n’ai pas envie de récupérer tous les jpeg créés quand un événement est déclenché et reste en cours, et on ne peut upload le mp4 qu’à la fin de l’événement.

Après un peu de recherche, j’ai remarqué qu’on peut forcer la création de nouveaux événements au changement de state du Zoneminder.

Pour cela, j’ai donc créer deux states, HOME qui met le Zoneminder en pause et coupe les enregistrement et SECURITY qui l’allume et lance l’enregistrement lorsque la caméra envoie les données.

En utilisant la ligne de commande en bash, on peut forcer le changement de state pour couper puis changer à nouveau le state pour reprendre l’enregistrement. Cela engendre des coupures de quelques secondes mais ça nous permet de gérer et modifier la durée des vidéos comme on le souhaite avant d’envoyer le mp4 généré par Zoneminder sur le cloud.

Avec ma solution, je coupe le Zoneminder grâce à un cron qui tourne toutes les minutes, envoie la donnée et reprend l’enregistrement. C’est un peu industriel et sale mais ça a le mérite en cas de coupure d’électricité de potentiellement récupérer et envoyer des vidéos d’une courte durée sur GCP et pas sur le NUC donc même si il est volé, je conserve le flux vidéo.

Pour ceux qui serait intéressés, voilà mon script un peu sale :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    #!/bin/bash
    set -e
    
    # Moving to folder
    rootFolder="/var/cache/zoneminder/events/2"
    cd $rootFolder
    
    # Is there multiple days of datas?
    days=$(ls)
    dayscount=$(ls | wc -l)
    date=$(date +'%m-%d-%Y')
    
    # Checking if there is datas in folder.
    if [ "$dayscount" == "0" ];then
      echo "There was nothing to move" >> /var/log/zm_video.log
      exit 0
    fi
    
    # Forcing zoneminder to create a new event id
    zmpkg.pl home
    zmpkg.pl security
    
    i=1
    
    for day in $days; do
      if [ $i != $dayscount ]; then
        # check if there is data in the previous day
        cd $day
        if [ $(ls | wc -l) == 0 ];then
          cd ..
          echo "removing $day"
          rm -rf $day
        else
          for folder in $(ls); do
            gcloud storage cp $rootFolder/$day/$folder/$folder-video.mp4 gs://NOM_BUCKET/
            echo "removing $folder from $day"
            rm -rf $folder
          done
          cd ..
          echo "removing $day"
          rm -rf $day
        fi
      fi
      i=$[i + 1]
    done
    
    #moving to current day
    lastDay=$(ls)
    cd $lastDay
    
    # Uploading the previous event id
    list=$(ls)
    listcount=$(ls | wc -l)
    
    i=1
    declare -a folderlist
    
    for folder in $list; do
      if [ $i != $listcount ] || [ $listcount == 1 ]; then
        gcloud storage cp $rootFolder/$lastDay/$folder/$folder-video.mp4 gs://NOM_BUCKET/
        rm -rf $folder
      fi
      i=$((i+1))
    done
    
    if [ $listcount == 0 ]; then
      cd ..
      rm -rf $lastDay
    fi

Image de ciel nuageux

Détection d’intrusion

J’ai mis en place des détecteurs de mouvements à plusieurs emplacements de la maison et sur certaines fenêtres des capteurs d’ouverture. J’ai aussi ajouté une alarme qui se déclenche dans le cas où les détecteurs seraient déclenchés et que nous ne sommes pas présents.

Présence

J’ai acheté des badges bluetooth nutale qui servent normalement à retrouver ses clés et qui arrivent par paquet de 4 pour moins de 30 euros. Une fois le badge paramétré, il faut configurer bluetooth_le_tracker dans HA, cela ne peut se faire qu’en modifiant la configuration yaml de HA.

Je pensais clairement que ça allait suffire pour me permettre de voir les badges et de les ajouter dans mes automations HA. Mais contrairement aux autres produits HA, le bluetooth tracker n’apparaît pas dans les Devices & Services. Pour les rendre visibles, il faut lister les entities et chercher nutale, qui sera bien présent dans la liste si l’option track_new_devices est définie à true. Dans le cas contraire, vous devez remplir un fichier known_devices.yaml avec ces informations :

1
2
3
4
5
6
nutale_2:
  name: nutale_jonathan
  mac: RENSEIGNER LA MAC DU DEVICE, POUR NUTALE ELLE SE TROUVE DANS L'APPLICATION TELEPHONIQUE
  icon:
  picture:
  track: true

infographie d’illustration, alerte détecté

Les soucis du bluetooth

J’ai mis beaucoup de temps à finaliser cet article à cause de cela. Au début tout se passait bien avec la domotique, mais rapidement nous avons eu des soucis de détection des badges. J’ai bidouillé tellement de choses pour arriver à le faire marcher correctement que je n’ai plus aucune idée de que j’ai pu faire.

Lorsque la détection Bluetooth a été enfin fixée, un nouveau souci est apparu. J’habite dans un appartement avec un couloir et forcément j’ai un gros mur en béton tout le long du couloir et le récepteur Bluetooth de HA n’arrive pas à aller jusqu’à mon entrée où l’on pose les clés, sur lesquelles sont fixés les badges. Une fois l’alarme installée, le cauchemar a commencé, l’alarme se déclenchait n’importe quand, les caméras aussi alors que tout devait fonctionner correctement.

Après beaucoup de recherches et des posts sur les forums, j’ai fini par acheter un Atomlite (second appareil du lien qui suit) compatible avec HA pour faire proxy bluetooth, la documentation. L’appareil est petit, discret et ne coûte rien sur Aliexpress, installer dans l’entrée c’est lui qui détecte maintenant la présence des badges lorsqu’on entre et qui semble fixer le souci du couloir empêchant la détection.

Autre avantage à avoir délégué la détection bluetooth : mes précédents soucis de détection ne m’inquiète plus ayant maintenant un appareil dédié.

Alertes

Maintenant il ne reste plus qu’à tout lier ensemble : détecteurs, alarme, caméra et badge bluetooth. On peut créer des automations sur HA facilement pour changer les comportements en fonction des événements. Enfin, quand je dis facilement, l’alarme s’est quand même déclenchée les premières fois qu’un badge est sorti du périmètre de détection.

J’ai découvert que certaines conditions HA ne fonctionnent pas correctement. A leur remplissage, on peut faire une liste de conditions à la suite avec des options pour faire des AND/OR logiques et les AND ne fonctionnent pas correctement. Il vaut mieux privilégier de lister les conditions les unes après les autres ou d’avoir un simple OR logique qui lui fonctionne.

lumière d’alerte, rouge

Informer les gens sur la présence de l’alarme

Lorsque vous installez de la domotique avec vidéo-surveillance et une alarme, vous pouvez afficher sur votre porte une pancarte pour prévenir de la présence des équipements. Avec de la chance, elle dissuadera les voleurs éventuels de rentrer chez vous, qui préféreront renoncer ou aller visiter votre voisin.

Vous n’avez par contre aucune obligation de l’indiquer tant que seules les parties privatives sont filmées et enregistrées (https://www.cnil.fr/fr/la-videosurveillance-videoprotection-chez-soi).

panneau, danger champ de mines

Prévention des coupures

Maintenant que tous les services tournent, il faut s’assurer que lors d’une coupure électrique ou d’un reboot de la machine, tous les services repartent. C’est à dire :

  • Démarrage du phoscon, normalement c’est un service qui est enabled donc c’est bon
  • Démarrage de Zoneminder, c’est aussi un service donc nous sommes couvert
  • Démarrage du HA et des services de proxy qui tournent sous docker, c’est cette partie là que nous devons couvrir.

Pour cela, la méthode la plus sûre est d’avoir un service dans systemd qui se lance au démarrage de la machine et exécute un script pour lancer les différents service docker.

Le systemd est assez facile:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
    [Unit]
    Description=Run once
    After=local-fs.target
    After=network.target
    After=docker.service

    [Service]
    ExecStart=/opt/restart_domotique.sh
    RemainAfterExit=true
    Type=oneshot

    [Install]
    WantedBy=multi-user.target

Dans ce systemd on vérifie que Docker est bien démarré puis on exécute un script qui lance les docker-compose up -d pour lancer les services que l’on utilise.

Les Simpsons, les lumières de Springfield qui clignottes

Conclusion

La domotique est-elle vraiment à la portée de tous le monde ?

Mon idée sur la question est qu’il est possible pour tout le monde d’utiliser la domotique si on possède un budget assez conséquent pour acheter un boitier domotique clé en main. Mais il se pose à mon humble avis des questions de sécurité pour la mise à jour de ces boîtiers et beaucoup ne sont compatibles qu’avec certains équipements dont les prix ne sont pas forcément bas.

Si quelqu’un est motivé avec des connaissances de base et un peu d’argent à investir, il est possible d’installer la domotique chez soi. Le mieux est d’avoir des connaissances en système pour la maintenance et plus générales en informatique pour le dépannage. Même dans ce cas là, il est fort probable que certaines parties demandent d’apprendre de nouvelles compétences.

La domotique est donc tout de même limitée aux motivés ayant des connaissances informatiques ou très très motivés sans connaissances de base ni budget mais beaucoup de temps à y consacrer.

Le seigneur des anneaux, It’s gone, It’s done