Bonjour,
Il me semble que le sujet n’a pas encore été abordé avec cette manière de faire sur ce community.
Pour utiliser vos équipements Eufy il existe depuis quelques temps une bibliothèque utilisant websocket permettant de piloter la plupart des paramètres de vos appareils. Il s’agit du projet de Bropat/eufy-security-ws disponible ici : GitHub - bropat/eufy-security-ws: Small server wrapper around eufy-security-client library to access it via a WebSocket.
J’ai commencé me pencher dessus et je souhaitais vous montrer un exemple de ce que vous pouvez faire en attendant que quelqu’un développe un plugin un jour (peut être moi si j’arrive a acquérir les compétences nécessaire un jour )
Ces indications repose sur le travail la réponse d’une personne dans un sujet diffèrent traitant de ces caméra : Caméras de sécurité type Arlo : Eufy - #3 par Benoit_50
Cette solution est cependant moins « invasive/sale » car il n’y a qu’une seule dépendance a installer sur le serveur Jeedom.
Je vais vous présenter comment j’ai mis les choses en place chez moi pour par exemple changer de mode de sécurité sur la HomeBase ou pour activer ou désactiver une caméra.
Historique des modifications sur le poste :
15/03/2022 :
- Ajout des flags COUNTRY et LANGUAGE dans la ligne de commande de création du docker.
- Ajout d’une partie dépannage, lié aux remontées des utilisateurs
Installation
Prérequis :
- Sauvegarder/Snapshoter votre environnement
- D’apres la documentation, le plugin Docker Management n’est pas compatible avec la Jeedom Smart
Procédure de mise en place :
Il est possible d’utiliser 2 méthodes différentes pour déployer le container Docker, les utilisateurs ayant des notions de Docker ou un serveur Docker peuvent se référer a la méthode 2, pour les autres le plus simple est la méthode 1. Une fois le container déployé la procédure est la même.
Méthode 1 : Déployer le container avec le plugin « Docker Management » :
- Installer le plugin « Docker Management » Présent sur le Market Jeedom (Jeedom Market)
- Une fois le plugin installé sur Jeedom, l’activer et installer ses dépendances.
- Se rendre dans le plugin « Docker Management » et créer un nouvel équipement avec le nom « Eufy-WS »
- Relier le a un objet parent et catégoriser le (ou pas, ce n’est pas obligatoire), activer l’équipement et le rendre visible si voulu. Indiquer le nom du container « Eufy-WS », ne cocher pas « Sauvegarder les mount ». Selectionner le mode de création « jeedom docker run » et dans « commande de création » indiquer la commande suivante :
-d --name Eufy-WS -e USERNAME=votreadresseemaileufy -e PASSWORD=votremotdepasseeufy -e COUNTRY=FR -e LANGUAGE=fr -p 3000:3000 bropat/eufy-security-ws
Si vous êtes sur Raspbian vous devez ajouter l’argument « –privileged » a la commande de création du container :
-d --privileged --name Eufy-WS -e USERNAME=votreadresseemaileufy -e PASSWORD=votremotdepasseeufy -e COUNTRY=FR -e LANGUAGE=fr -p 3000:3000 bropat/eufy-security-ws
Le résultat devrait être similaire a ça :
Sélectionner « Sauvegarder », normalement la création du container doit etre en train de se faire a ce moment la.
5. Revenez sur la page de création de votre équipement, vous devriez avoir le detail de votre container sur le coté droit de la page.

