REOLINK - Liste de commandes via API

Salut quand tu demande un mouvement, il faut automatiquement faire un stop avec le script de mnpg

bonsoir @Theric,
je te fais suivre une modification du script qui prends en compte un arrêt, au bout de x secondes, de la commande ptz de mouvement envoyée.

tu trouveras le code modifié ci-dessus. Il fonctionne de façon identique à celui déposé dans le post.

il suffira de modifier, dans le script, la variable sleeptime (définie dans le script ci-dessous a sleeptime=2), temps en secondes, et mettre le temps d’attente que tu souhaites. Ce temps d’attente correspond à une tempo entre l’exécution de la commande ptz de mouvement et l’exécution de la commande ptz de stop

#!/bin/bash
## Script Reolink_API_PTZ_Commands.sh
## ./Reolink_API_PTZ_Commands.sh <IP> 'commande PTZ Reolink' 'parametre de la commande'  (respecter la casse)
## 'commandes PTZ Reolink' : PtzCtrl, GetPtzPatrol, SetPtzPatrol
## 'parametre de la commande' possible : Left, Right, Up, Down, LeftUp, RightUp, LeftDown, RightDown, ZoomInc, ZoomDec, FocusInc, FocusDec, ZoomPos, ToPos, StartPatrol, StopPatrol, Stop
## Exemple : ./Reolink_API_PTZ_Commands.sh <IP> PtzCtrl Left <vitesse> <presetid>
IP=$1
username="cameraUser"
passwd="<cameraPassword>"

command=$2
parameter=$3

actionptz=0
#temps d'attente avant un stop de l'action (en secondes)
sleeptime=2

#Variable vitesse de déplacement -ici à 32-
speed=$4
id=$5

case $command in
        GetPtzPatrol)
                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0}}]";;
        SetPtzPatrol)
                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"PtzPatrol\":"${parameter}"}}]";;
        PtzCtrl)
                case $parameter in
                        Left|Right|Up|Down|LeftUp|RightUp|LeftDown|RightDown|ZoomInc|ZoomDec|FocusInc|FocusDec)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\",\"speed\":${speed}}}]"
                                actionptz=1;;
                        Stop)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\"}}]";;
                        ZoomPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"ZoomFocus\":{\"channel\":0,\"op\":\""${parameter}"\",\"pos\":${speed}}}}]";;
                        ToPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"id\":${id},\"op\":\""${parameter}"\",\"speed\":${speed}}}]";;
                        StartPatrol|StopPatrol)
                                id=${speed}
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"id\":${id},\"op\":\""${parameter}"\"}}]";;
                esac;;
esac

curl -s -k -X POST -H "Content-Type: application/json" -d "${payload}" "http://${IP}/cgi-bin/api.cgi?cmd=${command}&user=${username}&password=${passwd}"


if [ "${actionptz}" == 1 ]; then
	parameter="Stop"
	sleep $sleeptime
	payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\"}}]"
	curl -k -X POST -H "Content-Type: application/json" -d "${payload}" "http://${IP}/cgi-bin/api.cgi?cmd=${command}&user=${username}&password=${passwd}"
fi

Le bénéfice que je vois a l’utilisation de ce script par rapport a celui précédent, c’est que les déplacements se feront par à-coups (ou saccades) pour une gestion plus fine de ces derniers par des exécutions successives du script. L’utilisation du script non modifié permettant quand à lui de larges balayages. Rien n’empêche d’avoir les 2 scripts à l’usage, juste mettre un nom différent à ces derniers pour les appeler séparément.

Merci pour ta remarque et tes encouragements.

EDIT : Après tests, il est préférable de mettre 1 seconde d’attente (sleeptime=1). Le balayage complet gauche-droite de ma E1Zoom mets environ une douzaine de secondes.

Moi de mon coté cela ne fonctionne pas sur une RLC-810a

