Plugin Reolink (en beta)

Mise à jour effectuée et relance du daemon :

0000|Traceback (most recent call last):
0001|File "/var/www/html/plugins/reolink/resources/demond/reolinkd.py", line 33, in 
0002|from jeedom.jeedom import *
0003|File "/var/www/html/plugins/reolink/resources/demond/jeedom/jeedom.py", line 23, in 
0004|import serial
0005|ModuleNotFoundError: No module named 'serial'

Voilà.

J’ai corrigé le défaut ça devrait fonctionner.

salut @Jezza34000,
J’ai constaté un problème sur la récupération des informations de mes cameras (commandes envoyés par le « Payload multiple GetSetting » via un Refresh). Quelques commandes, celles positionnés en fin du payload multiple, répondent avec l’erreur rspcode -16 et les données de ces commandes ne se mettent pas à jour.

exemple:

[2022-03-22 21:06:27][DEBUG] : Payload multiple GetSetting = {"cmd":"GetPush"},{"cmd":"GetRec","action":0,"param":{"channel":0}},{"cmd":"GetEmail","action":0},{"cmd":"GetHddInfo"},{"cmd":"GetFtp","action":0},{"cmd":"GetEnc","action":0,"param":{"channel":0}},{"cmd":"GetAutoMaint","action":0,"param":{"channel":0}},{"cmd":"GetPerformance","param":{"channel":0}},{"cmd":"GetIsp","action":0,"param":{"channel":0}},{"cmd":"GetMask","action":0,"param":{"channel":0}},{"cmd":"GetImage","action":0,"param":{"channel":0}},{"cmd":"GetOsd","action":0,"param":{"channel":0}}
[2022-03-22 21:06:27][DEBUG] : URL de requête => https://192.168.1.60:443/cgi-bin/api.cgi?user=admin&password=******
[2022-03-22 21:06:27][DEBUG] : Payload => [{"cmd":"GetPush"},{"cmd":"GetRec","action":0,"param":{"channel":0}},{"cmd":"GetEmail","action":0},{"cmd":"GetHddInfo"},{"cmd":"GetFtp","action":0},{"cmd":"GetEnc","action":0,"param":{"channel":0}},{"cmd":"GetAutoMaint","action":0,"param":{"channel":0}},{"cmd":"GetPerformance","param":{"channel":0}},{"cmd":"GetIsp","action":0,"param":{"channel":0}},{"cmd":"GetMask","action":0,"param":{"channel":0}},{"cmd":"GetImage","action":0,"param":{"channel":0}},{"cmd":"GetOsd","action":0,"param":{"channel":0}}]
[2022-03-22 21:06:27][DEBUG] : HTTP code 200 OK
[2022-03-22 21:06:27][DEBUG] : Réponse caméra >> [{"cmd":"GetPush","code":0,"value":{"Push":{"schedule":{"enable":1,"table":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}}}},{"cmd":"GetRec","code":0,"value":{"Rec":{"channel":0,"overwrite":1,"postRec":"15Seconds","preRec":1,"schedule":{"enable":0,"table":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}}}},{"cmd":"GetEmail","code":0,"value":{"Email":{"addr1":"","addr2":"","addr3":"","attachmentType":1,"interval":"5Minutes","nickName":"","password":"","schedule":{"enable":0,"table":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},"smtpPort":465,"smtpServer":"smtp.gmail.com","ssl":1,"supportTextType":1,"supportVideo":1,"textType":1,"userName":""}}},{"cmd":"GetHddInfo","code":0,"value":{"HddInfo":[]}},{"cmd":"GetFtp","code":0,"value":{"Ftp":{"anonymous":0,"interval":30,"maxSize":100,"mode":0,"password":"","port":21,"remoteDir":"","schedule":{"enable":0,"table":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},"server":"","streamType":0,"userName":""}}},{"cmd":"GetEnc","code":0,"value":{"Enc":{"audio":0,"channel":0,"mainStream":{"bitRate":6144,"frameRate":30,"height":1920,"profile":"High","resolution":54,"size":"2560*1920","width":2560},"subStream":{"bitRate":160,"frameRate":7,"height":480,"profile":"High","resolution":28,"size":"640*480","width":640}}}},{"cmd":"GetAutoMaint","code":0,"value":{"AutoMaint":{"enable":1,"hour":2,"min":0,"sec":0,"weekDay":"Everyday"}}},{"cmd":"GetPerformance","code":0,"value":{"Performance":{"codecRate":2632,"cpuUsed":38,"netThroughput":144}}},{"cmd":"GetIsp","code":0,"value":{"Isp":{"antiFlicker":"Off","backLight":"Off","blc":128,"blueGain":128,"channel":0,"dayNight":"Auto","drc":128,"exposure":"Auto","gain":{"max":62,"min":1},"mirroring":0,"nr3d":1,"redGain":128,"rotation":0,"shutter":{"max":125,"min":0},"whiteBalance":"Auto"}}},{"cmd":"GetMask","code":0,"value":{"Mask":{"area":[{"block":{"height":453,"width":274,"x":529,"y":0},"screen":{"height":1920,"width":2560}},{"block":{"height":265,"width":1833,"x":727,"y":0},"screen":{"height":1920,"width":2560}},{"block":{"height":274,"width":589,"x":1971,"y":91},"screen":{"height":1920,"width":2560}},{"block":{"height":540,"width":87,"x":788,"y":0},"screen":{"height":1920,"width":2560}}],"channel":0,"enable":1}}},{"cmd":"GetImage","code":1,"error":{"detail":"sendfailed","rspCode":-16}},{"cmd":"GetOsd","code":1,"error":{"detail":"sendfailed","rspCode":-16}}]
[2022-03-22 21:06:28][DEBUG] : Lecture info > Array([cmd]=>GetPush[code]=>0[value]=>Array([Push]=>Array([schedule]=>Array([enable]=>1[table]=>111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111))))
....
[2022-03-22 21:06:28][DEBUG] : Lecture info > Array([cmd]=>GetIsp[code]=>0[value]=>Array([Isp]=>Array([antiFlicker]=>Off[backLight]=>Off[blc]=>128[blueGain]=>128[channel]=>0[dayNight]=>Auto[drc]=>128[exposure]=>Auto[gain]=>Array([max]=>62[min]=>1)[mirroring]=>0[nr3d]=>1[redGain]=>128[rotation]=>0[shutter]=>Array([max]=>125[min]=>0)[whiteBalance]=>Auto)))
[2022-03-22 21:06:28][DEBUG] : Lecture info > Array([cmd]=>GetMask[code]=>0[value]=>Array([Mask]=>Array([area]=>Array([0]=>Array([block]=>Array([height]=>453[width]=>274[x]=>529[y]=>0)[screen]=>Array([height]=>1920[width]=>2560))[1]=>Array([block]=>Array([height]=>265[width]=>1833[x]=>727[y]=>0)[screen]=>Array([height]=>1920[width]=>2560))[2]=>Array([block]=>Array([height]=>274[width]=>589[x]=>1971[y]=>91)[screen]=>Array([height]=>1920[width]=>2560))[3]=>Array([block]=>Array([height]=>540[width]=>87[x]=>788[y]=>0)[screen]=>Array([height]=>1920[width]=>2560)))[channel]=>0[enable]=>1)))
[2022-03-22 21:06:28][DEBUG] : Lecture info > Array([cmd]=>GetImage[code]=>1[error]=>Array([detail]=>sendfailed[rspCode]=>-16))
[2022-03-22 21:06:28][DEBUG] : Lecture info > Array([cmd]=>GetOsd[code]=>1[error]=>Array([detail]=>sendfailed[rspCode]=>-16))

