2011. március 6.

Régi PDA, mint távfelügyelet (time-lapse video)

Az úgy kezdődött, hogy a régi Windows Mobile alapú PDA-mat, a HTC Kaiser-t már a kísérleti Android változattal sem használtam. Kopottságára való tekintettel eladni nem érdemes, a használati értéke ennél nagyobb, teljesen működőképes a vas. Ezért úgy döntöttem, megvalósítom régi vágyam, ha már van rajta két kamera is, távfelügyeleti rendszert készítek belőle.


A HTC Kaiser hátlapi és előlapi kamerái tökéletesen alkalmasak arra, hogy házi-ipari jelleggel webkamera minőségű fotókat készítsek vele. Az internetes képességei lehetővé teszik, hogy ezeket a képeket akár megosszuk vagy továbbítsuk is. A gyári Windows Mobile 6.1 operációs rendszer lehetővé teszi, hogy folyamatos működéssel, állandó töltéssel, bekapcsolt WiFi antenna mellett se melegedjen a készülék (3G/HSDPA kapcsolattal már tíz fokkal melegebb a gép). A terveimhez a következő feladatokra kerestem alkalmazásokat:
  • Hátlapi (esetleg előlapi) kamerákat is támogató, időzíthető fotószoftver kell, mely elkészíti a szükséges képeket.
  • Automatikus képtovábbításra alkalmas alkalmazás, mely tőlem függetlenül képes a feladatra.
  • Az egész stabilan működik akár heteken keresztül is.
Elárulom, erre ingyenes és stabil megoldást nem találtam. Az előlapi kamera azért érdekes számomra, mert nem csak az ablakon kívüli, hanem a beltérben látható eseménytelenségről, ha nem is állandó jelleggel, de képet szeretnék látni. Továbbá a legtöbb ilyen szoftver vagy nem stabil, vagy fizetős, vagy nem Kaiser-re optimalizált, vagy valamiféle videót rögzít, stream-t továbbít, és nekem állóképre volt szükségem.

Time-lapse video (első változat)

A HTC Kaiser által rögzített majdnem 6 napos anyag videóban.
A felvételt Picasa képszerkesztőben raktam össze pár perc alatt.
Time-lapse video (második változat)

Itt már 1410 fotóból áll a film, mintegy 15-16 nap hosszúságban.
A képkockák 1/6 másodperc időközzel így majdnem 3,5 perc hosszú anyagot adtak ki.
Minden kockára egy Picasa-féle "I'm feel lucky" engedtem rá.
Így valamivel élénkebbek a színek, határozottabbak a kontrasztok is.
http://www.youtube.com/watch?v=axQRUy3UJKk

A másik gond az volt, hogy az otthoni mobilinternet elérésemre használt Vodafone D100 HSDPA WLAN Router képtelen egyes belső eszközön lévő tartalom megosztására. Így például kívülről nem megy se a VNC szerver, se egyes DnyDNS szerver kapcsolódás. Így se a konzolos ránézés a készülékre, se az esetleg időzítve készített képek azonnali megtekintése nem ment a "megszokott" módon, már amennyire hétköznapi elvárás lehet ez egy WinMo alapú PDA esetén. Végül megtaláltam a megfelelő megoldásokat.

Webszervert a PDA-ból
Találtam két szoftvert is, mely alkalmas arra, hogy a PDA-n lévő tartalmat weboldalként teszi elérhetővé. Így egy webszervert készíthettem a Kaiser-ből. Mindkét megoldás más-más korláttal küzd, de az elmúlt hetek tapasztalatai alapján azt tapasztaltam, hogy a stabilitásuk elfogadható.

Sphinx Mobile Web Server
Egy ingyenes és egy fizetős változata is van. Pocket PC és WinMo és Smartphone gépeken is elfut, és asztali gépekre is készült belőle változat. Alkalmas belső hálózaton a saját IP címének elérésével a tartalommegosztásra, és támogatja a DynDNS és hasonló IP cím figyelő megoldásokat is. Ez utóbbi esetén elegendő megadnod a DynDNS hozzáférésedet és a domainnevet, és folyamatosan figyeli, ha esetleg közben az IP címed megváltozna (például mert mobilinterneten át osztod meg a webszerver elérhetőségét).