@Neoback45 bonjour tout d’abords, c’est la moindre des choses.
comme je l’ai précisé dans le post, ce flux rtmp fonctionne parfaitement sur la RLC-520 (je viens de refaire un test sous VLC qui a été concluant).
Ayant tellement peu d’informations dans ton post sur le pourquoi cela ne marche pas chez toi (test du flux fait sous jeedom? via VLC? autre?), je ne sais quoi répondre et t’aider dans la résolution de ton problème.
cdt

Post bimensuel récapitulatif JUIN-JUILLET 2021

Ce post regroupe les modifs apportées dans le premier post entre juin et juillet 2021; Vous trouverez le détail de ces informations dans les parties documentations, URLs, ou commandes (applicables ou pas sur la rlc-520) du post 1

  • 26/07/2021 : Ajout URL NVR : Which Cameras can Work with Reolink NVR
  • 25/07/2021 : Ajout URL NVR : How Many HDDs Can I Connect with Reolink NVR System
  • 25/07/2021 : Ajout URLs Projets+Documentations techniques (exemples : reolinkapipy, Camera-proxy, neolink)
  • 24/07/2021 : Ajout URL Code pour générer un QRCode pour caméras WIFI Reolink : cas des SSID de longueur supérieure à 32 caractères + URL Generateur de QRCodes Online (gratuit)
  • 11/07/2021 : Ajout URL Comment fonctionnent les remontées PUSH
  • 27/06/2021 : Ajout de nouvelles commandes récentes non utilisables/applicables sur la RLC-520 (commandes spécifiques aux cameras, statiques ou motorisées, avec detection Personne/Véhicule)
  • 04/06/2021 : Ajout Documentation Reolink (CGI.pdf) -version 2021-
1 « J'aime »

Bonjour,
Désolée j’ai répondu trop rapidement c’était la fin de journée :slight_smile:
J’ai réussi! Ça fonctionne avec ma rlc-810a. J’ai une rlc-811a qui a un projecteur et une sirène et également un haut parleur pour avoir le son bidirectionnel. Tu pense que je peu récupérer les commande de ceux ci?

Bonjour @Neoback45,
tant mieux que cela fonctionne sur ta 810a. De ce que j’ai pu trouvé (non testé), on peut interagir avec :

  • le projecteur led : commandes GetWhiteLed/SetWhiteLed
  • la sirène :
    • commandes GetAudioAlarm/SetAudioAlarm pour les cameras sans Smart Detection (détection personne/véhicule)
    • commandes GetAudioAlarmV20/SetAudioAlarmV20 pour les cameras avec Smart Detection

NB : la sirène est dépendante de la détection de mouvement, elle ne peut pas être utilisé en solo.

Par contre, pour l’audio bidirectionnel, ayant une E1Zoom possédant cette fonctionnalité, je n’ai pas trouvé de commande à ce sujet.
Sur les firmwares récents des cameras avec smart detection, Il existe trois nouvelles commandes qui sembleraient être liés à l’audio (de part leur nom) :

  • GetAudioCfg/SetAudioCfg
  • AudioAlarmPlay

Je ne peux t’en dire plus à ce sujet, je n’ai aucune info sur ces commandes.

NB : Reolink ne nous facilite pas la tâche pour récupérer les informations sur les commandes. Depuis les derniers firmwares des cameras avec Smart Detection, les fichiers json d’interrogation ou de réponse sont cryptés dans l’interface web de ces cameras (celles avec lesquelles on peut communiquer via l’API).

A+

Bonjour mnpg,
Je n’avais pas vu ton message. Merci pour t’être pencher sur mon problème. je viens de tester ton script mais ca ne fonctionne pas.
pour les mouvements il n’y a rien qui bouge et des que j’utilise le zoom j’ai le message d’erreur suivant :

