[Tutoriel] Integration Ring Doorbell

oui, j ai vu ce matin , car nouvelle mise a jour du plugin script (bizarre 2 jours de suite ) :slight_smile:

14/05/2020

  • Correction d’un bug sur la mise à jour des commandes info suite à une action
  • Déplacement des scripts de core/ressources dans data (mise à jour importante à faire et si elle n’est pas faite pourra causer la perte de tous les scripts lors des futurs mises à jour du core)

@chiorboli merci @toi … effectivement problème de droit… je vais pouvoir poursuivre :slight_smile:
Merci beaucoup

1 « J'aime »

Bonjour à Tous et surtout merci à chiorboli pour ton travail;
Je suis vraiment novice mais grâce à ton tuto je m’en suis pas si mal sorti que ça.

J’ai juste un souci au niveau du script qui se lance toutes les 5 minutes pour télécharger les nouveaux éléments.
Lors du premier lancement manuel, j’ai réussi à avoir le fonctionnement normal mais lorsque je veux créer le script sous jeedom j’ai le message d’erreur suivant:
script Erreur pour [Systèmes][script Ring][Etat] : Erreur sur python /var/www/html/plugins/script/data/ring.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/ring.py », line 3, in from pathlib import Path ImportError: No module named pathlib

Quelqu’un peut-il me mettre sur la piste?
merci d’avance.

bon, je me répond.
je suis vraiment un boulé… je n’avais pas créé le ring.sh :disappointed:
j’ai maintenant des problèmes de droit:
Erreur sur /var/www/html/plugins/script/data/ring.sh 2>&1 valeur retournée : 126. Détails : sh: 1: /var/www/html/plugins/script/data/ring.sh: Permission denied

Après avoir rétabli les droits et avoir redémarré jeedom tout est rentré dans l’ordre;
Dans tous les cas, merci à toute la communauté jeedom pour vos tutos, solutions, etc…
Très utile pour des utilisateurs basiques comme moi !

Nouveau (quoique pour l’instant je migre doucement de homeseer a jeedom)
je passe un a un les protocoles qui peuvent tourner en double avant de quitter definitivement homeseer.

je vien de tomber sur ce tuto mais honnetement je seche … n’etant pas du monde linux et aynat installer la version freebox delta j’ai déja galéré des heures avant de trouver les login pour acceder a jeedom avec la console, putty ou w10.
bref j’ai reussi a faire le tuto jusqu’au point 6… apres… grand mystere…
"il faut lancer le script à la main (via votre connexion ssh). Il va alors vous demander votre login et password "

de quel fichier parle t’on? ring.py.txt ? comment le lancer via ssh? si un de vous peu m’eclaicir sur ce point cae pour l’instant j’ai d’un coté un serveur ou tourne linux et jeedom et sur mon pc w10 le fichier ring… mais pour lancer l’un sur l’autre…

merci d’avance

1 « J'aime »

Salut, je ne connais pas l’installation sous freebox delta, mais ca ne doit pas être bien différent d’une installation classique sous linux. Bref comment as tu fait pour faire le point 4 ? Tu as bien installé Pyhton 3 et les modules sur le system ou se trouve Jeedom non ? Ben pour le point 6 c’est idem, il faut te connecter sur le systeme linux de ta freebox delta, la ou se trouve installé Jeedom et lancer les commandes en question. Attention, le script ring.py.txt doit bien entendu etre renomme en ring.py (l’extension .txt c’est juste pour que ca passe sur le forum…)

merci, c’est bien ce que j’ai compris, mais les commande en question sont?

Et bien tu dois :

  • te débrouiller pour mettre sur ton systeme le script python et créer un script shell (c’est lui qui va lancer le script python). Tu peux utiliser le plugin script pour créer ces deux fichiers par exemple, ou alors le plugin jeexplorer … bref utilise la solution qui te semble le mieux.
  • ensuite il te faut un accès au script python au travers d’une console, putty ou je sais pas quoi d’autre, pour pouvoir lancer le scipt python a la main, en mode « interactif », ce qui va permettre de générer le fameux fichier de cache. Attention a l’utilisateur que tu utilise pour te connecter au système, si tu n’as pas les droits d’accès qui vont bien, ca ne va pas fonctionner. Donc si tu as des erreurs de script python, vérifie ce point (et le coup des espaces aussi, relis bien tout les échanges sur ce sujet, ce sont les memes erreurs qui reviennent a chaque fois…)
  • une fois que tout est bon (scipts installés, fichier cache généré) c’est fini, tu peux l’integrer dans ton Design si tu en as un …

