<< | #345 ; Simpla kontrola fotila sistemo uzante PHP |
>> |
La kvara el la SEP FRATOJ, la distanca fotila frato "Simeoni" ankoraŭ ne havas la fotilon de granda fota angulo 200° kion mi por ĝi dezirus por eksperimentado, sed por ĝi ja estas muntita la TTT-servilo "Apache" kaj la programa lingvo PHP kioj bone funkcias kune. Ni do provizore uzu la "malnovan" RPi-fotilon vario 2.1 por nia kara fotila frato "Simeoni".
La ideo nun estas por fine foti aŭtomate, tiel ke la distanca fotilo fotas novan foton por sia propra dosiero unu fojon por ĉiu minuto (60 sekundoj) kaj poste oni povas vidi la foton en TTT-legilo de loka komputilo tra la "Ethernet" -kablo. La nomo de foto restas la sama kaj la malnovaj fotoj ne estas konservitaj.
Nu, estus ja eble por munti por RPi propran datumbazon kiel la fama libera kaj senkosta "MySQL" por memorteni ankaŭ la malnovajn fotojn, sed tian pli kompleksan sistemon mi provizore ne planas. Provizore la sistemo estu nur simpla kaj malgranda.
Estos du procezoj en la sistemo, principe apartaj procezoj, sed la sama foto estas por ili komuna faktoro. La procezoj tamen estas relative sendependaj.
En PHP estus eblecoj por rekte uzi la operaciumon per funkcioj system
kaj exec
sed povus esti problemo. La fotilo bezonas kelkaj sekundoj da tempo por sin stabiligi antaŭ la foto kaj mi kredas ke PHP devus atendi la rezulton dum tio tempo. Miaopinie PHP tamen devus produkti la paĝon relative rapide. Tial mi prefere ne fotas rekte en PHP-programo.
Estas kelkaj partoj en la efektivigo. Unua parto estas por skribi la "script" kio fotos per la programo raspistill
en la distanca fotilo.
Ni povas ekzemple unue krei VNC-kontakton kun la distanca komputilo kaj por krei simplan tekstan datumon en la komanda fenestro de distanca komputilo por la supoza dosiero /home/pi/
de norma uzanto ekzemple per nomo fotu.sh
per la komando nano fotu.sh
... (memortenu) ... kaj por la teksto ni skribas:
#!/bin/bash sudo raspistill -w 640 -h 480 -a 1036 -o /var/www/html/webcam/foto.jpg
Poste ni donas iom pli da rajtoj per chmod +x fotu.sh
kaj sekve eblas plenumi la programon per komando ./fotu.sh
en la komanda fenestro de distanca komputilo.
Ni uzos por la foto la dosieron /var/www/html/webcam/
kio estas videbla por la TTT-legilo. La HTML-radiko estas /var/www/html/
kaj ni bezonas mem krei la dosieron, se ne jam ekzistas. La posedanto de HTML-radiko estas la pompa root
kaj tial ni kreu la dosieron en HTML-radiko jene : sudo mkdir webcam
Eblas facile foti foton kiel la apuda per la distanca fotilo kaj por montri ĝin en TTT-legilo, nova foto ekzemple por ĉiu minuto. Do ne tre rapida kontrola fotilo, sed facila por efektivigi. Ioma prokrasto inter la fotado kaj montrado, sed konsumas nur malmulte da rimedoj. Estas dato kaj horo de fotado videbla en la foto.
La resulto de foto en dosiero /var/www/html/webcam/foto.jpg
post ioma prokrasto estas iom la sama ol la apuda foto, kvankam mi malgrandigis la foton al pli ekonomia grando 320x240, do nur kvarono de origina grando. Ni bezonas la vorton sudo
ĉar la uzanto root
posedas la dosieron /var/www/html/webcam/
kie estos la foto.
Nova parto en la uzo de programo raspistill
klare estas -a 1036
kio kaŭzas la daton kaj horon en la foto. Nu, egalas 1036 = 1024 + 8 + 4
kie la parto 1024 ( = 210) kaŭzas la nigran fonon, parto 8 ( = 23) kaŭzas la daton kaj 4 ( = 22) la horon. Eblas certe pli bela modifo, sed ĉi tio estas plej simpla. Miamemore estas la supoza dato en foto laŭ angla ordo : unue monato, due tago, sekve la jaro post 2000.
Nu, jam ni fotas per simpla "script". Sekve ni volas montri la foton en TTT-legilo, prefere tiel ke la TTT-legilo uzas la plej novan foton kio estas uzebla. Nia programo ja fotas ĉiam per la sama nomo, sed norme la TTT-legilo ne scias ke ekzistus pli nova foto en la dosiero. Do ni konstruu PHP-paĝon kio serie legas la foton kaj preparas la paĝon por TTT-legilo.
Mi efektivigis la paĝon por la TTT-servilo kiel PHP -datumo fotu.php
en la dosiero /var/www/html/
kie estas videbla por TTT-legilo. Oni povas unue krei la datumon en komanda fenestro de distanca komputilo per komando sudo nano fotu.php
kaj poste aliigi la posedanton al la norma jene : sudo chown pi: fotu.php
tiel ke eblos uzi por la norma uzanto pi
.
Nun, hmmmmm ... mi devas iom aliigi la tekston en la PHP-datumo por ke estu norme videbla por ĉi tio HTML -paĝo kion vi nun rigardas :
<?php echo "<title> Montru la foton </title>"; ?> <?php echo "<meta http-equiv='refresh' content='60'>"; ?> <?php echo "<h1 align='center'>" . "Dato: " . date('d-m-Y H:i:s') . "</h1>"; ?> <?php echo "<p align='center'> <img src='webcam/foto.jpg'> </p>"; ?>
Por la titolo de paĝo mi uzas daton en la norma finna ordo, tago - monato - jaro. Kvankam por la dato 02.02. la ordo de tago kaj monato ja estas iom indiferenta.
Kiam mi nun uzas la TTT-legilon en mia loka PC -komputilo per la adreso de distanca "Simeoni" kaj la nomo de PHP-datumo http://169.254.131.84/fotu.php
, povus la rezulto esti la apuda.
Nu, la foto estis fotita je 10:15:06, sed la tempo estis fakte jam 14:31:28 horoj kiam mi uzis la TTT-legilon. La PHP -paĝo volas montri sin mem denove je intertempo de 60 sekundoj ĉar ene estas la teksto <meta http-equiv='refresh' content='60'>
Nu, la foto estas jam malnova kaj certe ni povus foti mane denove por mem produkti novan foton, sed klare ni fine volas aŭtomatan fotilon. La PHP -paĝo de TTT-servilo jam estas aŭtomata. Sekve ni volas rakonti por la operaciumo ke ni volas foti novan foton por ĉiu minuto de tempo tiel ke la PHP-paĝo povas uzi plej novan foton. Ni ne volas ĉiun fojon foti mem mane, sed la funkcio estu aŭtomata. Ni uzu la programon crontab
Ni povas starti per komando en la komanda fenestro de distanca komputilo: crontab -e
kaj krei novan taskon. Plej facile uzu la programon nano
. Ni simple aldonu novan vicon da teksto je fino (kaj memortenu la datumon):
* * * * * /home/pi/fotu.sh
La teksto /home/pi/fotu.sh
rakontas la dosieron kaj la nomon de nia "script" kion ni volas efektivigi por ĉiu minuto de tempo.
Kaj baldaŭ estos la fotado de novaj fotoj aktiva. Bedaŭrinde la TTT-legilo Chrome ne akceptas novan enhavon en malnovaj datumoj tre diligente en mia PC kaj tial mi uzis IE. Por Chrome en PC estis la titolo nova por ĉiu intertempo 60 sekundoj, sed ĝi tamen volis uzi la saman malnovan foton kion ĝi jam antaŭe legis el TTT-servilo. Malpli da problemoj kun malnova "Internet Explorer". Tia problemo ne okazis en Raspberry Pi.
Mi uzas iom longan tempon 60 sekundoj en PHP-programo ĉar por la programo crontab
eblas plenumi la taskon maksimume nur foje per minuto, kaj ne pli ofte. Eble mi poste povus uzi Python -programon por foti en pli mallonga intertempo inter la fotoj?
Kiam ni ne plu volas foti novaj fotoj, ni denove startas crontab -e
kaj aliigas la vicon al nura komento per signo '#' en la komenco :
# * * * * * /home/pi/fotu.sh
Ĉi tiel estas facile por starti kaj stopi la uzon de nia fotila "script" en intertempo de 1 minuto. Kiam estas la signo '#' je komenco de vico, estas la vico nura komento kion crontab
ignoras.
La apuda foto estis fotita je 15:09:06 kaj la PHP-paĝo plenumita je 15:09:44. Do ioma prokrasto en la aŭtomata agado. La RPi -komputilo ne havas propran horloĝon kaj tial oni unue rakontu por ĝi la veran daton kaj tempon. Malnovaj fotoj ne estas konservitaj ĉar la datumoj uzas la saman nomon.
Klare estas nenia filmo, nur unuopaj - kaj iom malnovaj - fotoj en 60 sekunda intervalo en TTT-legilo, sed facila sistemo por efektivigi.
Parenteze mi volas rakonti ion pri dosiero por TTT-servilo. Maldekstre ni vidas kiel aperas en TTT-legilo la distanca dosiero /var/www/html/webcam/
kie estas inter alie la datumo foto.jpg
kion la "script" fotas.
Mi vidas la tutan enhavon de dosiero en nia loka komputila reto (tamen ne el Interreto) per adreso de TTT-legilo http://169.254.131.84/webcam
kaj eblas ankaŭ vidi la fotojn per TTT-legilo.
Tio eblas ĉar ekzistas nenia 'index' -datumo en la dosiero. Se ekzistus (eĉ tute malplena) datumo ekzemple index.html
en la dosiero, oni povus vidi nur tion kion la datumo indikas. Malplena datumo indikas nenion.
Oni diras ke 'index' -datumo "ŝlosas" aŭ "riglas" la dosieron, tiel ke la aliaj datumoj en la dosiero norme estas nevideblaj, sed ĉi tio dosiero tute ne estas riglita, sed permesas por libere vidi kaj uzi la enhavon.
Oni povus selekti en TTT-legilo la unua alternativon "Parent Directory" por iri al alia dosiero en la HTML-radiko, sed tie tamen estas datumo index.html
kio ne permesas por rekte vidi la enhavon de tio dosiero. Tie estas ankaŭ index.php
sed la html -datumo evidente estas favorita pli multe.
Ĉi tioj 640x480 fotoj estas en grando proksimume 250 ... 260 KB kiel iom pakitaj JPG-datumoj. Estas ja 640 * 480 = 307200
rastrunuoj kaj en foto oni uzas tutan B por 28 = 256
koloroj de unu rastrunuo, do la nepakita grando de foto evidente estus proksimume 300 KB, sed JPG-formato iom pakas negravan informon. Ofte estas nome apudaj rastrunuoj preskaŭ la samaj.
TTT-servilo certe estas bona laborilo por batali en la kruela malbona granda mondo. Mi supozas ke ĉiuj el la SEP FRATOJ meritas sian propran "Apache" kaj PHP.
Kaj certe fine ..........
NI VENKOS!
La Ambasadoro en Finnlando de sendependa nacio Mueleja Insulo |