Subscribe to ONVIF events (motion, visitor, faceDetect, ...) with Reolink Doorbell POE

Après avoir travaillé avec le https://webhook.site pour analyser les informations remontant de la Reolink Video Doorbell, j’ai récupéré le plugin de @Jezza34000 modifié par @t0urista (un grand merci à eux pour ce plugin)

Ne voulant pas me remettre à l’analyse du code, je me suis mis de mèche avec Perplexity AI pour corriger tout cela

J’ai donc un nouveau plugin totalement opérationnel pour la Video Doorbell.

Tous les évènement remontent bien et le evMotion est géré sur n’importe quel évènement.
Apparemment cette doorbell ne supporte pas le Face detection

image

Néanmoins le EvVisitor est OK, je n’ai pas eu l’occasion encoe de tester PET et VEHICULE.

Voilà le code qui peut vous intéresser pour le camhook.py et le jeeReolink.php

jeeReolink.php.txt (4,7 Ko)
camhook.py.txt (5,5 Ko)

Il faudra enlever les .txt pour rendre les fichiers utilisables dans

\plugins\reolink\core\php\jeeReolink.php
\plugins\reolink\resources\demond\camhook.py

@Jezza34000 si le code vous convient, vous pourrez updater le plugin sur le market pour une future mise à jour.

Voilà la documentation produite par Perplexity

Documentation – Intégration Reolink / Jeedom

1. Principe général

Le couple formé par camhook.py (daemon HTTP Python) et jeeReolink.php (listener Jeedom) permet de remonter en temps réel les événements détectés par les caméras Reolink vers Jeedom.

  • camhook.py reçoit les webhooks JSON ou les événements XML ONVIF.
  • Il les convertit en messages formatés JSON et les envoie à la passerelle PHP (jeeReolink.php) via l’API Jeedom.
  • jeeReolink.php met ensuite à jour les commandes Info des équipements caméra dans Jeedom.

2. Types d’événements traités

Source Type Message envoyé vers PHP Commande mise à jour dans Jeedom Description
Webhook Reolink "MD" "MdState" MdState Mouvement standard (Motion Detect)
Webhook Reolink "PEOPLE" "EvPeopleDetect" EvPeopleDetect Détection de personne
Webhook Reolink "VEHICLE" "EvVehicleDetect" EvVehicleDetect Détection de véhicule
Webhook Reolink "DOG_CAT" "EvDogCatDetect" EvDogCatDetect Détection chien/chat
Webhook Reolink "FACE" "EvFaceDetect" EvFaceDetect Détection de visage
Webhook Reolink "VISITOR" "EvVisitor" EvVisitor Détection « visiteur »
Webhook Reolink Tous les précédents "EvMotion" EvMotion Mouvement global (agrégé)
ONVIF XML IsMotion "MdState" MdState Mouvement ONVIF
ONVIF XML Autres tags ONVIF "EvXXX" EvXXX Événements ONVIF (Audio, Tamper, etc.)

3. Règles de fonctionnement

  • Chaque événement de mouvement ou AI (PEOPLE, VEHICLE, etc.) déclenche :
    • Sa commande spécifique (EvPeopleDetect, MdState, etc.).
    • Et le flag global EvMotion = 1 (puis reset après 5 min).
  • Le MdState reste le capteur de mouvement standard, cohérent avec le comportement du plugin Reolink Jeedom d’origine.
  • Les événements ONVIF XML suivent la même logique : chaque événement envoie aussi un EvMotion global.
  • Les valeurs 0/1 représentent l’état instantané du détecteur :
    • 1 → Événement détecté.
    • 0 → Retour à l’état inactif (automatiquement après 5 minutes).

4. Logs et diagnostic

côté camhook.py (Python):

  • Les messages sont loggés sous uvicorn :
    • 🚶 EvMotion global déclenché par ...
    • 🔔 <Type> → <Jeedom_event>
    • 🔄 Reset <événement> après temporisation.

côté Jeedom (PHP : reolink.log) :

  • debug — indique réception d’événements et mises à jour.
  • error — si un message non reconnu est reçu (avec tout le JSON pour analyse).