6. Si vous le désirez, vous pouvez afficher les « logs Docker » qui vous indiquerons des logs de votre container.
Méthode 2 : Déployer le container avec Docker en mode Standalone :
Déployer et démarrer le container docker du projet eufy-security-ws a l’aide de la commande suivante :
docker run -it -e USERNAME=votreadresseemaileufy -e PASSWORD=votremotdepasseeufy -e COUNTRY=FR -e LANGUAGE=fr -p 3000:3000 bropat/eufy-security-ws
Suite de la procédure commune aux 2 méthodes :
-
Installer le plugin « Script » officiel présent sur le market Jeedom
-
Installer le client WebSocket sur votre Jeedom a l’aide de la commande suivante :
pip3 install websocket-client
OU (en foncton de l’os de votre serveur)
pip install websocket-client
- Se placer dans
/var/www/html/data
et créer un fichier permettant de récupérer les informations de votre environnement Eufy :
get-eufyinfo.py
import json
from websocket import create_connection
ws = create_connection("ws://ADRESSEIPDOCKER:3000")
print(ws.recv())
ws.send(json.dumps({"command": "start_listening"}))
print(ws.recv())
ws.close()
- Exécuter le fichier créer précédemment
python3 get-eufyinfo.py
Vous devriez avoir un retour sur « 2 » lignes :
La première ligne contient quelques infos lié a la librairie en guise d’acquittement de la connexion, la seconde ligne contient les infos liés a votre environnement (Nom, numéro de série, modèle etc.)
Conserver temporairement le résultat dans un notepad et récupérez le numéro de série « serialNumber », il servira pour la suite des commandes.
- Créer un script par fonction que vous souhaitez exécuter.
Par exemple passer en mode « Absent » :
set-eufyaway.py
import json
from websocket import create_connection
ws = create_connection("ws://ADRESSEIPDOCKER:3000")
print(ws.recv())
ws.send(json.dumps({"command": "station.set_property", "serialNumber": "VOTRENUMERODESERIEDESTATION", "name": "guardMode", "value": "0"}))
print(ws.recv())
ws.close()
Même exemple mais pour passer en mode « A la maison » :
set-eufyhome.py
import json
from websocket import create_connection
ws = create_connection("ws://ADRESSEIPDOCKER:3000")
print(ws.recv())
ws.send(json.dumps({"command": "station.set_property", "serialNumber": "VOTRENUMERODESERIEDESTATION", "name": "guardMode", "value": "1"}))
print(ws.recv())
ws.close()
Dans la continuité de ces exemples, voici les autres modes d’alarmes :
Absent = 0
A la maison = 1
Désarmé = 63
Planifié = 2
Géolocalisé = 47
CUSTOM1 = 3
CUSTOM2 = 4
CUSTOM3 = 5
Autre exemple, changer l’état d’une caméra pour l’arrêter :
set-eufycamera1stop.py
import json
from websocket import create_connection
ws = create_connection("ws://ADRESSEIPDOCKER:3000")
print(ws.recv())
ws.send(json.dumps({"command": "device.set_property", "serialNumber": "VOTRENUMERODESERIEDELACAMERA","name": "enabled","value": "false"}))
print(ws.recv())
ws.close()
Même exemple mais pour l’activer :
set-eufycamera1start.py
import json
from websocket import create_connection
ws = create_connection("ws://ADRESSEIPDOCKER:3000")
print(ws.recv())
ws.send(json.dumps({"command": "device.set_property", "serialNumber": "VOTRENUMERODESERIEDELACAMERA","name": "enabled","value": "true"}))
print(ws.recv())
ws.close()
- Ajouter le chemin de chaque script dans le plugin Scripts de Jeedom afin de pouvoir les utiliser. Ca devrait ressembler a ça :
/usr/bin/python3.7 /var/www/html/data/NOMDEVOTRESCRIPT.py &
Voila, vous n’avez plus qu’a créer des virtuel ou des scenario pour que vos scripts s’exécutent.
Je suis preneur de vos remarques pour améliorer ces explications si nécessaires.
Pour ceux qui souhaitent approfondir les possibilités, la doc de la librairie se trouve ici (support du 2FA etc.) : eufy-security-ws - Small wrapper around eufy-security-client library to access it via a WebSocket et pour ma part je réalise mes tests avec Postman.
La liste du matériel supporté est disponible ici : eufy-security-client - A shared library to control Eufy Security devices
Cette méthode a pour intérêt :
- D’être totalement maintenu tant du coté du client WebSocket en python que du coté de la librairie eufy-security-ws
- D’avoir des fonctions qui n’était pas accessible avec les solutions indiqués par le passé
- Moins de dépendances dans votre Jeedom
En ce qui concerne les inconvénients :
- Le principal est qu’il faut faire tourner un container pour que la solution soit fonctionnelle
Et j’en profite pour indiquer que si des gens sont motivés pour bosser sur un plugin, vous etes les bienvenus
Bonne soirée
Dépannage :
Le container ne voit pas ma Homebase
- Vérifier que votre serveur Docker est bien sur le même réseau que votre Homebase. Si vous possédez un routeur ou un point d’accès WiFi configuré en mode routeur et que vos équipements sont sur 2 réseaux différents cela peut générer des problèmes de flux entre les 2 réseaux. De manière générale évitez d’utiliser des routeurs/point d’accès en mode routeur si vous n’avez pas de bonnes connaissance en routage/flux entre 2 réseau. N’hesitez pas a faire des ping/traceroute depuis docker vers votre HomeBase pour avancer le diagnostique.
Lors de la création du container vous obtenez « Core Dumped » et vous utilisez Raspbian :
- La création du container nécessite des privilèges plus élevé
Il faut ajouter l’argument –privileged lors de la création du container
-d --privileged --name Eufy-WS -e USERNAME=votreadresseemaileufy -e PASSWORD=votremotdepasseeufy -e COUNTRY=FR -e LANGUAGE=fr -p 3000:3000 bropat/eufy-security-ws
La connexion a l’environnement Eufy ne se fait pas (un captcha est demandé) (Réalisé avec Postman )
- Exemple :
{"command": "start_listening"}
{"command": "set_api_schema", "schemaVersion": "7"}
{"command": "driver.connect"}
-
A ce moment la le serveur réponds avec une image encodée en base64 ainsi que le captcha id.
Il faut la convertir via n’importe quel convertisseur en ligne puis renvoyer la réponse. -
Par exemple
{"command": "driver.set_captcha", "captchaId": "e45aa3cd-353c-4a96-8885-1595db28e2e2", "captcha": "3DQF"}