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

92 lines
2.9 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.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Script pour basculer l'état de SW2 (allumé/éteint)
À utiliser avec StreamDeck
"""
import tinytuya
import json
# Informations Cloud Tuya
API_REGION = "eu"
API_KEY = "fdjdjurkm34yyjp77c7d"
API_SECRET = "3e71807fb0c6406792bdf4f07f98e577"
# Informations de l'appareil
DEVICE_ID = "bf06f9007abca55618iiwv" # ID de SW2
DEVICE_NAME = "SW2" # Nom de l'appareil
SWITCH_CODE = "switch_1" # Code 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)
if not status:
print(f"❌ Aucune réponse de l'API Cloud pour {DEVICE_NAME}")
return
try:
print(f"📊 Réponse brute: {status}")
except Exception as e:
print(f"⚠️ Erreur lors de l'affichage de la réponse: {e}")
is_on = None
# Analyse du statut
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 '{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'}")
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()