Message d’erreur typique :

text

[ERROR] Unknown message received from daemon: {"ip":"192.168.x.x","message":"EvXYZ","motionstate":1}

→ Cela signifie que le démon a envoyé un message que Jeedom ne sait pas encore traiter (souvent un nouvel événement ONVIF non prévu).


5. Paramètres clés

Élément Durée / Valeur Rôle
Temporisation reset (dans camhook.py) 300 s (5 min) Durée avant remise à 0 d’un événement actif
Commandes globales utilisées EvMotion / MdState / EvLastOnvif* Commandes universelles pour le dashboard
Condition principale (PHP) motion, MdState, toute chaîne contenant Ev Messages reconnus

6. Extension / Debug

Pour ajouter un nouveau type d’événement, il suffit de :

  1. Ajouter son mapping dans event_map du camhook.py.
  2. S’assurer que son nom contient "Ev" ou l’ajouter explicitement à la condition PHP.

Exemple :

python

event_map["AUDIO"] = "EvAudioDetect"

et côté PHP :

php

if (strpos($result['message'], 'Ev') !== false)

→ fonctionne directement.

1 « J'aime »

Bonjour, honnêtement je ne comprend pas tout mais je vote pour une mise à jour du plugin! J’ai une E1 zoom: aucune remontée de détection,
Impossible d’activer/désactiver le suivi de mouvement.
J’utilise Surveillance Station donc ça fait le travail mais on ne peut pas utiliser toutes les fonctions de la caméra.

Merci pour vos efforts.

Bonjour

J’ai mis les 2 fichiers modifiés dans mon poste précédent.

Il suffit de prendre le gestionnaire de fichiers dans le menu systeme de jeedom et copier les 2 fichiers dans leur bon répertoire (dupliquer les fichiers d’origine pour les garder en sauvegarde).

Après un redémarrage du démon, hop tout fonctionne.

1 « J'aime »

Bonjour, oui ça j’avais compris mais pas de changement sur ma E1 Zoom. Toujours pas de remontée des détections dans Jeedom alors que ça fonctionne dans Surveillance station. En fait, avec Surveillance Station je n’en ai pas vraiment besoin, le seule truc qui me gêne c’est de ne pas pouvoir activer/désactiver le suivi de mouvement en fonction de la présence.

L’adresse IP de la caméra est bonne, je reçois bien des infos, j’arrive à envoyer des ordres pour la bouger.
Mais les remontées de détection ou l’activation/désactivation du suivi ne passent pas.

[2026-01-02 11:00:07] DEBUG  : Client connected to [127.0.0.1:38666]
[2026-01-02 11:00:07] DEBUG  : Client disconnected from [127.0.0.1:38666]
[2026-01-02 11:00:07] DEBUG  : Message received in socket JEEDOM_SOCKET_MESSAGE
[2026-01-02 11:00:07] DEBUG  : Requested to set the webhook inside CAM IP=192.168.1.xxx
ping: socket: Operation not permitted
[2026-01-02 11:00:07] ERROR  : CAM IP=192.168.1.xxx is not reachable. (Please check that the camera is switched ON and correctly connected to the network)
[2026-01-02 11:00:07] DEBUG  : Send to jeedom :  {'message': 'subscription', 'ip': '192.168.1.xxx', 'state': 0, 'details': 'Camera is not reachable'}
[2026-01-02 11:00:07] DEBUG  : Starting new HTTP connection (1): 127.0.0.1:80
[2026-01-02 11:00:07] DEBUG  : http://127.0.0.1:80 "POST /plugins/reolink/core/php/jeeReolink.php?apikey=..." 200 0

Pendez a placer manuellement dans la camera le webhook pointant sur l’IP de votre jeedom sans oublier le port.

Http://:

Le plugin n’arrive plus a le faire.

Je regarderai cela plus tard

ah là ça y est, tu m’as perdu!

Sur la caméra, j’ai laissé par défaut:

Sur le plugin:

Bonjour

Pendez a placer manuellement dans la camera le webhook pointant sur l’IP de votre jeedom sans oublier le port.

Http://:

Le plugin 'arrive plus a le faire.

via l application reolink qu’il faut le faire (webhook

Il faut se connecter à la caméra via son interface web en http et là, il faut aller dans la section surveillance.

Il y a un bouton webhook, dans le web book il faut mettre l’adresse de jeedom avec le port du démon normalement 44010.

Merci, je ne vois pas de Webhook:

Quand j’essaye d’activer le Tracking depuis Jeedom, j’ai ça:

[2026-01-02 18:39:54] DEBUG  Action demandé : SetaiTrack
[2026-01-02 18:39:54] DEBUG  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2026-01-02 18:39:54] DEBUG  Vérification à 1767375594 du TOKEN : xxx Valable jusqu'à : 1767375894
[2026-01-02 18:39:54] DEBUG  API Token OK
[2026-01-02 18:39:54] DEBUG  Payload avec paramètre utilisateur demandé = [{"cmd":"SetAiCfg","param":{"channel":0,"aiTrack":1}}]
[2026-01-02 18:39:54] DEBUG  URL de requête => https://192.168.1.xxx:443/cgi-bin/api.cgi?token=xxx
[2026-01-02 18:39:54] DEBUG  Payload => [{"cmd":"SetAiCfg","param":{"channel":0,"aiTrack":1}}]
[2026-01-02 18:39:54] DEBUG  HTTP code 200 OK
[2026-01-02 18:39:55] DEBUG  Réponse caméra >> [{"cmd":"SetAiCfg","code":0,"value":{"rspCode":200}}]
[2026-01-02 18:39:55] DEBUG OK> Action réalisé avec succès sur la caméra
[2026-01-02 18:39:55] DEBUG  Mise à jour de l'info liée : SetaiTrackState Valeur=1
[2026-01-02 18:39:55] DEBUG  ============================================================
[2026-01-02 18:40:05] DEBUG  CRON mise à jour souscription ONVIF events Cam=192.168.1.xxx

On dirait que ça se passe bien mais le paramètre ne change pas dans la caméra.

Sur le démon:

[2026-01-02 17:36:50] INFO  : Start demond
[2026-01-02 17:36:50] INFO  : Log level : debug
[2026-01-02 17:36:50] INFO  : Socket port : 44009
[2026-01-02 17:36:50] INFO  : Socket host : localhost
[2026-01-02 17:36:50] INFO  : PID file : /tmp/jeedom/reolink/deamon.pid
[2026-01-02 17:36:50] INFO  : Apikey : xxx
[2026-01-02 17:36:50] INFO  : Device : auto
[2026-01-02 17:36:50] INFO  : Webhook IP : IP de JEEDOM
[2026-01-02 17:36:50] INFO  : Webhook port : 44010
[2026-01-02 17:36:50] INFO  : Write creds file for camhook
[2026-01-02 17:36:50] DEBUG  : Writing PID 240373 to /tmp/jeedom/reolink/deamon.pid
[2026-01-02 17:36:50] INFO  : Starting webhook...
[2026-01-02 17:36:50] DEBUG  : Socket interface started
[2026-01-02 17:36:50] DEBUG  : LoopNetServer Thread started
[2026-01-02 17:36:50] DEBUG  : Listening on: [localhost:44009]
[2026-01-02 17:36:56] DEBUG  : Init request module v2.32.5
INFO:     Started server process [240377]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:44010 (Press CTRL+C to quit)
[2026-01-02 17:40:05] DEBUG  : Client connected to [127.0.0.1:53802]
[2026-01-02 17:40:05] DEBUG  : Client disconnected from [127.0.0.1:53802]
[2026-01-02 17:40:05] DEBUG  : Message received in socket JEEDOM_SOCKET_MESSAGE
[2026-01-02 17:40:05] DEBUG  : Requested to set the webhook inside CAM IP=192.168.1.xxx
ping: socket: Operation not permitted
[2026-01-02 17:40:05] ERROR  : CAM IP=192.168.1.xxx is not reachable. (Please check that the camera is switched ON and correctly connected to the network)
[2026-01-02 17:40:05] DEBUG  : Send to jeedom :  {'message': 'subscription', 'ip': '192.168.1.xxx', 'state': 0, 'details': 'Camera is not reachable'}
[2026-01-02 17:40:05] DEBUG  : Starting new HTTP connection (1): 127.0.0.1:80
[2026-01-02 17:40:05] DEBUG  : http://127.0.0.1:80 "POST /plugins/reolink/core/php/jeeReolink.php?apikey=xxx HTTP/11" 200 0

