[Tutoriel] Integration Ring Doorbell

Salut,
La double authentification est un pré-requis pour que tout fonctionne. donc tant que tu ne reçois pas le code (le 2FA code) ça ne fonctionnera pas ! Lorsque tu supprime le fichier token et que tu relance la procédure d’authentification, tu n’as aucune erreur ? Il te demande ton email, password et 2FA code sans aucun message d’erreur ? Si c’est bien le cas, alors Est ce que tu arrives a acceder a internet depuis ton raspberry ? Si oui, es tu certain de rentrer le bon couple email-password (pas de faute de frappe par exemple) ? Je ne vois pas pourquoi tu ne recois pas le code. Ca marche par ailleur la double authentification lorsque tu te connectes a parti d’un browser ?

j’ai supprimé le fichier token, il demande bien le login et le pass , puis le 2FA … mais je ne reçoit rien

j’ai testé les 2 options, authentification par mail ( qui reste de la double auth mais passons ) et la SMS , et c est pareil, je ne reçoit rien, comme si le script n’allais pas lancer la demande chez Ring.

j’ai testé en web depuis un pc , le code que ce soit par mail ou sms arrive dans la minute
mon Jeedom est sur le réseau local, si ça marche d’un PC … je ne vois pas pourquoi le rpi ne fonctionnerait pas. par acquis de conscience, un lynx sur www.google.fr passe , j ai donc bien acces au net :slight_smile:

je vois bien passer sur mon DNS (pihole) des requêtes vers oauth.ring.com , mais est ce que cela aboutit, j’en sait rien.

le symptôme est le meme depuis un vieux pi0W dans une vielle raspian, ça met déjà hors de cause le pi4 et son raspian a jour.

j ai modifié mon DNS pour ne plus prendre en compte le pihole , ni le proxy , reboot du pi , il ne se passe rien quand il me demande le 2FA code …

j ai essayé avec un autre compte ring, ( des fois que le login/pass ne soit pas bon ) , idem , pas de réception de SMS ( le second compte à bien l’authentification )

.est ce qu il y a moyen de rajouter du verbose sur l’étape de création du token ? histoire de voir ce qui ne vas pas ?

S’il te demande le 2FA code c’est que dans le script ring.py « tout va bien », je ne vois pas quel log on pourrai ajouter pour aider au debug. Le debug doit se faire dans le module ring…Alors là ça commence à devenir chaud !
Dejà pour savoir ou a été installé ce module, execute la commande :

python3 -c 'import site; print(site.getsitepackages())'

tu devrais obtenir un truc du genre :

['/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.5/dist-packages']

dans l’un de ces repertoires se trouve un sous repetoire ring_doorbell :

/usr/local/lib/python3.5/dist-packages/ring_doorbell $ ls
auth.py   const.py    generic.py   __pycache__
chime.py  doorbot.py  __init__.py  stickup_cam.py

tu peux dans un premier temps essayer de modifier le fichier const.py. Il y a une constante TIMEOUT définie a 10 … Augmente la valeur (genre 60 ou 120) pour voir si ça corrige la chose.
Sinon ensuite tu peux ajouter des print dans le fichier auth.py. C’est lui qui gère l’authentification.
Pour info, je précise que je ne suis pas l’auteur de ce module…

Salut,

J’ai remodifié le script afin qu’il génère un message dans le centre de messages de Jeedom si il n’arrive pas à se connecter à Ring.
Si ça intéresse quelqu’un, voilà le script : ring.py.txt (3,9 Ko)

Par contre, vous êtes allé voir dans l’application Ring > Centre de contrôle > Appareils clients autorisés ?
Le script génère une multitude d’appareils Python android. J’ai essayé de comprendre pourquoi mais je n’ai pas trouvé… @chiorboli, tu aurais une piste la dessus ?

Salut, oui j’ai vu ça et je comprends pas non plus pourquoi. Certainement la façon de se connecter qui est gérée par le module ring_doorbell.
Je suis en train de regarder comment faire autrement…

Salut,

J’ai l’impression que depuis que j’ai mis en place le script sur Jeedom, j’ai des soucis sur l’application Ring sur mon portable. Régulièrement l’application bug et je suis obligé de m’authentifier à nouveau.

Je vais désactiver la mise à jour auto du script sur Jeedom des données Ring pour voir si c’est vraiment lié.

Je n’ai pas ce problème de mon côté, mais en même temps j’ai changé de méthodologie…
:warning: :warning: :warning:
J’ai modifié le premier post de ce thread afin de décrire la nouvelle méthode que j’utilise
:warning: :warning: :warning:
Essaye cette nouvelle méthode et dis moi ce qu’il en est…

Ah oui, tu as carrément changé de méthode.

Est-ce qu’avec cette nouvelle méthode, ça te créé toujours une multitude d’entrées Python dans les Appareils clients autorisés ?

NonJ’ai l’impression que c’est assez stable, j’en ai qqes un mais je pense qu’ils sont vieux et liés a des essais que j’avais fait. En tout cas, j’accede a l’appli Ring depuis differents devices et j’ai pas de soucis d’authentification …

1 « J'aime »

Je confirme que c’est bien le script qui génère la multitude d’entrées dans les Applications autorisées et qui bloque au bout d’un moment l’application Rnig sur mon portable et celui de ma femme. Depuis que j’ai supprimé l’actualisation dans le widget, plus aucun souci au niveau de l’application Ring.

J’ai pas encore eu le temps de tester ta nouvelle méthode pour voir si j’ai le problème ou pas avec.

