"Después del juego es antes del juego"
Sepp Herberger

lunes, 16 de marzo de 2015

Montemos una webcam IP barata (y III)

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:

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.

36 comentarios:

  1. 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.

    root@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

    ResponderEliminar
    Respuestas
    1. 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:

      -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.

      Eliminar
  2. 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.

    ResponderEliminar
  3. Debes abrir las peticiones TCP al puerto 8081 desde el router adsl (el principal) hacia 192.168.1.3.

    Depende 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.

    ResponderEliminar
  4. 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.
    gracias

    ResponderEliminar
  5. 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?.

    Luego 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?.



    ResponderEliminar
    Respuestas
    1. 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.
      si 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.

      Eliminar
  6. ¿Tiene el portatil Linux? ¿Le puedes poner una IP fija al portatil?.

    ResponderEliminar
    Respuestas
    1. Se 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

      Eliminar
    2. Ya lo sé. No es ahí por donde voy.Tu problema puede estar en dos puntos:

      1) 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

      Eliminar
  7. 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.

    ResponderEliminar
    Respuestas
    1. Esta en /root/.muttrc

      root@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.

      Eliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. El comando para hacerlo propietario seria.
    chmod 644/root/.muttrc

    ResponderEliminar
    Respuestas
    1. Para hacerlo propietario:

      chown root:root /root/.muttrc

      Par cambiar permisos

      chmod 755 /root/.muttrc

      Eliminar
  11. 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
    Respuestas
    1. %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.

      Serí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


      Eliminar
  12. 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?

    Vaya 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

    ResponderEliminar
    Respuestas
    1. 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.
      http://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


      Eliminar
    2. 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.

      Ya 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.

      Eliminar
    3. Venga, prueba esto:

      opkg 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.

      Eliminar
    4. Buenas, buenas buenas....si señor:

      Se 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 !!!!

      Eliminar
    5. 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).

      Si 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....

      Eliminar
  13. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  14. Buenas, 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.

    Gracias y un saudo ...

    ResponderEliminar
    Respuestas
    1. Hola, lo cierto es que dan mucha versatilidad de forma barata con aparatejos que normalmente están muertos de risa en los trasteros.
      Lo 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

      Eliminar
    2. 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.

      Un saludo

      Eliminar
    3. 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?

      Eliminar
    4. Bunas 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.

      Seguire informando en cuato avance algo ( si es que lo consigo ;-).

      Un saludo

      Eliminar
    5. 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.

      Antes de quitar el cable, si haces "ifconfig" y "route", ¿que te sale?.

      Eliminar
    6. Esto es lo que obtengo:

      root@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

      Eliminar
  15. Es curioso, la ip es correcta y la ruta también.

    Si 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?

    ResponderEliminar
    Respuestas
    1. 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.

      Eliminar
    2. Pues entonces está claro que la única esperanza es conectar por el cable serie y diagnosticar así que pasa.

      Eliminar