2025-04-27 19:45:45 +02:00

92 lines
3.1 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import tinytuya
import json
# Informations Cloud Tuya
API_REGION = "eu"
API_KEY = "fdjdjurkm34yyjp77c7d"
API_SECRET = "3e71807fb0c6406792bdf4f07f98e577"
# Informations de l'appareil
DEVICE_ID = "bfd5eb950aecda95d3mgpq" # ID de bambulight
DEVICE_NAME = "bambulight"
SWITCH_CODE = "switch_led" # Utiliser le code correct pour l'interrupteur
def main():
cloud = tinytuya.Cloud(
apiRegion=API_REGION,
apiKey=API_KEY,
apiSecret=API_SECRET
)
# Activer le mode debug dans tinytuya
tinytuya.set_debug(True)
# 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}")
return
# 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}")
return
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()