REOLINK - Liste de commandes via API

bonjour @lr3674, @Jer66 et à tous,

En complement des posts précédents :

je cherchais un moyen de visualiser les captures de la zone Clip directement sur Jeedom et le plus simple c’est de passer par le biais du dossier des captures d’images de la camera (accessible via l’icone Icones_Camera_Jeedom_Historique )

Pour que cela fonctionne, il faut 2 conditions :

  • dans le répertoire /var/www/html/plugins/camera/data/records, il faut qu’il existe un dossier nommé suivant l’ID de la camera (chiffre)

NB : vous trouverez l’information de l’ID de la camera en allant dans le paramétrage de votre camera (plugin camera), l’ID est visible dans l’URL du navigateur : https://#IP#/index.php?v=d&p=camera&m=camera&id=#ID de la camera#

  • le nom de la capture doit être de cette forme :

#Nom de la camera#_(date au format YYYY-mm-dd_HH-MM-SS).jpg

NB : le #Nom de la camera# correspond au nom défini dans le champ « Nom de l’équipement » de la camera (plugin Camera)

Au final, si le dossier des captures de la camera existe (/var/www/html/plugins/camera/data/records/« ID de la CAMERA ») et en partant de la méthode de @lr3674 pour la mise en place de la commande dans le plug script, il vous suffit de modifier la commande ffmpeg comme suis pour y déposer la capture du clip directement dans ce répertoire d’historique de captures de la camera (plugin Camera):

ffmpeg -i "http://#IP#/flv?port=1935&app=bcs&stream=channel0_mobile.bcs&user=#user#&password=#password#" -y -filter:v scale=640:-1 -vframes 1 /var/www/html/plugins/camera/data/records/#ID de la CAMERA#/#Nom de la camera#_$(date '+%Y-%m-%d_%H-%M-%S').jpg

