Pytapo 3.3.19 et python 3.7.3 et python 3.9.0

Bonjour,
pour infos j’ai débugué le script pytapo pour caméra Tapo C200 et C310.

pytapo 3.3.19 (la derniere version dispo à ce jour)
python 3.7.3 (derniere version dispo sur jeedom debian10) , testé et validé aussi avec python 3.9.0
firmware 1.3.9 sur cam (derniere mise à jour dispo à ce jour)

Je n’ai pas de souscription au cloud mais le compte est actif.
https://tapo.tplinkcloud.com/tapo_web/#/login/signIn

L’application Android active le MFA (authentifiction à 2 facteurs): Rendre votre compte plus sécurisé : introduction de la vérification en deux étapes (2FA) pour l'application Tapo | TP-Link France
C’est ce qui est la cause du pb de l’authentification avec le script pytapo
Donc se connecter sur le cloud pour avoir un code (envoyer sur le téléphone) qui permet de confirmer la connexion.

la nouvelle version de pytapo utilise une synthaxe ternaire pour les IF
Il faut donc repasser en synthaxe simple dans 2 fichiers !

fichier 1:
~/.local/lib/python3.7/site-packages/pytapo/media_stream/_utils.py
à la ligne 56
remplacer
if i := b.find(sep, start_index) != -1:
par

i=b.find(sep, start_index)
if i != -1:

fichier 2:
~/.local/lib/python3.7/site-packages/pytapo/media_stream/tsReader.py
à la ligne 153
remplacer
if pkt := self.pes[pid].GetPacket():
par
if pkt == self.pes[pid].GetPacket():

se connecter en ssh sur le Raspberry Jeedom
mettre à jour Debian/Jeedom (apt update puis apt upgrade)
verifier la version de python ( python3 --version)
installer pytapo (python -m pip install pytapo)
vérifier la version de pytapo (pip show pytapo)

créer un fichier de test (test.py) avec dedans

#!/usr/bin/env python3
from pytapo import Tapo

password_cloud = "pass_cloud"  # cloud password
host = "ipJeedom"  # ip of the camera, example: 192.168.1.52

tapo = Tapo(host, "admin", password_cloud)

request = tapo.getBasicInfo()
print(request)

tester:

python3 test.py

et voilà ma C200 et C310 sont de retours !

Pour ceux qui veulent jouer un peu c’est ce script qui m’a mis sur la piste:

Bonjour,

Juste pour info

  • la dernière release n’est pas la 3.3 contrairement à ce qui est, écrit ni la 3.13 mais de python est la 3.12; mais ça ne change probablement pas grand chose. Sur bookworm c’est la 3.11 qui est dispo.
  • :=n’est pas un opérateur ternaire mais une assignation dans une expression et est valide depuis la 3.8

Donc il faudrait migrer en bullseye sur laquel python 3.9 est dispo et il n’y aurait aucun changement nécessaire :wink:

La deuxième correction est incorrecte

Il faut faire comme pour la première (assigner pkt avant le if) et juste tester pkt (if pkt:)

ben avec les maj de ma raspberry et mon jeedom c’est bien les versions que j’ai mis
et on ne peut pas passer sur python 3.8 sur ma version de jeedom

ok erreur de ma part, j’ai lu « python » donc je parlais des versions de python dont la dernière est 3.12

c’est quoi comme box? une smart? alors effectivement il faut attendre

sur tout autre système il est possible d’installer debian 11 qui viendra avec python 3.9

mais c’est surtout sur la correction que je réagisais

fichier 2:
~/.local/lib/python3.7/site-packages/pytapo/media_stream/tsReader.py
à la ligne 153
remplacer
if pkt := self.pes[pid].GetPacket():
par

pkt = self.pes[pid].GetPacket()
if pkt:

pas de box
mais je vais pas tout réinstaller et remettre mes sauvegardes juste pour ça sur ma Pi 3b en prod qui tourne comme une horloge depuis un peu plus de 3 ans. Ca aurait été un box de test oui…

effectivement c’est de l’assignation méa culpa
la 3.7 ne gère pas :=
d’où tous les messages que tu trouves sur le forum et google