2021-08-04 20:16:19 script Erreur exécution de la commande [Bar][Reolink E1 Zoom][Zoom +] : Erreur sur /var/www/html/plugins/script/data/Reolink_API_PTZ.sh 192.168.1.26 PtzCtrl ZoomInc 2>&1 valeur retournée : 2. Détails : [ { « cmd » : « PtzCtrl », « code » : 1, « error » : { « detail » : « param error », « rspCode » : -4 } } ] /var/www/html/plugins/script/data/Reolink_API_PTZ.sh: line 50: syntax error near unexpected token fi' /var/www/html/plugins/script/data/Reolink_API_PTZ.sh: line 50: fi’
2021-08-04 20:16:19 camera Erreur exécution de la commande [Bar][Camera Bar Temporise][Zoom +] : Erreur sur /var/www/html/plugins/script/data/Reolink_API_PTZ.sh 192.168.1.26 PtzCtrl ZoomInc 2>&1 valeur retournée : 2. Détails : [ { « cmd » : « PtzCtrl », « code » : 1, « error » : { « detail » : « param error », « rspCode » : -4 } } ] /var/www/html/plugins/script/data/Reolink_API_PTZ.sh: line 50: syntax error near unexpected token fi' /var/www/html/plugins/script/data/Reolink_API_PTZ.sh: line 50: fi’

pour info, j’ai dupliqué la camera et le script pour travailler dessus sans altérer la version qui fonctionne avec le script original.

Entre temps j’avais solutionner mon problème en ajoutant la requête « stop » sur la ligne qui demande l’URL de stop

image
image

Merci pour le temps passé et ton aide sur les commandes API des réolink.
T.

bonjour @Theric,
oops! mea culpa! merci pour l’info. Il y a une erreur (« ; » mal placé) dans le script à la ligne :

if [ "${actionptz}" == 1 ] then;

la remplacer par :

if [ "${actionptz}" == 1 ]; then

Pour le pb du zoom sur ta E1Zoom,le résultat que tu as est normal. La commande PtzCtrl ZoomInc (mais aussi ZoomDec, FocusInc et FocusDec) ne fonctionne pas sur la E1-Zoom. Cette partie zoom (et focus) de la E1-Zoom passe par la commande StartZoomFocus.

EDIT :
je te fais suivre la partie du script à modifier pour l’utiliser :

REMPLACER

case $command in
        GetPtzPatrol)
                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0}}]";;
        SetPtzPatrol)
                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"PtzPatrol\":"${parameter}"}}]";;
        PtzCtrl)
                case $parameter in
                        Left|Right|Up|Down|LeftUp|RightUp|LeftDown|RightDown|ZoomInc|ZoomDec|FocusInc|FocusDec)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\",\"speed\":${speed}}}]"
                                actionptz=1;;
                        Stop)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\"}}]";;
                        ZoomPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"ZoomFocus\":{\"channel\":0,\"op\":\""${parameter}"\",\"pos\":${speed}}}}]";;
                        ToPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"id\":${id},\"op\":\""${parameter}"\",\"speed\":${speed}}}]";;
                        StartPatrol|StopPatrol)
                                id=${speed}
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"id\":${id},\"op\":\""${parameter}"\"}}]";;
                esac;;
esac

PAR :

case $command in
        GetPtzPatrol)
                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0}}]";;
        SetPtzPatrol)
                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"PtzPatrol\":"${parameter}"}}]";;
        PtzCtrl)
                case $parameter in
                        Left|Right|Up|Down|LeftUp|RightUp|LeftDown|RightDown|ZoomInc|ZoomDec|FocusInc|FocusDec)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\",\"speed\":${speed}}}]"
                                actionptz=1;;
                        Stop)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"op\":\""${parameter}"\"}}]";;
                        ZoomPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"ZoomFocus\":{\"channel\":0,\"op\":\""${parameter}"\",\"pos\":${speed}}}}]";;
                        ToPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"id\":${id},\"op\":\""${parameter}"\",\"speed\":${speed}}}]";;
                        StartPatrol|StopPatrol)
                                id=${speed}
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"channel\":0,\"id\":${id},\"op\":\""${parameter}"\"}}]";;
                esac;;
        StartZoomFocus)
                case $parameter in
                        ZoomPos|FocusPos)
                                payload="[{\"cmd\":\""${command}"\",\"action\":0,\"param\":{\"ZoomFocus\":{\"channel\":0,\"op\":\""${parameter}"\",\"pos\":${speed}}}}]";;
                esac;;
