Bueno, recapitulemos:
- En la primera parte vimos como instalar el sabor OpenWrt de Linux en un router ADSL Huawei de Vodafone que estaba desahuciado. Esa entrada nos la podemos saltar en gran parte si queremos montar nuestro sistema usando una Raspberry Pi o cualquier miniordenador.
- En la segunda parte vimos como configurar la cámara, el almacenamiento de las imágenes en una ubicación remota y, usando el software motion, hacer las primeras capturas.
Pues vamos ahora a sacar jugo a lo que tenemos montado.
1. Configurar la detección de movimiento.
Ahora vamos a detectar el movimiento, jugando con los parámetros de /etc/motion.conf. Hay muchas guías en la red explicando los distintos parámetro. A mi me han dado buenos resultados estos:
daemon on
width 352
height 288
framerate 20
snapshot_interval 60
locate_motion_mode on
locate_motion_style redbox
snapshot_filename %Y-%m-%d-%H:%M:%S-snapshot
picture_filename %Y-%m-%d-%H:%M:%S-%q
pre_capture 3
post_capture 3
output_normal on
minimum_motion_frames 1
lightswitch 20
threshold 2000
El resto de parámetros de motion.conf los dejamos igual. Básicamente decimos a motion que se ejecute de fondo, capture a resolución 352x288 y a 20 fps por segundo cuando detecte movimiento. Independientemente, cada 60 segundos toma una captura, haya movimiento o no. Cuando detecta movimiento remarca la zona con una caja roja. Los ficheros donde guarda las capturas tienen en su nombre la fecha y la hora. Defino un valor para los cambios de luz (ligthswitch) y número de pixeles cambiados (treshold) que me han funcionado bien ante falsos positivos.
El parámetro "output_normal on" indica que cuando hay movimiento capture todos los fotogramas que quiera. Otros valores que podemos dar harán que se capture el mejor fotograma, o que se grabe un vídeo en lugar de fotogramas sueltos.
Adicionalmente podemos asociar comandos o scripts a determinados eventos, por ejemplo añadiendo a motion.conf:
on_event_start echo "Detectado inicio de movimiento %H:%M:%S" >> /mnt/snapshot/log.txt
on_picture_save echo "Guardando imagen en %f %H:%M:%S" >> /mnt/snapshot/log.txt
on_event_end echo "Fin de movimiento %H:%M:%S" >> /mnt/snapshot/log.txt
on_movie_start echo "Empezando video %f %H:%M:%S" >> /mnt/snapshot/log.txt
on_movie_end echo "Finalizando video %f %H:%M:%S" >> /mnt/snapshot/log.txt
El fichero /mnt/snapshot/log.txt guardará un log de los eventos detectados. Nótese el uso de variables de sustitución, aquí estan todos. Algunos sólo pueden usarse en determinado eventos, como %f (nombre de fichero de captura) que solo aparece on_picture_save, on_movie_start y on_movie_end.
2. Aviso remoto de eventos
Para avisar remotamente de los eventos lo mas sencillo es usar correo (aunque otras opciones son usar SMS o twitter, ya que hay APIs para ello). Me he decantado por lo mas sencillo y he usado una cuenta de gmail por smpt. He probado ssmtp y mailsend, pero el primero no permite enviar adjuntos y el segundo no funciona con gmail en Barrier Breaker (no tiene activo el SSL), así que los descarté.
La opción que mejor me ha funciona es la combinación de msmtp y mutt, ya que ambos combinados permiten enviar mensajes por gmail y adjuntar ficheros (por ejemplo imágenes). Mutt compone el correo y msmtp lo envía. Los instalamos:
root@OpenWrt:~# opkg install msmtp mutt
Y configuramos msmtp:
root@OpenWrt:~# cat /etc/msmtprc
account default
host smtp.gmail.com
port 587
auth on
user mi.usuario@gmail.com
password mipassword
auto_from off
from mi.usuario@gmail.com
tls on
tls_starttls on
tls_certcheck off
logfile
syslog LOG_MAIL
Una pruebecita:
root@OpenWrt:~# echo -e "Subject: Correo de prueba\r\n\r\nEsto es un email de prueba" | sendmail destinatario@gmail.com
Ahora configuramos mutt:
root@OpenWrt:~# cat .muttrc
set sendmail="/usr/bin/msmtp"
set from="mi.usuario@gmail.com"
set realname="2Tazasdelinux"
La prueba, enviando /mnt/snapshot/lastsnap.jpg como adjunto:
root@OpenWrt:~# echo "Hola" > mensaje.txt
root@OpenWrt:~# mutt -s "Test mail" destinatario@gmail.com -a /mnt/snapshot/lastsnap.jpg < mensaje.txt
3. Juntando lo anterior.
Voy a definir un script que hará el envío de correos ante los eventos de motion. El script se disparará con 3 posibles eventos:
- on_event_start: guarda información en el log, crea el fichero /tmp/motion.txt que hará de testigo y envia un correo de deteccion de movimiento.
- on_picture_save: guarda información en log y almacena el nombre del fichero con la captura en /tmp/motion.txt, siempre que dicho fichero exista.
- on_event_end: guarda información en el log, si existe /tmp/motion.txt coge todas las imágenes, las comprime con el comando zip y envia un correo con el fichero comprimido conteniendo todas las capturas. Finalmente, borra /tmp/motion.txt. No olvidar hacer un "opkg install zip". La idea está sacada de aquí.
Modificamos /etc/motion.conf para que tenga este contenido:
on_event_start /root/controlador.sh start "%H:%M:%S-%Y/%m/%d"
on_event_end /root/controlador.sh end "%H:%M:%S-%Y/%m/%d"
on_picture_save /root/controlador.sh picture "%H:%M:%S-%Y/%m/%d" "%f"
Y este es el script controlador.sh (no olvidar hacerlo ejecutable con "chmod +x /root/controlador.sh"):
!/bin/ash
#Parametro 1: start, picture, end
#Parametro 2: fecha
#Parametro 3: nombre fichero (opcional)
#Obtenemos fecha y hora por si queremos poner algun filtro sobre ella y solo avisar en determinados
#momentos
time=$(date +%s)
anio=$(date +%Y @$time)
mes=$(date +%m @$time)
dia=$(date +%d @$time)
hora=$(date +%H @$time)
minuto=$(date +%M @$time)
diasemana=$(date +%u @$time) #El 1 es lunes
email=0
if [ $diasemana -ge 6 -o $hora -le 7 -o $hora -ge 17 ] # sabado/domingo o cualquier dia antes de las 8:00 o despues de las 17:00
then
email=1
fi
case $1 in
"start")
echo "Detectado inicio de movimiento $2" >> /mnt/snapshot/log.txt
test $email -eq 1 && echo -e "Subject: Evento camara\r\n\r\nDetectado inicio de movimiento $2" | sendmail destinatario@gmail.com
touch /tmp/motion.txt
;;
"picture")
echo "Guardando imagen $2 : $3" >> /mnt/snapshot/log.txt
test -e /tmp/motion.txt && echo $3 >> /tmp/motion.txt
;;
"end")
echo "Detectado fin de movimiento $2" >> /mnt/snapshot/log.txt
ficheros=$(cat /tmp/motion.txt | tr '\n' ' ')
rm /tmp/motion.txt
echo "Historia de capturas $ficheros" >> /mnt/snapshot/log.txt
zip -9 /mnt/escena.zip $ficheros
echo "Detectado fin de movimiento $2" > /mnt/mensaje.txt
test $email -eq 1 && mutt -s "Evento camara" destinatario@gmail.com -a /mnt/escena.zip < /mnt/mensaje.txt
rm /mnt/escena.zip
;;
esac
#Borra fichero "sent" creado por sendmail si existe, para liberar espacio
rm -rf /root/sent
Como se puede ver, filtro las capturas para que solo avisen mediante correos los fines de semana y los días de diario entre las 17:00 y las 7:59. El resto del tiempo, no. Que cada cual adapte esto a sus circunstancias.
4. Arranque automático de motion.
Ante cualquier reinicio del router nos interesa que motion se ejecute automáticamente en el arranque. Lo mejor es ponerlo como un initscript.
root@OpenWrt:~# cat /etc/init.d/motion
#!/bin/sh /etc/rc.common START=99 start() { motion -c /etc/motion.conf } stop() { killall motion }
Lo hacemos ejecutable:
root@OpenWrt:~# chmod 755 /etc/init.d/motion
Y lo ponemos para que se ejecute en el arranque:
root@OpenWrt:~# cd /etc/rc.d
root@OpenWrt:~# ln -s ../init.d/motion S99motion
También podremos pararlo y arrancarlo a voluntad con:
root@OpenWrt:~# /etc/init.d/motion stop
root@OpenWrt:~# /etc/init.d/motion start
5. Rotación de ficheros.
Los ficheros de imágenes se acumulan en el directorio /mnt/snapshot. Lo lógico es borrar los mas antiguos con una tarea en el cron del Linux:
root@OpenWrt:~# cat /root/limpieza.sh
#!/bin/ash
find /mnt/snapshot/ -name '*.jpg' -mtime +30 -exec rm {} \;
Este script anterior (no olvidar hacerlo ejecutable) borra los ficheros jpg con mas de 30 días de antigüedad. Lo añadimos al crontab:
root@OpenWrt:~# crontab -e 00 17 * * * /root/limpieza.sh
00 16 * * * /etc/init.d/sysntpd restart
Cada día a las 17:00 hacemos limpia. Nótese que a las 16:00 reiniciamos también el demonio sysntpd para sincronizar de nuevo el reloj de nuestro Linux. El fichero donde se guarda esto en OpenWrt es /etc/crontabs/root.
6. Mejoras.
Algunas mejoras que no he implementado, pero pueden ser interesantes en el futuro:
- Grabar vídeos en lugar de capturas de fotos. Esto se hace jugando con el parámetro output_normal de motion.conf.
- Conectarse a Internet con un dongle 3g, aqui en español, en lugar de red cableada.
- Conectarse a Internet con conexión wifi, en lugar de red cableada.
- Guardar las imágenes en un servidor ftp remoto.
7. Referencias.
Para montar este tinglado he tirado de muchas referencias por todo Internet, aquí van las mas útiles que no he incluido a lo largo de estas tres entradas:
- Todo/todito sobre OpenWrt: http://foro.seguridadwireless.net/openwrt/%28indice%29-hilos-relevantes-de-openwrt/
- OpenWrt para nuestro router: http://wiki.openwrt.org/toh/huawei/hg556a
- Tutorial para un router similar (en indonesio, mola): http://darmawan.my.id/2014/02/13/membuat-cctv-dengan-openwrt-dan-motion-di-router-huawei-hg553-part2/
- Instalación OpenWrt: http://foro.seguridadwireless.net/openwrt/instalacion-%28facil%29-de-openwrt-en-huawei-553/
- Otro más: http://foro.seguridadwireless.net/openwrt/openwrt-en-huaweig-hg556a/
- Imagen para Huawei con mucho software preinstalado: http://lampiweb.com/foro/index.php?topic=11174.0
- El puerto serie de los router: http://foro.seguridadwireless.net/openwrt/%28tutorial%29-puerto-serie-como-acceder/
- Conectar webcams a OpenWrt: http://wiki.openwrt.org/doc/howto/webcam
- Otra cámara: http://wiki.leipzig.freifunk.net/Diskussion:Backfire#quickcam_pro_5000
- Envío de correos: http://foro.seguridadwireless.net/openwrt/envio-de-correos-electronicos-desde-openwrt/
- Más envío de corrreos: http://sirlagz.net/2013/02/18/how-to-automatically-emailing-motion-snapshots/
- Envío de whatsapp: http://foro.seguridadwireless.net/openwrt/whatsapp-con-openwrt/
- Usando Raspberry Pi: http://codrspace.com/audiojava/setup-webcam-and-raspberry-pi-as-motion-detect-surveillance/
Bueno, pues me ha gustado esto del OpenWrt. Ya tengo otro proyectito en mente en usarlo para solucionar un problemón de las pizarras digitales. Si me funciona, lo contaré aquí.
Fin de impresión------------------------
Addenda 13-mayo-2015: bueno, pues esto funciona como un reloj del glorioso ejército soviético y tengo vigilada una estancia con aviso de correos sin mayor problema, pero hoy me he encontrado un contratiempo. En /mnt/snapshot/ tenía mas de 100.000 ficheros .jpg, de tal manera que se hacía totalmente inmanejable el directorio. He reescrito el script controlador.sh para que guarde cada día de captura en un directorio distinto dentro /mnt/snapshot, de manera que luego sea más sencillo buscar un día concreto y analizar las capturas. Queda así la cosa:
root@OpenWrt:~# cat controlador.sh
#!/bin/ash
#Parametro 1: start, picture, end
#Parametro 2: fecha
#Parametro 3: nombre fichero (opcional)
#Obtenemos fecha y hora por si queremos poner algun filtro sobre ella y solo avisar en determinados
#momentos
time=$(date +%s)
anio=$(date +%Y @$time)
mes=$(date +%m @$time)
dia=$(date +%d @$time)
hora=$(date +%H @$time)
minuto=$(date +%M @$time)
diasemana=$(date +%u @$time) #El 1 es lunes
destino="/mnt/snapshot/$anio-$mes-$dia"
email=0
if [ $diasemana -ge 6 -o $hora -le 7 -o $hora -ge 17 ] # sabado/domingo o cualquier dia antes de las 8:00 o despues de las 17:00
then
email=1
fi
test -d $destino || mkdir -p $destino
case $1 in
"start")
echo "Detectado inicio de movimiento $2" >> /mnt/snapshot/log.txt
test $email -eq 1 && echo -e "Subject: Evento camara\r\n\r\nDetectado inicio de movimiento $2" | sendmail alfonso.pastor@gmail.com
touch /tmp/motion.txt
;;
"picture")
fichero=$(basename $3)
echo "Guardando imagen $2 : $destino/$fichero" >> /mnt/snapshot/log.txt
test -e /tmp/motion.txt && echo "$destino/$fichero" >> /tmp/motion.txt
#Movemos la imagen al directorio correspondiente a la fecha de hoy.
mv "$3" "$destino/$fichero"
;;
"end")
echo "Detectado fin de movimiento $2" >> /mnt/snapshot/log.txt
ficheros=$(cat /tmp/motion.txt | tr '\n' ' ')
rm /tmp/motion.txt
echo "Historia de capturas $ficheros" >> /mnt/snapshot/log.txt
zip -9 /mnt/escena.zip $ficheros
echo "Detectado fin de movimiento $2" > /mnt/mensaje.txt
test $email -eq 1 && mutt -s "Evento camara" alfonso.pastor@gmail.com -a /mnt/escena.zip < /mnt/mensaje.txt
rm /mnt/escena.zip
;;
esac
#Borra fichero "sent" creado por sendmail si existe, para liberar espacio
rm -rf /root/sent
rm -rf /sent
Ahora no tendremos problema de directorios saturados.
Addenda 29-marzo-2016: Aunque en general todo va bien, con el tiempo he ido descubriendo que no está de más hacer ciertos reinicios dentro del dispositivo OpenWrt usando el servicio cron. Eso ayuda a que todo sea mas estable y se pueda recuperar de posibles errores/cuelgues. Sería así:
root@OpenWrt:~# cat /etc/crontabs/root
#A las 4 de la tarde reinicia demonio ntp, para forzar un sincronizado de la hora.
00 16 * * * /etc/init.d/sysntpd restart
#A las 00 de cada hora reinicia el motion, por si se ha quedado colgado.
00 * * * * /etc/init.d/motion restart
#A las 23:55 cada dia se reinicia el dispositivo
55 23 * * * /sbin/reboot
El servicio cron de OpenWrt debe estar funcionando y activo, he aquí una pequeña guía del mismo.Esta vez si que es:
------------
Fin de impreX·!#!€@------------
Addenda 22-mayo-2016: Pues no, esto no acaba. Mas cosas metidas en este post. Y esta vez no me despido.
muy bueno u trabajo. Pero me interesaría arrankar el motion en franjas de horario determinado podría ser de la siguiente manera. o cual seria la mejor opción que tu consideras.
ResponderEliminarroot@OpenWrt:~# crontab -e
00 17 * * * /root/limpieza.sh
00 16 * * * /etc/init.d/sysntpd restart
00 13 * * */etc/init.d/motion start
00 15 * * */etc/init.d/motion stop
00 16 * * */etc/init.d/motion start
00 18 * * */etc/init.d/motion stop
Hola, David. Seguramente lo mas sencillo y lógico sea usar crontab tal y como tu lo haces. Tan solo debes tener en cuenta dos cosas que supongo ya habrás tenido:
Eliminar-Que el servicio crontab esté habilitado y ejecutando:
/etc/init.d/cron enable
/etc/init.d/cron start
-Que el cliente ntp esté funcionando para mantener sincronizado tu OpenWRT con la hora correcta.
La otra opción que se me ocurre es modificar el script de captura (controlador.sh) para no haga nada de nada en los intervalos en los que quieres que esté ocioso, modificando el
if [ $diasemana -ge 6 -o $hora -le 7 -o $hora -ge 17 ] ...
por otro en función de las horas que si se cumple salga sin hacer nada con un exit 0, pero no creo que merezca la pena montar todo eso.
Un saludo.
Otra pregunta estoy atascado y me gustaria acceder a la imagen de la camara desde cualquier sitio fuera de mi red local. Mi configuracion del router principal es 192.168.1.1 y el router con camara y openwrt es 192.168.2.1 para red cableada y 192.168.1.3 para wifu que es como va a funcionar. Como puedo hacer la configuracion para que 192.168.1.3:8081 pueda verse por internet en cualquier parte del mundo.
ResponderEliminarDebes abrir las peticiones TCP al puerto 8081 desde el router adsl (el principal) hacia 192.168.1.3.
ResponderEliminarDepende de la marca del router ADSL. Aqui tienes un ejemplo: http://ayuda.orange.es/img/ayuda/docs/huawei_hg532c_Abrir_Puertos.pdf. Busca para tu router ADSL en concreto.
Un saludo.
He estado probando y no je podido hacer k salga a internet la imagen de la webcam. El router principal es de ono y esta en otra subred (192.168.1.1) y el secundario la interface lan en (192.168.2.1) y la wifi como cliente en (192.168.1.3). Como puedo redirigir el trafico desde el cliente wifi del router secundario para que me salga a internet. Y ser accesible desde cualquier parte.
ResponderEliminargracias
Supongo que el Openwrt tiene 192.168.2.1 porque está conectado por red ethernet a un PC en la red 192.168.2.X, ¿no?.
ResponderEliminarLuego el PC tendrá también una conexión wifi dentro del rango 192.168.1.X. En ese caso, si haces
ping 192.168.1.3
desde el PC, ¿te responde el router?.
Luego también podrias enviarme una captura de la página donde configuras la apertura de puertos, a ver si está todo en orden. ¿Que router Ono tienes?.
En el PC principal, ¿que sistema operativo tienes?. ¿Podrias instalar un apache o un ssh para ver si se puede acceder a él desde fuera y hacer pruebas con dicho PC antes de centrarnos en el OpenWrt?.
El router con openwrt no lo tengo conectado al pc. Solo uso la parte de cliente wifi. El router de ono es un contrend que es el que esta conectado al pc.
Eliminarsi conecto el router de openwrt al portatil con ip en el rango 192.168.2.x salgo a internet por cable.
lo que tengo es nasicamente un puente de red y con wifi que coje del router de ono.
¿Tiene el portatil Linux? ¿Le puedes poner una IP fija al portatil?.
ResponderEliminarSe trata de que el router este solo funcionando con la webcam de forma automoma sin pc. Y ver la webcam desde el cualquier parte en internet
EliminarYa lo sé. No es ahí por donde voy.Tu problema puede estar en dos puntos:
Eliminar1) El router Comtrend que te ha suministrado Ono y/o la propia conexión de Ono.
2) La configuración del Openwrt.
Como quiero primero descartar el primer punto necesito que tengas un ordenador para hacer pruebas.Por esto te pregunto si tienes Linux e ip fija en el ordenador, para empezar con esas pruebas y asi ir buscando el punto donde está fallando. Ten en cuenta que si falla algo de Ono o de su router podemos estar mil años haciendo pruebas con el Openwrt sin encontrar el motivo.
U
Hola estoy rompiendome la cabeza con mutt al final lo he instalado pero no tengo el archivo muutrc. Tu usas el comando cat .muttrc pero me da error como lo puedo solucionat hay que crearlo y donde se crea.
ResponderEliminarEsta en /root/.muttrc
Eliminarroot@OpenWrt:~# cat /root/.muttrc
set sendmail="/usr/bin/msmtp"
set from="tucuenta@gmail.com"
set realname="Tu nombre"
Lo creas a mano con el editor nano
nano /root/.muttrc
Luego le pones de propietario root:root y permisos 644.
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEl comando para hacerlo propietario seria.
ResponderEliminarchmod 644/root/.muttrc
Para hacerlo propietario:
Eliminarchown root:root /root/.muttrc
Par cambiar permisos
chmod 755 /root/.muttrc
Sorry,
Eliminarchmod 644 /root/.muttrc
Buenos dias ,estoy intentado enviarme un mail con el video desde motion.conf pero no hay manera de que me salga , he mirado muchos tutotiales , se te ocurre como? me envia el mail normal , pero cuando pongo %f -a para que me envie ese archivo nada , gracias
ResponderEliminar%f no es el archivo, es el nombre de archivo. ¿Que version de OpenWrt y que cliente para el enví de correos usas?. El único que he podido hacer funcionar en OpenWrt con ficheros adjuntos es mutt, que as su vez usa mstmp, tal como muestro en el fichero de ejemplo .muttrc.
EliminarSería:
echo "Te adjunto un fichero" > mensaje.txt
mutt -s "Test mail" destinatario@correo.com -a /ruta/al/fichero < mensaje.txt
Siendo %f = /ruta/al/fichero
Buenas, ya he conseguido hacer muchas cosas con el motion, aunque me falta la parte de los vídeos cuando detecta movimiento, sin embargo quiero simplemente grabar un vídeo, que no tenga que ver con el motion, y no veo con que módulo y comandos para hacerlo. Tengo de OpenWRT la 14.07 RC3, Alguien sabe?
ResponderEliminarVaya quiero grabar un vídeo de 30 sg a las 10 de la noche de un watímetro que tengo que se resetea todas las noches, para guardar los valores e irlos apuntando en la hoja registro de excel de los consumos diarios.
Un saludo y gracias por los aportes
Bueno, la opción mas sencilla es usar fswebcam con los parametros loop y frames, para decirle que capture cada segundo durante X segundos. Eso lo metes dentro de un crontab.
Eliminarhttp://blog.davidsingleton.org/raspberry-pi-webcam-a-gentle-intro-to-crontab/
http://manpages.ubuntu.com/manpages/xenial/en/man1/fswebcam.1.html
El problema es que eso no es un video: son solo fotogramas, pero luego hay muchas maneras de unirlo en un video a posteriori.
Otra forma de grabar un video (y este si es un video de verdad) es usando ffmpeg, que es un programa que se puede instalar en Openwrt. No lo he usado nunca pero en este enlace hablan de ello: https://forum.openwrt.org/viewtopic.php?id=59831
Ok, muchas gracias por responder y abrir un poco más el tunel poniéndole luz, porque ya me estaba dando cabezazos con el motion.
EliminarYa instalé el ffmpeg en el OpenWRT y desde la línea de comando estoy tratando de usar lo que voy viendo en la web ¿Podrías exarme una mano? del link que me diste (q te agradezco un montón), hay un 2º link que envía al foro de FFMPEG:
http://ffmpeg.gusari.org/viewforum.php?f=11
Con 69 páginas a unos 30 hilos por página. He usado el buscador del foro en busca del comando con sus argumentos, que me sirva para grabar un simple vídeo, pero se pone la cosa peluda.
Bueno, un saludo y gracias por esas dos ideas que aportaste que también serían una opción pasajera, pero que funcionaría. Lo ideal es poder crear un vídeo sin más.....Don, una ayudita, que no es pa drogas, jaja. Bromas aparte, pero si puede ser, lo clavas.
Venga, prueba esto:
Eliminaropkg install v4l-utils
Para ver si tu camara es compatible:
v4l2-ctl --list-formats-ext
Si no diese error, te mostraría la lista de resoluciones soportadas por la cámara con v4l2.
Ahora, para grabar 22 segundos de vídeo:
ffmpeg -y -f video4linux2 -c:v rawvideo -s 640x480 -i /dev/video0 -t 22 mivideo.avi
El contenido va al fichero mivideo.avi. Ojo, debe estar en un sitio externo al router (pendrive o carpeta de red) ya que si no te va a llenar la memoria del router en un periquete.
Confírmame que funciona, porque yo lo lanzo y como en el lugar donde tengo la cámara ahora no hay nada no se si es un vídeo o una imagen estática.
Buenas, buenas buenas....si señor:
EliminarSe suponía que por lo la salida del v4l2-ctl --list-formats-ext si soportaba 640x480 pero, en vista de que empezaba pero se quedaba trabado antes de coger frames, lo bajé a 320x240 y entonces si que funcionó.
Increíble, lo conseguiste:
root@OpenWrt:/# ffmpeg -y -f video4linux2 -c:v rawvideo -s 320x240 -i /dev/video
0 -t 22 /mnt/sda1/mivideo2.avi
.
..
...
frame=8 fps=7.0 q=3.2 size= 30kB time=00:00:00.26 bitrate=922.7kbits/s
.
..
...
video:322kB audio:0kB global headers:0kB muxing overhead 6.558860%
Total del vídeo en KB fueron para 20sg: 361 KB (inmejorable calidad-tamaño x tiempo).
Chiquito crack, acabas de evitarme irme al sur a recoger los datos del watímetro cada X's días (70 Km´s)...dime donde te hago el ingreso, que crack, jajajja.
Por cierto de donde sacaste toda la info de configuración por si quiero retocar algo, me ha gustado mucho. Lo digo por cambiarle el formato de vídeo, etc..., esas cosas con las que uno se entretiene. MÁS QUE GRACIAS !!!!
Jaja, me alegro de que funcione. La info la saque googleando, no recuerdo ahora de donde. de todas maneras el video va en un formato raw sencillo (es decir, no se aplica ninguna codificación ni conversión).
EliminarSi te ocupa poco no lo toques ya que formatos mas complejos pueden darte problemas o provocar que el OpenWRT tarde en codificarlo. Date cuenta de que nuestros routers no suelen ser muy potentes y lo mejor es no estresarlos mucho....
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuenas, muy interesante tus artículos para conectar una webcam a un router con openWrt. En nuestro IES lo usamos tanto para enseñar administración de redes, configuración de Vlans, cámaras Ip, etc. (es muy barato y da mucho juego). El caso es que queria implementarlo únicamente com cliente WIFI con la webcam para que se comportara como una cámara IP WIFI autónoma y extender sus aplicaciones. Pero no he sido capaz de hacer funcionar así OpenWrt, en cuanto quito el cable no tengo forma de que la interface WIFI me responda a los "pings" y por lo tanto no puedo acceder al stream de vídeo. Como al final de tu artículo he visto que era algo que tenías pendiente, te quería preguntar que si tú lo habías conseguido tenerlo como camara IP inalámbrica.
ResponderEliminarGracias y un saudo ...
Hola, lo cierto es que dan mucha versatilidad de forma barata con aparatejos que normalmente están muertos de risa en los trasteros.
EliminarLo de cliente wifi no deberia ser complicado. Son dos partes: 1) una ponerlo como cliente wifi normal y corriente, que responda a los pings. 2) Configurar luego el tema de la webcam.
Para ponerlo como cliente wifi lo mas sencillo es hacerlo desde el interfaz web de luci: te metes y buscas la wifi a la que quieres conectarte, te conectas y ya está. Esa wifi te dará una ip (en el router wifi remoto puedes configurar el dhcp para que siempre de la misma ip). Todo esto lo haces conectado al openwrt con un cable ethernet, con lo que el openwrt deberia tener 2 ip: una en la tarjeta de red cableada y otra en al tarjeta de red wifi. Al hacer ifconfig deberias ver ambas ip. Una vez hecho esto será cuestión de desconectar el cable de red y hacer ping a la ip de la interface wifi. Si responde, es que todo va bien y ya puedes conectar por ssh o telnet y configurar la cámara.
Cuentame tus progresos.... :-D
Lo primero gracias por tu atención y rápidez. Eso que me comentas era lo que pensaba yo y así lo hice, me conecté como cliente al router principal, le puse una nueva IP estática a la interfaz WIFI, respondía al ping perfectamente y veía el stream de video desde su IP, pero siempre que tuviera puesto el cable de la interfaz LAN.Al desconectar el latiguillo, la IP de la interfaz WIFI no era accesible. Después de leer en el sitio oficial de OpenWrt, estuve "jugando" con las zonas del cortafuegos, hacer bridge con la interfaz LAN, etc. a ver si el error venía por ahí, pero nada. Me cabe la duda de si no es viable hacerlo con OpenWrt o bien algo que me esté saltando. De todas formas seguiré investigando a ver si lo consigo. Si lo hago os lo cominicaré en este post.
EliminarUn saludo
Buenas, no hay problema, me pillas con el pc entre manos, jaja. por lo que me cuentas puede ser el cortafuegos (lo puedes desactivar permanentemente con /etc/init.d/firewall disable) o de enrutamiento. Una cosa que se me ocurre, si el router que usas tiene los pines para la conexión serie, es que enciendas el router con el cable serie conectado al pc y desde minicom pruebes. La ventaja de eso es que accedes al router en local como si tuvieses teclado y pantalla coenctado a el, no accedes por remoto. Asi te será mas fácil hacer pruebas. ¿Que marca y modelo de router es?
EliminarBunas de nuevo, he deshabilitado el firewall y probado otra serie de cosas, pero sigo sin tener respuesta de la interface WIFI en cuanto quito el cable de red. Ya más despacio conectaré un cable serie a la placa o probaré con un adaptador USB/RS-232. El modelo de router es un Alpha ASL-26555.
EliminarSeguire informando en cuato avance algo ( si es que lo consigo ;-).
Un saludo
Pues es una pena, ya que deberia funcionar. Si te deja con el adaptador usb-rs232 es lo mejor, ya que ves todo el proceso de arranque haya red o no y puedes ver que sucede cuando quitas el cable.
EliminarAntes de quitar el cable, si haces "ifconfig" y "route", ¿que te sale?.
Esto es lo que obtengo:
Eliminarroot@OpenWrt:~# ifconfig
br-lan Link encap:Ethernet HWaddr D0:AE:EC:F0:6F:74
inet addr:192.168.1.99 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fdf8:7aba:eee2::1/60 Scope:Global
inet6 addr: fe80::d2ae:ecff:fef0:6f74/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:658 errors:0 dropped:0 overruns:0 frame:0
TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:63401 (61.9 KiB) TX bytes:24395 (23.8 KiB)
eth0 Link encap:Ethernet HWaddr D0:AE:EC:F0:6F:74
inet6 addr: fe80::d2ae:ecff:fef0:6f74/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1957 errors:0 dropped:0 overruns:0 frame:0
TX packets:152 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:376638 (367.8 KiB) TX bytes:20908 (20.4 KiB)
Interrupt:5
eth0.1 Link encap:Ethernet HWaddr D0:AE:EC:F0:6F:74
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1948 errors:0 dropped:0 overruns:0 frame:0
TX packets:147 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:340247 (332.2 KiB) TX bytes:18485 (18.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:96 (96.0 B) TX bytes:96 (96.0 B)
wlan0 Link encap:Ethernet HWaddr D0:AE:EC:F0:6F:74
inet addr:192.168.1.53 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::d2ae:ecff:fef0:6f74/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1901 errors:0 dropped:0 overruns:0 frame:0
TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:337498 (329.5 KiB) TX bytes:17551 (17.1 KiB)
root@OpenWrt:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 br-lan
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
Es curioso, la ip es correcta y la ruta también.
ResponderEliminarSi haces ping a 192.168.1.53 (la ip de wlan0) desde un ordenador externo. ¿Responde? En caso afirmativo, ¿si quitas el cable de red sigue respondiendo?
Si, efectivamente la wlan0 (192.168.1.53) responde al ping correctamente cuando el cable está conectado, en cuanto quito el cable deja de responder.
EliminarPues entonces está claro que la única esperanza es conectar por el cable serie y diagnosticar así que pasa.
Eliminar