UPDATE :
c’est comme si la camera ne pouvait répondre à un certain nombre de commandes simultanées, envoyées dans un même payload, mais pas plus

Oui je sais, j’ai déjà constaté cette problématique, mais malheureusement je n’ai pas de réponses ni de solution…
Je dirais encore une enième bizzarerie exotique du firmware des caméras de cette marque.

Sur la mienne, sur l’interface web j’ai constaté que la partie réseau plante, je suis obligé de faire 4/5 refresh pour obtenir la page. Et ce n’est pas ma caméra, car elle est déjà repartie en échange et j’ai le même problème avec la nouvelle ! bref… Plus j’avance dans ce projet et plus je me dis que Reolink c’est compliqué niveau firmware et stabilité!

Hello, je sais pas si c’est lié au plugin ou pas mais tous mes curseurs luminosité, contraste, saturation, teinte, focus, zoom, vitesse, netteté restent sur une valeur de 1.

J’ai pourtant bloqué le focus à une valeur fixe dans mes camera E1 Zoom mais cette valeur n’apparais jamais dans le plugin.

Lorsque je fixe la valeur de focus dans le plugin, après quelques jours ou pour une raison que j’ignore (update du plugin), elle revient à 1

Une idée de ce qui se passe ? Peut-on « bloquer » le focus (en supprimant la commande ?) pour s’assurer que le plugin n’interfère pas ?

Merci. Je confirme que la daemon démarre maintenant correctement.

Petite question : il y a ceci dans la log du daemon