Bonjour @chiorboli
j’ai dû migrer de la Freebox Delta vers un Raspberry suite à de nombreux problèmes qui ont finis par effacer la totalité de ma configuration suite à la dernière mise à jour…
C’est tout confiant que je me suis lancer dans l’intégration de la Ring sur le Raspberry. Mon optimisme a rapidement prit le chemin de la déception malgré mon retour d’expérience…
Je me retrouve rapidement avec l’erreur suivante :
Erreur sur /var/www/html/plugins/script/data/ring.sh 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/ring.py », line 73, in for event in doorbellEntree.history(limit=1,timezone=« Europe/Paris »): NameError: name ‹ doorbellEntree › is not defined
Je ne comprend pas trop l’erreur !

As-tu une idée ?
En te remerciant pour ton investissement.

Salut,
L’erreur indique que la variable doorbellEntree n’est pas définie. Entrange car normalement tu dois avoir les lignes suivantes juste avant (lignes 62 à 64) :

devices = ring.devices()
doorbells = devices['doorbots']
doorbellEntree = doorbells[0]

Tu n’as pas de faute de frappe quelque part ?

Bonjour @chiorboli,
tout est correctement orthographié et après toute une matinée de recherche j’ai réussi à avancer. Il sembla qu’à la base il y ai des erreurs d’indentations. Il fallait mettre quatre espaces devant les lignes 62 à 64 et non une tabulation alors que cela ne posait pas de problème sur la Freebox (le fichier est un copier-coller seul changent les références au virtuel). Après de multiples problèmes j’ai finis par arriver à rentrer mon pseudo, mon mot de passe puis le code de la double authentification et la c’est le drame.
Erreur sur /var/www/html/plugins/script/data/ring.sh 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/ring.py », line 91, in main() File « /var/www/html/plugins/script/data/ring.py », line 73, in main for event in doorbellEntree.history(limit=1,timezone=« Europe/Paris »): UnboundLocalError: local variable ‹ doorbellEntree › referenced before assignment
Le fichier ring_token.cache est bien créé, mais le virtuel ne se met pas à jour.

Bref je galère, mais j’apprends…

A mon avis ca sent le problème d’indentation …

Bonjour, et merci pour le Tuto.
Comment récupérer la vignette de la vidéo automatiquement ?
Serait-il possible d’avoir un historique des vidéos ?
Par avance merci.

Bonjour,
pour la vignette, je pense que le tuto l’explique. Pour l’historique, tu dois modifier le script afin de ne pas supprimer le fichier, et de gérer cela « proprement » (accessible via le widget par exemple).

Merci pour la réponse, je vais creuser :roll_eyes:

Regarde ligne 73, par defaut je ne recherche que le dernier évènement. ensuite c’et a partir des lignes 78, 79… que je traite le fichier (suppression des anciens fichiers et téléchargement des nouveaux…)
voila, ca va peut etre t’aider d’avantage…

Bonjour @chiorboli,
après de multiples essais je me suis rendu compte que le script semble ne pas réagir correctement lorsqu’il est directement modifier via JeeXplorer. J’ai rapidement réussi à le faire fonctionner en le modifiant par Notepad++.
Si cela peut aider certains !
Tout remarche parfaitement pour moi.

Bonjour à tous,

NB : il y a une mise à jour du script ring.py 5 postes plus bas

Je me suis finalement lancé et avec tous vos commentaires, je n’ai eu aucun problème. Un grand merci à vous :slight_smile: .

J’ai d’abord mis en place sur mon Raspberry Pi de Test pour vérifier que tout marche bien.
Puis je suis passé sur ma Jeedom Smart de Prod.

Je me suis rendu compte que lorsque le script n’arrive pas à se connecter à Ring, il génère des erreurs pas très propres (plusieurs fois par jours).

Je ne suis pas développeur, mais j’ai apporté quelques modifications sur le script ring.py ring.txt (3,5 Ko) (fichier ring.txt à renommer en ring.py) :

  • ne pas continuer la récupération des informations si on ne parvient pas à s’authentifier au service
  • j’ai tenté de rendre l’erreur remontée plus parlante
  • j’ai mis toutes les variables en début de script et j’ai créé des variables pour les ID des commandes du Widget Jeedom. Comme ça, plus besoin de parcourir tout le script pour effectuer les modifications.

Une capture de mon virtuel, ça peut aider à s’y retrouver :

Au niveau du plugin script, je n’utilise plus le script ring.sh, mais j’utilise directement le code qu’il contenait, comme ça :

N’hésitez pas si vous avez des remarques.
Comme je l’ai dit, je ne suis pas un expert :wink:

Pour l’affichage sur le dashboard, j’ai créé un widget ou j’ai repris le code de chiorbolli, qui permet d’afficher la vidéo :
image