De mon côté, j’ai plus de soucis depuis que je suis passé a cette nouvelle méthode, ça tourne depuis un petit moment.

Bonjour,

J’imagine que ce tuto est valable pour tous les modèles ring disponibles ? Je prévois de prendre le modèle judas, « ring door view cam ».

Je tente l’intégration de ma sonnette, j’ai une erreur avec python3 ‹ ring_daemon.py › -h :

Traceback (most recent call last):
File « ring_daemon.py », line 26, in
import daemon
ModuleNotFoundError: No module named ‹ daemon ›

Salut @Drakal ,
Oui c’est normal, je pense que j’ai un oubli dans le tuto (je viens de le modifier). Il manque le package qui va bien à ton installation python. Execute ceci avant de reprendre le tuto et tout devrait rentrer dans l’ordre :

sudo python3 -m pip install python-daemon

Merci pour ta réponse, désolé je rencontre une nouveau problème ensuite, lors de l’authentification, j’suis une bille: …

Traceback (most recent call last):
File « ring_daemon.py », line 105, in login_ring
auth.fetch_token(username, password)
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/auth.py », line 40, in fetch_token
headers=headers,
File « /usr/local/lib/python3.7/dist-packages/requests_oauthlib/oauth2_session.py », line 360, in fetch_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.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File « ring_daemon.py », line 62, in token_updated
cache_file.write_text(json.dumps(token))
AttributeError: ‹ str › object has no attribute ‹ write_text ›

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File « ring_daemon.py », line 227, in
login_ring()
File « ring_daemon.py », line 107, in login_ring
auth.fetch_token(username, password, otp_callback())
File « /usr/local/lib/python3.7/dist-packages/ring_doorbell/auth.py », line 44, in fetch_token
self.token_updater(token)
File « ring_daemon.py », line 64, in token_updated
logger.error(« Unable to update token cache file, an error %s occured. » % (sys.exc_info()[0]))

Alors tout porte à croire que :

  • soit le chemin vers le fichier de cache du token n’a pas été initialisé correctement (chemin inexistant ou un truc du genre)
  • soit c’est un pb de droit
    Visiblement il n’arrive pas a initialiser l’objet « cache_file »…
    Creuse ces pistes…

Salut,

Je n’avais pas eu le temps de me repencher sur ce problème de sonnette Ring avant aujourd’hui.
J’ai enfin pu suivre ta méthode 2.

J’ai pu régénérer le token sans problème.
Par contre, j’ai l’impression que le service deamon ne se lance pas…

La seule différence avec toi c’est que j’ai posé le script ring_daemon.py, ici : /var/www/html/plugins/script/data/ring
J’ai bien modifié le chemin dans ring_daemon.service
[Service]
ExecStart=/var/www/html/plugins/script/data/ring/ring_daemon.py
Restart=on-failure

Tu sais d’où ça peut venir ce problème de lancement ?

Pour voir si ça ne venait pas du ring_deaemon.py, je l’ai lancé à la main via la commande :
sudo python3 /var/www/html/plugins/script/data/ring/ring_daemon.py
Le script marche, puisque mon virtuel est bien mis à jour dans Jeedom, mais je me retrouve avec le même problème qu’avant : une multitude de clients python dans les clients autorisés sur l’application Ring :cry:.

Alors, je me réponds, j’ai trouvé pourquoi le daemon ne démarrait pas. Comme le script doit être lancé avec Python 3, il fallait modifier le fichier ring_daemon.service comme ceci :
ExecStart=/usr/bin/python3 /var/www/html/plugins/script/data/ring/ring_daemon.py

Maintenant je vais suivre pour voir si ça rajoute des clients sur mon application Ring. Si c’est le cas, ça risque de la bloquer à nouveau…

Edit : J’ai vérifié, c’est toujours pareil, même avec la méthode 2, à chaque fois que le script interroge pour récupérer les infos de ma caméra Ring, il crée un client Python dans les clients autorisés chez Ring. A force, si je ne me connecte pas pendant 24h sur mon appli Ring, ça la bloque… Du coup, je stop le daemon en attendant de trouver pourquoi cela fait ça.

Je suis le seul à qui ça fait ça ?

Salut,
Alors c’est étrange car j’étais dans le même cas que toi d’où la création de la seconde méthode. Et depuis que je l’ai implémentée, tout semble bien stable.
Avec la méthode 1 j’avais un tas de devices déclarés dans les « Appareils clients autorisés » de type « Python/android ».
Avec la méthode 2 je n’ai plus qu’un seul appareil de type « blablabla/unknown ».
Le « blablabla » provient des lignes 102 et 140 ou tu as une instruction :

auth = Auth("JeedomRing/1.0",...)

Vérifie bien que ces deux lignes ont la même chaine d’identification (le premier paramètre, JeedomRing/1.0 dans l’exemple ci-dessus, tu peux mettre ce que tu veux d’autre), et normalement c’est cette chaine que tu devrais retrouver dans la liste des clients autorisés. Et bien entendu, il ne devrait y avoir qu’un seul client de ce type.
De mon côté, le démon est toujours lancé et sans coupures internet…

Je constate les mêmes symptômes que @Supermilk: Une multitude de connexions.
Je suis obligé de systématiquement déco/reco de l’appli pour avoir accès aux vidéo.
Par contre, le script récupère bien la dernière vidéo.

Je viens de créer un nouvel utilisateur en partage avec une 2nd adresse mail, que je viens d’utiliser pour le démon.
Je vous tiens au courant si je rencontre encore des pb de connexion avec mon compte principal.