esac

Pour faire fonctionner ton zoom sur la E1Zoom, tape la commande :

/var/www/html/plugins/script/data/Reolink_API_PTZ.sh 192.168.1.26 StartZoomFocus ZoomPos <n°pos>
(remplace <n°pos> par une valeur entre 0 -loin- et 32 -près- cf image ci-dessus)

NB : Bien vérifier que l’autofocus est activé

pour tout ce qui est mouvement, bien ajouter la vitesse de déplacement dans la commande

  • exemple de commande pour les mouvements (hormis les presets) :

    mouvement vers la gauche, vitesse max (32):

    /var/www/html/plugins/script/data/Reolink_API_PTZ.sh 192.168.1.26 PtzCtrl Left 32


  • exemple de commande pour accéder à une position préenregistrée -preset- (commande ne fonctionnant que sur les cameras ayant la fonction preset dont la E1-Zoom):

    mouvement vers la position 1, vitesse max (32):

    /var/www/html/plugins/script/data/Reolink_API_PTZ.sh 192.168.1.26 PtzCtrl ToPos 32 1

Merci de ton retour. Je vais regarder les commandes :wink:

Félicitation pour cette réponse rapide. effectivement c’était seulement ce fâcheux point virgule qui empêchait le bon fonctionnement du script.
Maintenant avec ce point au bon endroit tous fonctionne a merveille . j’ai bien les mouvement de la caméra ainsi que le bon fonctionnement du zoom (sans aucun autre changement que ce point virgule).
merci beaucoup mnpg
T.

1 « J'aime »

Merci de ton retour. Tant mieux que tout fonctionne

Pour info : J’ai corrigé le script que je t’avais donné dans ma première réponse (déplacer le « ; » au bon endroit), au cas ou un autre possesseur de camera reolink le récuperait.

Tu pense que c’est possible de récupérer la détection de personne ou véhicule pour recevoir des alerte via jeedom? Apparement c’est possible avec home assistant

bonjour @Neoback45,
oui, le plugin reolink de HomeAssistant se base sur la commande GetAiState.

cela peut s’adapter sous jeedom

verifies si tu peux interroger l’URL ci-dessous directement via un navigateur web (NB: l’URL est en https):

