Tapo P110 - communication perdue avec la prise via jeedom si la prise est débranchée

Bonjour, je viens de me rendre compte suite à une coupure de courant que ma prise Tapo P110 n’était plus joignable via le plugin alors qu’elle l’était depuis l’app TAPO. J’ai supprimé le composant dans l’app pour le réinstaller, la communication était à nouveau possible via le plugin jeedom. j’ai débranché la prise pour l’installer à son emplacement définitif et la communication n’était à nouveau plus possible via le plugin alors que via l’app tout fonctionne. J’ai re-supprimé le composant dans l’app et re-cré directement sur la bonne prise pour que ça fonctionne à nouveau via le plugin, mais à la première coupure de courant je perdrai le pilotage de la prise et serai obligé de recommencer la manip. Une solution pérenne serait préférable. En fouillant le forum, je n’ai pas l’impression que le problème ait déjà été rencontré.


Informations Jeedom Luna

Core : 4.6.1 (master)
DNS Jeedom Luna : oui

Plugin : wifilightV2
Version : 2026-03-07 12:04:41 (stable)
Statut Démon : Démarré - (2026-07-19 12:10:34)
Santé
🟢 Matériel : Luna
🟢 Système à jour : OK
🟢 Cron actif : OK
🟢 Scénario actif : OK
🟢 Démarré : OK 2026-07-18 05:20:12
🟢 Date système (dernière heure enregistrée) : OK 2026-07-19 13:29:42 (2026-07-19 12:31:04)
🟢 Droits sudo : OK
🟢 Version Jeedom : 4.6.1
🟢 Version OS : debian 11.11
🟢 Version PHP : 7.4.33
🟢 Nombre de processus Apache : 11
🟢 Version OS : Linux JeedomLuna 4.4.194 #101 SMP Wed Sep 14 01:49:23 UTC 2022 aarch64 GNU/Linux  [11.11]
🟢 Version database : 10.5.29-MariaDB-0+deb11u1
🟢 Espace disque libre : 25 %
🟢 Connexion active/max/autorisée : 12/32/151
🟢 Taille base de données : 95.52 MB
🟢 Espace disque libre tmp : 95 %
🟢 Mémoire disponible : 53 % (Total 1958 Mo)
🟢 Mémoire suffisante : 0 
🟢 Erreur I/O : 0
🟢 Swap disponible : 30 % (Total 512 Mo)
🟢 Swappiness : 10 %
🟢 Charge : 1.13 - 1.75 - 1.98
🟢 Configuration réseau interne : OK
🟢 Configuration réseau externe : OK
🟢 Node : v22.22.0 
🟢 Python : Python 2.7.18 
🟢 Python 3 : Python 3.9.2 
🟢 Persistance du cache : OK
🟢 Apache private tmp : OK

Je me réponds à moi-même pour ceux qui rencontreraient le même problème. La solution est donnée pour HA sur ce forum : https://github.com/petretiandrea/home-assistant-tapo-p100/issues/958.

Résumé de la cause du problème

Lors d’un redémarrage complet (coupure de courant ou débranchement), la prise Tapo P110 se reconnecte au Wi-Fi et au cloud en quelques secondes, mais son API locale (sur le port TCP 80) ne se lance pas au démarrage.

TP-Link utilise une initialisation dite « lazy » (paresseuse) pour économiser les ressources de la prise : l’API locale reste éteinte tant que la prise ne reçoit pas une trame de découverte spécifique (un paquet UDP/TDP envoyé sur le port 20002).

  • Sans cette trame, l’API locale met entre 8 et 9 minutes à s’activer d’elle-même (le port 80 renvoie une erreur Connection Refused).

  • L’application mobile Tapo envoie cette trame automatiquement quand on la lance (ce qui réactivait l’API).

  • La solution : Envoyer manuellement ce paquet UDP d’activation à la prise dès son redémarrage (ou à intervalle régulier / au lancement du démon) pour ouvrir immédiatement le port 80.

[Tuto] Corriger la perte de contrôle des prises Tapo (P110…) après une coupure de courant / redémarrage

Voici comment créer un script Python pour forcer le réveil immédiat de l’API locale de la prise.

Étape 1 : Créer le fichier Python dans le plugin Script

