Manu31 Posté(e) le 10 mai 2021 Signaler Posté(e) le 10 mai 2021 Bonjour, Voici un petit tuto (si ça peut vous aider) pour mettre des caméras de marque REOLINK (avec ou sans NVR) sur votre HC3. Lien du constructeur : ici Dans votre HC3 : --> Dispositif --> Ajout d'un dispositif --> Autre appareil --> Caméra --> Fabriquant = "Autre" & Modèle = "Autre" Une fois ajouté, se rendre dans "avancé" --> Protocole = HTTP --> Flux JPEG = 192.168.X.X/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=password Remarques : - Il se peut que dans Network configuration il vous redemande l'adresse IP de votre NVR (sinon je ne pouvais pas valider ma config). - Reolink ne supporte pas le flux MJPG Explications : --> En bleu = l'adresse IP de la caméra ou du NVR dans mon cas. --> En violet = la chaine / le flux de la caméra (si vous avez plusieurs caméras sur votre NVR il suffit de renseigner le bon flux) --> En orange = le login et le mot de passe pour se connecter à la caméra (ou du NVR). Et vous verrez les caméras dans l'application sur l'ordinateur (web) et aussi sur le téléphone . En espérant avoir aidé certains d'entre vous. Bonne soirée 4 1
ericl78 Posté(e) le 11 mai 2021 Signaler Posté(e) le 11 mai 2021 Nickel merci J'avais bien trouvé la commande, mais je l'avais mise dans le champ mjpeg J'avais bien l'image mais jamais rafraichie !! Merci à toi Mes deux caméras fonctionnent très bien grâce à toi
Manu31 Posté(e) le 11 mai 2021 Auteur Signaler Posté(e) le 11 mai 2021 Bonjour, @ericl78 : avec plaisir
esolma Posté(e) le 21 juin 2021 Signaler Posté(e) le 21 juin 2021 Salut, Merci pour le tuto. Je voulais justement m'en acheter 2. Par contre ca se passe comment avec la detection, l'alarme, les scènes, ... ? C'est la HC3 qui surveille le signal video et qui detecte les mouvements ? Ou est-ce qu'il faut passer par une application"reolink" pour avoir les notifications ? Ce qui me saoule avec toutes ces marques qui se lance dans de la pseudo domotique c'est qu'ils ont tous des applications pour gerer leurs matos et qu'en fin de compte je me demande si avoir investi dans une HC3 ca valait le coup...
Manu31 Posté(e) le 22 juin 2021 Auteur Signaler Posté(e) le 22 juin 2021 Bonjour @esolma. Alors si tu veux j'ai toutes les docs constructeurs (au passage merci à eux pour leur support) pour faire du GET ou autre. Si ca intéresse quelqu'un qu'il me le dise je lui enverrai. Mais je ne me suis pas plongé dessus pour l'instant. A titre perso j'utilise ma HC3 pour ma domotique et quelques remontées de caméra. Mais j'utilise l'app reolink pour avoir les notifications push (car les notification push de la HC3 ne marchent pas en cas de question sur le push), la mise en route des alarmes etc. Pour mon retour d'expérience, j'ai eu une dizaine de marques sur les caméras. Et honnetement Reolink est loin devant. Un support réactif, des demandes d'évolutions ou problème et l'équipe REOLINK te répond, font évoluer leur produit. Il ne nécessite pas d'abonnement et le protocole n'est pas propriétaire d'où l'intégration à la HC3 PS: ils font souvent des promo sur leur site ou sur amazon
Toine74 Posté(e) le 14 octobre 2021 Signaler Posté(e) le 14 octobre 2021 Bonjour, Je vous remercie pour votre post cela ma été grandement utile. En revanche, je possède une Reolink E1 Zoom qui est motorisé, d'après les paramètres de la HC3 il est possible de pouvoir commander une caméra. Seriez-vous me dire comment configurer les commandes dans la HC3 ? d'après la configuration il faudrait un URL pour chaque mouvement (Droite, gauche, haut et bas) Très bonne journée.
Manu31 Posté(e) le 30 octobre 2021 Auteur Signaler Posté(e) le 30 octobre 2021 Bonjour à @Toine74; Désolé du retard pour ma réponse. Je n'ai pas encore réussi à trouver ce que tu demandes. Le support REOLINK m'a fournit une doc ou il faut par des commande faire du POST/GET sur du JSON. Je peux t'envoyer les doc si ça t'intéresse de chercher Bonne soirée
ebliguet Posté(e) le 23 décembre 2021 Signaler Posté(e) le 23 décembre 2021 bonsoir Manu31 je serai intéressé par la doc ... mais post / get / json c est pas ma tasse de the donc si quelqu un pouvait m aiguiller ... je ferais remonter mon experience sur integration cam reolink scp-423 sur un HC2 merci
Manu31 Posté(e) le 3 janvier 2022 Auteur Signaler Posté(e) le 3 janvier 2022 Bonjour @ebliguet Meilleurs voeux. Voici les doc de Reolink A toi de jouer Bonne soirée command URL.docx Reolink-url-command-v2.docx 1
Gael Posté(e) le 14 juillet 2022 Signaler Posté(e) le 14 juillet 2022 Bonjour à tous, je suis un grand débutant.. mais je sais faire du copier coller de code existant... et me poser quelques questions quand cela ne marche pas :-) bref au cas ou cela intéresserait quelqu'un voici le code d'un quick app générique que j'ai fait pour pour pouvoir activer la sirène des caméras Reolink qui le supporte (rcl811a par exemple). Quand je dis activer, cela signifie changer le paramètre qui déclenche en cas de mouvement détecté par la caméra une sirène émise par le hp de la caméra Les apis de Reolink sont disponibles sur https://www.reddit.com/r/reolinkcam/comments/rd847e/reolink_camera_api_user_guide_dec10_2021/ Code à copier coller dans un quick app générique avec comme variable du qa: "login", "password", "IP_Reolink" La fonction principale du QA (setAudioAlarm) est appelé depuis un qa on/off que j'active ou désactive à son tour depuis un scénario. Ce scénario se déclenche lorsque je met l'alarme principale de ma maison en marche. Le scénario en question déclenche l'enregistrement dans BlueIris (NVR) et active le bon paramètre pour que la sirène des caméras se déclenche au besoin. Pour info l'alarme n'est pas wifi ou domotisée, il y a juste un contact sec que j'ai relié à un fibaro smart implant (enfin l'ancienne version de ce module). Le smart implant me permet de connaitre l'état de l alarme et déclencher mon scénario. Je fais l'appel de la fonction principale dans le qa on/off via un fibaro.call (id de mon qa, "setAudioAlarm", ip_cam, toogle). (toogle: 0 ou 1 selon le paramètre que je souhaite) A travers ce petit exercice j'ai découvert l'asyncronicité de http:request.... et le plaisir de devoir "nester" les appels à l'api (login, puis changement de paramètre, puis check du nouveau paramètre puis logout... tout ca en imbriqué...). C'est pas beau, je me demande comment faire plus joli. Surtout si j'avais du implémenter non pas une mais plusieurs des fonctions de l'api... bref... il faut que j'apprenne encore ou/et que je lise les autos de Lazer! Ah et comme j'ai plusieurs caméras, je fais plusieurs appels figaro.call et bien sur je me suis rendu compte que sans mettre un timeout... les appels rentraient en conflit. donc j'ai utilisé settimeout avec des valeurs un peu "au hasard"... je trouve pas ca génial... si quelqu'un a une idée comment faire mieux, je suis preneur. les appels: function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) fibaro.setTimeout(0, function() fibaro.call (727,"setAudioAlarm","192.168.1.46","1") end) fibaro.setTimeout(8000, function() fibaro.call (727,"setAudioAlarm","192.168.1.48","1") end) fibaro.setTimeout(18000, function() fibaro.call (727,"setAudioAlarm","192.168.1.45","1") end) end Le code à copier coller dans un QA ---------------------------------------------------------------------------------------------------- -- connection à la caméra et recupération du token, si ok call ChangeSirenToggle ---------------------------------------------------------------------------------------------------- function QuickApp:setAudioAlarm(ip_cam,toogle) self.camera = ip_cam self.enable = toogle self.url="https://"..self.camera..":443/api.cgi?cmd=Login" self.debug ("url de login", self.url) self.http:request(self.url, { options = { checkCertificate = false, method = 'POST', headers = { ["content-type"] = "application/json", ["Accept"] = "application/json", }, data = json.encode({ { ['cmd']="Login", ['param']={ ['User']={ ['userName']=self.login, ['password']=self.password }}} }) }, success = function(response) print("status = ", response.status) if response.status == 200 then print(response.data) data = json.decode(response.data) self.token=data[1]["value"]["Token"]["name"] -- token du login self:trace("Caméra() : Connecté") -- Appel pour changer le parametre de la siren self:ChangeSirenToggle() end end, error = function(error) self:error("Probléme d'identification - Erreur - ", json.encode(error)) end }) end ---------------------------------------------------------------------------------------------------- -- Change parametre sirene ---------------------------------------------------------------------------------------------------- function QuickApp:ChangeSirenToggle() self.url="https://"..self.camera..":443/api.cgi?cmd=SetAudioAlarmV20&token="..self.token self.http:request(self.url, { options = { checkCertificate = false, method = 'POST', headers = { ["content-type"] = "application/json", ["Accept"] = "application/json", }, data = json.encode({ { ['cmd']="SetAudioAlarmV20", ['param']= { ['Audio']= { ['enable']= self.enable, ['schedule']= { ['channel']= 0, ['table']= { ['MD']= "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" } } } } }}) }, success = function(response) print("status = ", response.status) if response.status == 200 then print(response.data) data = json.decode(response.data) self:checkSiren() --- print la valeur de la sirene après update end end, error = function(error) self:updateView("message", "Titre", "Probléme d'identification "..json.encode(error)) self:error("Problème pour la mise à jour du parametre Siren - Erreur - ", json.encode(error)) end }) end --------------------------- -- Check la valeur du parametre de la sirene ---------------------------- function QuickApp:checkSiren() self.url="https://"..self.camera..":443/api.cgi?cmd=GetAudioAlarmV20&token="..self.token print (self.url) self.http:request(self.url, { options = { checkCertificate = false, method = 'GET', headers = { ["content-type"] = "application/json", ["Accept"] = "application/json", }, data = json.encode({ { ['cmd']="GetAudioAlarmV20", ['param']= { ['channel']= 0 } }}) }, success = function(response) print("status = ", response.status) if response.status == 200 then print(response.data) data = json.decode(response.data) self.siren=data[1]["value"]["Audio"]["enable"] print ("la sirène de"..self.camera.." est sur", self.siren) self:logout(self.camera, self.token) end end, error = function(error) self:error("Problème pour la mise à jour du parametre Siren - Erreur - ", json.encode(error)) --self:logout(self.camera, self.enable) self:logout() end }) end -------- ---------------------------------------------------------------------------------------------------- -- Logout ---------------------------------------------------------------------------------------------------- function QuickApp:logout() self.url="https://"..self.camera..":443/api.cgi?cmd=Logout&token="..self.token self.http:request(self.url, { options = { checkCertificate = false, method = 'POST', headers = { ["content-type"] = "application/json", ["Accept"] = "application/json", }, data = json.encode({ { ['cmd']="Logout", ['param']= {} }}) }, success = function(response) print("status = ", response.status) if response.status == 200 then print(response.data) data = json.decode(response.data) print ("Logout de "..self.camera.." done") end end, error = function(error) self:error("Problème pour le logout - ", json.encode(error)) end }) end -------- ----------- ------------------------------------------------------------------------------------------------------------------------ -- boucle principale ------------------------------------------------------------------------------------------------------------------------ function QuickApp:mainLoop() -- self:logout(self.camera, self.enable) --self:setAudioAlarm(self.camera, self.enable) end --------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------- function QuickApp:onInit() --__TAG = "QA_Reolink" .. plugin.mainDeviceId self:trace("--------------------------------------------------") self:trace("-- Demarrage du QA Reolink") self:trace("--------------------------------------------------") --- login self.login = self:getVariable("login") --- password self.password = self:getVariable("password") --- IP URL self.camera = self:getVariable("IP_Reolink") self.http = net.HTTPClient({ timeout = 3000 }) -- Toogle self.enable = 0 self:mainLoop()end 2
jang Posté(e) le 16 juillet 2022 Signaler Posté(e) le 16 juillet 2022 (modifié) The problem you have running several 'setAudioAlarm' in parallel is that you store values in self. that is shared between all calls to 'setAudioAlarm'. It could work better if you sent them as parameters to the call, so each call had it's own version of the parameters. Running them with a random delay is like playing the lottery... where the prize is a buggy program. You still have the problem with nesting calls in request callbacks. Each event has it's own set of parameters in the .p key. The advantage of sending user/pwd with each event is that cameras can have different credentials. If not we could have used self.use and self.pwd instead in 'setAudioAlarm'. I also don't understand the enable/toggle logic. I guess you want to alternate between turning on and turning off the camera? To make it correct you should first read the enable state with a call and then set it to the opposite with another call. Otherwise you may get out of sync... So, first call checkSiren, set the p.enable to the opposite and call changeSirenToggle You could also have 2 buttons, turnOn and turnOff and send the enable state 1/0 with them (like I tried in turnOn, should enable be 1 or 0 ?) Btw, I put the QuickApp:turnOn function in the same QA as the rest of the code (using local 'post' function). Maybe you wanted to do it from another QA? I would have coded it this way, using the model of events. This way you avoid the nesting. It may be a bit advanced, but worth studying if you have trouble sleeping Disclaimer: I don't have access to a Reolink camera so I really don't know what I'm doing local testing = true -- simulate api calls local post function QuickApp:turnOn() self:debug( "binary switch turned on" ) self:updateProperty( "value" , true ) post({type='setAudioAlarm',p={camera="192.168.1.46", tool="1",user=self.user,pwd=self.pwd,enable=1}}) -- 'p' stands for 'parameters' post({type='setAudioAlarm',p={camera="192.168.1.48", tool="1",user=self.user,pwd=self.pwd,enable=1}}) -- should enable be 1 ? post({type='setAudioAlarm',p={camera="192.168.1.45", tool="1",user=self.user,pwd=self.pwd,enable=1}}) end function QuickApp:turnOff() self:debug( "binary switch turned off" ) self:updateProperty( "value" , false ) post({type='setAudioAlarm',p={camera="192.168.1.46", tool="1",user=self.user,pwd=self.pwd,enable=0}}) post({type='setAudioAlarm',p={camera="192.168.1.48", tool="1",user=self.user,pwd=self.pwd,enable=0}}) post({type='setAudioAlarm',p={camera="192.168.1.45", tool="1",user=self.user,pwd=self.pwd,enable=0}}) end local debug = true local EVENT={} local function DEBUG(...) if debug then print(...) end end function post(event) setTimeout(function() assert(EVENT[tostring(event.type)],"Undefined event ",tostring(event.type)) DEBUG("Event:",event.type) EVENT[event.type](event) end,0) end -------------------------------------------------- -------------------------------------------------- -- senCmd -------------------------------------------------- -------------------------------------------------- local function sendCmd(event,method,cmd,data) local url = "https://"..event.p.camera..":443/api.cgi?cmd="..cmd self.http:request(url,{ options = { checkCertificate= false , method= method or "GET" , headers = { [ "content-type" ] = "application/json" , [ "Accept" ] = "application/json" , }, data = data and json.encode(data) or nil }, success = function(resp) if resp.status == 200 then DEBUG("success ",url,resp.data) post({type=event.type.."_success",p=event.p,url=url,data=json.decode(resp.data)}) else post({type=event.type.."_error",p=event.p,url=url,error="status="..resp.status}) end end, error = function(err) post({type=event.type.."_error",p=event.p,url=url,error=err}) end } ) end if testing then -- redefine sendCmd for test purpose when no access to Relink function sendCmd(event,method,path,data) local data = {} if path:match("Login") then data = {{value={Token={name="myToken"}}}} elseif path:match("GetAudioAlarmV20") then data = {{value={Audio={enable=0}}}} end DEBUG("success ","https://"..event.p.camera..":443/api.cgi?cmd="..path,json.encode(data)) post({type=event.type.."_success",p=event.p,url=url,data=data}) end end -------------------------------------------------- -------------------------------------------------- -- connection to the camera and recovery of the token, if ok call ChangeSirenToggle -------------------------------------------------- -------------------------------------------------- function EVENT.setAudioAlarm(event) sendCmd(event,"POST","Login", { [ 'cmd' ]= "Login" , [ 'param' ]={ [ 'User' ]={ [ 'userName' ]=event.p.user, [ 'password' ]=event.p.pwd } } } ) end local function add(t,a) for k,v in pairs(a) do t[k]=v end return t end function EVENT.setAudioAlarm_success(event) local token = event.data[ 1 ][ "value" ][ "Token" ][ "name" ] -- login token DEBUG( "Camera(): Connected" ) -- Call to change the siren parameter post({type='ChangeSirenToggle',p=add(event.p,{token=token})}) end function EVENT.setAudioAlarm_error(event) quickApp:error( "Identification problem - Error - " , json.encode(event.error,event.url or "")) end -------------------------------------------------- -------------------------------------------------- -- Change siren parameter -------------------------------------------------- -------------------------------------------------- function EVENT.ChangeSirenToggle(event) sendCmd(event,"POST","SetAudioAlarmV20&token="..event.p.token, { [ 'cmd' ]= "SetAudioAlarmV20" , [ 'param' ]= { [ 'Audio' ]= { [ 'enable' ]= event.p.enable, [ 'schedule' ]= { [ 'channel' ]= 0 , [ 'table' ]= { [ 'MD' ]= string.rep("1",168) } } } } } ) end function EVENT.ChangeSirenToggle_success(event) post({type='checkSiren',p=event.p}) --- print siren value after update end function EVENT.ChangeSirenToggle_error(event) quickApp:updateView( "message" , "Title" , "Identification problem" ..json.encode(event.error)) quickApp:error( "Problem updating Siren parameter - Error - " , json.encode(event.error)) end --------------------------- -- Check the siren parameter value ---------------------------- function EVENT.checkSiren(event) sendCmd(event,"GET","GetAudioAlarmV20&token=" ..event.p.token, { [ 'cmd' ]= "GetAudioAlarmV20" , [ 'param' ]= { [ 'channel' ]= 0 } } ) end function EVENT.checkSiren_success(event) local siren=event.data[ 1 ][ "value" ][ "Audio" ][ "enable" ] print(event.p.camera.. "'s siren is on" , siren) post({type='logout',p=event.p}) --(self.camera, self.token) end function EVENT.checkSiren_error(event) quickApp:error( "Problem updating Siren parameter - Error - " , json.encode(event.error)) --self:logout(self.camera, self.enable) post({type='logout',p=event.p}) end -------------------------------------------------- -------------------------------------------------- -- Logout -------------------------------------------------- -------------------------------------------------- function EVENT.logout(event) sendCmd(event,"POST","Logout&token=" ..event.p.token, { [ 'cmd' ]= "Logout" , [ 'param' ]= {} } ) end function EVENT.logout_success(event) print( "Logout from " ..event.p.camera.. " done" ) end function EVENT.logout_error(event) quickApp:error( "Problem logging out - " , json.encode(event.error)) end -------------------------------------------------- -------------------------------------------------- -------------------- -- main loop -------------------------------------------------- -------------------------------------------------- -------------------- function QuickApp:mainLoop() -- self:logout(self.camera, self.enable) --self:setAudioAlarm(self.camera, self.enable) end -------------------------------------------------- -------------------------------------------------- ----------------- -- -------------------------------------------------- -------------------------------------------------- ----------------- function QuickApp:onInit() __TAG="QA_Reolink"..plugin.mainDeviceId self:trace( "------------------------------------------------------------ -----" ) self:trace( "-- Starting Reolink QA" ) self:trace( "------------------------------------------------------------ -----" ) --- login self.user = self:getVariable( "login" ) ---password self.pwd = self:getVariable( "password" ) --- IP URL -- self.camera = self:getVariable( "IP_Reolink" ) self.http = net.HTTPClient({ timeout = 3000 }) -- Toggle -- self.enable = 0 -- self:mainLoop() if testing then setTimeout(function() self:turnOn() end,1) end -- Just testing to push button... end Modifié le 16 juillet 2022 par jang 1
Gael Posté(e) le 16 juillet 2022 Signaler Posté(e) le 16 juillet 2022 Whouuu that's brillant. Many thanks for taking the time Jang. I'll definitely have a very close look at your proposal and keep you posted -I'm unfortunately (fortunately?) flying for 3 weeks of vacation starting in.... a couple of hours... so won't be looking at it before mi august but I'll revert!!! Many thanks again. Merci beaucoup d'avoir pris le temps de regarder. Cela a l'air excellent. je vais définitivement regarder cela de près à mon retour.... car je pars en vacances dans les quelques heures qui viennent! Je répondrai après avoir essayé à mon retour... Mi aout sans doute. Passez tous un bel été!
JLT Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 Bonsoir @Manu31 Ta proposition datant, est elle encore d'actualité ? J'ai essayé avec ma HC3 (dernier firmware) Impossible d'afficher l'image de la TrackMixPoe Le message suivant s'affiche : " Erreur de lecture de flux. Vérifiez la configuration et assurez vous que la caméra est connectée. " Ou est le problème ? (est ce un problème de compatibilité de flux entre la hc3 et le h265 de la trackmix ?) Merci
Manu31 Posté(e) le 8 août 2023 Auteur Signaler Posté(e) le 8 août 2023 Bonjour @JLT, Pour moi tout marche nickel, même avec le dernier firmware . Petite question : as-tu un NVR ou non ? Sans NVR je pense que la syntaxe doit changer légèrement.
JLT Posté(e) le 8 août 2023 Signaler Posté(e) le 8 août 2023 Il y a 4 heures, Manu31 a dit : Petite question : as-tu un NVR ou non ? Sans NVR je pense que la syntaxe doit changer légèrement. Effectivement, je n'ai pas de NVR (j'utilise le client Reolink + Nas pour enregistrer + carte mémoire dans la TrackMix) Que faut il modifier ? :-)
Manu31 Posté(e) le 8 août 2023 Auteur Signaler Posté(e) le 8 août 2023 Il y a 8 heures, JLT a dit : Effectivement, je n'ai pas de NVR (j'utilise le client Reolink + Nas pour enregistrer + carte mémoire dans la TrackMix) Que faut il modifier ? :-) Bonjour, regarde les documents Words, ca devrait être dedans. Pour moi c'est un truc du genre : Ca doit être parmis ces cmd : e.g. Previewing: rtmp://IPC_IP/bcs/channel0_main.bcs?channel=0&stream=0&user=admin&password=xxxx http://IPC_IP/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password=xxxx e.g. Snapping picture: http://IPC_IP/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=Get&user=admin&password=xxxx Ou encore: http://IPC_IP/api.cgi?cmd=GetImage&token=TOKEN A tester du coup
JLT Posté(e) le 9 août 2023 Signaler Posté(e) le 9 août 2023 Bonjour, j'ai essayé dans tous les sens et ca ne fonctionne pas, ou alors y a un truc que je n'ai pas capté dans les doc Word, je vois qu'il est beaucoup question du H264. il est juste question du h265 pour le RTSP (dispo que dans l'app mobile) Une idée ? :-)
hermanos Posté(e) le 3 mars Signaler Posté(e) le 3 mars (modifié) Hello Je me suis lancé dans l'achat d'une camera reolink. Je rencontre comme vous au début je pense le problème avec la fibaro. Pourriez vous m'aider je comprend pas? voici ma ligne de commande : https://192.168.0.38/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=xxxx&password=xxxx bien les x de user et password sont remplacés par les mêmes codes que l'accès a l'application en direct de reolink Par contre je n'ai pas compris où trouver le numéro de Channel et est-ce que c'est le nom que je donne a la camera? merci de votre aide Modifié le 3 mars par hermanos
Manu31 Posté(e) le 3 mars Auteur Signaler Posté(e) le 3 mars Bonjour @hermanos, Dans mon cas c'était avec un nvr. Sans il se peut que la ligne change un peu. A chercher...
hermanos Posté(e) le 4 mars Signaler Posté(e) le 4 mars Partout dans mes recherches je vois cette ligne et il ne parle pas du nvr
hermanos Posté(e) le 4 mars Signaler Posté(e) le 4 mars @Manu31 peut tu m'en dire plus avec un nvr? je me tâte à en prendre quel et ton retour sur la marque ?
Manu31 Posté(e) le 4 mars Auteur Signaler Posté(e) le 4 mars Il y a 10 heures, hermanos a dit : @Manu31 peut tu m'en dire plus avec un nvr? je me tâte à en prendre quel et ton retour sur la marque ? Bonjour Je t'invite à venir sur le groupe fb de la marque "communauté de caméras reolink France". Je suis le "community manager France" de la marque. J'ai eu bcp de caméras de modèles différents et me suis fixé sur celle ci. Un nvr pour moi est un gros plus car gros disque dur etc. Après j'ai préféré acheter un nvr reolink que du shinobi ou autre car c'est mieux quand tu as la même marque de bout en bout. Pour résumé : en 4 ans ils ont fait énormément d'effort (j'ai passé quelques nuit avec eux à expliquer les bugs, les évolutions, tester des firmware etc). Aujourd'hui la marque est fiable font de bonnes caméras pour un prix très correct, bcp d'évolution enfin top. Apres reste à bien choisir son modèle en fonction de son besoin. N'hésite pas à passer sur le groupe qui est bienveillant :) 1
Messages recommandés