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()