Un ami m'avait donné des caméras SFR home, je voulais les utiliser mais je les avais finalement laissé de coté.
J'ai un peu de temps en ce moment et je voulais me replonger dedans.
Il y a un dépôt github assez bien fait (https://github.com/edent/Sercomm-API/blob/master/README.md) qui documente les API de la caméra mais il semble que sur les forum il n'était pas possible d'utiliser
les notifications du capteur PIR (infrarouge) effectivement lors de mes tests ça ne fonctionnait pas mais je me suis dit réessaye et persiste ^^
et je me suis dit : tiens et si tu utilisais un de test serveur comme proxy pour détecter justement les alertes et finalement c'est beaucoup trop simple ;)
Il faut :
- un serveur
- y installer nginx
- créer un petit server sinatra
Je mets les sources plus bas ainsi que la config de la caméra.
Trouver votre caméra sur le réseau, avec probablement (ça dépend de votre réseau...)
Disons que ma caméra soit sur 192.168.1.207 et que mon serveur soit sur 192.168.1.190
Ensuite il faut activer la configuration, mettez l'ip de votre caméra et lancer ces urls dans votre navigateur web (firefox par exemple, et pas chrome hein Güven ^) : Si on vous demande un login/password, essayez :
Mise en place du serveur nginx, voici le fichier de configuration du serveur (dans /etc/nginx/sites-available/camera_sfr)
Mise en place du serveur sinatra
Ensuite le serveur se lance comme ceci (il faudra peut-être installer sinatra au préalable :
Voilà, les derniers post datent d'il y a quelques annnées et je trouve dommage de ne pas exploiter ces caméras.
Amusez-vous bien !
Il faut :
- un serveur
- y installer nginx
- créer un petit server sinatra
Je mets les sources plus bas ainsi que la config de la caméra.
Trouver votre caméra sur le réseau, avec probablement (ça dépend de votre réseau...)
nmap -p 554 192.168.0.1-254
Disons que ma caméra soit sur 192.168.1.207 et que mon serveur soit sur 192.168.1.190
Ensuite il faut activer la configuration, mettez l'ip de votre caméra et lancer ces urls dans votre navigateur web (firefox par exemple, et pas chrome hein Güven ^) : Si on vous demande un login/password, essayez :
admin/cgiconfig
# Affichage de la configuration actuelle (si vous avez besoin de la remettre après...) http://192.168.1.207/adm/get_group.cgi?group=HTTP_NOTIFY http://192.168.1.207/adm/set_group.cgi?group=HTTP_NOTIFY&http_password=pouet&http_user=pouet http://192.168.1.207/adm/set_group.cgi?group=HTTP_NOTIFY&proxy_user=pouet&proxy_password=pouet http://192.168.1.207/adm/set_group.cgi?group=HTTP_NOTIFY&http_url=http://example.com/ http://192.168.1.207/adm/set_group.cgi?group=HTTP_NOTIFY&http_notify=1&http_proxy_no=80&http_proxy=192.168.1.190 # Vérifiez que tout est enregistré : http://192.168.1.207/adm/get_group.cgi?group=HTTP_NOTIFY # Afficher les logs de la caméra après détection (permettra de débugger plus tard) http://192.168.1.207/adm/log.cgi # Activer toutes les notifications de type ping http http://192.168.1.207/adm/set_group.cgi?group=HTTP_NOTIFY&event_data_flag=1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_fd=httpn:1;httppost:1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_httpc=httpn:1;httppost:1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_mt=httpn:1;httppost:1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_in2=httpn:1;httppost:1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_in1=httpn:1;httppost:1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_pir=httpn:1;httppost:1 http://192.168.1.207/adm/set_group.cgi?group=EVENT&event_trigger=1
Mise en place du serveur nginx, voici le fichier de configuration du serveur (dans /etc/nginx/sites-available/camera_sfr)
server {
listen 80;
server_name devices.sf-sfr.fr;
proxy_http_version 1.1;
location / {
proxy_pass http://127.0.0.1:3001/;
proxy_read_timeout 120s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log /var/log/nginx/access_camera_sfr.log;
error_log /var/log/nginx/error_camera_sfr.log error;
}
}
Mise en place du serveur sinatra
riven@monserveur:~/chemin$ cat camera_sfr_sinatra.rb # Contenu du fichier require 'rubygems' require 'sinatra' require 'net/http' require 'uri' require 'json' set :bind, '0.0.0.0' set :port, 3001 # Mettez à jour ce chemin qui va stocker vos enregistrements RECORD_DIR = "/bli/blo/blu/records" # Durée de l'enregistrement RECORD_TIME = 10 get '/homewatch/alert' do #File.write("/home/riven/rivsc/camera.log", params.to_s, mode: "a+") # exemple de params reçu, securitycode contient le code de la caméra visible sur l'autocollant de la caméra # {"securitycode"=>"XXXXX", "t"=>"XXXX", "mode"=>"instant", "hash"=>"XXXXXX", "event"=>"motion,92,md_window0"} # Récup snapshot picture (celui qui pingue ce serveur EST la caméra donc on récupère son IP est on récupère l'image) url = URI.parse("http://#{@env['HTTP_X_FORWARDED_FOR'] || @env['REMOTE_ADDR']}/img/snapshot.cgi?size1=quality=1") # Effectuer la requête GET response = Net::HTTP.get_response(url) output_filename = "#{params[:securitycode]}_#{Time.now.strftime('%d-%m-%Y__%H-%M-%S')}" # Vérifier si la requête a réussi if response.is_a?(Net::HTTPSuccess) # Enregistrer la réponse dans un fichier File.open(File.join(RECORD_DIR, output_filename), "w") do |file| file.write(response.body) end # nécessite ffmpeg : sudo snap install ffmpeg # fonctionne à l'extérieur de sinatra, permet d'enregistrer le flux rtsp (video + audio) rtsp_url = "rtsp://administrator:cgiconfig@#{@env['HTTP_X_FORWARDED_FOR'] || @env['REMOTE_ADDR']}/img/media.sav" `sudo -u www-data ffmpeg -i #{rtsp_url} -c copy -t #{RECORD_TIME} #{File.join(RECORD_DIR, output_file)}.mp4` puts "La réponse a été enregistrée dans response.txt" else puts "Erreur lors de la requête : #{response.code} #{response.message}" end status 200 body 'ok' end
Ensuite le serveur se lance comme ceci (il faudra peut-être installer sinatra au préalable :
gem install sinatra
:
ruby camera_sfr_sinatra.rb
Voilà, les derniers post datent d'il y a quelques annnées et je trouve dommage de ne pas exploiter ces caméras.
Amusez-vous bien !