Postup, který níže uvedu, je s malými obměnami platný pro všechny distribuce. Tahle činnost je ale pro OpenWRT a pro malé desky jako stvořená, takže by byla škoda si o ní neříct.
Nabízí se otázka, proč monitorovat okolí domu nebo třeba i vnitřek. Lidé, včetně mě, k tomu mají svoje důvody. Pro linuxáky by mělo stačit „protože můžu“, ale existují i jiné důvody jako „soused mi krade dříví“, „chci se podívat, jaké je doma počasí“, „moje manželka asi s někým spí“ a samozřejmě velmi populární „kdo mi v noci objel klíčem auto“. Využití je spousta a dostat se k požadované funkčnosti není tak složité.
Jestli se vám myšlenka líbí a chcete si něco podobného vytvořit, tak musíte splňovat následující podmínky:
- Funkční OpenWRT na HW s USB portem
- Podporovanou webkameru
- Program Motion
Pokud jste seriál sledovali dobře a vyzkoušeli si nastavit OpenWRT, měli byste mít na stole vše pro splnění první podmínky. Druhá podmínka se vyplňuje hůře. Já měl se svou MSI StarCam Clip štěstí a stačilo nainstalovat balíčky kmod-video-core a kmod-video-sn9c102. Tím přidáme do OpenWRT podporu pro Video for Linux a ovladač pro web kameru. Pokud máte funkční ovladač, tak zbývá nainstalovat program Motion.
Nyní přejdeme k HW části. Zmíněná kamerka je určená k použití v pohodlí rámu monitoru. Pokud jste na tom stejně jako já a chcete si dát kamerku ven, mělo by stačit ji dát do nějaké průhledné krabičky a zaizolovat silikonem. Tři týdny mi takhle kamerka funguje bez jediného problému a prošla již i několikrát deštěm. Použití venku se přímo nabízí, protože routery často bývají někde pod střechou.
Motion
Pro detekci pohybu, záznam obrazu a provozování webkamery jako takové se nejvíce hodí multifunkční program Motion. Obsahuje webový server, přes který se dá dívat na aktuální obraz nebo částečně ovlivňovat konfiguraci. Motion také umí jednou za čas uložit jeden snímek a tím zaznamenávat, co se děje v okolí.
Motion nainstalujeme jednoduše z balíčku.
$ opkg install motion
Nainstaluje se nám trošku okleštěnější Motion, kterému budeme muset upravit konfigurační soubor tak, aby se nesnažil nastavovat, co v něm není zakompilované. Abychom se dostali až k webovému serveru, musíme nastavit několik hodnot v konfiguračním souboru /etc/motion.conf. Jde o tyto hodnoty:
daemon on # daemon mód process_id_file /var/run/motion/motion.pid # PID videodevice /dev/video0 # cesta ke kameře width 640 # šířka videa height 480 # výška videa quality 75 # kvalita obrazu text_right %Y-%m-%d\n%T-%q # text v pravo dole text_left Lanskroun - Housti # text v levo dole target_dir /tmp/cam/ # kam ukládat snímky webcam_port 8081 # port, na kterém má běžet webserver s obrazem kamery webcam_quality 70 # kvalita obrazu webcam_motion on # zvýšit framerate při detekování pohybu webcam_maxrate 3 # maximální počet snímků za sekundu webcam_localhost off # povolit přístup i z jiných strojů než localhostu control_port 8080 # konfigurační stránka control_localhost on # povolit konfiguraci jen z lokálního stroje control_html_output on # používat HTML
Dále je potřeba odstranit několik hodnot, které sice konfigurační soubor obsahuje, ale patří vlastnostem, které nejsou v Motionu zkompilované. Jde o všechny parametry začínající na ffmpeg, sql a ještě parametry movie_filename a timelapse_filename.
U ostatních parametrů necháváme výchozí hodnoty. Co znamenají, se dá najít v manuálu.
Po nastartování programu Motion se už můžeme podívat na obraz zadáním IP adresy routeru a portu 8081 do prohlížeče, např. 10.0.0.1:8081. Parametrem webcam_macrate nastavíme počet snímků za sekundu a pokud máte rychlou linku, dostanete se na relativně plynulý obraz.
Motion není náročný a na RouterStation zatěžuje procesor přibližně na 30 %, když se na video někdo dívá při třech snímcích za sekundu, přičemž změna počtu snímků za sekundu se výrazně nepodepisuje na zatížení. Co je trochu více limitující, je velikost flash paměti. Pokud si chcete ukládat každých XX sekund snímky, připravte si externí nebo síťový disk, na kterém to bude možné realizovat.
Bohužel má Motion v OpenWRT malé nedostatky. Nedokáže se samo spustit jako daemon, i když mu to uživatel řekne jak v konfiguračním souboru, tak parametrem. Daemon také nereaguje na některé parametry, např. na snapshot_interval. Tím se nastavuje interval mezi ukládáním snímků na disk. Když do něj nastavíte nějakou hodnotu, bude Motion stejně ukládat snímky, jak se mu zlíbí. Oba problémy by pravděpodobně vyřešila nová verze programu.
První problém můžeme obejít např. přes pythoní skript:
#!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys if __name__ == "__main__": # do the UNIX double-fork magic, see Stevens' "Advanced # Programming in the UNIX Environment" for details (ISBN 0201563177) try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) except OSError, e: print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) sys.exit(1) # decouple from parent environment os.chdir("/") #don't prevent unmounting.... os.setsid() os.umask(0) # do second fork try: pid = os.fork() if pid > 0: # exit from second parent, print eventual PID before #print "Daemon PID %d" % pid open("/var/run/pythondm",'w').write("%d"%pid) sys.exit(0) except OSError, e: print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) sys.exit(1) os.system("motion -c /etc/motion.conf")
Tomu ještě musíme doplnit init skript /etc/init.d/motion:
#!/bin/sh /etc/rc.common start() { echo "Starting motion" /opt/daemon.py } stop() { echo "Stopping motion" killall motion }
Skript by se dal nahradit programem daemon, který je napsaný v C, a tak nevyžaduje nainstalovaný Python. Ten ale není v repositáři OpenWRT.
Závěr
Takto provozovaná webkamera jede stabilně a bez náznaku potíží. Rozchodit ji je trochu kostrbaté, ale můžeme doufat, že se to v budoucnu změní.