Ami tetszik:
  • Nagyon egyszerű, kisméretű alapprogram PocketPC 2003+ / Windows Mobile 5.x, 6.x rendszerekre. Emiatt nagyon stabil, tényleg ipari jellege van, még egyszer sem lőtte ki magát nálam. A fejlesztő céges felhasználásra is javasolja.
  • PC-s változata is van, ha esetleg valaki egy kiszuperált Eee PC-n szeretné próbálgatni képességeit.
  • Támogatja a DynDNS használatát, így változó IP cím mögött is egy egyszerű linkkel elérhető bárhonnan.
  • Telepítés után mintaoldalakat tesz fel a "\My Documents" mappa alá, melyek kódja könnyen átírható.
  • Nem csak sima weblap megjelenítésre képes, hanem belistázza a könyvtárban lévő fájlokat is.
  • A weboldalak funkciókat is tartalmazhatnak, így például egy telefonhívást is el lehet indítani távolról, vagy egy zeneszám lejátszását is meg lehet oldani, esetleg alkalmazást lehet rendelni egy webes gombhoz.
  • Azonnali képernyőmentést képes készíteni a készülékről.
  • Képes a GPS koordinátáidat is továbbítani. Ha nem aktív a GPS antenna, akkor a GSM alapján lő be valahová, és a pozíciódat weben közzé is teszi, ha akarod.
  • A fizetős változatból eltűnnek a reklámok, és jelszavazhatóak az oldalak.
Amit hiányolok:
  • Sokallom a teljes változatárt a majd 7000 Ft-os árat, mivel nem ipari felhasználó vagyok. Bár ha belegondolunk, ez az app még nem akkor készült, mikor az Apple és a Google telefonjain elkényelmesedve megszoktuk az olcsó szoftverárakat. Ezért a pénzért egy azonnal reagáló support jár a plusz funkciók mellett.
  • A weblapok jelszavazása lehetséges, de csak a fizetős változatban.
  • Az SD kártya tartalmát csak a fizetős változat látja, így óvatosan kell bánni a memória fotókkal való telítésével.
  • A "Picture auto-gallery" funkció csak a PC-s változatban működik, a PDA erőforrásaira hivatkozva a fejlesztő nem építette be ezt a PPC változatba. Ezt meg is értem, mert ha már egy nagyobb (pl. VGA) képet ágyazok be a weboldalba, érdemes kikapcsolni a könyvtárak kis sárga képikonjait és a fájlok ki kék pötty ikonjait, mert ez esetben a három fájl egyszerre történő letöltése kapcsolatmegszakítással jár.
  • Azaz a terhelést nem bírja a szerver, óvatosan kell bánni a publikálásával.
  • A képernyőmentés nem mindig frissít, néha újra kell tölteni az oldalt, hogy az aktuálisat lásd, mely az  előzőleg említett  korlátokból adódhat.
  • Nincsen beépített funkció a fotókészítés indítására, ez saját fejlesztést igényel.
  • Nincsen lehetőség arra, hogy távolról töltsünk fel fájlt a telefonra. A php kód nem futtatható rajta, így feltöltő form nem rakható rá. Legalábbis tudtommal...
A szoftver letöltése:
ServersMan
Multiplatformos megoldás arra, hogy a telefonod tartalmát bármikor elérd egy weblapon át. Ez is működik belső hálózaton és akár 3G mobilneten át. A fenti megoldáshoz képest itt annyi az eltérés, hogy a kapott tartalom egy a telefontól független szerver oldali webfelület segítségével kerül megosztásra, mely valamelyest csökkenti elvileg a terhelést. Elvileg kevesebb tudást igényel a használata is. További eltérés az, hogy nem támogatja a saját domainnevet, azaz itt DnyDNS nincsen. Azonban a publikus weboldal itt is elérhető, csak a serversman.com domain alatti felhasználónévvel készített linken át.


Ami tetszik:
  • Működik az alkalmazás iPhone, Androis és Windows Mobile rendszereken is.
  • Nem terheli a PDA-t a webszerver funkcionalitás, csak a fájlszerver elérés szükséges.
  • Van egy publikus weboldal és egy csak általunk látható webes fájlkezelő.
  • A fájlkezelő képes fájlfeltöltésre is.
  • A fejlesztőknek van egy Scooop névre hallgató alkalmazása, melyből fotózott képet azonnal megosztásra képessé teszi a webszervereden.
  • A ServerMan működése közben a fájlok elérése stabil, tényleg csak a mobilnet lehetőségeitől és a készülék erőforrásaitól függ, milyen gyorsan látsz meg egy-egy képet.
  • Dokumentumok és zene megosztásra is alkalmas. Még playlist készítésre is lehetőséged van a fejlesztő szerint.
  • Ez is képes a GPS-es helymeghatározásra.
  • A webes admin felület több telefon kezelését is támogatja.
