mirror of
https://github.com/Ladebeze66/tuya_project.git
synced 2025-12-15 19:36:55 +01:00
106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
import tinytuya
|
||
import json
|
||
|
||
# Informations Cloud Tuya
|
||
API_REGION = "eu"
|
||
API_KEY = "fdjdjurkm34yyjp77c7d"
|
||
API_SECRET = "3e71807fb0c6406792bdf4f07f98e577"
|
||
|
||
# Informations des appareils
|
||
DEVICES = [
|
||
{
|
||
"id": "bfdc2f8e4effa0d826gnxg", # ID de la lumière 1
|
||
"name": "Light 1",
|
||
"switch_code": "switch_led"
|
||
},
|
||
{
|
||
"id": "bf5516c52504a7a8dcof7r", # ID de la lumière 2
|
||
"name": "Light 2",
|
||
"switch_code": "switch_led"
|
||
}
|
||
]
|
||
|
||
def main():
|
||
cloud = tinytuya.Cloud(
|
||
apiRegion=API_REGION,
|
||
apiKey=API_KEY,
|
||
apiSecret=API_SECRET
|
||
)
|
||
|
||
# Activer le mode debug dans tinytuya
|
||
tinytuya.set_debug(True)
|
||
|
||
for device in DEVICES:
|
||
device_id = device["id"]
|
||
device_name = device["name"]
|
||
switch_code = device["switch_code"]
|
||
|
||
# Lire l'état actuel
|
||
print(f"🔍 Récupération du statut pour l'appareil {device_id}...")
|
||
status = cloud.getstatus(device_id)
|
||
|
||
# Vérifier si on a bien une réponse
|
||
if not status:
|
||
print(f"❌ Aucune réponse de l'API Cloud pour {device_name}")
|
||
continue
|
||
|
||
# Essayer d'afficher la réponse complète
|
||
try:
|
||
print(f"📊 Réponse brute: {status}")
|
||
print(f"📊 Type de réponse: {type(status).__name__}")
|
||
|
||
if isinstance(status, dict):
|
||
print(f"📊 Clés disponibles: {list(status.keys())}")
|
||
except Exception as e:
|
||
print(f"⚠️ Erreur lors de l'affichage de la réponse: {e}")
|
||
|
||
is_on = None
|
||
|
||
# Vérifier le format de la réponse
|
||
if isinstance(status, dict) and "result" in status:
|
||
result = status["result"]
|
||
if isinstance(result, list):
|
||
for item in result:
|
||
if isinstance(item, dict) and item.get("code") == switch_code:
|
||
is_on = item.get("value")
|
||
break
|
||
elif isinstance(result, dict) and "status" in result:
|
||
for item in result["status"]:
|
||
if item.get("code") == switch_code:
|
||
is_on = item.get("value")
|
||
break
|
||
elif isinstance(status, list):
|
||
for item in status:
|
||
if isinstance(item, dict) and item.get("code") == switch_code:
|
||
is_on = item.get("value")
|
||
break
|
||
|
||
if is_on is None:
|
||
print(f"❌ Impossible de trouver le statut de l'interrupteur '{switch_code}' pour {device_name}")
|
||
continue
|
||
|
||
print(f"ℹ️ État actuel de {device_name}: {'ALLUMÉ' if is_on else 'ÉTEINT'}")
|
||
|
||
# Basculer l'état
|
||
new_value = not is_on
|
||
print(f"ℹ️ Nouvel état à appliquer: {'ALLUMÉ' if new_value else 'ÉTEINT'}")
|
||
|
||
# Envoyer la commande
|
||
commands = {
|
||
"commands": [
|
||
{"code": switch_code, "value": new_value}
|
||
]
|
||
}
|
||
print(f"📤 Envoi de la commande: {json.dumps(commands, indent=2)}")
|
||
response = cloud.sendcommand(device_id, commands)
|
||
print(f"📥 Réponse reçue: {json.dumps(response, indent=2) if response else 'Aucune réponse'}")
|
||
|
||
# Vérifier si response n'est pas None avant d'appeler get()
|
||
if response is not None and response.get("success"):
|
||
print(f"✅ {device_name} est maintenant {'allumé' if new_value else 'éteint'}")
|
||
else:
|
||
error_msg = response.get("msg", "Erreur inconnue") if response else "Pas de réponse"
|
||
print(f"❌ Échec pour {device_name}: {error_msg}")
|
||
|
||
if __name__ == "__main__":
|
||
main() |