Prochaine étape : j’aimerais bien copier les vidéos sur mon NAS au lieu de les copier que la Jeedom…

2 « J'aime »

Bonjour,

Ces script marchais bien sur mon jeedom 3 sur rpi3 ( trop content et j ai oublié d en remercier l’auteur) , mais ce dernier a crashé ( saleté de cartes SD) . je venais de recevoir un pi4, j ai donc tout reinstallé , restauré,mis à jour ect
j ai donc un jeedom v4 fonctionnel sur le pi4 mais seul ce ring ne veux rien savoir (et le plugin ping qui ne semble plus d actualité mais c est un détail)

quand je lance le ring.sh j ai :

Traceback (most recent call last):
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/auth.py », line 84, in query
req = getattr(self._oauth, method.lower())(url, **kwargs)
File « /usr/local/lib/python3.7/dist-packages/requests/sessions.py », line 581, in post
return self.request(‹ POST ›, url, data=data, json=json, **kwargs)
File « /usr/local/lib/python3.7/dist-packages/requests_oauthlib/oauth2_session.py », line 478, in request
url, http_method=method, body=data, headers=headers
File « /usr/local/lib/python3.7/dist-packages/oauthlib/oauth2/rfc6749/clients/base.py », line 198, in add_token
raise TokenExpiredError()
oauthlib.oauth2.rfc6749.errors.TokenExpiredError: (token_expired)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File « /var/www/html/plugins/script/data/ring.py », line 91, in
main()
File « /var/www/html/plugins/script/data/ring.py », line 51, in main
ring.update_data()
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/init.py », line 49, in update_data
self.create_session()
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/init.py », line 73, in create_session
« device[metadata][language] »: « en »,
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/init.py », line 101, in query
timeout=timeout,
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/auth.py », line 86, in query
self._oauth.token = self.refresh_tokens()
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/auth.py », line 51, in refresh_tokens
OAuth.ENDPOINT, headers={« User-Agent »: self.user_agent}
File « /usr/local/lib/python3.7/dist-packages/requests_oauthlib/oauth2_session.py », line 446, in refresh_token
self.token = self._client.parse_request_body_response(r.text, scope=self.scope)
File « /usr/local/lib/python3.7/dist-packages/oauthlib/oauth2/rfc6749/clients/base.py », line 421, in parse_request_body_response
self.token = parse_token_response(body, scope=scope)
File « /usr/local/lib/python3.7/dist-packages/oauthlib/oauth2/rfc6749/parameters.py », line 431, in parse_token_response
validate_token_parameters(params)
File « /usr/local/lib/python3.7/dist-packages/oauthlib/oauth2/rfc6749/parameters.py », line 441, in validate_token_parameters
raise MissingTokenError(description=« Missing access token parameter. »)
oauthlib.oauth2.rfc6749.errors.MissingTokenError: (missing_token) Missing access token parameter.

j’en conclue que mon token ne passe pas d’une install à l’autre .
Si je le supprime , il me redemande bien mon user/pass et le code que je suis censé recevoir par SMS
mais que je ne reçoit jamais.

J’ai tenté la double authentification par mail mais en fait cela désactive la double authentification , donc j’ai pas de codes a rentrer à la question ‹ 2FA code › et si je laisse vide cela me génère à peu près les même erreur que plus haut

est ce qu il me manque un module ? je pensais tout avoir a jour

sudo python3 -m pip install ring_doorbell
Looking in indexes: Simple index, piwheels - Simple index
Requirement already satisfied: ring_doorbell in /usr/local/lib/python3.7/dist-packages (0.6.0)
Requirement already satisfied: requests==2.22.0 in /usr/local/lib/python3.7/dist-packages (from ring_doorbell) (2.22.0)
Requirement already satisfied: pytz in /usr/local/lib/python3.7/dist-packages (from ring_doorbell) (2020.1)
Requirement already satisfied: requests-oauthlib==1.3.0 in /usr/local/lib/python3.7/dist-packages (from ring_doorbell) (1.3.0)
Requirement already satisfied: oauthlib==3.1.0 in /usr/local/lib/python3.7/dist-packages (from ring_doorbell) (3.1.0)
Requirement already satisfied: idna<2.9,>=2.5 in /usr/lib/python3/dist-packages (from requests==2.22.0->ring_doorbell) (2.6)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests==2.22.0->ring_doorbell) (2018.8.24)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/lib/python3/dist-packages (from requests==2.22.0->ring_doorbell) (1.24.1)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/lib/python3/dist-packages (from requests==2.22.0->ring_doorbell) (3.0.4)