https://#IP#/cgi-bin/api.cgi?cmd=GetAiState&rs=test&user=#username#&password=#password#
(remplace #IP#, #username# et #password# par tes propres valeurs)

ou, si cela ne marche pas, avec l’argument channel=0 :
https://#IP#/cgi-bin/api.cgi?cmd=GetAiState&channel=0&rs=test&user=#username#&password=#password#

si tu obtiens un fichier json de retour de ce style :

[{
cmd: "GetAiState",
code: 0,
value: {
  channel: 0,
  people_state: 0,
  vehicle_state: 1
  }
}]

tu pourras récupérer les infos, par le plugin script - commande de script, via des commandes de script de type Info/Binaire (HOWTO >> cf Post → partie « Récupération de la Détection de Mouvement »)

detection personne :

    commandes de script de type Info/Binaire
    Type script : JSON
    URL json : https://#IP#/cgi-bin/api.cgi?cmd=GetAiState&rs=test&user=#username#&password=#password#
    Requête : >value>people_state

détection véhicule :

    commandes de script de type Info/Binaire
    Type script : JSON
    URL json : https://#IP#/cgi-bin/api.cgi?cmd=GetAiState&rs=test&user=#username#&password=#password#
    Requête : >value>vehicle_state

avec les derniers firmware (vers 3.x.x.412) pour les cameras avec detection personne/vehicule, le fichier JSON de retour de la commande GetAiState a changé. il est plus de ce style :

[
   {
      "cmd" : "GetAiState",
      "code" : 0,
      "value" : {
         "channel" : 0,
         "face" : {
            "alarm_state" : 0,
            "support" : 0
         },
         "people" : {
            "alarm_state" : 0,
            "support" : 1
         },
         "vehicle" : {
            "alarm_state" : 0,
            "support" : 1
         }
      }
   }
]

Dans ce cas,il faut changer les requêtes utilisées pour les commandes de script jeedom que je t’ai donné précédemment pour celles-ci :

détection personne :

Requête : >value>people>alarm_state

détection véhicule :

Requête : >value>vehicle>alarm_state

Salut,
Oui ça me donne le fichier json « nouveau »
Intéressant ! Donc je doit pouvoir recevoir une alerte jeedom lorsque la caméra détecte une personne ou un véhicule ?

salut,

malheureusement non, il faut que tu interroges cette URL de la camera, sous la forme de script JSON, pour avoir l’info et cela toutes les minutes.

Pour info : La seule façon, à ma connaissance, qu’a la camera pour pousser l’information de détection, c’est par la fonctionnalité Push : push de l’information vers une URL Reolink (pushx.reolink.com) et relayer sous la forme de notifications via l’application Reolink installée sur ton smartphone

Bonjour à tous !

Déjà merci pour ce topic + qu’utile :slight_smile:
J’ai pu passer quelques commandes curl avec succès pour récupérer des états divers.
J’essaie maintenant de passer à des commandes de modifs pour rentrer dans le vif du sujet.

J’essaie actuellement de jouer sur la planification des alarmes mails pour activer H24 les notifs (quand je pars en vacances par exemple) ou au contraire uniquement la nuit (quand je suis à la maison).

Je vois grâce au GetEmailV20 qu’il faut modifier le schedule > table.
Par contre je ne suis pas sûr de saisir correctement les champs.
N.B : Configuration actuelle : Détection de personne de 8h00 à 20h00. Le reste désactivé.
J’ai un NVR RLN8-410 avec des caméras RLC-820A

            "schedule" : {
               "channel" : 1,
               "table" : {
                  "AI_PEOPLE" : "111111110000000000001111111111110000000000001111111111110000000000001111111111110000000000001111111111110000000000001111111111110000000000001111111111110000000000001111",
                  "AI_VEHICLE" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                  "MD" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                  "VL" : "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
               }
            },

AI_PEOPLE et AI_VEHICLE, je suppose que c’est pour la détection des personnes et véhicules. Là OK.
MD (pour motion detection ?). Je suppose que c’est pour la détection tout mouvement. Là OK également, ça colle avec ma configuration actuelle.
VL par contre je ne sais pas ce que c’est…

Second point, j’ai essayé via l’app windows de modifier le schedule d’une camera pour voir ce que ça donnait avec un GetEmailV20 mais je ne vois pas les changements dans le retour curl …

Merci par avance pour votre aide.

[EDIT] : Pour ce qui est du second point, je m’auto-réponds : je me suis fait avoir comme un bleu.
Les channels de caméra sont incrémentés à partir de 0 et non 1, donc la caméra 1 correspond au channel 0, caméra 2 au channel 1, etc…

Pour le premier point je ne vois toujours pas à quoi cela correspond :frowning:

Bonjour @khirin, MD est pour la 3eme option (motion) que tu trouves sur les schedules. Pour VL, Cela ne me dis rien, perso je me base sur les options que l’on a sur l’interface. Par contre je sais que pour les schedules, tu peux trouver « TIMER ».
Pour info, les champs AI_PEOPLE, AI_VEHICLE et MD sont etroitement lies, TIMER est independant des 3 autres
Exemple :

Si tu positionnes une planification en cochant Motion unquement, seul MD aura des 1 et 0 (champ de 128 caractères soit 7 jours * 24h), les AI_** seront a zero (chaine de 128 zeros).

Avec cette conf, si tu coches, par exemple Person, alors la chaine de caracteres de MD sera recopie dans le champ AI_PEOPLE.