Une chose bizarre: l’IP 0.0.0.0 sur Uvicorn.

Le webhook est dans push

J’ai changé mon IP :wink:

pas besoin pour moi: aucun Webhook sur la E1 Zoom…

Malgré ce que dit l’appli Reolink, il semble que je n’ai pas le dernier firmware, je mets à jour…

Miracle: Webhook apparait mais quand je teste, il me renvoie une erreur.
image

l’address doit être http://:

SI cela ne va pas dans la configuration du plugin si autodetection ne marche pas
choisir

IP Personnalisée
IP du Jeedom
Port 44010

Pour résoudre le problème de mise à jour du Webhook en automatique

Perplexity a encore synthétisé la bonne réponse

Le plugin n’arrive pas à mettre à jour le webhook parce qu’il ne peut même pas « pinguer » la doorbell : le ping lancé par le démon échoue avec ping: socket: Operation not permitted, donc le plugin considère la cam comme non joignable et n’envoie pas la requête de configuration du webhook.jeedom+2

Origine la plus probable

Sur Debian 12, ping utilise le binaire iputils-ping qui requiert soit le setuid root, soit la capability CAP_NET_RAW.
Si le binaire n’a plus ces droits (sécurisation, changement de paquet, conteneur, LXC, etc.), tout appel à ping par l’utilisateur du démon (souvent www-data ou jeedom) renvoie Operation not permitted, même si la cam répond parfaitement au réseau.jeedom+1

Vérifications à faire en SSH

Depuis ton Jeedom (SSH, en root ou via sudo) :

  1. Tester le ping « normal » :
  • ping -c 2 192.168.1.xxx
    Si ça marche en root mais pas en www-data, c’est bien un problème de droits.jeedom
  1. Vérifier le binaire ping :
  • which ping
  • ls -l $(which ping)
    Il devrait être soit setuid root (-rwsr-xr-x root root), soit avoir les capabilities :
  • getcap $(which ping)cap_net_raw=ep.jeedom

Correctifs possibles

En root (à adapter selon ta politique sécurité) :

  • Option A (classique, setuid) :

bash

sudo chmod u+s /usr/bin/ping
  • Option B (capability, plus propre) :

bash

sudo setcap cap_net_raw+ep /usr/bin/ping

Ensuite redémarrer le démon du plugin Reolink dans Jeedom, puis relancer la configuration du webhook.jeedom+1

Points spécifiques Reolink

  • Vérifie dans les logs Reolink qu’après correction de ping tu n’as plus la ligne CAM IP=... is not reachable.jeedom+1
  • Assure‑toi que l’IP/port de webhook configurés dans le plugin correspondent bien à l’IP de ton Jeedom (LAN, pas IP d’accès externe) et que ta doorbell a le dernier firmware Reolink (certains firmwares ont modifié la gestion des webhooks).github+1

Si tu veux, colle le morceau complet de log Reolink autour de cette ligne et la sortie de ls -l /usr/bin/ping / getcap /usr/bin/ping, on pourra confirmer exactement le point de blocage.

Ca ne me semble pas mal:

image

image

Le ping vers la caméra fonctionne

1 « J'aime »

Gotcha

Done deal

Ensuite l’utilisation de https://webhook.site est cool pour tester un équipement

Tu me fais des pièges! webHook !
Ca fonctionne, la caméra envoie bien des trames

Typo corrigée

Après redémarrage de la box Luna, ça fonctionne!
J’ai bien les alertes par contre, toujours pas d’activation/désactivation du suivi.

là je ne sais pas aider

Essaie avec Perplexity AI, c’est ouf.
Formule bien les questions, le moteur IA est d’enfer
Installable via le windows play store ou android play store