:warning: Attention particulière au plugin Script : Si vous nommez votre fichier avec l’extension .py (ex: tapo_wake.py), Jeedom l’exécutera par défaut avec Python 2. Pour forcer l’utilisation de Python 3 via le shebang (#!/usr/bin/env python3), il faut impérativement créer un fichier SANS extension.

  1. Rendez-vous dans Plugins > Programmation > Script.

  2. Cliquez sur Ajouter (nommez l’équipement par exemple Réveil Tapo).

  3. Dans l’équipement, cliquez sur le bouton Fichier(s) en haut à droite pour ouvrir l’éditeur de fichiers.

  4. Cliquez sur Nouveau fichier et nommez-le simplement tapo_wake (sans .py à la fin).

  5. Collez le code Python 3 suivant dans le fichier :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket
import struct
import json
import binascii
import secrets
import sys

# Vérification de l'argument IP
if len(sys.argv) < 2:
    print("Erreur : L'adresse IP de la prise est requise en argument.")
    sys.exit(1)

ip_target = sys.argv[1]

RSA_PEM = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3/...\n-----END PUBLIC KEY-----\n"

def build_probe():
    p = json.dumps({"params": {"rsa_key": RSA_PEM}}).encode()
    h = struct.pack(">BBHHBBII", 2, 0, 1, len(p), 17, 0,
                    int.from_bytes(secrets.token_bytes(4), "big"), 0x5A6B7C8D)
    q = bytearray(h + p)
    q[12:16] = binascii.crc32(bytes(q)).to_bytes(4, "big")
    return bytes(q)

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.settimeout(2)
    probe_packet = build_probe()
    
    # Envoie 3 paquets de réveil pour s'assurer de la réception UDP
    for _ in range(3):
        s.sendto(probe_packet, (ip_target, 20002))
        
    print(f"Trame de réveil Tapo envoyée avec succès à {ip_target}")
    s.close()
except Exception as e:
    print(f"Erreur lors de l'envoi : {e}")
    sys.exit(1)
  1. Sauvegardez le fichier et fermez l’éditeur.

Étape 2 : Configurer la commande dans le plugin Script

  1. Dans votre équipement Script, allez dans l’onglet Commandes.

  2. Cliquez sur Ajouter une commande script.

  3. Renseignez les champs suivants :

    • Nom : Réveiller P110 (ou le nom de votre prise)

    • Type : Action / Défaut

    • Recherche / Fichier : Cliquez sur le bouton pour sélectionner le fichier tapo_wake créé précédemment.

    • Options : Ajoutez l’adresse IP de votre prise après le nom du fichier séparé par un espace.

      • Exemple dans le champ Fichier/Commande : /var/www/html/plugins/script/data/tapo_wake 192.168.1.50
  4. Sauvegardez l’équipement. Vous pouvez tester la commande en cliquant sur Tester.

Étape 3 : Automatisation par Scénario (Réveil automatique sur perte de connexion)

Pour que Jeedom relance le port 80 de la prise de manière totalement autonome dès qu’elle devient injoignable :

1. Prérequis : Activer le Ping sur le Routeur

Afin de vérifier que le logement a bien du courant, assurez-vous d’avoir votre box/routeur (ou votre serveur Home/Raspberry Pi) intégré dans Jeedom via le plugin Network (Ping).

  • Admettons que l’état du ping de votre routeur soit représenté par la commande : #[Réseau][Routeur][Statut]# (1 si en ligne, 0 si hors ligne).

2. Création du Scénario dans Jeedom

  1. Allez dans Outils > Scénarios et cliquez sur Ajouter.

  2. Nommez le scénario (ex : [Tapo] Auto-Réveil P110).

  3. Dans l’onglet Scénario :

    • Mode de déclenchement : Provoqué

    • **Déclencheur :**Le Ping de la prise Tapo #[Réseau][Ping Tapo P110][Statut]#

  4. Dans l’onglet Enchaînement / SI-ALORS-SINON : Ajoutez un bloc SI avec la condition suivante :
    #[Réseau][Ping Tapo P110][Statut]# == 1 ET #[Maison][P110][Connecté]# ==-3 (La prise vient TOUT JUSTE de se rallumer, de choper son IP et le port 80 est fermé)

    (Remplacez les noms des commandes par les vôtres via le sélecteur Jeedom).

  5. Dans le bloc ALORS :

    • Ajoutez une action Action : Pause : 5 secondes (Le temps de laisser la pile réseau de la prise se stabiliser)

    • Lancer la commande du script #[Réveil Tapo]#

Voilà pour le workaround. A voir si ça ne peut pas être intégré au plugin wifilightV2

bonjour,

je passais sur votre post, car j’aime bien lire les posts en général. Alors je pense que l’action “Dormir” n’existe pas dans Jeedom, enfin j’en suis meme sur. l’IA à du se tromper :slight_smile:

Faut quand meme relire ce qu’une aide ia propose (et c’est parfois bien utilie, je ne critique abolument pas), avant de proposer une correction qui là en l’occurence ne marchera pas