Amit hiányolok:
  • Az alkalmazás nálam néha elszáll, kilép. Szerintem nem elég neki a memóriahasználat. Így nálam nem adott folyamatos üzemet a háttérben futtatás alkalmával.
  • A nyilvános képgaléria valamiért nem működik. Nem jöttem rá, hogy ennek mi az oka.
  • A Scooop néha kilőtte a ServerMan-t a memóriából, így az azonnali képmegosztás kvázi nem működött.
  • A Scooop nem támogatja az előlapi kamerát.
  • A ServerMan weboldalán látszik, hogy  a célpiac a távol-kelet, és nem az Európai felhasználópiac. Bár van angol nyelvű menüpont, a kinézettől frászt kapok.
  • A webes fájlkezelő funkcionalitása minimális, nincsen csoportos fájlkijelölés vagy időre rendezés.
A szoftver letöltése:
A fenti két megoldás közül az elsőt futtatom jelenleg, mert stabilabb, mint a második. Továbbá a Mobile Web Server lett számomra testre szabhatóbb. Gondolok itt főleg a távvezérlés, alkalmazás távoli indítás lehetőségére is.

Időzített fotókészítés
Erre a feladatra inkább írtam egy script-et MortScript nyelven. Ennek két oka volt: szeretek ezen a nyelven kis segédprogramokat írni a PDA-ra, továbbá még mindig stabilabb a működése, és sokkal kisebb az erőforrásigénye, mint az általam megvizsgált alkalmazásoknak.

A már most is működő script-em az alábbi elven működik:
  • Elindítja a Kaiser saját fényképező alkalmazását, és megvárja, míg az betöltődik.
  • Elsüti virtuálisan a felvétel gombot, így elkészül egy a beállításaim szerint VGA fotó a hátlapkamerával.
  • Amikor a beltéri kép készítése is fut: Kis várakozás után a script a képernyő menüre "kattint", majd annak közepén "megnyomja" a kameraváltó menüt, így a fotóprogram az előlapi kamarára vált. Kis várakozás után lezárj a beállítás menüt egy virtuális bökéssel. Ezután elsüti ismét a felvétel gombot, így elkészül az előlapi kamerával is egy fotó VGA felbontásban.
  • A várakozásokra azért van szükség, mert nem API-ból kerül meghívásra a fotófunkció, hanem egy embert szimulál a script. Fel kellett arra készítenem, hogy a kisebb várakozások során akár egy rendszerlassulás ne tegye lehetetlenné egy bökés időben történő megérkezését sem.
  • A script lezárja a fotóprogramot, és előhívja a PDA főképernyőjét.
  • Ezután a script ellenőrzi, hogy van-e mai könyvtár, és ha nincsen, létrehozza, majd a frissen készített fotót átmozgatja oda.
  • Az egyik oldalra beágyazza a képet, hogy az utoljára készített felvételt egyből elérhessem bárhonnan (értsd, beágyazza egy html kódba img-ként hivatkozva rá).
  • A program elején nem említettem, de törlésre kerül a notification tárból a script időzítése, hogy ne legyen tele szeméttel. Egy halk kattanást is ad, hogy hallható legyen, ha elindul.
  • A végén szintén elhangzik egy kattanás, majd meghívásra kerül egy másik, a timing script, mely a következő indítást készíti elő.
  • Az időzítő script a jelenlegi beállítások alapján 15 perc elteltével újraindítja a fotózó script-et.
  • A fotózás időzítése változó a nap folyamán. Éjszaka óránként, nappal negyedóránként, napkelte és napnyugta során ötpercenként készül el a kép. Ehhez egy táblázatot használok, melyben benne van az éves napkelte és napnyugta időpont az év minden napjára.
A MortScript hátránya, hogy az időzített parancsok teleszemetelhetik a notification-t, amiatt akár 2-3 példányban is futhat egy azon script. Ez fejlesztés közben előfordulhat. Emiatt használok egy kis alkalmazást, mely képes kiölni ezeket a PDA újraindítása után, vagy ha kézzel elindítom. A script-em munkaszerű üzemeltetése előtt ezt lefuttatom, illetve alapállapotba, memóriatisztára hozom a PDA-t, illetve a WinMo körökben ismert, sokfunkciós Task Manager alkalmazás segítségével kézzel is átnézem a notification-öket.

Ezzel a megoldással jelenleg egész jól üzemel a webszerveres megtekintőm. Éppen ezért, valamint az SD kártya támogatás miatt végül megvásároltam a teljes változatát.

Tervezek még más funkciókat is a webszerver és a script-em továbbhangolásával:
  • Kézzel, távolról indítható fotó készítése.
  • Napfelkelte időszakában gyakoribb időközben történő fotózás. Kész.
  • A képállomány, képsorozat élő megosztása valamelyik webkamerás közösség felé. Ehhez automatikus ftp feltöltésre lesz majd szükségem. Lásd időkép wiki.
  • Esetleg távoli fájltörlés elindítása, képek archiválása tömörítéssel vagy bárhová áttöltéssel.
  • Rendszer időzített vagy kézi újraindítása.
