Salut, je profite de ces jours de confinement pour remettre à jour mon système et surtout terminer ce que j’avais en cours… En particulier l’intégration d’une « sonnette » Ring Doorbell.
(1) Le but :
a) dans mon dashboard, je veux afficher l’état de ma Doorbell (état de la connection au wifi, % batterie et dernier évènement)
b) dans le design que j’utilise comme IHM principale de mon système, je reprends les mêmes info mais je rajoute en plus le dernier enregistrement de la caméra
Ceci me permet de revoir la vidéo de qui à sonné dans le cas ou j’étais absent (et que je n’ai pas répondu depuis mon portable, etc.)
(2) Pré requis :
- un Ring Doorbell (bah oui!)
- un abonnement a un plan de protection. Ceci est nécessaire pour pouvoir récupérer l’enregistrement vidéo. La version Basic (30€/an) suffit !
- plugin script
- plugin virtuel
- connexion ssh sur votre jeedom (pour installer des packages python)
Petite précision : je n’ai mis en place que ce dont j’avais besoin pour ma configuration particulière. Il faudra adapter les choses si vous avez plusieurs Doorbell par exemple, etc.
Ceci dit, ce tuto vous servira de base…
(3) Configuration Ring
Avant toute chose, depuis votre compte sur le site Ring.com, vous devez :
- activer un plan de protection (j’ai pris le Basic).
- activer l’authentification à deux facteurs.
(4) Installation des packages
Il s’agit de mettre en place un script en python 3 qui repose sur le package ring-doorbell.
Donc une fois connecté sur votre machine (RPI, etc.) on commence par installer le package :
sudo python3 -m pip install ring_doorbell
J’ai également créé un répertoire dans l’arborescence de Jeedom dans lequel je vais stocker la video téléchargée depuis les serveurs de Ring
sudo mkdir /var/www/html/video
sudo chown www-data:www-data /var/www/html/video
(5) Création du virtuel pour le dashboard
Voici le détail des commandes du virtuel créé :
(6) Installation du script
Début EDIT DU 05/06/20
Il y a deux méthodes d’installation : la première repose sur le plugin script qui appel de façon régulière un script python. Suite à quelques problèmes liés à l’authentification, j’ai repensé la méthode en passant par un daemon linux autonome, c’est la deuxième méthode (que je vous conseille d’utiliser). J’ai quand même laissé la première méthode décrite ci-dessous pour l’historique et les personnes qui l’ont déjà implémenté et qui n’ont pas encore sauté le pas pour basculer sur la méthode 2.
**Méthode 1 (obsolète)**
Alors j’ai du créer un premier script en python qui va interroger l’API Doorbell, remonter les informations dans le virtuel créé ci-dessus et télécharger la dernière vidéo dans le répertoire créé au point (4). Je ne sais pas pourquoi mais il m’est impossible de lancer ce script via python3, jeedom le lance toujours par python2. Pour ruser, j’ai donc créé un autre script bash qui me permet juste de lancer le script python. Je n’ai pas réussi a faire plus simple avec mon sytème.
(6.1) Bref, il faut donc créer un premier script python (cf fichier attaché). Veillez à bien changer dans le script tous les points qu’il faut configurer par rapport à votre propre installation Jeedom. J’ai « encadrer » tout ça avec des commentaires « TODO » dans le code… En gros il faut configurer :
- L’IP de votre Jeedom et sa clé API (ligne 29)
- Le chemin ou sera stocké le fichier de cache pour l’authentification (ligne 15)
- Le chemin ou sera stocké la vidéo téléchargée (ligne 47)
- Les IDs des commandes du virtuel créé au point (5) (lignes 56,58,68,69,87)
Comme le ficher de cache pour l’authentification n’est pas encore créé, il faut lancer le script à la main (via votre connexion ssh). Il va alors vous demander votre login et password de votre compte Ring.com et le code de validation que vous venez de recevoir par SMS (car vous avez activé l’authentifcation a deux facteurs au point (3) !).
Par sécurité j’ai remis les bons user et groupe au ficher généré :
sudo chown www-data:www-data <chemin vers le fichier ring_token.cache>
ring.py.txt (3,1 Ko)
(6.2) Le second script bash est tout simple, il appelle le script python en utilisant la bonne version de python
#!/bin/bash
python3 /var/www/html/plugins/script/core/ressources/ring.py
Au final, via le plugin script on a ça :
Comme vous pouvez le voir, le script va s’actualiser toutes les 5mins et mettre à jour les info du virtuel associé et télécharger la dernière vidéo disponible.
**Méthode 2 (conseillée)**
Cette 2cd méthode se déroule en 3 étapes :
- installation des scripts
- génération du token d’authentification
- exécution du daemon
(6.1) installation des scripts
Dans le fichier zip ci-joint (à télécharger et à renommer en .zip), vous trouverez deux fichiers :
ring_daemon.zip.txt (3,2 Ko)
- ring_daemon.py
Il s’agit du script principal. Vous devez le modifier afin d’y reporter votre configuration :
"""
Global variables declaration
working_path: full path to the installation folder of this script
cache_file: full path to the authentication token file cache
pid_file: full path to the file that stores the deamon process ID
log_file: full path to the log file for debugging purpose
video_repo: full path to the repository folder where video from Ring.com are downloaded
jeedom_api_url: URL of your Jeedom API
jeedom_api_key: Key of your Jeedom API
jeedom_cmd: array of Jeedom commande Info ID used to update the associated Jeedom widget
"""
working_path = '/var/opt/ring'
cache_file = Path(working_path + "/ring_token.cache")
pid_file = '/var/run/ring_daemon.pid'
log_file = '/var/log/ring_daemon.log'
video_repo = '/var/www/html/video/'
jeedom_api_url = 'http://xxx.xxx.xxx.xxx/core/api/jeeApi.php'
jeedom_api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
jeedom_cmd = {
'service_status' : 1353,
'connection_status' : 4417,
'battery_life' : 1352,
'last_event' : 1354,
}
Je pense que tout est clair à ce niveau…
Une fois modifié, vous devrez le copier sur votre système à l’emplacement que vous avez indiqué dans la variable working_path
.
Installez le package python nécessaire :
sudo python3 -m pip install python-daemon
Afin de faire une première vérification, essayez un python3 ring_daemon.py -h
, vous devriez obtenir ceci :
/var/opt/ring $ python3 ring_daemon.py -h
usage: ring_daemon.py [-h] [-p PID_FILE] [-l LOG_FILE] [--auth]
Ring daemon
optional arguments:
-h, --help show this help message and exit
-p PID_FILE, --pid-file PID_FILE
PID file, usually /var/run/ring_daemon.pid
-l LOG_FILE, --log-file LOG_FILE
Log file, usually /var/log/ring_daemon.log
--auth Login interactively to Ring to generate authentication
token
- ring_daemon.service :
Il s’agit d’un fichier de configuration pour le daemon. Vous devez modifier la ligne suivant afin de pointer sur le script python ci-dessus :
[Service]
ExecStart=/var/opt/ring/ring_daemon.py
Une fois modifié ce script est à copier (en tant que root, via la commande sudo par exemple) dans le répertoire suivant : /etc/systemd/system
(6.2) génération du token d’authentification
Comme vous avez pu le voir dans l’aide du script, afin de générer le token d’authentification dans le fichier de cache, il suffit d’exécuter (attention aux droits de l’utilisateur que vous utilisez) la commande python3 ring_daemon.py --auth
. On vous demandera de renseigner le 2FA code que vous avez reçu après avoir renseigné votre login et mot de passe Ring.
(6.3) exécution du daemon
Une fois le fichier de cache généré, vous pouvez exécuter le script en tant que daemon :
systemctl enable ring_daemon.service
vous permet de lancer le daemon au boot de votre RPIsystemctl start ring_daemon.service
vous permet d’exécuter le daemonsystemctl stop ring_daemon.service
vous permet d’arrêter le daemon
Fin EDIT DU 05/06/20
(7) Création du Design
La vidéo est visualisée à l’aide d’un élément du type texte/html et de la balise vidéo :
<video width="320" height="180" controls poster="montheme/images/ring.png">
<source src="http://192.168.2.140/video/last_ding.mp4" type="video/mp4">
Your browser does not support the video tag or the file format of this video.
</video>
J’ai juste fait référence au fichier vidéo téléchargé par le script et configuré une image « poster » qui est affichée lorsque le lecteur n’est pas en mode play.
Et voilà, j’espère avoir été clair, ne rien avoir oublié dans les étapes et si ça peut aider certains d’entre vous … ben tant mieux
Pour terminer voici les liens utiles à la réalisation de ce tuto…