Faire fonctionner l'alimentation smartlife avec python (de-IFTTT)

IFTTT enfin chargé

Il semble qu'il ait été facturé à partir du 1er novembre 2020. Je l'ai utilisé sur des webhooks jusqu'à présent, mais cela ne fonctionne pas. Il n'y a pas d'autre choix que de développer des alternatives. Quand je l'ai recherché, il semble qu'il puisse être contrôlé par python, alors je l'ai essayé.

Je ne l'utilisais pas tout le temps, je voulais juste pouvoir allumer et éteindre l'appareil, donc ma motivation était de prendre la peine de recevoir un service payant.

Écoulement brutal

Fondamentalement, si vous pouvez utiliser tinytuya, vous pouvez le contrôler à partir de python. Cependant, l'ID de périphérique (= ID virtuel), l'adresse IP et la clé locale sont nécessaires pour contrôler avec tinytuya. Par conséquent, tuyapower (Python3) et tuya-cli (node) sont nécessaires. Il y a de nombreuses étapes avant et c'est gênant.

--Get IP Addr, identifiant virtuel avec tuyapower

La plupart sont encore écrits sur le github de tinytuya, etc. Aussi appelé simple localisation japonaise.

Installation d'outils

tinytuya / tuyapower / tuya-cli

# Install required libraries
$ sudo apt-get install python-crypto python-pip		# for RPi, Linux
$ python3 -m pip install pycryptodome    # or pycrypto, pyaes or Crypto
$ python3 -m pip install tinytuya        # or pytuya
$ python3 -m pip install tuyapower       # this tuyapower module
$ npm i @tuyapi/cli -g

Seul tuya-cli est npm.

Obtenez les paramètres requis

Device ID, IP address

$ python3 -m tuyapower
TuyaPower (Tuya compatible smart plug scanner) [0.0.25] tinytuya [1.0.3]

Scanning on UDP ports 6666 and 6667 for devices (15 retries)...

FOUND Device [Valid payload]: 192.168.x.xx
    ID = 02xx11xxbcxxc2xxffxx, product = xxSUxxTWxx8ExxTw, Version = 3.1
    Stats: on=False [Timeout polling device]
FOUND Device [Valid payload]: 192.168.x.xx
    ID = 02xx77xxbcxxc2xx99xx, product = xxSUxxTWxx8ExxTw, Version = 3.1
    Stats: on=False [Timeout polling device]
FOUND Device [Valid payload]: 192.168.1.62
    ID = 03xx01xxdcxx22xxccxx, product = xx0VxxFcxxBTxxWt, Version = 3.1
    Stats: on=True, W=0.1, mA=0.0, V=0.0 [OK]
                    
Scan Complete!  Found 3 devices.

Nous avons 3 appareils smartlife, donc 3 seront affichés. L'important est l'ID et l'adresse IP. Entrez cet ID comme ID virtuel tuya-cli.

local key Tuya API key / Tuya secret

Sur iot.tuya.com, accédez au développement cloud et obtenez l'API Tuya et le secret Tuya.

image.png

Access ID = Tuya API key Access Secret = Tuya secret

local key

Obtenez-le en exécutant l'assistant tuya-cli. Cible les termes clés au format json.

$ tuya-cli wizard
? The API key from tuya.com: nnxxxxxxxxxxxxxxxxur
? The API secret from tuya.com 53xxxxxxxxxxxxxxxxxxxxxxxxxxxxa3
? Provide a 'virtual ID' of a device currently registered in the app: 03xxxxxxxxxxxxxxxx08
[
  {
    name: 'Pas de thé',
    id: 'XXXXXXXXXXXXXXXXXXXX',
    key: 'YYYYYYYYYYYYYYYY'
  },
  {
    name: 'Remarque B',
    id: 'XXXXXXXXXXXXXXXXXXXX',
    key: 'YYYYYYYYYYYYYYYY'
  },
  {
    name: 'Remarque C',
    id: 'XXXXXXXXXXXXXXXXXXXX',
    key: 'YYYYYYYYYYYYYYYY'
  }
]

Exemple de code

Eh bien, c'est Pakuri. Nous utiliserons les informations avec lesquelles nous avons eu du mal ci-dessus.

DEVICE_ID_HERE: ID de l'appareil, ID virtuel (obtenu à tuyapower / tuya-cli) IP_ADDRESS_HERE: adresse IP (obtenue à tuyapower) LOCAL_KEY_HERE: clé (obtenue par tuya-cli)

import tinytuya

d = tinytuya.OutletDevice('DEVICE_ID_HERE', 'IP_ADDRESS_HERE', 'LOCAL_KEY_HERE')
d.set_version(3.3)
data = d.status()  # NOTE this does NOT require a valid key vor version 3.1

# Show status of first controlled switch on device
print('Dictionary %r' % data)
print('State (bool, true is ON) %r' % data['dps']['1'])  

# Toggle switch state
switch_state = data['dps']['1']
data = d.set_status(not switch_state)

data = d.status()
print('State (bool, true is ON) %r' % data['dps']['1'])  

Si vous voulez juste obtenir le statut (data = d.status ()), vous n'avez pas besoin d'une clé locale. Lors de l'appel de d.set_status, une erreur sera renvoyée si la clé locale correcte n'est pas définie. S'il est réglé correctement, il fonctionne comme suit. Après avoir passé set_status (et non switch_status), l'état sous tension est passé de False à True.

$ python3 sample.py 
Dictionary {'devId': '02XXXXXXXXXXXXXXXXeb', 'dps': {'1': False, '2': 0}}
State (bool, true is ON) False
State (bool, true is ON) True

Le système Meross est contrôlé par une autre méthode. C'est plus facile à contrôler depuis python.

La fin

Recommended Posts

Faire fonctionner l'alimentation smartlife avec python (de-IFTTT)
Utiliser Kinesis avec Python
Faire fonctionner Blender avec Python
Utiliser Excel avec Python (1)
Utiliser Excel avec Python (2)
Exploitez Excel avec Python open pyxl
Exploitez TwitterBot avec Lambda, Python
[Note] Faites fonctionner MongoDB avec Python
[Python] [SQLite3] Exploiter SQLite avec Python (basique)
Faites fonctionner l'imprimante de reçus avec python
Essayez d'exploiter Facebook avec Python
Faites fonctionner les appareils électroménagers ECHONET Lite avec Python
[GCP] Exploitez Google Cloud Storage avec Python
[Pyto] Faites fonctionner le Taptic Engine de l'iPhone avec Python
[Python] Utiliser automatiquement le navigateur avec Selenium
Faites fonctionner des appareils électroménagers avec Python et IRKit
FizzBuzz en Python3
Grattage avec Python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
[Automatisation] Utilisez GitLab avec Python pour faciliter la gestion des requêtes
Exploitons GPIO de Raspeye avec Python CGI
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Manipuler Redmine à l'aide de Python Redmine
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python