A script-et akkor szeretném csak elérhetővé tenni, ha lesz rá időm, hogy máshol is futtathatóan dokumentáljam.

A PDA tripod
A HTC Kaiser ablakba rakása nem könnyű, hiszen nem igazán készült hozzá olyan tartó, mellyel egy lakásablakba tudnám kitenni, és a hátlapon lévő kamera is "kilát". Már-már ablakra cuppantható megoldáson gondolkodtam, mivel első időkben is csak egy pohárba állítva tudtam kitenni. Aztán Sanci barátom kölcsön adott egy kínai csodát, egy PDA tripodot, melynek ára mindössze 5 USD körül van szállítással együtt.


A használatakor arra kellett figyelnem, hogy a PDA bal oldali gombjait ne nyomja meg a tartó adapter alsó sínje. Szerencsémre a balra kitolható kar vájata szabad helyet biztosít a gomboknak.

A napokban megosztottam a Facebookon a fenti videót. Egy hosszabb párbeszéd indult nagy lájkolás közepette, amit itt követhetsz:
A script-ek
Update 2013.03.06

Többek kérésére közzéteszem azokat a Mort Script fájlokat, melyek a rendszert irányítják. Ha nem működik Nálad, azzal nem tudok mit kezdeni. Bele se vágj, ha nem ismersz valamilyen script nyelvet!
  • archives.mscr: Napi bontásban hoz létre mappákat, és archiválja a elkészült képeket akkor, ha talál a DCIM mappában valamit. Az archiválás mappája a DCIM/archives/... lesz.
  • copy.mscr: három-három képet másol át a webszerver mappájába a frontkamera és a hátlap kamera által készített képek legfrissebbváltozataiból.
  • display.mscr: kikapcsolja a kijelzőt.
  • photo.mscr: Elkészíti a fotót. Jelenleg az előlapi kamera sorai ";"-vel inaktívra vannak állítva. A script elején kilövi az esetleg tévesen a a memóriában ragadt korábbi változatokat, majd pittyen egyet, és bekapcsolja a kijelzőt, és a Today képernyőre vált, ha esetleg bármilyen más app elfoglalta volna. Kis várakozás, amíg aktív nem lesz a Today, azután elindítja a kamerát, majd ismét vár, míg az aktív nem lesz. Készít egy képet, majd vár egy sort, hogy a kép elkészülhessen, utána bezárja a kamerát. Ismét a Today-re vált, majd lapoz egyet a képernyőn a HTC Today widget-jén, majd pittyen. A végén elindítja az archives és a timing scripteket.
  • stop.mscr: Manuális indításra jó, hogy leállítsa szabályosan a háttérben futó script-eket. A végén pittyen egyet.
  • sun.mscr: A sun.txt tartalma alapján beolvassa az aktuális időt megvizsgálva, hogy mi a napfelkelte és a naplemente időpontja. Kiírja, hogy most mennyi az idő. Manuális futtatásra alkalmas, a timing készítésekor készítettem.
  • timing.mscr: A fotózás időzítéséért felel ez a script. Az elején kitisztítja a többi scripttől a memóriát, majd bekéri az aktuális időpontot. Az általános időzítési idő is itt állítható be. Beolvassa az arra a napra vonatkozó napfelkelte és napnyugta időpontjait a sun.txt tábla alapján. Utána mindezt átszámítja percre. Beállítja, hogy napfelkelte és naplemente alatt sűrűbben fotózzon, mert akkor érdemesebb. Éjszaka kevesebb képet készít, mert akkor kisebbek a változások. Utána jönnek a kapott értékek kalkulációi (pl. a 63 min, az 1 h 3 min, ezért át kell számolni). A végén beállítja a memóriába, hogy a kapott eredmények alapján, hogy mikor kell a következő photo scriptnek elindulnia. Évvűltáskor lehetnek gondok, és nem emlékszem, hogy szökőév kompatibilis-e.
  • write.mscr: Manuálisan indítottam csak, mindössze arra szolgált, hogy a webszerver egyik lapjára kitegye az avatárom.
  • sun.txt: Még a pár évvel ezelőtti értékek alapján napi bontásban megtalálható a fájlban a napfelkelte és a naplemente időpontja. Ezen adatokat emlékeim szerint a MET oldaláról szedtem. De ahogy nézem, max 1 perc eltérés van idén. Így ez aktuális még. A téli/nyári időszámítás bele van kalkulálva, így elég ha átáll a PDA órája is, mert az átállított időt olvassa a táblából a script.
Mindegyik fájl a "\My Documents\" mappába kerül, onnan futtatható saját felelősségedre! ;)