0050|[2022-03-24 16:20:02]DEBUG : Request subscription_manager to set webhook on camera = 192.168.1.30:8000
0051|[2022-03-24 16:20:02]DEBUG : SMAN : Reolink host 192.168.1.30 (Subscription) request
0052|[2022-03-24 16:20:02]DEBUG : SMAN : Reolink host 192.168.1.30 (Subscription) got response status: 200.
0053|
0054|http://192.168.47.167:8000/onvif/Notification?Idx=00_02022-03-24T15:00:06Z2022-03-24T15:15:06Z
0055|
0056|http://192.168.47.167:8000/onvif/Notification?Idx=00_12022-03-24T15:10:04Z2022-03-24T15:25:04Z
0057|
0058|http://192.168.47.167:8000/onvif/Notification?Idx=00_02022-03-24T15:20:03Z2022-03-24T15:35:03Z
0059|[2022-03-24 16:20:02]DEBUG : SMAN : Local time: 2022-03-24 15:20, camera time: 2022-03-24 15:20 (difference: 0.1577448844909668), termination time: 2022-03-24 15:35
0060|[2022-03-24 16:20:02]DEBUG : Starting local hook on : http://192.168.1.62:5555/inbound_events
0061|[2022-03-24 16:20:02]DEBUG : Subscribe OK

A quoi correspond l’IP 192.168.47.167 ?
Merci.

Aucune idée.
C’est la caméra qui répond ça et je ne sais pas à quoi ca correspond, c’est une IP local mais elle est inexistante sur le réseau et ne répond pas. Sûrement un bug

Bonsoir,

Merci pour ce plugin car ça fait plusieurs semaines que je m’acharne à essayer de déclencher des scénarios sur la détection de ma RLC410-5MP et que je ne m’en sortais pas du tout avec le plugin CAMERA ou avec les scripts. Avec votre plugin, ça fonctionne à merveille !

J’aurai 2 requêtes (désolé si elles ont déjà été formulées mais le fil est trop long pour que je lise tout) :

  • possibilité de donner le hostname plutôt qu’une adresse IP (j’ai un serveur DNS sur mon réseau local et ça simplifie beaucoup la gestion) : je n’ai pas réussi à le faire en l’état.
  • affichage du flux dans le widget sur le dashboard permettrait de totalement se passer du pluggin CAMERA.

Je peux aider pour des tests si besoin.

Merci beaucoup pour votre travail !

Hello @f4ctz
Merci pour ton message et super si tout fonctionne :blush:
Concernant tes 2 points :

  • Je vais investiguer ce qui bloque sur la partie hostname…
  • Pour le flux vidéo, le but de mon plugin est une complémentarité de ce qui est déjà existant, donc vu que le plugin caméra le fait très bien je ne vais pas ré-écrire cette partie là :slight_smile:

Hello,

Pour le sujet des NVR @T.Boon j’ai tenté de sortir le champ « Channel » je ne garantie pas le fonctionnement, mais ton test et ceux qui aurait des Reolink via NVR m’intéresse…

Pour le sujet des Erreurs 16, j’ai mise en ligne le PR de @mnpg

@f4ctz j’ai modifié le code normalement les nom d’hôtes passent…

à voir ce que ces 3 sujets donnent…

Salut,

Ca semble marcher pour le hostname, merci !

OK pour le flux video.

A quelle fréquence le daemon (je suppose que c’est lui qui s’en occupe mais je peux me tromper) envoie les requêtes HTTP pour récupérer les états, notamment pour la détection de mouvement ?

Parfait si ça marche.
Le daemon ne fait pas de « Refresh », il écoute et attends que la caméra lui envoi les notifications de détection. C’est donc pratiquement instantanée.
Pour tous les autres paramètre : c’est un CRON qui refresh en faisant une demande à la caméra toutes les 15 minutes.

Comment tu fais pour dire à la caméra de t’envoyer les notifications de détection de mouvement ? En lisant l’API, il me semblait comprendre qu’il fallait l’interroger pour avoir la valeur en retour.

J’ai un scénario qui déclenche un éclairage sur la détection du mouvement : scénario provoqué justement par l’INFO « Mouvement détecté ». Depuis que j’ai fait la mise à jour pour avoir le hostname, j’ai l’impression que les détections ne remontent plus (j’ai redémarré le démon). Un idée ?

Exacte. Cela ne peux pas fonctionner avec un hostname, il faut que je modifie la fonction qui notifie, pour qu’elle prenne en compte les hostname.
Pour faire simple : je me connecte à la caméra via un service et je lui demande de me transférer toutes les remontées sur le webhook ouvert par le daemon.

hello @f4ctz
Tu peux me dire si ça fonctionne pour la modif que j’ai faite et si les notif depuis la caméra refonctionne correctement ?
Merci

Hello. Depuis la dernière beta, j’ai toutes les quelques minutes cette erreur qui apparait:

Format du payload POST n'est pas un JSON valide, envoi commande échoué

@BorisTS : Afin de pourvoir identifier la source du problème (je pense, première supposition, que c’est lié à la modif que j’ai fait parvenir à @Jezza34000 sur la correction des erreurs -16), actives le mode debug des journaux et fait nous suivre le log « Reolink » contenant cette erreur.

Merci

@mnpg @BorisTS Oui c’est la modification de l’envoi des commandes par bloc qui provoque cette erreur.
Cela ne gêne pas le fonctionnement.
Pas besoin des logs, merci
Je corrige ça dès que j’ai 2 mniutes…

1 « J'aime »

Je le savais (pas besoin de log) :wink: merci pour ce super boulot, je vois qu’il y a les retour des réglages maintenant. Au top ce plugin

@Jezza34000,
panni probleme… thanks

je te fais suivre le problème que j’ai depuis peu : le démon qui se mets en erreur et le redémarrage auto (activé) n’arrive pas à le relancer. seule une relance manuelle de ce dernier fonctionne. voila l’erreur:

NB: tu trouveras, en fin de log, la relance manuelle qui fonctionne (à partir de 15h34)

[2022-04-01 15:25:07][INFO] : Start demond
[2022-04-01 15:25:07][INFO] : Log level : debug
[2022-04-01 15:25:07][INFO] : Socket port : 44009
[2022-04-01 15:25:07][INFO] : Socket host : localhost
[2022-04-01 15:25:07][INFO] : PID file : /tmp/jeedom/reolink/deamon.pid
[2022-04-01 15:25:07][INFO] : Apikey : YbwbCweJ3qKWnPXaHNhwJJcY*****
[2022-04-01 15:25:07][INFO] : Device : auto
[2022-04-01 15:25:07][INFO] : Write creds file for camhook
Traceback (most recent call last):
File "/var/www/html/plugins/reolink/resources/demond/reolinkd.py", line 185, in <module>
with open('jeedomcreds', 'w') as f:
PermissionError: [Errno 13] Permission denied: 'jeedomcreds'
[2022-04-01 15:30:09][INFO] : Start demond
[2022-04-01 15:30:09][INFO] : Log level : debug
[2022-04-01 15:30:09][INFO] : Socket port : 44009
[2022-04-01 15:30:09][INFO] : Socket host : localhost
[2022-04-01 15:30:09][INFO] : PID file : /tmp/jeedom/reolink/deamon.pid
[2022-04-01 15:30:09][INFO] : Apikey : YbwbCweJ3qKWnPXaHNhwJJcY*****
[2022-04-01 15:30:09][INFO] : Device : auto
[2022-04-01 15:30:09][INFO] : Write creds file for camhook
Traceback (most recent call last):
File "/var/www/html/plugins/reolink/resources/demond/reolinkd.py", line 185, in <module>
with open('jeedomcreds', 'w') as f:
PermissionError: [Errno 13] Permission denied: 'jeedomcreds'
[2022-04-01 15:34:29][INFO] : Start demond
[2022-04-01 15:34:29][INFO] : Log level : debug
[2022-04-01 15:34:29][INFO] : Socket port : 44009
[2022-04-01 15:34:29][INFO] : Socket host : localhost
[2022-04-01 15:34:29][INFO] : PID file : /tmp/jeedom/reolink/deamon.pid
[2022-04-01 15:34:29][INFO] : Apikey : YbwbCweJ3qKWnPXaHNhwJJcY*****
[2022-04-01 15:34:29][INFO] : Device : auto
[2022-04-01 15:34:29][INFO] : Write creds file for camhook
[2022-04-01 15:34:29][DEBUG] : Writing PID 2226 to /tmp/jeedom/reolink/deamon.pid
[2022-04-01 15:34:29][INFO] : Starting webhook...
[2022-04-01 15:34:29][DEBUG] : Socket interface started
[2022-04-01 15:34:29][DEBUG] : LoopNetServer Thread started
[2022-04-01 15:34:29][DEBUG] : Listening on: [localhost:44009]
[2022-04-01 15:34:29][DEBUG] : Using selector: EpollSelector
[2022-04-01 15:34:30][DEBUG] : Init request module v2.21.0
INFO:     Started server process [2233]
[2022-04-01 15:34:30][INFO] : Started server process [2233]
INFO:     Waiting for application startup.
[2022-04-01 15:34:30][INFO] : Waiting for application startup.
INFO:     Application startup complete.
[2022-04-01 15:34:30][INFO] : Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:5555 (Press CTRL+C to quit)
[2022-04-01 15:34:30][INFO] : Uvicorn running on http://0.0.0.0:5555 (Press CTRL+C to quit)