Hello,
Je réponds sur ce thread car je me suis battu il y a quelques jours avec une tuya cheap d'amazon donc j'ai du investiguer un peu le sujet.
Octoprint contrôle bien le smartplug mais la fiabilité est variable et clairement, je ne recommencerais pas et je me tournerai plutôt vers une solution octoprint + relai à l'avenir.
L'idée de base du contrôle des tuya est de récupérer un identifiant et une clée de chiffrement lors de l'enrollement de la prise dans le cloud Tuya/SmartLife, la fameuse paire productId/localKey. Visiblement @spacerabbit37 a réussi sous Android avec la méthode du proxy SSL. Je n'avais pas exactement la même app mais je n'ai pas réussi de cette façon. J'ai trouvé deux outils qui permettent l'extraction de la clé, tuyapi en nodeJs et pytuya en python. Le plugin TuyaSmartplug d'Octoprint dépend de pytuya.
Les différentes approches sont documentées ici. J'ai tenté via les logs Android mais je n'y récupérais que le productId, la localKey restait introuvable. J'ai finalement réussi à récupérer une paire correcte avec cette méthode, sous Linux. J'imagine que c'est faisable sur Windows aussi mais comme c'est en ligne de commande ... Evidemment, ça ne suffit plus XD (mais ça devrait bientôt arriver). A ce moment, le plugin ne contrôle toujours pas la prise. En testant la prise avec mon smartphone, j'aurai déclenché une mise à jour (silencieuse) du firmware du smartplug qui change le protocole de communication. Les devs de tuyapi ont clairement identifié la cause du problème : https://github.com/codetheweb/tuyapi/issues/175 et pytuya a mergé le support du nouveau protocole https://github.com/clach04/python-tuya/commit/bee5b97e726425059c32b8191f7147e01bf0c3c2 après coup.
TuyaSmartplug dans mon octoprint tire pytuya 7.0.2. Le support du nouveau protocole est dans pytuya 7.0.4 qui n'est visiblement pas arrivé dans pipy et pour le moment le plugin n'en a pas connaissance.
Au bout d'un long moment, partant d'un Octoprint sans TuyaSmartplug d'installé :
* ssh octoprint
* git clone https://github.com/ziirish/OctoPrint-TuyaSmartplug * git clone https://github.com/clach04/python-tuya
* source oprint/bin/activate
* pip install -e . dans le dossier cloné de pytuya
* 2 lignes de code à modifier pour un support basique (setup.py et octoprint_tuyasmartplug/__init__.py voir patch). C'est du python, attention à l'indentation.
* pip install -e . dans le dossier cloné de TuyaSmartplug
* reboot
* It works. Bon c'est brutal, ça va casser le support des prises avec une autre version du protocole mais dans mon cas je n'en avais qu'une qui ne marchait pas.
Vu l'avancement du sujet, j'imagine que c'est une question de semaines/mois avant que tuyasmartplug ne supporte correctement le protocole. Mais bon, vu que ce n'est pas encore le cas et qu'il suffit d'une mise à jour silencieuse pour se retrouver coincé ...
diff --git a/octoprint_tuyasmartplug/__init__.py b/octoprint_tuyasmartplug/__init__.py
index 068aea2..2cfb3d3 100644
--- a/octoprint_tuyasmartplug/__init__.py
+++ b/octoprint_tuyasmartplug/__init__.py
@@ -209,6 +209,7 @@ class tuyasmartplugPlugin(octoprint.plugin.SettingsPlugin,
self._tuyasmartplug_logger.debug('Sending command: %s to %s' % (cmd, plugip))
plug = self.plug_search(self._settings.get(["arrSmartplugs"]), "ip", plugip)
device = pytuya.OutletDevice(plug['id'], plug['ip'], plug['localKey'])
+ device.set_version(3.3)
commands = {
'info': ('status', None),
diff --git a/setup.py b/setup.py
index fa8e00b..d537e0d 100644
--- a/setup.py
+++ b/setup.py
@@ -34,7 +34,7 @@ plugin_license = "AGPLv3"
# Any additional requirements besides OctoPrint should be listed here
plugin_requires = [
- 'pytuya==7.0'
+ 'pytuya'
]
### --------------------------------------------------------------------------------------------------------------------