je vais tester ta modif…
mais la mienne fonctionne très bien sinon je ne l’aurais pas partagée

donc

si c’est possible, et il faudrait sérieusement y songer à passer sous bullseye, debian 11;
debian 10 n’est plus maintenu dans 2 mois.

pas quand je fais un apt update et apt upgrade
Je vais y réfléchir… mais quel risque? tant que je n’envisage pas de nouveaux plugins ou fonctionnalité. Seule l’IP de ma machine est autorisée en entrée avec clé ssh pas de risque sécu. Filtrage par mon parefeu dans mon réseau interne maison.
et surtout pas sure que ma pauvre Pi 3b supporte deb11 ou 12

Sinon ta modif fonctionne aussi, testé à l’instant

non, pour migré l’os c’est pas comme ca, bref voir les centaines de posts qui en parlent déjà

les plugins & jeedom évolue
si un plugin est mis à jour pour garder la compatibilité avec le reste mais que les dépendances qu’ils utilisent ne sont pas ou plus dispo sur votre os, vous serez bloqué.

c’est sur… les failles de sécu ca n’existent pas et le bon moyen de ne pas en avoir c’est de ne plus faire les mises à jours de sécu (car elles n’existeront pas)

bref, je m’arrête là sur le hors sujet

Bonjour,
Excuser moi mais je suis nul.
Sur une atlas, ça fonctionne ou pas?

De quoi parlez-vous?

Antoine

Pardon,
Savoir si le script pytapo fonctionne avec python 3.7.3

C’est écrit juste au-dessus: non.

Installez la nouvelle image debian 11 sur l’atlas, aucune raison de rester sur debian 10.

Cela veut dire reinstaller entierement jeedom avec une nouvelle image sur l’atlas?

oui, comme un « reset usine » qui va en fait mettre à jour la partie debian (os)
ensuite restauration d’un backup et réinstallation des dépendances des plugins;

c’est transparent, tout reviendra en place; faut juste le temps de faire l’update

il y a déjà d’autres posts qui explique en détail comment faire, voir ceux-ci pour plus d’info

Ah oui ok je vient de voir un lien:

Merci beaucoup et bonne journée

oui ca fonctionne, suivre les instructions dans le post

xxxx@jeedomPi:~ $ python3 --version
Python 3.7.3
xxxx@jeedomPi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
xxxx@jeedomPi:~ $ pip show pytapo
Name: pytapo
> Version: 3.3.19
Summary: Python library for communication with Tapo Cameras
Home-page: GitHub - JurajNyiri/pytapo: Python library for communication with Tapo Cameras
Author: Juraj Nyíri
Author-email: juraj.nyiri@gmail.com
License: MIT
Location: /usr/local/lib/python3.7/dist-packages
Requires: pycryptodome, requests, rtp, urllib3
Required-by:
xxxx@jeedomPi:~ $ python3 test.py
{‹ device_info ›: {‹ basic_info ›: {‹ device_type ›: ‹ SMART.IPCAMERA ›, ‹ device_model ›: ‹ C200 ›, ‹ device_name ›: ‹ C200 2.0 ›, ‹ device_info ›: ‹ C200 2.0 IPC ›, ‹ hw_version ›: ‹ 2.0 ›, ‹ sw_version ›: ‹ 1.3.9 Build 231019 Rel.38052n(4555) ›, ‹ device_alias ›: ‹ CamC200 ›, ‹ avatar ›: ‹ Entrance ›, ‹ longitude ›: 57941, ‹ latitude ›: 451064, ‹ has_set_location_info ›: 1, ‹ features ›: ‹ 3 ›, ‹ barcode ›: ‹  ›, ‹ mac ›: ‹ 54-AF-97-7E-21-D5 ›, ‹ dev_id ›: ‹ 8021E4868372143C2F9453DB1936AC9B1FB275B5 ›, ‹ oem_id ›: ‹ 6C6C8A3E1B5801A276305D7B2FEFFF67 ›, ‹ hw_desc ›: ‹ 00000000000000000000000000000000 ›}}}

Capture d’écran 2024-04-09 à 23.11.07