NB: si le nom de l’équipement (#Nom de la camera#) contient des espaces, mettre celui-ci entre guillemets dans la commande ffmpeg :
ffmpeg -i "http://#IP#/flv?port=1935&app=bcs&stream=channel0_mobile.bcs&user=#user#&password=#password#" -y -filter:v scale=640:-1 -vframes 1 /var/www/html/plugins/camera/data/records/#ID de la CAMERA#/"#Nom de la camera#"_$(date '+%Y-%m-%d_%H-%M-%S').jpg

(Remplacer #IP#, #user#, #password#, #ID de la camera#, #Nom de la camera# par vos propres informations)

NB2: Pour l’exécution de la commande ffmpeg en mode full quiet, ajouter à la commande les arguments : -hide_banner -nostats -loglevel 0

NB3: pour forcer l’écrasement d’une capture d’image déjà existante, ajouter l’argument -y

UPDATE avril 2021 :

la commande ffmpeg fonctionne également avec l’URL rtmp du flux du clip -flux rtmp : cf Post- (rtmp://#IP#/bcs/channel0_mobile.bcs?channel=0&stream=0&user=#user#&password=#password#) :

ffmpeg -i "rtmp://#IP#/bcs/channel0_mobile.bcs?channel=0&stream=0&user=#user#&password=#password#" -y -filter:v scale=640:-1 -vframes 1 /var/www/html/plugins/camera/data/records/#ID de la CAMERA#/"#Nom de la camera#"_$(date '+%Y-%m-%d_%H-%M-%S').jpg

1 « J'aime »

merci pour les infos, ca veut dire quoi en full quiet??

en mode silencieux.

si tu exécutes cette commande depuis un terminal ssh sans ces paramètres, ffmpeg génère par défaut un log assez « verbeux » visible depuis le terminal avant de finaliser la capture.

depuis jeedom, on ne vois pas ce log lors l’exécution de la commande, juste le résultat -la capture- sauf s’il y a une erreur dans l’exécution.

1 « J'aime »

15.03.2021 : Ajouts URLs (Cf URLs/DOCUMENTATIONS/MANUELS)

  • Reolink Community Official (Reddit)
  • #ReolinkEssai -Officiel-: Programme de prêt de matériels Reolink pour test.
1 « J'aime »

20.03.2021 : Ajouts des 2 nouvelles commandes GetDevName et SetDevName (+ nouvelles commandes non utilisables/applicables sur la RLC-520 : GetWifiSignal, GetAiCfg, SetAiCfg, GetAiState)
→ voir Post1

Bonjour, j’ai exécuté la commande curl depuis Windows. cela ne me retourne aucun résultat.

Bonjour,

j’ai exécuté cette commande

curl -s -k -X POST -H « Content-Type : application/json » -d ‹ [{« cmd »:« GetMdAlarm »,« action »:1,« param »:{« channel »:0}}] › « https://192.168.1.10/cgi-bin/api.cgi?user=admin&password=admin »

Cela ne me renvoi rien ;(

Bonsoir @dawaman

En réponse à ta question, tu y étais presque, il ne te manque juste de mettre le payload (argument de l’option -d) entre guillemets (les simples quotes ne fonctionnent que sous linux).

voici la commande testée et approuvé (execution de curl sous Windows) :
curl -s -k -X POST -H "Content-Type : application/json" -d "[{\"cmd\":\"GetMdAlarm\",\"action\" :1,\"param\":{\"channel\":0}}]" "https://192.168.1.10/cgi-bin/api.cgi?user=admin&password=admin"

Suite à ton problème de commande, j’ai repris la documentation à ce sujet (à laquelle tu fais référence). Je l’ai relu et apporté des modifications dans les explications pour qu’elles soient plus claires.

Merci à toi

Bonsoir a tous.

Je fais ce post afin de vous informer que ce post n’était pas en veille, il a toujours évolué mais les modifs ajoutées sur le post initial ne font pas apparaitre le post en up.

Pour cela, je ferais régulièrement des posts mensuels ou bimensuels récapitulatifs.

voici donc le premier, qui regroupe les modifs apportées dans le premier post entre avril et juin 2021, modifs que vous trouverez dans les parties documentations, urls, ou commandes applicables ou pas sur la rlc-520 du post 1

1 « J'aime »

Bonjour,

Je viens d’acheter deux caméras Reolink Argus 2 qui fonctionnent sur batterie.
On m’a prévenu que de temps en temps l’accès à distance depuis l’application Reolink pouvait être interrompu et qu’un reboot de la caméra était nécessaire.

J’aimerai dans un premier temps piloter le reboot de ma caméra depuis Jeedom si je constate ce problème.

Je viens d’essayer d’exécuter la commande suivante via un curl sur ma machine unix mais ça ne fonctionne pas.

$ curl https://192.168.1.109/cgi-bin/api.cgi?cmd=Reboot&rs=reboot&user=admin&password=#password#
[1] 8503
[2] 8504
[3] 8505
$ curl: (7) Failed to connect to 192.168.1.109 port 443: Connection refused
[1]   Exit 7                  curl https://192.168.1.109/cgi-bin/api.cgi?cmd=Reboot
[2]-  Done                    rs=reboot
[3]+  Done                    user=admin

J’ai bien évidement valider mon password avant de lancer la commande.

Ma commande est elle correcte ?
Mes caméras sont elles compatibles avec ce type de requête ?
Suis je un boulet et j’ai rien compris ? :upside_down_face:

Merci de votre aide.

salut @Shakirose

pour que ton URL web soit prise en intégralité par ta commande curl, il faut la mettre entre guillemets :
curl "https://192.168.1.109/cgi-bin/api.cgi?cmd=Reboot&rs=reboot&user=admin&password=#password#"
je te renvoies vers un post ou tu auras plus d’infos à ce sujet (le caractere & dans une commande unix)


Tu trouveras dans le tout premier post de ce sujet la liste des cameras compatibles avec les commandes CGI : cf Tableau des produits Reolink pouvant supporter le CGI, RTSP ou ONVIF.

PS : Après vérif, tu ne pourras pas le faire avec les Argus2

@Shakirose : Pour la programmation du reboot de la camera, il resterait (sans certitude par rapport à ton modèle) la solution via le client Reolink (windows ou Mac), via le menu maintenance : Not Found - Reolink Support

NB : l’article reolink que je t’ai fais suivre est encore dans la version 7.x du client.
voici ou tu trouveras la même chose sur la version 8.x

Merci pour ton retour.
Malheureusement il n’y a pas possibilité de programmer un reboot automatique de mon modèle de caméra via l’application Reolink.

Le reboot manuel via l’application pourrait répondre à mon besoin mais si je suis à distance et que la caméra ne répond plus, je ne pourrais pas la redémarrer.
L’idée d’utiliser mon serveur Jeedom pour les relancer me semblait correct.

Est ce qu’il sera tout de même possible d’exécuter des commandes depuis Jeedom pour ces caméras ? (exemple activation/désactivation du PIR)

Si on ne pas interrogé ta camera via la partie CGI, ou par ONVIF (il me semble, mais pas certain, que onvif prends en compte le reboot) cela ne sera pas possible. Les seules solutions que je vois seraient soit de communiquer sur le port de communication (nomme mediaport) -complique a transcoder (cf projet neolink sur github)- pour envoyer les ordres ou soit de faire un reset electrique physique sur la camera par le biais d’un interrupteur manageable a distance (pour la partie reboot uniquement). Il y a peut-etre d’autres mais je n’en ai pas connaissance.
Reolink a un forum communautaire ainsi qu’un canal reddit assez actif, je t’invite a voir aussi de ce cote la pour avoir des reponses a ta question.

Les Argus ne sont pas pilotables par API il me semble…

Bonjour Jer66,
J’ai le même souci que toi en ce qui concerne le mouvement de ma E1_Zoom. quand je clic sur gauche,droite, haut ou bas la camera fait le mouvement jusqu’à sa buté. J’ai essayé en séparant les commandes dans des scripts séparé comme tu l’a indiqué mais le résultat est le même.
Aurais tu ajouté quelques choses d’autre dans les commandes du scripts ?
en tous cas c’est déjà un + de pouvoir la commander a partir de jeedom. Merci aux devs.

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