Fórum Root.cz
Ostatní => Odkladiště => Téma založeno: PedroKV 02. 10. 2016, 16:56:12
-
Zeptám se raději tady, než ve Vývoji. Mám na domě USB kamerku+usb barometr/teploměr a připojené je to k PC. Na web to každou minutu posílá snímky a data, do snímků jsou naměřené hodnoty vkládány. Chtěl bych tuhle, vcelku triviální záležitost, nahradit Raspberry Pi+BME280+IP kamerou. Rpi si stáhne snímek z IP kamery (dá se přes http://ipadresa/obrázek.jpg), zmenší ho na požadovaný rozměr, dále si zjistí hodnotu z čidla a zapíše ji do snímku. Snímek pošle na web a uloží ho do adresáře jako rok/měsíc/den/číslo snímku.jpg, či jinak. Naměřené hodnoty dále pošle na wunderground.
Nějaké malé zkušenosti s programováním mám, kdysi dávno basic, turbo pascal, php, pak jsem si upravoval nějaké už hotové programy ve Visual Basicu, C#, Delphi, ono je to víceméně furt to samé, jen se to liší syntaxí.
Teď jsem si pořídil Rpi,bme280 a ještě senzor intenzity osvětlení (to by mohlo být zajímavé z pohledu plánované instalace solárů). Zatím se rozkoukávám, linux jsem nikdy neměl. Chtěl bych poradit, v čem ten program na meteostanici napsat. Trošku jsem si o tom přečetl, nejvíc by se mi líbil asi C/C++, protože ten se zkompiluje rovnou do spustitelného souboru, narozdíl od Pythonu či C#, kde je potřeba runtime, i když pro tyto účely to asi nevadí. Pro Python asi hovoří to, že bude možná k dispozici více modulů, které pro můj účel budu potřebovat-díky tomu se s tím nebudu tolik trápit. Programováním se živit nebudu, chci spáchat tohle a to mi ke štěstí stačí. :-)
Nechci založit flamewar, spíš bych potřeboval nakopnout správným směrem. Samozřejmě jsem nejdřív googlil-nejdřív meteostanice, jenže žádná se moc nepodobá té mé, tak i programovací jazyky a zda už někdo nepoložil tuto otázku-nenašel jsem.
Děkuji
-
určitě python, umí co potřebujete, je tam doma, je k němu hromada dokumentace a je celkem jednoduchý
-
Javu máš nejlepší.
-
Pokud chceš hw urychlené filtrované zmenšení obrazu, použij C++ a OpenGL.
-
Pokud chceš hw urychlené filtrované zmenšení obrazu, použij C++ a OpenGL.
jasně. Proč něco dělat jednoduše když to jde složitě.
-
Pro Raspberry je Python něco jako byl pro osmibitové počítače BASIC, takže celkem jednoduchá volba. Koukni do magazínu: https://www.raspberrypi.org/magpi/issues/
-
http://www.astromik.org/malymenu/menuraspi.htm ;)
-
všem díky za odpovědi, asi tedy Python. A díky za link na astromik.org, vypadá to inspirativně ;-)
-
Pre rapsberry je c# najlepsia volba. Sracky typu python nikto nepouziva
-
všem díky za odpovědi, asi tedy Python. A díky za link na astromik.org, vypadá to inspirativně ;-)
Python pro toto stačí, a kdyby to mělo být nativně kompilovatelné, tak C++(14), Go nebo Swift. Možná ještě Rust, ten je ale okrajový. C# je sice pro vývoj i běh v pohodě, ale zbytečně vyžaduje těžkotonážní instalaci. Java je na Linuxu nad ARM tragédie.
-
Javu máš nejlepší.
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
Pre rapsberry je c# najlepsia volba. Sracky typu python nikto nepouziva
Jiste, neni na C#. Uplne nativni, lze najit v kazde Linuxove instalaci. A pokud ne, mame Mono, pro ktere plati vicemene asi vse, co jsem napsal vyse javamagorovi.
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
-
Je to asi tak 5 příkazů v bashi. Upřímně naprosto nechápu, proč ti tady někdo nabízí C(++) nebo dokonce s OpenGL akcelerací. OMG.
Rpi si stáhne snímek z IP kamery (dá se přes http://ipadresa/obrázek.jpg)
wget http://ipadresa/obrázek.jpg
zmenší ho na požadovaný rozměr, dále si zjistí hodnotu z čidla a zapíše ji do snímku.
convert z balíku imagemagick -- umí zmenšovat, skládat obrázky a přidávat text.
Snímek pošle na web a uloží ho do adresáře jako rok/měsíc/den/číslo snímku.jpg, či jinak.
cp soubor `date +%y`/`date +%m`/`date +d`/číslo.jpg
Naměřené hodnoty dále pošle na wunderground.
Tohle neznám, ale čekal bych, že budou vyžadovat wget --post-data="něco".
-
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Nedivil, me je to jedno. Java je nenazrane svinstvo a vubec by me nenapadlo neco takoveho shanet pro RPi. Ale mozna, ze tazatel si rad koupi posledni RPi, s vetsi pameti a vice jadry, aby si mohl napsat super mega cool aplikaci v Jave a ta mu neuswapovala SD kartu k smrti, protoze je to mnohem dustojnejsi pro drsneho borce, nez nekolik radku v bashi, jak zmineno jinde. Akorat tedy si nejsem jist, jestli kdyz to ma bezet kazdou minutu, jestli se to v Jave za tu minutu stihne a neprosvihne se termin pro dalsi beh. Zejmena, pokud by to spoustel pokazde znovu cron. To to za tu minutu nejspis ani nenabehne.
-
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Nedivil, me je to jedno. Java je nenazrane svinstvo a vubec by me nenapadlo neco takoveho shanet pro RPi. Ale mozna, ze tazatel si rad koupi posledni RPi, s vetsi pameti a vice jadry, aby si mohl napsat super mega cool aplikaci v Jave a ta mu neuswapovala SD kartu k smrti, protoze je to mnohem dustojnejsi pro drsneho borce, nez nekolik radku v bashi, jak zmineno jinde. Akorat tedy si nejsem jist, jestli kdyz to ma bezet kazdou minutu, jestli se to v Jave za tu minutu stihne a neprosvihne se termin pro dalsi beh. Zejmena, pokud by to spoustel pokazde znovu cron. To to za tu minutu nejspis ani nenabehne.
Na RPi je normálně OpenJDK, ale na ARM je děsně pomalé. Swap je na SD kartě pochopitelně blbost. Nevím jak jiným, mně se nejvíc na RPi osvědčilo Go - je nativní, nežere paměť, běží stabilně, GPIO je hračka...
-
Na RPi je normálně OpenJDK, ale na ARM je děsně pomalé. Swap je na SD kartě pochopitelně blbost. Nevím jak jiným, mně se nejvíc na RPi osvědčilo Go - je nativní, nežere paměť, běží stabilně, GPIO je hračka...
Nektere veci je tezke javamanum vysvetlit.
-
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Nedivil, me je to jedno. Java je nenazrane svinstvo a vubec by me nenapadlo neco takoveho shanet pro RPi. Ale mozna, ze tazatel si rad koupi posledni RPi, s vetsi pameti a vice jadry, aby si mohl napsat super mega cool aplikaci v Jave a ta mu neuswapovala SD kartu k smrti, protoze je to mnohem dustojnejsi pro drsneho borce, nez nekolik radku v bashi, jak zmineno jinde. Akorat tedy si nejsem jist, jestli kdyz to ma bezet kazdou minutu, jestli se to v Jave za tu minutu stihne a neprosvihne se termin pro dalsi beh. Zejmena, pokud by to spoustel pokazde znovu cron. To to za tu minutu nejspis ani nenabehne.
1. Java je pro tenhle účel nesmysl, s výjimkou případů kdy by se používal hotový kód
2. Java na Rpi normálně bez problémů funguje, viz např. Minecraft a další
3. Na SD kartu by swap nastavoval snad jen blázen
4. Máš opravdu zkreslené představy o výkonu Java aplikací na non-PC platformách. Když o tom nic reálného nevíš, alespoň nešiř bludy
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
Koukám další expert na non-PC platformy a Javu. Doporučuji si někdy vyzkoušet jak je to ve skutečnosti a potom psát.
-
Pre ARM samozrejme existuje priamo http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html), používam ju na Banana-PI už asi 2 roky. Na SD karte je iba holý systém, dokonca aj jar súbor je v /tmp (tmpfs), banana si appku stiahne pri boote a pravidelne aktualizuje zo servera. Mal som obavy pri nasadzovaní, ale java zaberie počas behu 36MB RAM a rýchlosť je vynikajúca, predčila moje očakávania.
Premýšľal som aj nad inými jazykmi, ale nenašiel som nič, čo by vedelo spoľahlivo a bez problémov komunikovať s M$SQL serverom. Teraz už nad zmenou ani neuvažujem..
-
Na RPi je normálně OpenJDK, ale na ARM je děsně pomalé. Swap je na SD kartě pochopitelně blbost. Nevím jak jiným, mně se nejvíc na RPi osvědčilo Go - je nativní, nežere paměť, běží stabilně, GPIO je hračka...
Nektere veci je tezke javamanum vysvetlit.
Pre rpi je normalne aj oracle jdk skompilovane. Na rpi 1 som si zo srandy pustal spring boot s jetty a bezalo to slusne. Len vyvoj treba robit inde, tie javove IDE su dost pazrave a normalne textove editory neposkytuju dostatocny komfort. (aj ked pri troche masochizmu sa to da zniest) Java hejt tu nie je na mieste, len smelo do javy na rpi.
-
Nektere veci je tezke javamanum vysvetlit.
Nejsem Javaman, ale tvoje prispevky ohledne Javy jsou asi tak stejne informacne uzitecne, jako ty o systemd - v lepsi pripade neznalost, v horsim lzi.
Java SE Embedded se samozrejme na RPI zcela normalne pouziva, drobna rezie tam samozrejme je, ale nijak extremni (opravdu me na stroji s 512/1024 MB RAM netrapi, ze si VM vezme 20MB), rychlost ciste vypocetnich operaci je u Oracle JDK velmi dobre srovnatelna s C++ - mnohem vyssi nez treba u Pythonu, PHP,...
-
@Mirek: Typicke RPi ma 512 MB pameti a neprilis vykonny procesor. Javu by na to, bez opravdu dobreho duvodu, daval jen debil. Az dosud vse, co jsem kdy videl napsane v Jave, dokazalo zabit i silnejsi stroje, nez RPi. Kdyz nemas nadupany stroj, na Javu zapomen. Mozna, ze na RPi by si vynutila i ten swap i na blbou malou aplikaci.
@balki: Urcite ne na aplikaci tohoto typu. Jaksi nevidim, proc by to melo vyzadovat Javu. To, ze se mozna CPU neodletuje zarem od plosnaku, jako duvod nestaci.
-
Pre rpi je normalne aj oracle jdk skompilovane. Na rpi 1 som si zo srandy pustal spring boot s jetty a bezalo to slusne. Len vyvoj treba robit inde, tie javove IDE su dost pazrave a normalne textove editory neposkytuju dostatocny komfort. (aj ked pri troche masochizmu sa to da zniest) Java hejt tu nie je na mieste, len smelo do javy na rpi.
Jojo, funguje to uplne bez problemu, mam takto udelany doma maly REST server + sber informaci z cidel :-) Vyvoj se samozrjeme na tom moc delat neda, IDE tam opravdu clovek nepusti, ale to myslim ze nikoho nemusi trapit...
-
@balki: Urcite ne na aplikaci tohoto typu. Jaksi nevidim, proc by to melo vyzadovat Javu. To, ze se mozna CPU neodletuje zarem od plosnaku, jako duvod nestaci.
Python tiez nie je ziadny prebornik v rychlosti a vo vyuziti pamate, kazdy to tu pritom odporuca. Hejt javy je neopodstatneny, kedze je rychlejsia.
-
nejake hard facts pro java hatery:
jdk1.8
real 0m6.838s
user 0m5.260s
sys 0m2.540s
openjdk-7 avian
real 0m11.701s
user 0m9.620s
sys 0m0.550s
gcc 4,6
real 0m6.882s
user 0m5.250s
sys 0m0.390s
gcc 4.6 -O2
real 0m5.360s
user 0m3.790s
sys 0m0.370s
gcc 4.7
real 0m6.884s
user 0m5.140s
sys 0m0.510s
gcc 4.7 -O2
real 0m5.310s
user 0m3.560s
sys 0m0.540s
php
real 1m31.333s
user 1m28.860s
sys 0m0.590s
zdroj: https://www.raspberrypi.org/forums/viewtopic.php?t=25418
Update: Test results after running Tomcat 7 with Java 8 on the Pi
After I got the 512mb version of the Pi (MODELL B), I installed Java 8 and Tomcat 7.0 without any problems. Tomcat examples were working, and I was able to use the Tomcat manager application without any problems.
With 64 MB of RAM used for the graphics card, I still had 291 MB of free memory (with sshd running):
pi@raspberrypi ~/ $ free -m
total used free shared buffers cached
Mem: 438 146 291 0 10 74
-/+ buffers/cache: 60 377
Swap: 99 0 99
zdroj: http://stackoverflow.com/questions/12090745/any-java-experience-on-raspberry-pi
(nez se toho nekdo chytne - pmap nereportuje alokovanou pamet, ale velikost adresniho prostoru, coz je neco uplne jineho)
-
@Mirek: Typicke RPi ma 512 MB pameti a neprilis vykonny procesor. Javu by na to, bez opravdu dobreho duvodu, daval jen debil. Az dosud vse, co jsem kdy videl napsane v Jave, dokazalo zabit i silnejsi stroje, nez RPi. Kdyz nemas nadupany stroj, na Javu zapomen. Mozna, ze na RPi by si vynutila i ten swap i na blbou malou aplikaci.
@balki: Urcite ne na aplikaci tohoto typu. Jaksi nevidim, proc by to melo vyzadovat Javu. To, ze se mozna CPU neodletuje zarem od plosnaku, jako duvod nestaci.
Jen ty svoje nesmysly ještě vylepši. Nic nevíš, ale Java je zlo. Co teprve Java + Systemd :D
-
nejake hard facts pro java hatery:
Pro úlohu, která se tu řeší, je asi podstatnější rychlost startu, rychlost knihovních funkcí pro úpravy obrázků a rychlost odezvy wunderground.
-
Nektere veci je tezke javamanum vysvetlit.
Nejsem Javaman, ale tvoje prispevky ohledne Javy jsou asi tak stejne informacne uzitecne, jako ty o systemd - v lepsi pripade neznalost, v horsim lzi.
Java SE Embedded se samozrejme na RPI zcela normalne pouziva, drobna rezie tam samozrejme je, ale nijak extremni (opravdu me na stroji s 512/1024 MB RAM netrapi, ze si VM vezme 20MB), rychlost ciste vypocetnich operaci je u Oracle JDK velmi dobre srovnatelna s C++ - mnohem vyssi nez treba u Pythonu, PHP,...
Co je "čistě výpočetní operace"? Pamatuju si výpočty nad komplexními čísly, tam Java na ARM (Raspbian) hodně pokulhávala, OpenJDK o dva řády, verze od Oraclu "jen" o jeden.
-
Co teprve Java + Systemd :D
Jo, to ale mas blby, tuhle skvelou kombinaci na Widlich nemas.
-
V Pythonu (říká člověk, který v Pythonu napsal jen jedinou věc - termostat/meteostanici na RPi - jen s čidly DHT22, bezdrátovým vysílačem venku a SPI displejem 3,5" ... a Arduinem, které obstarává pro RPi hodnoty ze senzorů).
-
@balki: Urcite ne na aplikaci tohoto typu. Jaksi nevidim, proc by to melo vyzadovat Javu. To, ze se mozna CPU neodletuje zarem od plosnaku, jako duvod nestaci.
Python tiez nie je ziadny prebornik v rychlosti a vo vyuziti pamate, kazdy to tu pritom odporuca. Hejt javy je neopodstatneny, kedze je rychlejsia.
Rychlejší v čem? V resizování obrázků nebo v čekání na HTTP odpověď?
-
@balki: Urcite ne na aplikaci tohoto typu. Jaksi nevidim, proc by to melo vyzadovat Javu. To, ze se mozna CPU neodletuje zarem od plosnaku, jako duvod nestaci.
Python tiez nie je ziadny prebornik v rychlosti a vo vyuziti pamate, kazdy to tu pritom odporuca. Hejt javy je neopodstatneny, kedze je rychlejsia.
Rychlejší v čem? V resizování obrázků nebo v čekání na HTTP odpověď?
Java je vseobecne rychlejsia, ak niekde python ziskava na rychlosti je to vdaka owrapovaniu nativnych c-ckovych libiek. Viem, ze sa snazite o cherry picking, ale prosim, vyberte si lepsie priklady. Napriklad podporu opengl atd ...
-
@balki: Urcite ne na aplikaci tohoto typu. Jaksi nevidim, proc by to melo vyzadovat Javu. To, ze se mozna CPU neodletuje zarem od plosnaku, jako duvod nestaci.
Python tiez nie je ziadny prebornik v rychlosti a vo vyuziti pamate, kazdy to tu pritom odporuca. Hejt javy je neopodstatneny, kedze je rychlejsia.
Rychlejší v čem? V resizování obrázků nebo v čekání na HTTP odpověď?
Java je vseobecne rychlejsia, ak niekde python ziskava na rychlosti je to vdaka owrapovaniu nativnych c-ckovych libiek. Viem, ze sa snazite o cherry picking, ale prosim, vyberte si lepsie priklady. Napriklad podporu opengl atd ...
Jmenoval jsem operace, které jsou potřeba k vyřešení úlohy na kterou se ptal tazatel.
S opengl na rpi nemám zkušenosti, ale předpokládám, že podpora nebude horší než v Javě.
-
Rychlejší než Java bude i to řešení v Bashi. Start Javy je určitě pomalejší než spuštění těch několika utilit. Hotové to bude za 10% času.
-
Jmenoval jsem operace, které jsou potřeba k vyřešení úlohy na kterou se ptal tazatel.
S opengl na rpi nemám zkušenosti, ale předpokládám, že podpora nebude horší než v Javě.
Na zmensovanie obrazku python pravdepodobne zavola c-ckovu lib-ku. Neviem, ake transformacie su k tomu potrebne. Java tiez dokaze zmensit obrazok a je to vnutri optimalizovane. "Cekani na http odpoved" je nepresne zadefinovane. Ale to je hadam irelevantne, zalezi, co je na druhej strane, nie? Inac, java ma sama o sebe dobru priepustnost. Pouziva sa na silne vytazovane aplikacie komunikujuce cez webservisy.
Tu ide hlavne o to, ze Jarda tu trepal hluposti, aka je java pomala, pritom je to nepravda. A k opengl - java je na tom dost zle, preto som ju spominal.
Rychlejší než Java bude i to řešení v Bashi. Start Javy je určitě pomalejší než spuštění těch několika utilit. Hotové to bude za 10% času.
Da sa to pustit ako demon, v tom pripade je startovanie jvm irelevantne. Zasa to nie je az taka tragedia. Trva to cca 2 sekundy.
-
Na zmensovanie obrazku python pravdepodobne zavola c-ckovu lib-ku.
Z pohledu uživatele té knihovny mě tohle nemusí zajímat.
"Cekani na http odpoved" je nepresne zadefinovane. Ale to je hadam irelevantne, zalezi, co je na druhej strane, nie?
Právě proto je zbytečné řešit jestli použijete pomalý nebo rychlý jazyk.
-
Na zmensovanie obrazku python pravdepodobne zavola c-ckovu lib-ku.
Z pohledu uživatele té knihovny mě tohle nemusí zajímat.
"Cekani na http odpoved" je nepresne zadefinovane. Ale to je hadam irelevantne, zalezi, co je na druhej strane, nie?
Právě proto je zbytečné řešit jestli použijete pomalý nebo rychlý jazyk.
No ale niekto tu tvrdil nieco ine:
@Mirek: Typicke RPi ma 512 MB pameti a neprilis vykonny procesor. Javu by na to, bez opravdu dobreho duvodu, daval jen debil. Az dosud vse, co jsem kdy videl napsane v Jave, dokazalo zabit i silnejsi stroje, nez RPi. Kdyz nemas nadupany stroj, na Javu zapomen. Mozna, ze na RPi by si vynutila i ten swap i na blbou malou aplikaci.
len tolko k tomu.
-
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Nedivil, me je to jedno. Java je nenazrane svinstvo a vubec by me nenapadlo neco takoveho shanet pro RPi. Ale mozna, ze tazatel si rad koupi posledni RPi, s vetsi pameti a vice jadry, aby si mohl napsat super mega cool aplikaci v Jave a ta mu neuswapovala SD kartu k smrti, protoze je to mnohem dustojnejsi pro drsneho borce, nez nekolik radku v bashi, jak zmineno jinde. Akorat tedy si nejsem jist, jestli kdyz to ma bezet kazdou minutu, jestli se to v Jave za tu minutu stihne a neprosvihne se termin pro dalsi beh. Zejmena, pokud by to spoustel pokazde znovu cron. To to za tu minutu nejspis ani nenabehne.
Na RPi je normálně OpenJDK, ale na ARM je děsně pomalé. Swap je na SD kartě pochopitelně blbost. Nevím jak jiným, mně se nejvíc na RPi osvědčilo Go - je nativní, nežere paměť, běží stabilně, GPIO je hračka...
Me osobne posledni dobou funguje(rpi2 a 3) idealne i jazyk D (ldc). Ale jak uz zde bylo uvedeno pro potreby OP bych volil klidne i bash nebo python, opravdu zde nevidim duvod si to komplikovat
-
Na RPi je normálně OpenJDK, ale na ARM je děsně pomalé. Swap je na SD kartě pochopitelně blbost. Nevím jak jiným, mně se nejvíc na RPi osvědčilo Go - je nativní, nežere paměť, běží stabilně, GPIO je hračka...
Nektere veci je tezke javamanum vysvetlit.
Pre rpi je normalne aj oracle jdk skompilovane. Na rpi 1 som si zo srandy pustal spring boot s jetty a bezalo to slusne. Len vyvoj treba robit inde, tie javove IDE su dost pazrave a normalne textove editory neposkytuju dostatocny komfort. (aj ked pri troche masochizmu sa to da zniest) Java hejt tu nie je na mieste, len smelo do javy na rpi.
No ja treba zkousel na rpi3 rozjet IDE od jetbrains (Intellij IDEA, nebo phpstorm ted presne nevim) a jelo to, dokonce k memu udivu velmi slusne. Samozrejme po case byla limitujici RAM. Ale kdyby melo RPI nekdy 2GB a vice tak to je pouzitelne i na trochu vetsi projekty.
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
Koukám další expert na non-PC platformy a Javu. Doporučuji si někdy vyzkoušet jak je to ve skutečnosti a potom psát.
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
Koukám další expert na non-PC platformy a Javu. Doporučuji si někdy vyzkoušet jak je to ve skutečnosti a potom psát.
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
-
nejake hard facts pro java hatery:
...
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
-
nejake hard facts pro java hatery:
...
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Ten microbenchmark je sice blbost, nicméně stejně trapní jsou lidé neumějící skloňovat "jenž" ;)
-
nejake hard facts pro java hatery:
...
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Ten microbenchmark je sice blbost, nicméně stejně trapní jsou lidé neumějící skloňovat "jenž" ;)
Blba otazka, jak je to spravne? Ono pro lidi co umi jen czech-like language je to tezke :D. Pokud ale spravne chapu wikipedii tak by to melo byt jez. Ale jist si nejsem. Lol ta captcha to vychytala (lopata)
-
nejake hard facts pro java hatery:
...
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Ten microbenchmark je sice blbost, nicméně stejně trapní jsou lidé neumějící skloňovat "jenž" ;)
Blba otazka, jak je to spravne? Ono pro lidi co umi jen czech-like language je to tezke :D. Pokud ale spravne chapu wikipedii tak by to melo byt jez. Ale jist si nejsem. Lol ta captcha to vychytala (lopata)
Je to "lidé, již...". Nic ve zlém, jen jsem si rýpnul :)
-
nejake hard facts pro java hatery:
...
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Ten microbenchmark je sice blbost, nicméně stejně trapní jsou lidé neumějící skloňovat "jenž" ;)
Blba otazka, jak je to spravne? Ono pro lidi co umi jen czech-like language je to tezke :D. Pokud ale spravne chapu wikipedii tak by to melo byt jez. Ale jist si nejsem. Lol ta captcha to vychytala (lopata)
Je to "lidé, již...". Nic ve zlém, jen jsem si rýpnul :)
V pohode, pri trose stesti si to zapamatuji a priste budu vedet :)
-
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Sup sem s nejakym benchmarkem dokazujicim opak :) Uvedl jsem priklad microbenchmarku, uvedl jsem priklad rezie provozu Tomcatu, uvedl jsem sve zkusenosti s provozem Spring Boot aplikace na RPi v reakci na nesmysly, ktere tu psal JardaP (na coz jsem reagoval). Dolozte opak, ktery podpori jeho tvrzeni a nevytrhavejte informaci z kontextu:-)
BTW, nikde jsem nepsal, ze se to neda napsat v Pythonu, C, assembleru ci cemkoliv jinem. Rozporoval jsem informaci, ze se to neda efektivne napsat v Jave (coz jednoznacne je lez)
-
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Sup sem s nejakym benchmarkem dokazujicim opak :) Uvedl jsem priklad microbenchmarku, uvedl jsem priklad rezie provozu Tomcatu, uvedl jsem sve zkusenosti s provozem Spring Boot aplikace na RPi v reakci na nesmysly, ktere tu psal JardaP (na coz jsem reagoval). Dolozte opak, ktery podpori jeho tvrzeni a nevytrhavejte informaci z kontextu:-)
BTW, nikde jsem nepsal, ze se to neda napsat v Pythonu, C, assembleru ci cemkoliv jinem. Rozporoval jsem informaci, ze se to neda efektivne napsat v Jave (coz jednoznacne je lez)
Každý, kdo dělal něco na RPi, má příslušné zkušenosti. Klidně můžu vyhrabat kód potvrzující, že výkon Javy na RPi (ARM32) je dost bídný. Pravda, je to rok starý výsledek, třeba se za tu dobu mnohé změnilo. JardaP to napsal dost ostře, ale v podstatě má pravdu.
-
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Sup sem s nejakym benchmarkem dokazujicim opak :) Uvedl jsem priklad microbenchmarku, uvedl jsem priklad rezie provozu Tomcatu, uvedl jsem sve zkusenosti s provozem Spring Boot aplikace na RPi v reakci na nesmysly, ktere tu psal JardaP (na coz jsem reagoval). Dolozte opak, ktery podpori jeho tvrzeni a nevytrhavejte informaci z kontextu:-)
BTW, nikde jsem nepsal, ze se to neda napsat v Pythonu, C, assembleru ci cemkoliv jinem. Rozporoval jsem informaci, ze se to neda efektivne napsat v Jave (coz jednoznacne je lez)
Každý, kdo dělal něco na RPi, má příslušné zkušenosti. Klidně můžu vyhrabat kód potvrzující, že výkon Javy na RPi (ARM32) je dost bídný. Pravda, je to rok starý výsledek, třeba se za tu dobu mnohé změnilo. JardaP to napsal dost ostře, ale v podstatě má pravdu.
Pravda, SAP s oracle databazou pojde na tom dost biedne.
(Doplňte nástroj k vyhazování hlíny)
-
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Sup sem s nejakym benchmarkem dokazujicim opak :) Uvedl jsem priklad microbenchmarku, uvedl jsem priklad rezie provozu Tomcatu, uvedl jsem sve zkusenosti s provozem Spring Boot aplikace na RPi v reakci na nesmysly, ktere tu psal JardaP (na coz jsem reagoval). Dolozte opak, ktery podpori jeho tvrzeni a nevytrhavejte informaci z kontextu:-)
BTW, nikde jsem nepsal, ze se to neda napsat v Pythonu, C, assembleru ci cemkoliv jinem. Rozporoval jsem informaci, ze se to neda efektivne napsat v Jave (coz jednoznacne je lez)
Každý, kdo dělal něco na RPi, má příslušné zkušenosti. Klidně můžu vyhrabat kód potvrzující, že výkon Javy na RPi (ARM32) je dost bídný. Pravda, je to rok starý výsledek, třeba se za tu dobu mnohé změnilo. JardaP to napsal dost ostře, ale v podstatě má pravdu.
Pravda, SAP s oracle databazou pojde na tom dost biedne.
(Doplňte nástroj k vyhazování hlíny)
Tady nejde o SAP a Oracle, ale primitivní sčítání komplexních čísel nebo něco takového.
-
LOL, tak neco takoveho uvest jako argument je smesne. Me neustale bavi lide jenz uvadeji microbenchmarky, ktere nedokazuji vubec nic.
A jeste k tomu jsou spatne :D.
Sup sem s nejakym benchmarkem dokazujicim opak :) Uvedl jsem priklad microbenchmarku, uvedl jsem priklad rezie provozu Tomcatu, uvedl jsem sve zkusenosti s provozem Spring Boot aplikace na RPi v reakci na nesmysly, ktere tu psal JardaP (na coz jsem reagoval). Dolozte opak, ktery podpori jeho tvrzeni a nevytrhavejte informaci z kontextu:-)
BTW, nikde jsem nepsal, ze se to neda napsat v Pythonu, C, assembleru ci cemkoliv jinem. Rozporoval jsem informaci, ze se to neda efektivne napsat v Jave (coz jednoznacne je lez)
Každý, kdo dělal něco na RPi, má příslušné zkušenosti. Klidně můžu vyhrabat kód potvrzující, že výkon Javy na RPi (ARM32) je dost bídný. Pravda, je to rok starý výsledek, třeba se za tu dobu mnohé změnilo. JardaP to napsal dost ostře, ale v podstatě má pravdu.
Pravda, SAP s oracle databazou pojde na tom dost biedne.
(Doplňte nástroj k vyhazování hlíny)
Tady nejde o SAP a Oracle, ale primitivní sčítání komplexních čísel nebo něco takového.
Původně tu šlo o zmenšení obrázku.
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
Koukám další expert na non-PC platformy a Javu. Doporučuji si někdy vyzkoušet jak je to ve skutečnosti a potom psát.
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
Tu jsem neměl, ale ještě bych přidal programování na TI-57 a něco málo na C=64 :P
-
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
Tu jsem neměl, ale ještě bych přidal programování na TI-57 a něco málo na C=64 :P
Ja som viac expertovejsi Pocitac Zenit (slovenska obdoba CGS, lenze hi-tech) -> PMD-85 -> Kalkulator casio FX9600 -> Turingov Stroj -> Stroj RAM -> router "asus blabla s openwrt" mal mips procesor -> rpi 1, 3 a mal som aj tu hru "nu pagadi".
Ale tvrdim, ze java na rpi 1 az 3 je vpohode. Len treba dat oraclovu javu, nie openjdk, no ...
-
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
Tu jsem neměl, ale ještě bych přidal programování na TI-57 a něco málo na C=64 :P
Ja som viac expertovejsi Pocitac Zenit (slovenska obdoba CGS, lenze hi-tech) -> PMD-85 -> Kalkulator casio FX9600 -> Turingov Stroj -> Stroj RAM -> router "asus blabla s openwrt" mal mips procesor -> rpi 1, 3 a mal som aj tu hru "nu pagadi".
Ale tvrdim, ze java na rpi 1 az 3 je vpohode. Len treba dat oraclovu javu, nie openjdk, no ...
Bohužiaľ na oracle-jdk-bin potrebuješ minimálne RPI2, potrebuješ hardfloat extension, t.j. niečo podobné ako bol voľakedy koprocesor 80387 pre x86 platformu, ktorá na RPI1 chýba. V zadaní bolo RPI2, takže nie je problém.
Áno, TI-57 boli super, mal som bohužiaľ iba TI-57CII, to už bola taká malá plastová hračka.
Na škole sme mali IQ151, to bol podstatne robustnejší počítač, bohužiaľ ani tam Java nefungovala, pretože ešte neexistovala.
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
A proč tu tedy píšeš takové věci? Mimochodem, mnoho štěstí při psaní metostanice na Rpi2 v asm, a to včetně toho resizingu a uploadu na server...
Koukám další expert na non-PC platformy a Javu. Doporučuji si někdy vyzkoušet jak je to ve skutečnosti a potom psát.
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
-
Původně tu šlo o zmenšení obrázku.
Jaksi bych cekal, ze v Jave to asi nebude rychlejsi, nez zavolani napriklad imagemagic z bashe nebo mozna nejake jine utility. Imagemagic je za ta leta odladeny a je psany zpracovani obrazku na miru. Nejspis by dokazal vse, co od nej tazatel zada, asi vcetne vlozeni textu. Nevidim duvodu, proc by bylo nutne tohle resit Javou, kdyz se nabizi zcela minimalni reseni. Ostatne jestli tam ma Raspbian, tak staci chvili pockat - Poettering urcite uz ma rozpracovane zmensovani obrazku pro Systemd a dost mozna primo ovladani meteostanic s uploadem vysledku na web pres systemd-FTP.
-
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
Tu jsem neměl, ale ještě bych přidal programování na TI-57 a něco málo na C=64 :P
Ja som viac expertovejsi Pocitac Zenit (slovenska obdoba CGS, lenze hi-tech) -> PMD-85 -> Kalkulator casio FX9600 -> Turingov Stroj -> Stroj RAM -> router "asus blabla s openwrt" mal mips procesor -> rpi 1, 3 a mal som aj tu hru "nu pagadi".
Ale tvrdim, ze java na rpi 1 az 3 je vpohode. Len treba dat oraclovu javu, nie openjdk, no ...
Tak tvrdit to můžeš, jen škoda, že benchmarky to nepotvrzují. I blbý Mono je rychlejší.
-
To snad ani nie je pravda. Kazde vlakno na roote sa zvrtne na uplne inu diskusiu. Nad tym sa da len zasmiat. Tolko trollov a mudrlantov, to nikde nenajdete :D. Fakt root nema ziadnu uroven a o prispievateloch sa neda mysliet nic dobre.
-
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
Tu jsem neměl, ale ještě bych přidal programování na TI-57 a něco málo na C=64 :P
Ja som viac expertovejsi Pocitac Zenit (slovenska obdoba CGS, lenze hi-tech) -> PMD-85 -> Kalkulator casio FX9600 -> Turingov Stroj -> Stroj RAM -> router "asus blabla s openwrt" mal mips procesor -> rpi 1, 3 a mal som aj tu hru "nu pagadi".
Ale tvrdim, ze java na rpi 1 az 3 je vpohode. Len treba dat oraclovu javu, nie openjdk, no ...
Zenit se spoustou zbytečného nefunkčního pozlátka? To není divu že propaguješ Javu. CGS byl jen řadič s registry, prostě bare metal!
Nemáš ten Zenit náhodou oskenovaný? Nejlépe i se všemi programy, stál by za zreplikování. CGS mám z VTM i z ABC včetně "firmware", ale tenhle mi chybí.
-
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
A v neposledom rade na ruskej hre "Nu pagadi!"
Tu jsem neměl, ale ještě bych přidal programování na TI-57 a něco málo na C=64 :P
Ja som viac expertovejsi Pocitac Zenit (slovenska obdoba CGS, lenze hi-tech) -> PMD-85 -> Kalkulator casio FX9600 -> Turingov Stroj -> Stroj RAM -> router "asus blabla s openwrt" mal mips procesor -> rpi 1, 3 a mal som aj tu hru "nu pagadi".
Ale tvrdim, ze java na rpi 1 az 3 je vpohode. Len treba dat oraclovu javu, nie openjdk, no ...
Bohužiaľ na oracle-jdk-bin potrebuješ minimálne RPI2, potrebuješ hardfloat extension, t.j. niečo podobné ako bol voľakedy koprocesor 80387 pre x86 platformu, ktorá na RPI1 chýba. V zadaní bolo RPI2, takže nie je problém.
Áno, TI-57 boli super, mal som bohužiaľ iba TI-57CII, to už bola taká malá plastová hračka.
Na škole sme mali IQ151, to bol podstatne robustnejší počítač, bohužiaľ ani tam Java nefungovala, pretože ešte neexistovala.
Teoria je pekna, ze co potrebujem a co nepotrebujem. Ja to mam proste na rpi nainstalovane:
$ dpkg-query -l | grep orac
ii oracle-java8-jdk 8u65 armhf Java™ Platform, Standard Edition 8 Development Kit
-
Zenit se spoustou zbytečného nefunkčního pozlátka? To není divu že propaguješ Javu. CGS byl jen řadič s registry, prostě bare metal!
Nemáš ten Zenit náhodou oskenovaný? Nejlépe i se všemi programy, stál by za zreplikování. CGS mám z VTM i z ABC včetně "firmware", ale tenhle mi chybí.
Nemam, to bohuzial nascanovane. Vtedy take panske huncutstva neboli.
Nasiel som leda tak toto: http://papirovemodelarstvi.cz/phpBB3/viewtopic.php?f=32&t=1969#p26604
Ja javu nepropagujem, len tu vyvraciam nezmysly. Tiez by som si myslel, ze java je na tom na rpi zle, kebyze si to sam nevyskusam. Prvy moj pokus na rpi1 bol "chachaaa ..., pustim na tom srote projekt z roboty, nech sa zasmejem". Na moje prekvapenie to bolo pouzitelne a responzivne.
-
Zenit se spoustou zbytečného nefunkčního pozlátka? To není divu že propaguješ Javu. CGS byl jen řadič s registry, prostě bare metal!
Nemáš ten Zenit náhodou oskenovaný? Nejlépe i se všemi programy, stál by za zreplikování. CGS mám z VTM i z ABC včetně "firmware", ale tenhle mi chybí.
Nemam, to bohuzial nascanovane. Vtedy take panske huncutstva neboli.
Nasiel som leda tak toto: http://papirovemodelarstvi.cz/phpBB3/viewtopic.php?f=32&t=1969#p26604
Ja javu nepropagujem, len tu vyvraciam nezmysly. Tiez by som si myslel, ze java je na tom na rpi zle, kebyze si to sam nevyskusam. Prvy moj pokus na rpi1 bol "chachaaa ..., pustim na tom srote projekt z roboty, nech sa zasmejem". Na moje prekvapenie to bolo pouzitelne a responzivne.
No a víš co mi dalo práce sehnat Logiku v kostce z roku 1982 v dost zachovalé podobě, abych ten CGS mohl oskenovat a pustit do světa: ;D
Já jsem našel tohle: http://www.papirovaarcheologie.cz/z-historie/elektron-zenit1/
-
Ano, urcite. Jestli nejaka java pro ARM existuje, tak je nejlepsi pouzit tu. At se to co nejdele spousti a co nejvice se ucpe pamet a ojede SD karta.
To by ses divil pro co všechno Java existuje. A docela by mně zajímalo, jak souvisí "ojíždění" SD karty s Javou. Předpokládám že čtení tím nemyslíš.
Žeby swap? Ona meteostanice v assembleru na jednočipu zabere pár set bajtů, zatímco v Javě na Malině pár set mega!
Koukám další expert na non-PC platformy a Javu. Doporučuji si někdy vyzkoušet jak je to ve skutečnosti a potom psát.
Ne že bych se považoval přímo za experta, ale o non-PC platformách bych za těch skoro třicet let, od mých začátků na CGS a Didaktiku Gama, měl něco vědět ;)
No ale pokud je to takhle, tak nerozumím tomu proč tu píšeš takové věci. Tvé prohlášení o tom, že "v Javě na Malině pár set mega" je jen plácnutí do vody. Pár set mega čeho? RAM, místa na disku, ... Místo na disku v tomto rozsahu nikoho netrápí, nároky na RAM tady někdo už zmiňoval (cca 20-30 MB), což je taky v pohodě a žádný swap to nepotřebuje.
Jinak hodně štěstí s implementací řešení metostanice škálující obrázky a odesílající data na server v assembleru na "pár set bajtů"...
-
Jinak hodně štěstí s implementací řešení metostanice škálující obrázky a odesílající data na server v assembleru na "pár set bajtů"...
Konvert z Imagemagic ma nejakych 5 kB. Par dalsich utilit podobne velikosti a par radku bashe urcite edosahnou velikosti toho, co by to dalo v Jave + runtime.
-
Jinak hodně štěstí s implementací řešení metostanice škálující obrázky a odesílající data na server v assembleru na "pár set bajtů"...
Konvert z Imagemagic ma nejakych 5 kB. Par dalsich utilit podobne velikosti a par radku bashe urcite edosahnou velikosti toho, co by to dalo v Jave + runtime.
Naprosto souhlasím. Vždyť jsem tady taky od začátku psal, že pokud se začíná na zelené louce, je Java blbost a měla by smysl je v případě, že existuje v Javě již hotové řešení, které stačí doladit/zintegrovat. A to proto, že výkon a systémové prostředky Rpi2 jsou pro běh takovéto aplikace v Javě naprosto dostatečné.
Toť vše, prostě jednoduchý pragmatický přístup.
-
Jinak hodně štěstí s implementací řešení metostanice škálující obrázky a odesílající data na server v assembleru na "pár set bajtů"...
Konvert z Imagemagic ma nejakych 5 kB. Par dalsich utilit podobne velikosti a par radku bashe urcite edosahnou velikosti toho, co by to dalo v Jave + runtime.
Naprosto souhlasím. Vždyť jsem tady taky od začátku psal, že pokud se začíná na zelené louce, je Java blbost a měla by smysl je v případě, že existuje v Javě již hotové řešení, které stačí doladit/zintegrovat. A to proto, že výkon a systémové prostředky Rpi2 jsou pro běh takovéto aplikace v Javě naprosto dostatečné.
Toť vše, prostě jednoduchý pragmatický přístup.
Len tak medzi nami dievcatami, bash ma strasnu syntax. Raz za cas riesim skripty na generovanie testovacich dat v bashi (v ramci dusevneho cvicenia, nikto ma nenuti), strasne nevdacne je to. Clovek sa preklepne a moze patrat, ze preco je prazdny output. Moze byt bash dostatocny, ale mno, stoji to nervy odladit.
-
Jinak hodně štěstí s implementací řešení metostanice škálující obrázky a odesílající data na server v assembleru na "pár set bajtů"...
Konvert z Imagemagic ma nejakych 5 kB. Par dalsich utilit podobne velikosti a par radku bashe urcite edosahnou velikosti toho, co by to dalo v Jave + runtime.
Naprosto souhlasím. Vždyť jsem tady taky od začátku psal, že pokud se začíná na zelené louce, je Java blbost a měla by smysl je v případě, že existuje v Javě již hotové řešení, které stačí doladit/zintegrovat. A to proto, že výkon a systémové prostředky Rpi2 jsou pro běh takovéto aplikace v Javě naprosto dostatečné.
Toť vše, prostě jednoduchý pragmatický přístup.
Len tak medzi nami dievcatami, bash ma strasnu syntax. Raz za cas riesim skripty na generovanie testovacich dat v bashi (v ramci dusevneho cvicenia, nikto ma nenuti), strasne nevdacne je to. Clovek sa preklepne a moze patrat, ze preco je prazdny output. Moze byt bash dostatocny, ale mno, stoji to nervy odladit.
V tomto případě se jedná jen o posloupnost několika příkazů. Žádné syntaktické konstrukce.
-
Len tak medzi nami dievcatami, bash ma strasnu syntax. Raz za cas riesim skripty na generovanie testovacich dat v bashi (v ramci dusevneho cvicenia, nikto ma nenuti), strasne nevdacne je to. Clovek sa preklepne a moze patrat, ze preco je prazdny output. Moze byt bash dostatocny, ale mno, stoji to nervy odladit.
Kdyz ti nevoni bash, na Linuxu je k dispozici hafo jinych shellu, napriklad se syntaxi ceckoveho stylu. Nicmene nabastlit nekolik prikazu na par radek bez nejakych slozitych a rafinovanych konstrukci by mel dokazat i uplny debil z pocitacoveho krouzku pomocne skoly, s ucebnici bashe v ruce.
-
Len tak medzi nami dievcatami, bash ma strasnu syntax. Raz za cas riesim skripty na generovanie testovacich dat v bashi (v ramci dusevneho cvicenia, nikto ma nenuti), strasne nevdacne je to. Clovek sa preklepne a moze patrat, ze preco je prazdny output. Moze byt bash dostatocny, ale mno, stoji to nervy odladit.
Kdyz ti nevoni bash, na Linuxu je k dispozici hafo jinych shellu, napriklad se syntaxi ceckoveho stylu. Nicmene nabastlit nekolik prikazu na par radek bez nejakych slozitych a rafinovanych konstrukci by mel dokazat i uplny debil z pocitacoveho krouzku pomocne skoly, s ucebnici bashe v ruce.
Tcsh nebyva default. Bash riesim prave preto, lebo je skoro vsade. Ked chce clovek trochu logiky pridat, tak uz to nie je prave orechove. Kde sa da, si vypomaham s awk.
-
Len tak medzi nami dievcatami, bash ma strasnu syntax. Raz za cas riesim skripty na generovanie testovacich dat v bashi (v ramci dusevneho cvicenia, nikto ma nenuti), strasne nevdacne je to. Clovek sa preklepne a moze patrat, ze preco je prazdny output. Moze byt bash dostatocny, ale mno, stoji to nervy odladit.
Kdyz ti nevoni bash, na Linuxu je k dispozici hafo jinych shellu, napriklad se syntaxi ceckoveho stylu. Nicmene nabastlit nekolik prikazu na par radek bez nejakych slozitych a rafinovanych konstrukci by mel dokazat i uplny debil z pocitacoveho krouzku pomocne skoly, s ucebnici bashe v ruce.
Tcsh nebyva default. Bash riesim prave preto, lebo je skoro vsade. Ked chce clovek trochu logiky pridat, tak uz to nie je prave orechove. Kde sa da, si vypomaham s awk.
AWK nevyřeší problémy s escapováním. Na větší scripty doporučuji python a https://amoffat.github.io/sh/.
-
Len tak medzi nami dievcatami, bash ma strasnu syntax. Raz za cas riesim skripty na generovanie testovacich dat v bashi (v ramci dusevneho cvicenia, nikto ma nenuti), strasne nevdacne je to. Clovek sa preklepne a moze patrat, ze preco je prazdny output. Moze byt bash dostatocny, ale mno, stoji to nervy odladit.
Python tiez nie je default.
Kdyz ti nevoni bash, na Linuxu je k dispozici hafo jinych shellu, napriklad se syntaxi ceckoveho stylu. Nicmene nabastlit nekolik prikazu na par radek bez nejakych slozitych a rafinovanych konstrukci by mel dokazat i uplny debil z pocitacoveho krouzku pomocne skoly, s ucebnici bashe v ruce.
Tcsh nebyva default. Bash riesim prave preto, lebo je skoro vsade. Ked chce clovek trochu logiky pridat, tak uz to nie je prave orechove. Kde sa da, si vypomaham s awk.
AWK nevyřeší problémy s escapováním. Na větší scripty doporučuji python a https://amoffat.github.io/sh/.
Kde uz treba viac a nestaci awk, radsej volim javu :)
-
Tak jsem to začal tvořit v pythonu 2 (.7.x), zejména i proto, že jsem sehnal skript, který zobrazuje hodnoty z BME280. Začínám si to upravovat k obrazu svému a docela se daří.
Chci se jen zeptat, Raspbian mám nastaven do češtiny, v konzoli to ale píše místo některých českých znaků kostičky. Locale mám nastavené na cs_CZ.UTF-8. Co mám nastavit, aby to psalo zase česky? A včera mi Python vypsal i znak "degree celsius". Když jsem ho chtěl dostat do spouštěného příkazu z pythonu, tak to na mě něco zařvalo o kódování, chvíli jsem si hrál s import system, asi 3 řádky zkopírovaného z nějakého vygoogleného skriptu a výsledkem bylo to, že místo °C (jako jeden znak) byla kostička. Nějaký nápad, jak z toho ven? :-) Díky moc.
-
jednoznacne v assembleri. jenom to ti tu nikto neporadi.
-
jednoznacne v assembleri. jenom to ti tu nikto neporadi.
Hlavně že ty jsi fundovaně poradil...
-
Locale mám nastavené na cs_CZ.UTF-8. Co mám nastavit, aby to psalo zase česky? A včera mi Python vypsal i znak "degree celsius". Když jsem ho chtěl dostat do spouštěného příkazu z pythonu, tak to na mě něco zařvalo o kódování...
Mozna dpkg-reconfigure locales? https://perlgeek.de/en/article/set-up-a-clean-utf8-environment
-
nic, nepomohlo. Je to to samé jako sudo raspi-config volba 4
-
Python 2 neumí defaultně UTF, na začátek se musí dát # -*- coding: utf-8 -*-.
Ad. locales - co vypíše příkaz locale?
-
jednoznacne v assembleri. jenom to ti tu nikto neporadi.
Hlavně že ty jsi fundovaně poradil...
on se ptal v cem. ja mu odpovedel. kde vidis problem?
-
Tak jsem to začal tvořit v pythonu 2 (.7.x), zejména i proto, že jsem sehnal skript, který zobrazuje hodnoty z BME280. Začínám si to upravovat k obrazu svému a docela se daří.
Chci se jen zeptat, Raspbian mám nastaven do češtiny, v konzoli to ale píše místo některých českých znaků kostičky. Locale mám nastavené na cs_CZ.UTF-8. Co mám nastavit, aby to psalo zase česky? A včera mi Python vypsal i znak "degree celsius". Když jsem ho chtěl dostat do spouštěného příkazu z pythonu, tak to na mě něco zařvalo o kódování, chvíli jsem si hrál s import system, asi 3 řádky zkopírovaného z nějakého vygoogleného skriptu a výsledkem bylo to, že místo °C (jako jeden znak) byla kostička. Nějaký nápad, jak z toho ven? :-) Díky moc.
Na nové projekty ti doporučuju psát v python3, proč psát něco nového ve starém jazyce? Napadá mě jediné - závislost nějaké knihovny co není pro python3, což tvůj případ nebude.
-
jednoznacne v assembleri. jenom to ti tu nikto neporadi.
Hlavně že ty jsi fundovaně poradil...
on se ptal v cem. ja mu odpovedel. kde vidis problem?
Třeba v tom, že mu radíš IMO nesmysl. Ne že by to vůbec nešlo, ale zkus sem napsat třeba 3 argumenty proč si myslíš že je to dobrý nápad.
-
Locale:
LANG=cs_CZ.UTF-8
LANGUAGE=
LC_CTYPE="cs_CZ.UTF-8"
LC_NUMERIC="cs_CZ.UTF-8"
LC_TIME="cs_CZ.UTF-8"
LC_COLLATE="cs_CZ.UTF-8"
LC_MONETARY="cs_CZ.UTF-8"
LC_MESSAGES="cs_CZ.UTF-8"
LC_PAPER="cs_CZ.UTF-8"
LC_NAME="cs_CZ.UTF-8"
LC_ADDRESS="cs_CZ.UTF-8"
LC_TELEPHONE="cs_CZ.UTF-8"
LC_MEASUREMENT="cs_CZ.UTF-8"
LC_IDENTIFICATION="cs_CZ.UTF-8"
LC_ALL=
tu první řádku v mém scriptu mám. Nakonec jsem to nechal na "degree sign", což je znak stupeň + "C", což je čitelnější. Takže Python mi píše, co potřebuju, jen Raspbian na mě mluví v kostičkách.
Proč ve starém? Jsem rád, že píšu v nějakém ;-)
Aktuálně mi to stahuje obrázek z IP kamery, a zapisuje do něj data z BME280. Měl bych asi dodělat (i dodrátovat) RTC modul, zápis naměřených hodnot do CSV a posílání obrázku a dat na FTP+weather underground.
A pak taky musím zjistit, jak se dělá "try", tedy jak se to chová, když budu chtít číst třeba z kamery nebo posílat data, ale nepůjde internet-aby to někde nevyhnilo.
A poslední věc, jak to provést, aby se to pouštělo po startu a skript proběhl v každou celou minutu? Mám to udělat přes Cron, nebo do skriptu nějakou smyčku?
-
Takže Python mi píše, co potřebuju, jen Raspbian na mě mluví v kostičkách.
Hádám, že se pracuješ přímo na RPI. (Ne přes SSH). Pokud ano, tak musíš nastavit fonty konzole.
sudo dpkg-reconfigure console-setup
A poslední věc, jak to provést, aby se to pouštělo po startu a skript proběhl v každou celou minutu? Mám to udělat přes Cron, nebo do skriptu nějakou smyčku?
Tuhle otázku snad ani nemyslíš vážně. Ale budiž.
Pokud chceš přesné spouštění na setiny vteřin. Pohlídej to scriptem. Jinak cron
-
jednoznacne v assembleri. jenom to ti tu nikto neporadi.
Hlavně že ty jsi fundovaně poradil...
on se ptal v cem. ja mu odpovedel. kde vidis problem?
Třeba v tom, že mu radíš IMO nesmysl. Ne že by to vůbec nešlo, ale zkus sem napsat třeba 3 argumenty proč si myslíš že je to dobrý nápad.
Kdyz se nato ptas, asi nebudes moc dobrej a moudrej. Zodpovez si sam. V assembleru udelam program omnoho rychlejsi
-
jednoznacne v assembleri. jenom to ti tu nikto neporadi.
Hlavně že ty jsi fundovaně poradil...
on se ptal v cem. ja mu odpovedel. kde vidis problem?
Třeba v tom, že mu radíš IMO nesmysl. Ne že by to vůbec nešlo, ale zkus sem napsat třeba 3 argumenty proč si myslíš že je to dobrý nápad.
Kdyz se nato ptas, asi nebudes moc dobrej a moudrej. Zodpovez si sam. V assembleru udelam program omnoho rychlejsi
Na to, abych poznal trola, mi rozum a moudrost bohatě stačí.
Zato ty by ses měl zamyslet nad tím, jestli je dobrý nápad doporučovat jako řešení assembler někomu, kdo položí takovýto dotaz:
Zeptám se raději tady, než ve Vývoji. Mám na domě USB kamerku+usb barometr/teploměr a připojené je to k PC. Na web to každou minutu posílá snímky a data, do snímků jsou naměřené hodnoty vkládány. Chtěl bych tuhle, vcelku triviální záležitost, nahradit Raspberry Pi+BME280+IP kamerou. Rpi si stáhne snímek z IP kamery (dá se přes http://ipadresa/obrázek.jpg), zmenší ho na požadovaný rozměr, dále si zjistí hodnotu z čidla a zapíše ji do snímku. Snímek pošle na web a uloží ho do adresáře jako rok/měsíc/den/číslo snímku.jpg, či jinak. Naměřené hodnoty dále pošle na wunderground.
Nějaké malé zkušenosti s programováním mám, kdysi dávno basic, turbo pascal, php, pak jsem si upravoval nějaké už hotové programy ve Visual Basicu, C#, Delphi, ono je to víceméně furt to samé, jen se to liší syntaxí.
Teď jsem si pořídil Rpi,bme280 a ještě senzor intenzity osvětlení (to by mohlo být zajímavé z pohledu plánované instalace solárů). Zatím se rozkoukávám, linux jsem nikdy neměl. Chtěl bych poradit, v čem ten program na meteostanici napsat. Trošku jsem si o tom přečetl, nejvíc by se mi líbil asi C/C++, protože ten se zkompiluje rovnou do spustitelného souboru, narozdíl od Pythonu či C#, kde je potřeba runtime, i když pro tyto účely to asi nevadí. Pro Python asi hovoří to, že bude možná k dispozici více modulů, které pro můj účel budu potřebovat-díky tomu se s tím nebudu tolik trápit. Programováním se živit nebudu, chci spáchat tohle a to mi ke štěstí stačí. :-)
Nechci založit flamewar, spíš bych potřeboval nakopnout správným směrem. Samozřejmě jsem nejdřív googlil-nejdřív meteostanice, jenže žádná se moc nepodobá té mé, tak i programovací jazyky a zda už někdo nepoložil tuto otázku-nenašel jsem.
Děkuji
-
Takže Python mi píše, co potřebuju, jen Raspbian na mě mluví v kostičkách.
Hádám, že se pracuješ přímo na RPI. (Ne přes SSH). Pokud ano, tak musíš nastavit fonty konzole.
sudo dpkg-reconfigure console-setup
A poslední věc, jak to provést, aby se to pouštělo po startu a skript proběhl v každou celou minutu? Mám to udělat přes Cron, nebo do skriptu nějakou smyčku?
Tuhle otázku snad ani nemyslíš vážně. Ale budiž.
Pokud chceš přesné spouštění na setiny vteřin. Pohlídej to scriptem. Jinak cron
dělám i přes SSH, ale jinak jsem měl na mysli přístup přímo (přišel mi dneska fajne malý 7" monitorek 1024x600 :-)). Po malém boji to konečně píše česky a ne #esky. Díky moc.
Nepotřebuju to na setiny vteřin, stačí na vteřiny. Nejsem velký programátor, tak jsem to myslel vážně ;-) Dogooglím si, jak na to.
-
Po malém boji to konečně píše česky a ne #esky.
Jeste byva dobrym zvykem napsat, ktere reseni bylo to spravne.
-
Toz tady mate reseni na JVM (ne sice Java, ale vykonem byva Scala spise horsi).
https://github.com/mnn/jvm_rpi_sensor_test
Kvuli doslova 1 vterine ze 13 se IMO nevyplati se ucit s jinymi nastroji, pokud umim treba s tou Javou. Navic takovy imagemagick je sice dobry na uplne triviality, ale kombinovat v tom vice filtru, formatu atp. je peklo. Mozna ze vyjde rychleji beh, ale (minimalne pro me) je slepeni neceho ve Scale mnohem rychlejsi, nez laborovat s mnoha prepinaci, jejich pozici a bugy, v imagemagicku (ano, skoro ho nepouzivam, presto jsem uz narazil na 2 bugy, ktere vysledek zcela znicily; musel jsem to resit workaroundy z fora).
PS: Je to napsane celkem prasacky, rozhodne zadne optimalizace tam nejsou. Je tam kotel knihoven, klidne by to slo prepsat urcite nasobne rychleji, ale osobne nevidim duvod. Pokud na te maline stejnak nic jineho nepojede, tak bych vubec neresil, jestli je to psane v asembleru, nebo v Jave, pameti to ma dost. Osobne me prekvapilo, ze to ziskavani obrazku je dost pomale (RPi bylo pripojeno na stejne siti jako ten desktop). Holt asi zpracovani obrazku malina dobre nesnasi.
-
Když jsme u toho řešení...
Já na tohle používám fswebcam.
Pustíš, najde si to kameru a uloží obrázek + vlepí info, defaultně čas, ale dá se tam poslat i text.
K tomu mám pythoní omáčku která mě přes webdav pošle na server zaznamenanej obrázek. Řešil jsem i čtení teploty, ale to teď nemůžu najít.
Není to sice přesně ono co chceš, ale úprava je na pár řádků.
https://gist.github.com/OndrejIT/b3cafcdbf31851f8699569a8b1d4daf9
(Doporučuji si vytvořit na malině malej ramdisk, aby sis zbytečně neodíral kartu...)
-
...
Nepotřebuju to na setiny vteřin, stačí na vteřiny. Nejsem velký programátor, tak jsem to myslel vážně ;-) Dogooglím si, jak na to.
Použij cron, to máš nejlehčí...
pi@raspberrypi:~ $ cat /etc/cron.d/krmitko
*/10 * * * * pi /home/pi/krmitko.py
(pouštěj každejch 10 minut...)
-
Po malém boji to konečně píše česky a ne #esky.
Jeste byva dobrym zvykem napsat, ktere reseni bylo to spravne.
sorry, řešení bylo sudo dpkg-reconfigure console-setup + volba správného fontu. Nyní mám nakonfigurováno UTF-8 na první obrazovce, na druhé odhadnout nejvhodnější zn.sadu a na třetí font VGA 8x16.
Prvně jsem zakufroval ve volbě 2 na Latin 2, díky tomu se vše překopalo do divnejch znaků, hlavně ale nešlo zvolit nic jiného při dalším spuštnění. Na nic to nereagovalo. Pak dostal systém jakési vnuknutí a šlo to.
-
...
Nepotřebuju to na setiny vteřin, stačí na vteřiny. Nejsem velký programátor, tak jsem to myslel vážně ;-) Dogooglím si, jak na to.
Použij cron, to máš nejlehčí...
pi@raspberrypi:~ $ cat /etc/cron.d/krmitko
*/10 * * * * pi /home/pi/krmitko.py
(pouštěj každejch 10 minut...)
Díky. Co se stane, když můj pythoní program nestihne doběhnout do minuty? Spustí se jeho další instance? A když ho bude spouštět cron, poběží nějak na pozadí, nebo ho uvidím na konzoli (mám tam nějaké "print "dělám zrovna tohle")?
A ještě se zeptám: určitě jde nějak na pozadí se startem rpi spustit i FTP server (abych čas od času mohl z rpi vysosat archivní snímky). Máte někdo dobrou zkušenost s nějakým FTP serverem?
-
Cron jednoduse spousti prikazy. Kdyz jedna instance zustace viset z minule, tak jich pojede vic zaraz.
Na konzoli to neuvidis, ale normalne cron pri vystupech posila mail (povazujete se to za chybu/dulezite info).
-
Když jsme u toho řešení...
Já na tohle používám fswebcam.
Pustíš, najde si to kameru a uloží obrázek + vlepí info, defaultně čas, ale dá se tam poslat i text.
K tomu mám pythoní omáčku která mě přes webdav pošle na server zaznamenanej obrázek. Řešil jsem i čtení teploty, ale to teď nemůžu najít.
Není to sice přesně ono co chceš, ale úprava je na pár řádků.
https://gist.github.com/OndrejIT/b3cafcdbf31851f8699569a8b1d4daf9
(Doporučuji si vytvořit na malině malej ramdisk, aby sis zbytečně neodíral kartu...)
díky, ale tohle mám pořešený díky IP kameře hikvision, tam jde obrázek stáhnout elegantně:
cmd=("wget http://IP adresa:port/streaming/channels/1/picture?auth=base64login+heslo -q --show-progress -T 20 -O camera.jpg")
call ([cmd], shell=True)
pak prvním convertem se změní velikost na 800x600 kterou používám na webstránkách a snímek se uloží jako png. V druhém kroku se do obrázku dodají data a snímek se uloží jako jpg. Přišel jsem na to, že když to udělám takhle kostrbatě na 2 formáty, tak je výsledný text v obrázku čitelnější, skoro bez kompresních artefaktů. Škoda, že to není tak úplně čisté jako obrázek,který produkuje Tincam na windows.
O ramdisku jsem přemýšlel+co do něj dát. Na tohle stahování snímků a konverze by byl asi ideální. Pak potřebuju do csv souboru přidávat naměřené hodnoty. To je 1440 zápisů do jednoho souboru denně. Možná ta data šoupnu do ramdisku a cronem si po půlnoci pustím skript, který to šoupne z ramdisku do adresáře. Sic riskuju data za jeden den, ale zase ušetřím kartu. Navíc vlastně ten soubor se průběžně každou minutu nahrává na ftp.
Taky mě napadlo, že až to bude celé naprogramované a otestované, tak bych tu kartu naklonoval a uložil si ji jako image na PC. V okamžiku, kdy karta řekne sbohem, tak image nahraju na další kartu a jede se dál.
-
Cron jednoduse spousti prikazy. Kdyz jedna instance zustace viset z minule, tak jich pojede vic zaraz.
Na konzoli to neuvidis, ale normalne cron pri vystupech posila mail (povazujete se to za chybu/dulezite info).
První větě rozumím, druhou prosím dovysvětlit-když mám v pythoním skriptu print, tak mi cron pošle e-mail s tím textem? A chybou je mít v tom skriptu print, nebo?
Díky
-
A ještě se zeptám: určitě jde nějak na pozadí se startem rpi spustit i FTP server (abych čas od času mohl z rpi vysosat archivní snímky). Máte někdo dobrou zkušenost s nějakým FTP serverem?
Povolit sluzbu po spusteni lze takto:
sudo systemctl enable <jmeno sluzby>
S ftp serverem neporadim, kdysi jsem pouzival tusim pureftpd (mozna si to pletu), ale bylo to dost slozite na nastaveni.
-
Na konzoli to neuvidis, ale normalne cron pri vystupech posila mail (povazujete se to za chybu/dulezite info).
První větě rozumím, druhou prosím dovysvětlit-když mám v pythoním skriptu print, tak mi cron pošle e-mail s tím textem? A chybou je mít v tom skriptu print, nebo?
Díky
Ano, posle e-mail s celym vystupem.
Ou, ja to myslel tak, ze ten cron to povazuje za dulezite info ci chybu, tak radeji informuje mailem admina. Bezne to resim tak, ze tyto pomocne veci si loguju do souboru. Na vystup hazu jen varovani nebo chyby, aby me kdyztak cron upozornil.
-
aha, no, to bych se asi zbláznil. To pak musím zakomentovat, než to poběží na ostro. Díky.
-
Co se stane, když můj pythoní program nestihne doběhnout do minuty? Spustí se jeho další instance?
Spusti se dalsi instance. A protoze ta prvni nedobehla do minuty, druha pobezi asi jeste dele, protoze RPi bude tahnout dve. Takze za chvili by jich tam take mohlo bezet tolik, ze se RPi ucpe. To by mozna chtelo osetrit, treba tak, ze kdyz to nedobehne, nova instance se nepusti nebo se stara nejak zabije nebo neco. Ovsem pokud by se to stavalo pokazde, tak nedobehne zadna. A jestli jedna zustane viset, tak mate po ptakach, dokud to rucne nesestrelite.
Take by mozna stalo zato to rozdelit do dvou uloh. Jedna by porizovala obrazky a strkala je nekam do nejakeho adresare. Druha by je podle timestampu/jmena s timstampem brala a pres FTP nebo co to pouzivate nahravala do pryc a pak mazala (tady by se vam mohly hodit inotify-tools). Aby se nestalo, ze vam na pet minut krachne spojeni a kvuli tomu bude viset FTP na timeoutu a dalsi uloha se nespusti.
BTW, existuji nejake inotify moduly i pro Python.
Uz se nepamatuju, jestli tam ty obrazky archivujete nebo je potreba vzdy jen posledni, takze podle toho by se to muselo vymyslet.
Takze asi nejdriv neco sesmolte a zkuste, jak dlouho to bezi (man time) a podle toho se uvidi.
-
...
Nepotřebuju to na setiny vteřin, stačí na vteřiny. Nejsem velký programátor, tak jsem to myslel vážně ;-) Dogooglím si, jak na to.
Použij cron, to máš nejlehčí...
pi@raspberrypi:~ $ cat /etc/cron.d/krmitko
*/10 * * * * pi /home/pi/krmitko.py
(pouštěj každejch 10 minut...)
Díky. Co se stane, když můj pythoní program nestihne doběhnout do minuty? Spustí se jeho další instance? A když ho bude spouštět cron, poběží nějak na pozadí, nebo ho uvidím na konzoli (mám tam nějaké "print "dělám zrovna tohle")?
A ještě se zeptám: určitě jde nějak na pozadí se startem rpi spustit i FTP server (abych čas od času mohl z rpi vysosat archivní snímky). Máte někdo dobrou zkušenost s nějakým FTP serverem?
Dá se použít
flock -n nejaky_soubor prikaz
-
PedroKV: ok když má kamera přímo url tak je to ideální.
Na stahování snímků netřeba volat wget, (netřeba ukládat mezisoubor na disk) ale pokud teda bude script v Pythonu tak šáhni po knihovně requests, zachází se s ní jednoduše, celé by to mohlo vypadat např takto:
response = requests.get(url_kamery, auth=(login, heslo))
if not response.status_code == requests.codes.ok:
print("Nepodarilo se stahnout obrazek.")
sys.exit(1)
img = Image.open(BytesIO(response.content)) # Nacte obrazek
img.thumbnail(size=(640, 480)) # Zmensi
draw = ImageDraw.Draw(img)
draw.text((10, 10), "Teplota: {}°C".format(get_temperature())) # Vepise text
img.save("/home/pi/kamera.jpg", format="JPEG") # Ulozi
Co se týče názvu obrázku atp tak si to naformátuj např pomocí datetime pak lze vytvářet strukturu jako /rok/měsíc/den/hodina.
Pokud script nedoběhne, pustí se znova, pokud si to nepohlídáš.
Pokud ti script něco vypíše na standartní výstup, cron ti to pošle emailem. Tobě se to v konzoly neukáže, (ukáže se ti jen že ti přišel mail) pokud budeš přihlášen. To lze vyřešit přesměrováním výstupu do /dev/null což není dobře, chceš přeci aby si věděl proč to nefunguje. Dá se to řešit nejlépe loglevelem, kde to co máš pro sebe v běžnejch printech si necháš jen vypisovat když zadáž scriptu např parametr --debug a jinak ti to hlásí jen chyby.
Na FTP se vyprdni. Stáhni si nějakého SFTP klienta a připojuj se na malinu z něho.
(Nebo si kopíruj soubory z terminálu pomocí scp)
Co se týče nahrávání na server... Možná pro tebe bude nejjednodušší to řešit rsyncem, kde budeš syncat řekněme den. Pak budeš mít jistotu že i když ti na půl dne vypadne spojení, po znovunavázání se ti aktuální fotky z dne přenesou.
Nicméně na svejch projektech sem na to kašlal a nahrával to rovnou pythonem, když něco nefungovalo, v 99% případech za to mohla vykopnutá malina ze zdi.
-
requests vypadá zajímavě. Ušetřil bych si tělocvik se soubory, i když teď mi to funguje v pohodě. Googlím jak vytvořit RAMdisk, ale tohle vypadá čistě. Příležitostně to otestuju.
SFTP-musím vygooglit, neznám. Pro mě na windows je pohodlné v total commanderu dát ctrl-f a připojit se na ftp server a na disk si vykopírovat obrázky.
rsync-netřeba. Když nepoběží proud/internet, tak prostě nebudou snímky. Data budou (půjde-li proud), protože se appendují do souboru a ten se průběžně nahrává.
Jinak to, jak funguje původní meteostanice-PCčko s Tincam a ovladačem barometru/teploměru v Delphi je k vidění na meteo.pozorka88.cz (http://meteo.pozorka88.cz). Nahrává se tam obrázek a CSV soubor s daty, obrázek se zobrazí a CSV soubor se na serveru parsuje a z něj dělá graf. Některé grafy si tahají hodnoty z WeatherUnderground (teplota za posledních x měsíců). Snímky za posledních 24h si vyrábí cron na serveru.
S pythoním prográmkem jsem zatím ve stavu, kdy to čte z BME280 hodnoty, ukládá do CSV souboru, vkládá do obrázku a ten posílá na FTP server. U toho FTP serveru jsem zvládl i ošetřit chybové stavy. Až na původní kostru ovládající BME280 je to zatím řádek po řádku, měl bych to rozsekat na "def" sekce a v mainu pak volat jednotlivé akce a dorazit ošetření chybových stavů u všeho-aby to někde nevyhnilo
Skoro si říkám, jestli by nebylo lepší, aby ten python běžel furt a ne volaný cronem. Když bude automaticky spuštěn po spuštění RPI, poběží na pozadí nebo napopředí?
A ještě jedna věc: přijde mi, že bme280 měří pořád vlhkost jako 65-66%, je mi divné, že bysme doma měli furt takhle konstantě. Máte někdo tohle čidlo? Leží mi to na stole, zatím jsem to nezkoušel přenést k oknu a otevřít ho. Program jsem převzal odsud: http://www.raspberrypi-spy.co.uk/2016/07/using-bme280-i2c-temperature-pressure-sensor-in-python/ (http://www.raspberrypi-spy.co.uk/2016/07/using-bme280-i2c-temperature-pressure-sensor-in-python/)
-
Skoro si říkám, jestli by nebylo lepší, aby ten python běžel furt a ne volaný cronem. Když bude automaticky spuštěn po spuštění RPI, poběží na pozadí nebo napopředí?
pokud pouzijes systemd, tak to je myslim typ simple a umi to automaticky i restartovat, pokud by to umrelo. dalsi moznost je to poustit pres old-school rc.local s & (aby to bezelo na pozadi a nezatuhl boot). v tom pripade ale pokud to spadne, tak se to samo neozivi, je to ale jednodusi na nastaveni, pokud nepotrebujes auto-restart.
-
A ještě jedna věc: přijde mi, že bme280 měří pořád vlhkost jako 65-66%, je mi divné, že bysme doma měli furt takhle konstantě.
Dejchni na nej.
-
[...]Googlím jak vytvořit RAMdisk[...]
mas ho uz ve vychozi instalaci pripravenej/pripojenej v /dev/shm , tedy ne ramdisk, ale vhodnejsi tmpfs (https://en.wikipedia.org/wiki/Tmpfs), kterej si muzes primontovat sam jinam, s jinejma volbama... narozdil od ramdisk nezabere v ram nastavenou velikost pokud neobsahujje soubory, po smazani souboru se automaticky uvlonuje atd, tedy ta velikost je jen maximalni mozna
-
A ještě jedna věc: přijde mi, že bme280 měří pořád vlhkost jako 65-66%, je mi divné, že bysme doma měli furt takhle konstantě.
Dejchni na nej.
Umele dychani uz zachranilo mnoho zivotu.
-
PedroKV: hodil bych to do cronu. Když něco vyhnije a script ti nedoběhne, za dalších x minut se pustí znova. Můžeš to pochopitelně vyřešit třeba tím slavným systemd, kterej se ti o to bude starat aby to neustále běželo, ale myslím že cron je lepší/lehčí volba, než mít ve scriptu nekonečnou smyčku a sleep na x minut a ještě mít nějakej dohled nad tím aby to nepadlo.
SFTP určitě nějak do totalu naroubovat půjde, netřeba strácet čas s ftp...
-
Tak SFTP jsem v totalu rozběhal, nainstaloval plugin, pak hledal,co a jak a nakonec jsem to našel v okolních počítačích. Paráda, šlape.
Co se cronu týče, ok, jen data posílám co minutu. Z webkamery má obrázek za vteřinu, to jde po lokální gbit síti, nějaké úpravy a čtení čidla další vteřina dvě, pak poslat 250kB obrázek+CSV soubor na ftp, to by se dalo do 20s stihnout (mám problem s wifi providerem, moc mu to nechodí, ale nic jiného u nás nejde (krom LTE) a navíc mám od něj veřejnou statickou IP adresu-to jinde nedostanu :-( ). Takže snad se to do další celé minuty stihne.
Co se ramdisku týče, vygooglil jsem toto: http://www.zdnet.com/article/raspberry-pi-extending-the-life-of-the-sd-card/
Rád bych si vytvořil v /home/pi adresář RAMDISK, stačí mi třeba 10MB a do něj dával mezisoubory-obrázky z kamery a CSV soubor. CSV soubor by pak cron po půlnoci (až bude celý) zkopíroval na SD kartu do YYYY/MM/DD.
Má taky smysl dát do ramdisku adresář TMP a LOGy? Protože jsem četl, že když se smaže adresář s logy, tak nemusí dělat dobrotu.
Na čidlo jsem dýchal. Výsledkem je zvýšení teploty a jen zcela nepatrná změna vlhkosti +1%. Taky se mi úplně nezdá ten vzorec na výpočet relativního tlaku. Když jsem včera BME280 hodil do otevřeného okna, teplota slezla o asi 13°C a tlak vzrostl o 3hPa (relativní).
Přitom ale když se podívám na graf teploty/rel.tlaku na stávající meteostanici, tak je tam jen minimální souvislost, přestože vzorec je tam stejný:
Delphi:
P := (P*ASL*9.80665/(287.04*(273.15+T+(ASL/400))))+P;
Python:
relative_pressure=(pressureAVG*ASL*9.80665/(287.04*(273.15+temperatureAVG+(ASL/400))))+pressureAVG
ASL je nadmořská výška, tlak/teplota AVG je průměrná hodnota z 5 měření.
Teď jsem znova cvičně dýchnul na čidlo, vlhkost +1%, teplota +asi 4°C a tlak -0,9hPa. Navíc si myslím, že po dýchnnutí by mělo čidlo víc zareagovat co se vlhkosti týče.
-
[...] Co se ramdisku týče, vygooglil [...]
tohle (https://forum.root.cz/index.php?topic=13945.msg184435#msg184435) si necetl? ;)
Má taky smysl dát do ramdisku adresář TMP a LOGy? Protože jsem četl, že když se smaže adresář s logy, tak nemusí dělat dobrotu.
tmp muzes, ale logy je blbost, kdyz budes mit problem tak nebudes mit log protoze se to zrovna restartovalo...
-
ok, díky. Mohl bys mi prosím, jak pro blbce napsat příkazovou řádku, díky které přesměruju TMP do ramdisku (tmpfs) a to samé adresář home/pi/ramdisk? Děkuji pěkně ;-)
Jinak mi to nedalo,trošku jsem zalaboroval a nainstaloval ovladaš na Adafruit bme280 a přišel na to, že v tom mém programu je něco špatně. Vlhkost v bytě máme cca 41% a po dýchnutí to vyletí na 80%. Ne tak ovšem v mém programu. :-/ Přitom já v části, kde se čte senzor, nic neměnil.
-
ok, díky. Mohl bys mi prosím, jak pro blbce napsat příkazovou řádku, díky které přesměruju TMP do ramdisku (tmpfs) a to samé adresář home/pi/ramdisk? Děkuji pěkně ;-)
Jinak mi to nedalo,trošku jsem zalaboroval a nainstaloval ovladaš na Adafruit bme280 a přišel na to, že v tom mém programu je něco špatně. Vlhkost v bytě máme cca 41% a po dýchnutí to vyletí na 80%. Ne tak ovšem v mém programu. :-/ Přitom já v části, kde se čte senzor, nic neměnil.
Mozna pro jistotu (nevidel jsem cely zdrojak) prosim nahrad ve vzorci 400 za 400.0 at Python donutis k deleni v realnem oboru (jestli je ASL cele cislo, tak by to mohlo blbnout).
-
ok, díky. Mohl bys mi prosím, jak pro blbce napsat příkazovou řádku, díky které přesměruju TMP do ramdisku (tmpfs) a to samé adresář home/pi/ramdisk? Děkuji pěkně ;-)
Uz si nejsem jisty, do RPi jsem nejakou dobu nekoukal a nmam ho ted po ruce. Ale kdyz kouknete to fstab, jestli ve verzi se systemd jeste takova vec existuje, tak tam najdete priklady, podle kterych si udelate ten ramdisk.
-
@PedroKV melo by stacit v /etc/default/tmpfs zmenit radku (a do fstab pridavat jen pri pozadavku na jine volby)
#RAMTMP=no
na
RAMTMP=yes
ale to mi ted na RPi nejak nefunguje(osobne to nepouzivam protoze mam system na SSD, takze mozna sem jen neco prehlid :) kazdopadne klasicke pridani do fstab mi funguje:
tmpfs /tmp tmpfs nodev,nosuid,size=20%,mode=1777 0 0
jde o priklad uvedenej v manualu pro tmpfs primo v sekci pro /tmp, viz:
man tmpfs
jinak v situaci kdy bys to potreboval prikazem tak nejak takto:
mount -t tmpfs -o nodev,nosuid,size=20%,mode=1777 tmpfs /adresar/kam/pripojit
size je maximalni mozna, v realu to zabira ram jen podle ulozenych souboru, po smazani souboru to zas ram vraci...
size je mozne zadat v procentech nebo v cisle napr 100m, 100000k...
jinak do /home/pi/ramdisk je to zbytecne, jak sem psal tak ve vychozi instlaci uz mas pripraven tmpfs "ramdisk" v ceste /dev/shm tam si muzes zalozit adresar a ukladat soubory co potrebujes...
-
děkuji, funguje, jen je třeba před to mount hodit SUDO. Co jsem do adresáře /Ramdisk nahrál tam po restartu není-tedy ok. Udělal jsem si tenhle adresář, protože jako nelinuxák budu i za půl roku vědět, že tohle je ramdisk, spíš než kdesi ve var/....
Co se vlhkoměru týče, tak jsem vypozoroval, že:
1) po zapnutí RPi a spuštění původního skriptu odsud:
http://www.raspberrypi-spy.co.uk/2016/07/using-bme280-i2c-temperature-pressure-sensor-in-python/ (http://www.raspberrypi-spy.co.uk/2016/07/using-bme280-i2c-temperature-pressure-sensor-in-python/)
se ukáže vlhkost 65%
2) po opakovaném spuštění skriptu se ukáže to samé
3) po spuštění mého prográmku to dělá to samé (65%), no logicky, já jen upravil zobrazování výstupu a čtení z kamery
4) spustím-li skript od Adafruit, načtou se stejné hodnoty teploty a tlaku (+- šum), ale vlhkoměr +-40%
od té doby už měří dobře i skript 1 a můj, jak na to dýchnu, vlhkost vyletí třeba na 80%.
-
děkuji, funguje, jen je třeba před to mount hodit SUDO. Co jsem do adresáře /Ramdisk nahrál tam po restartu není-tedy ok. Udělal jsem si tenhle adresář, protože jako nelinuxák budu i za půl roku vědět, že tohle je ramdisk, spíš než kdesi ve var/....
sudo je potreba, nicmene ten mount je reseni v tvem pripade az to posledni, vhodnejsi by bylo to proste dat do /etc/fstab jak sem psal, pak se nemusis o mount starat (ani rucne ani v scriptu), proste se to systemove pripoji pri startu...
ta vyhoda /dev/shm je ta ze to je vychozi chovani, uz pripravene, nemuses to vytvaret/pripojovat/nic, proste tam rovnou ulozis co potrebujes ;)
do home si misto adresare Ramdisk udelej soubor Poznamky.txt a tam si takovehle veci pis aby "jako nelinuxak" si i za rok vedet ;)
[...] 4) spustím-li skript od Adafruit, načtou se stejné hodnoty teploty a tlaku (+- šum), ale vlhkoměr +-40%
od té doby už měří dobře i skript 1 a můj, jak na to dýchnu, vlhkost vyletí třeba na 80%.
jakej script? (nevim jestli si to psal predtim) mozna je tam nejaka inicializace modulu, odpovidalo by tomu to chovani...
-
4) spustím-li skript od Adafruit, načtou se stejné hodnoty teploty a tlaku (+- šum), ale vlhkoměr +-40%
od té doby už měří dobře i skript 1 a můj, jak na to dýchnu, vlhkost vyletí třeba na 80%.
:)
Tak ted uz zbyva jenom hledat, v cem se ty dva zdrojaky lisi. Zrejme nejaka inicializace cidla nebo tak neco.
-
ale to mi ted na RPi nejak nefunguje(osobne to nepouzivam protoze mam system na SSD, takze mozna sem jen neco prehlid :) kazdopadne klasicke pridani do fstab mi funguje:
tmpfs /tmp tmpfs nodev,nosuid,size=20%,mode=1777 0 0
tak mě to nejde, nabootuju do root@raspberrypi a journalctl -xb vypíše:
tmp.mount mount process exited, code=exited status=32
failed to mount /tmp
:-(
ovšem odkomentování v etc/default/tmfps funguje a /tmp je ramdisk
A jinak pozitivní je, že jsem vyměnil ovládací část programu pro bme280 za ten adafruití program (
https://github.com/MS3FGX/Adafruit_Python_BME280 (https://github.com/MS3FGX/Adafruit_Python_BME280)
)
a už to měří jak má. Ony jsou ty obě části hodně podobné, ale nejsem tak zdatný, abych našel chybu v tom mém původním.
-
tak mě to nejde, nabootuju do root@raspberrypi a journalctl -xb vypíše:
tmp.mount mount process exited, code=exited status=32
failed to mount /tmp
Ono /tmp totiz asi je namontovano defaultne na tmpfs. Linux to tak dela uz delsi dobu, jeste pred systemd. Treba tady: https://wiki.archlinux.org/index.php/Tmpfs#Disable_automatic_mount pise, ze "Under systemd, /tmp may be automatically mounted as a tmpfs even though you have no entry for that in your /etc/fstab."
-
Ono /tmp totiz asi je namontovano defaultne na tmpfs. [...]
na Raspbian to ale neni vychozi, viz: https://forum.root.cz/index.php?topic=13945.msg184494#msg184494
-
PedroKV: ok když má kamera přímo url tak je to ideální.
Na stahování snímků netřeba volat wget, (netřeba ukládat mezisoubor na disk) ale pokud teda bude script v Pythonu tak šáhni po knihovně requests, zachází se s ní jednoduše, celé by to mohlo vypadat např takto:
response = requests.get(url_kamery, auth=(login, heslo))
if not response.status_code == requests.codes.ok:
print("Nepodarilo se stahnout obrazek.")
sys.exit(1)
img = Image.open(BytesIO(response.content)) # Nacte obrazek
img.thumbnail(size=(640, 480)) # Zmensi
draw = ImageDraw.Draw(img)
draw.text((10, 10), "Teplota: {}°C".format(get_temperature())) # Vepise text
img.save("/home/pi/kamera.jpg", format="JPEG") # Ulozi
Co se týče názvu obrázku atp tak si to naformátuj např pomocí datetime pak lze vytvářet strukturu jako /rok/měsíc/den/hodina.
Dokázal byl vepsat do obrázku hodnoty tak, aby se vepsaly černým písmem na bílém pozadí, tj. aby pod písmenkem automaticky vznikl bílý obdélníček. Nebo musím taky nejdřív nakreslit bílý obdelník a na něj pak napsat text? Googlil jsem teď chvíli info k PIL a nic kloudného jsem nevygooglil.. :-(
Aktuálně to mám přes convert takhle:
cmd=("convert camerasmall.png -fill white -draw 'rectangle 648,6,793,17 rectangle 684,19 793,30 rectangle 684,32 781,43 rectangle 684,45 763,56' -pointsize 10 -fill black -font DejaVu-Sans -annotate +650+16 'snímek: %s' -annotate +686+29 'barometr: %s hPa' -annotate +687+42 'teploměr: %s °C' -annotate +685+55 'vlhkoměr: %s %s' camerasmall.jpg" % (timedata,relative_pressure1,temperature1,humidity0,percent))
-
Ono /tmp totiz asi je namontovano defaultne na tmpfs. [...]
na Raspbian to ale neni vychozi, viz: https://forum.root.cz/index.php?topic=13945.msg184494#msg184494
Hm, mozna novinka, ktera prisla se systemd. Mam pocit, ze na predchozi verzi to defaultne bylo do tmpfs, aby se neosoupavala SD karta.
-
PedroKV: ok když má kamera přímo url tak je to ideální.
Na stahování snímků netřeba volat wget, (netřeba ukládat mezisoubor na disk) ale pokud teda bude script v Pythonu tak šáhni po knihovně requests, zachází se s ní jednoduše, celé by to mohlo vypadat např takto:
response = requests.get(url_kamery, auth=(login, heslo))
if not response.status_code == requests.codes.ok:
print("Nepodarilo se stahnout obrazek.")
sys.exit(1)
img = Image.open(BytesIO(response.content)) # Nacte obrazek
img.thumbnail(size=(640, 480)) # Zmensi
draw = ImageDraw.Draw(img)
draw.text((10, 10), "Teplota: {}°C".format(get_temperature())) # Vepise text
img.save("/home/pi/kamera.jpg", format="JPEG") # Ulozi
Co se týče názvu obrázku atp tak si to naformátuj např pomocí datetime pak lze vytvářet strukturu jako /rok/měsíc/den/hodina.
Dokázal byl vepsat do obrázku hodnoty tak, aby se vepsaly černým písmem na bílém pozadí, tj. aby pod písmenkem automaticky vznikl bílý obdélníček. Nebo musím taky nejdřív nakreslit bílý obdelník a na něj pak napsat text? Googlil jsem teď chvíli info k PIL a nic kloudného jsem nevygooglil.. :-(
Aktuálně to mám přes convert takhle:
cmd=("convert camerasmall.png -fill white -draw 'rectangle 648,6,793,17 rectangle 684,19 793,30 rectangle 684,32 781,43 rectangle 684,45 763,56' -pointsize 10 -fill black -font DejaVu-Sans -annotate +650+16 'snímek: %s' -annotate +686+29 'barometr: %s hPa' -annotate +687+42 'teploměr: %s °C' -annotate +685+55 'vlhkoměr: %s %s' camerasmall.jpg" % (timedata,relative_pressure1,temperature1,humidity0,percent))
tak momentálně to mám takhle:
import requests
import PIL
import io
from PIL import Image,ImageDraw,ImageFont
response=requests.get("adresaobrázkuzkamery")
if not response.status_code==requests.codes.ok:
print (timenow()+" Unable to download image")
sys.exit(1)
img=Image.open(io.BytesIO(response.content))
img=img.resize(size=(800,600),resample=1)
draw=ImageDraw.Draw(img)
draw.rectangle([648,6,793,17],fill="white")
draw.rectangle([684,19,793,30],fill="white")
draw.rectangle([684,32,781,43],fill="white")
draw.rectangle([684,45,763,56],fill="white")
font=ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf',11, encoding="unic")
draw.text((650,7), (u"snímek: "+timedata),font=font, fill="black")
draw.text((686,20), ("barometr: "+str(relative_pressure1)+" hPa"),font=font, fill="black")
draw.text((687,33), (u"teploměr: "+str(temperature1)+" °C"),font=font, fill="black")
draw.text((685,46), (u"vlhkoměr: "+str(humidity0)+" %"),font=font, fill="black")
černý text na bílém pozadí asi psát nejde, jediná šance je zjistit šířku textu vypsání do obrázku a podle toho udělat šířku bílého obdélníku. Nakonec na to kašlu a nechám délku obdélníku statickou. Trochu mě potrápilo, že přes convert jsem měl font užší. Ač jsem měl specifikovaný font DejaVuSans, convert používal Condensed verzi. A díky quality=90 v image.save (stejné nastavení kvality, jako mám nyní na PC), se text v boxíkách zčitelnil. image.thumbnail a image.resize dělají to samé, jen každý s jiným defaultním filtrem. Použil jsem image.resize a resample=1, přijde mi, že to dává nejhezčí výsledek. No musím se podívat ještě na denní snímek.
-
.... Nakonec na to kašlu a nechám délku obdélníku statickou.....
A neumi ImageMagic prilepit pod fotku bily obdelnik, pres ktery by se pak dolepil text? Dalsi reseni by bylo, kdyby se dal psat text jako outline, cerny s bilym rantlem. To se da precist snad na libovolnem pozadi.
-
Nechám to takhle, jak to je (http://meteo.pozorka88.cz (http://meteo.pozorka88.cz)). Nechci měnit design a outline ve velikosti písma 11 by asi bylo dost nečitelné. Jinak proužek, i třeba se sníženou průhledností řešením je.
-
PedroKV: ok když má kamera přímo url tak je to ideální.
Na stahování snímků netřeba volat wget, (netřeba ukládat mezisoubor na disk) ale pokud teda bude script v Pythonu tak šáhni po knihovně requests, zachází se s ní jednoduše, celé by to mohlo vypadat např takto:
response = requests.get(url_kamery, auth=(login, heslo))
if not response.status_code == requests.codes.ok:
print("Nepodarilo se stahnout obrazek.")
sys.exit(1)
img = Image.open(BytesIO(response.content)) # Nacte obrazek
img.thumbnail(size=(640, 480)) # Zmensi
draw = ImageDraw.Draw(img)
draw.text((10, 10), "Teplota: {}°C".format(get_temperature())) # Vepise text
img.save("/home/pi/kamera.jpg", format="JPEG") # Ulozi
Co se týče názvu obrázku atp tak si to naformátuj např pomocí datetime pak lze vytvářet strukturu jako /rok/měsíc/den/hodina.
Dokázal byl vepsat do obrázku hodnoty tak, aby se vepsaly černým písmem na bílém pozadí, tj. aby pod písmenkem automaticky vznikl bílý obdélníček. Nebo musím taky nejdřív nakreslit bílý obdelník a na něj pak napsat text? Googlil jsem teď chvíli info k PIL a nic kloudného jsem nevygooglil.. :-(
Aktuálně to mám přes convert takhle:
cmd=("convert camerasmall.png -fill white -draw 'rectangle 648,6,793,17 rectangle 684,19 793,30 rectangle 684,32 781,43 rectangle 684,45 763,56' -pointsize 10 -fill black -font DejaVu-Sans -annotate +650+16 'snímek: %s' -annotate +686+29 'barometr: %s hPa' -annotate +687+42 'teploměr: %s °C' -annotate +685+55 'vlhkoměr: %s %s' camerasmall.jpg" % (timedata,relative_pressure1,temperature1,humidity0,percent))
tak momentálně to mám takhle:
import requests
import PIL
import io
from PIL import Image,ImageDraw,ImageFont
response=requests.get("adresaobrázkuzkamery")
if not response.status_code==requests.codes.ok:
print (timenow()+" Unable to download image")
sys.exit(1)
img=Image.open(io.BytesIO(response.content))
img=img.resize(size=(800,600),resample=1)
draw=ImageDraw.Draw(img)
draw.rectangle([648,6,793,17],fill="white")
draw.rectangle([684,19,793,30],fill="white")
draw.rectangle([684,32,781,43],fill="white")
draw.rectangle([684,45,763,56],fill="white")
font=ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf',11, encoding="unic")
draw.text((650,7), (u"snímek: "+timedata),font=font, fill="black")
draw.text((686,20), ("barometr: "+str(relative_pressure1)+" hPa"),font=font, fill="black")
draw.text((687,33), (u"teploměr: "+str(temperature1)+" °C"),font=font, fill="black")
draw.text((685,46), (u"vlhkoměr: "+str(humidity0)+" %"),font=font, fill="black")
černý text na bílém pozadí asi psát nejde, jediná šance je zjistit šířku textu vypsání do obrázku a podle toho udělat šířku bílého obdélníku. Nakonec na to kašlu a nechám délku obdélníku statickou. Trochu mě potrápilo, že přes convert jsem měl font užší. Ač jsem měl specifikovaný font DejaVuSans, convert používal Condensed verzi. A díky quality=90 v image.save (stejné nastavení kvality, jako mám nyní na PC), se text v boxíkách zčitelnil. image.thumbnail a image.resize dělají to samé, jen každý s jiným defaultním filtrem. Použil jsem image.resize a resample=1, přijde mi, že to dává nejhezčí výsledek. No musím se podívat ještě na denní snímek.
Jistě že to jde.
vytvoříš novej obrázek. Velikost si můžeš vypočítat například pomocí funkce len, pokud chceš aby se ti měnila.
white_img = Image.new("RGB", (200, 51), "white")
do něj začneš psát
draw = ImageDraw.Draw(white_img)
draw.text((10, 10), "Teplota: {}°C".format(get_temperature()), fill="black"))
no a pak oba dva obrázky sloučíš
img.paste(white_img, (10,10))
a máš to.
image.thumbnail a image.resize nedělají to samé.
thumbnail zmenšuje při zachování poměru stran, nikoliv. Navíc thumbnail se aplikuje na obrázek na kterej to voláš, u resize ne, tam si ho musíš uložit do proměnné.
-
Díky. Thumbnail a resize jsem zjistil, že je to to samé, jen jedno musí do proměné.
S tím obdélníkem pod písmem to jde řešit i výpočtem délky řetězce a podle toho určit koncovou "x" souřadnici (pravý dolní roh) obdélníku, tedy délku obdélníku. Ale už to nechám. Přesto díky
-
Díky. Thumbnail a resize jsem zjistil, že je to to samé, jen jedno musí do proměné.
S tím obdélníkem pod písmem to jde řešit i výpočtem délky řetězce a podle toho určit koncovou "x" souřadnici (pravý dolní roh) obdélníku, tedy délku obdélníku. Ale už to nechám. Přesto díky
Ano tím výpočtem sem myslel to len.
A znovu podotýkám že thumbnail a resize nedělají to samé. Thumbnail zachovává poměr stran, resize je to jedno, to ti obrázek klidne znetvoří.
-
áha, ok.
No já mám kameru 4:3 - 1280x960 a resizuju na 800x600, takže u mě je to buřt. ;-)
-
Ještě k tomu ramdisku-já na tím furt dumám... Napadlo mě, co kdybych do RPi zarazil flashku a zapisoval na ní? Je to sice stejná/podobná paměť jako paměťovka, ale nebudu si ošoupávat systémovou paměťovku, ale lehce vyměnitelnou flashku. Našel jsem na na aliexpressu miniflashky od 512MB do xx GB za pár šlupek.. Napadlo mě dát tam na ty CSV soubory třeba 4GB (Za 6 let mají soubory 90MB), naformátovat ji na malé clustery a zapisovat na ni. Rychlost zápisu nehraje v případě i pomalé flashky žádnou roli a u flashdisků na Ali píšou 100.000 smazatelná. Což při 1440 zápisech za den vyčerpám za 69 dní. Předpokládám ale, že 100.000x smazatelná je jedna buňka, tj. cluster. Čímž by se flashdisk stal takřka nesmrtelným, když se na to soubor denně 1440x přepíše a pak tam zůstane být a další den se ošoupává zase další cluster. Mimochodem, na svém stávajícím PC na meteostanici jsem z důvodu úspory energie a zvýšení rychlosti vyměnit magnetický HDD za 64GB SSD A-data, je to asi 2 roky a disk je stále fit. Co si o tom myslíte? Jsem s nějakou myšlenkou vedle?
-
Co si o tom myslíte?
Toz ja si myslim, ze USB flash nema wear levelling. Na rozdil od SSD.
-
Tož já myslím, že mají, googlil jsem to hodinu.
http://www.adata.com/en/support/kc-1/70
Vidím to na 16GB ADATA UC330 - 10 let záruka u CZC.
-
Tož já myslím, že mají, googlil jsem to hodinu.
http://www.adata.com/en/support/kc-1/70
Vidím to na 16GB ADATA UC330 - 10 let záruka u CZC.
ten odkaz je v kategorii SSD a zaroven resi MLC/SLC, coz ta UC330 neni... musel bys poridit prumyslovou USB Flashku ktere pouziva MLC nebo SLC, ktere jsou drazsi, napr tuhle 16GB za ~700Kc... http://usb-flash-disky.heureka.cz/mach-xtreme-es-slc-16gb-160-mb-s-160-mb-s/
pak je spis otazka jestli radeji nepripojis rovnou SSD... ja to tak u RPi mam :)
koupil sem redukci mSATA=>USB: http://www.ebay.com/itm/131632736616
USB spojku, s tou akorat vyjde mSATA redukce pod RPi: http://www.ebay.com/itm/321228216572
a kvalitni MLC SSD: https://www.czc.cz/transcend-msa370-32gb/155069/produkt
-
Proč vůbec něco ukládáš lokálně a neodesíláš to rovnou všechno do světa při měření? Pak by si tohle nemusel řešit. Tím že přidáš další součást si zvýšíš šanci že v budoucnu něco odejde. Jestli nechceš ukládat na ramdisk, případně rovnou data odesílat, na flashku bych se vyprd. Když ti odejde sdhc karta, o čemž pochybuji, tak ji vyměníš za jinou a je to. Investice stejná jako v případě flashky.
-
Když ti odejde sdhc karta, o čemž pochybuji, ...
No, jak ktera. Co jsem videl a RPi forech, tak opravdu ne kazda vydrzi nejakou rozumnou dobu. Nektere dokazi odejit zazracne rychle, takze je lepsi prohrabnout fora a kouknout, na co lidi nadavaji.
-
Proč všechno lokálně? No, já vlastně ani nevím, dřív jsem dělal časosběrná videa (něco je na stránkách) a prostě mám u sebe zálohu všech pořízených snímků, což se rovná tuším 6 let zpět minutu po minutě (pár jich chybí-kuna přehryzla usb kabel, odešel disk, nešel proud). Za asi 3 měsíce je to pár GB, takže by mi na to 1.nestačil hosting (10GB, ale mám tam i jiné věci) a 2. mám celkem nespolehlivého Wifi providera, takže "co je doma, to se počítá". S tou kartou-momentálně mám obyčejnou čínskou 8GB kartu,protože jsem dřív o wear levellingu nic netušil, takže jsem prostě vzal dvě 8GB karty na pokusy a hotovo. Jenže s tím,jak si postupně ten systém upravuju, tak se obávám, že bude čím dál složitější ten python skript rozběhat na čisté kartě. Musím vygooglit, jak udělat kompletní funkční image karty, pro jistotu.
No a flashdisk, ten prostě jen vytrhnu, dám nový a v tabulce fstab přepíšu UUID na nové. Jak prosté. ;-) SSD disk se mi tam dávat nechce-prachy, napájení, bude to venku v krabici... RPi chci napájet přes POE 802.3af->5V 2A adaptér z Alíku. I když možná to pojede skrz normální adaptér, protože i z jiných důvodů si tam chci natáhnout 230V.
Ten RAMdisk-přiznávám, je to i trošku lenost. Ale: řeší to jen CSV soubory, po minutě appendované. Fotky bych stejně ukládal někam na kartu/flashdisk. U těch CSV souborů by musel řešit, že pokud dojde k výpadku proudu, tak vlastně na FTP přepíšu jinak plný CSV soubor novým, prázdným. A v případě, že by cron po půlnoci neproběhl (kopírování hotového uzavřeného CSV souboru na kartu), musel bych řešit, aby příští cron zkopíroval i to, co zbylo z minula.
-
Když ti odejde sdhc karta, o čemž pochybuji, tak ji vyměníš za jinou a je to. Investice stejná jako v případě flashky.
rozdil je v tom, ze v pripade flasky staci prohodit prazdnou a restartovat, v pripade vymenu (micro)sd musis na ni mit aktualni stav systemu s aktualni konfiguraci...
nebo jina vec ze kdyz je system na karte a data na usb-flash, tak karta muze byt v rezimu readonly a je pak v podstate "nesmrtelna"...
-
[...] SSD disk se mi tam dávat nechce-prachy, napájení, bude to venku v krabici [...]
ad prachy - pokud chces USB Flash s wear leveling, tak jak sem psal te to vyjde +- stejne, polovicni kapacita a nejspis horsi kvalita, napajeni by byla baterka/solar tak jo, z adapteru to asi neni co resit i v prubehu let, venku v krabici? myslim ze pocasi co prezije RPi zvladne to SSD take :)
-
No, kdyz to bude venku a jestli krabic je dost velka a bude tam tech 220, tak by stalo za to tam zakomponovat dve zarovky okolo 15 W zapojene do serie. Budou to vytapet a udrzovat v suchu.
-
Když ti odejde sdhc karta, o čemž pochybuji, tak ji vyměníš za jinou a je to. Investice stejná jako v případě flashky.
rozdil je v tom, ze v pripade flasky staci prohodit prazdnou a restartovat, v pripade vymenu (micro)sd musis na ni mit aktualni stav systemu s aktualni konfiguraci...
nebo jina vec ze kdyz je system na karte a data na usb-flash, tak karta muze byt v rezimu readonly a je pak v podstate "nesmrtelna"...
https://www.youtube.com/watch?v=I_4cAhW46dM (https://www.youtube.com/watch?v=I_4cAhW46dM)
-
Když ti odejde sdhc karta, o čemž pochybuji, ...
No, jak ktera. Co jsem videl a RPi forech, tak opravdu ne kazda vydrzi nejakou rozumnou dobu. Nektere dokazi odejit zazracne rychle, takze je lepsi prohrabnout fora a kouknout, na co lidi nadavaji.
Já mám v malině několik let ty zelené sd karty od kingstona a sou to držáci :-) Ale pravda, fotky na ně neukládám, jen sem tam loguju.
Proč všechno lokálně? No, já vlastně ani nevím, dřív jsem dělal časosběrná videa (něco je na stránkách) a prostě mám u sebe zálohu všech pořízených snímků, což se rovná tuším 6 let zpět minutu po minutě (pár jich chybí-kuna přehryzla usb kabel, odešel disk, nešel proud). Za asi 3 měsíce je to pár GB, takže by mi na to 1.nestačil hosting (10GB, ale mám tam i jiné věci) a 2. mám celkem nespolehlivého Wifi providera, takže "co je doma, to se počítá". S tou kartou-momentálně mám obyčejnou čínskou 8GB kartu,protože jsem dřív o wear levellingu nic netušil, takže jsem prostě vzal dvě 8GB karty na pokusy a hotovo. Jenže s tím,jak si postupně ten systém upravuju, tak se obávám, že bude čím dál složitější ten python skript rozběhat na čisté kartě. Musím vygooglit, jak udělat kompletní funkční image karty, pro jistotu.
No a flashdisk, ten prostě jen vytrhnu, dám nový a v tabulce fstab přepíšu UUID na nové. Jak prosté. ;-) SSD disk se mi tam dávat nechce-prachy, napájení, bude to venku v krabici... RPi chci napájet přes POE 802.3af->5V 2A adaptér z Alíku. I když možná to pojede skrz normální adaptér, protože i z jiných důvodů si tam chci natáhnout 230V.
Ten RAMdisk-přiznávám, je to i trošku lenost. Ale: řeší to jen CSV soubory, po minutě appendované. Fotky bych stejně ukládal někam na kartu/flashdisk. U těch CSV souborů by musel řešit, že pokud dojde k výpadku proudu, tak vlastně na FTP přepíšu jinak plný CSV soubor novým, prázdným. A v případě, že by cron po půlnoci neproběhl (kopírování hotového uzavřeného CSV souboru na kartu), musel bych řešit, aby příští cron zkopíroval i to, co zbylo z minula.
No fotkama si ji klidně odrovnáš... Jestli máš nějakou čínskou kartu tak si ji rozhodně zazálohuj, v linuxu např za použití programu dd if=/cesta/ke/karte off=/cesta/k/zaloze.img bs=4096
https://en.wikipedia.org/wiki/Dd_(Unix)
(Obráceně pak zase data na kartu nahraješ...)
Ok uznávám, flash karta je asi dobré řešení.
Co se týče adaptérů z aliexpress dx atp... Tak těm bych se vyhnul. Řekl bych že dobrá většina brečení lidí na fórech nad nestabilitou maliny je způsobena šmejdským zdrojem. Mám několik malin, od první verze jak jinak a vždy sem jí napájel kvalitním zdrojem, niky sem neměl žádnej problém.
A jak píše Jarda, vytápění bych tam dal, ale když máš malinu, tak přeci řízené ;)
-
* if=... ;D
-
A jak píše Jarda, vytápění bych tam dal, ale když máš malinu, tak přeci řízené ;)
S tim rizenim to nebude tak jednoduche. To mame spinac zarovek, vlhkomer a teplomer. Pricemz vlhkomer by mel merit opravdovou relativni vlhkost a ne jen za predpokladu, ze zrovna je v krabici pokojova teplota +/- 5°C, ale v plnem rozsahu teplot, ktere se mohou vyskytnout. A to by mohl byt problem.
-
* if=... ;D
asi si chtel naznacit ze jsi se preklep a misto off= se ma pouzit of= znamenajici "output file" a ne "vypnout" ;)
https://www.youtube.com/watch?v=I_4cAhW46dM (https://www.youtube.com/watch?v=I_4cAhW46dM)
co se tam mam dozvedet? vydrzel jsem 15minut abych slysel(zamerne nepisu dozvedel protoze to uz vse vedel) ze je prednaska o RPi1, s RPi2 ze nema zkusenost, obecne informace o tom proc a na co lze RPi, ze RPi neni vhodne jako prehravac videa... tak sem to vypnul a pustil si radeji na RPi pres Kodi IPTV televizi ;)
je mi jasne ze ve sve dobe, pro nekoho i dnes to muze byt zajimave, ale abych 80minut sledoval neco nevedet proc a zjistil nakonec ze nic noveho se nedozvedel a stejne ze nevim co si tim chtel rict, tak se radjei rovnou ptam ;)
-
* if=... ;D
asi si chtel naznacit ze jsi se preklep a misto off= se ma pouzit of= znamenajici "output file" a ne "vypnout" ;)
Tyjo opravím si to a ještě blbě... dík ;)
-
A jak píše Jarda, vytápění bych tam dal, ale když máš malinu, tak přeci řízené ;)
S tim rizenim to nebude tak jednoduche. To mame spinac zarovek, vlhkomer a teplomer. Pricemz vlhkomer by mel merit opravdovou relativni vlhkost a ne jen za predpokladu, ze zrovna je v krabici pokojova teplota +/- 5°C, ale v plnem rozsahu teplot, ktere se mohou vyskytnout. A to by mohl byt problem.
Hele, ajťáci, ne na všechno je třeba CPU. Na teplotní spínání funguje dost dobře i termostat :-P Ovšem 15W žárovku tam nedám, to už si rovnou můžu nechat běžet PC ;-)
RPI plánuji do takovéto podobné krabice
https://www.aliexpress.com/item/200-120-75mm-Handheld-Waterproof-ABS-Plastic-Enclosure-Waterproof-Electronic-Project-Box-Enclosure-Case/32536460995.html?spm=2114.13010308.0.0.OPVQga
s tím, že skrz krabici budou těsné (i kvůli havěti) průchodky na kabely. Krabice se dá zevnitř vyložit třeba 2cm polystyrenem, tím pádem si bude trafíčko i RPi pěkně topit :) Momentálně je třeba USB webkamera zabalená jen v černém polystyrenu a jak si žije, už leta.. :-)
Čidlo BME280 bude venku přišroubované do krytu:
https://www.aliexpress.com/item/Free-shipping-plastic-outer-shield-for-thermo-hygro-sensor-spare-part-for-weather-station-Transmitter-thermo/32581668004.html?spm=2114.13010308.0.0.OPVQga
na spodek krytu plánuju 5cm větráček s kuličkovým ložiskem, protože se stává, že čidla se při práci vnitřně zahřívají a zkreslují výsledek. (Druhý extrém je větráček se "sleeve" "ložiskem", které ve vodorovné poloze dostává slušný kopr a zahřívá se též a tím zahřívá i čidlo. Takže doporučuji Maglev nebo Ballbearing.)
Momentálně přišla 16GB flaška od CZ Nic za ověření domény, takže ta bude asi ta první, kterou budu trápit. A možná časem koupím tu 16GB SLC za 7 kil, časem snad i méně. (Kdysi jsem koupil dvě SD karty Sandisk 1GB po 1500Kč, protože to byla fakt hustá cena.. :-))
-
tak jsem nakonec objednal tu SLC flashku. A že zdražili tu normál, tak jsem objednal Ultra, za 700 :-)
-
Tak přes měsíc jsem na to nešáhnul a teď jsem to dorazil během 2 dnů. Program je hotový, nakonec jsem mu udělal nekonečnou smyčku, ve které jede a po minutě měří a posílá data. Běží mi to tu druhý den a vše ok.
Potřebuji se dozeptat na 2 věci:
1) udělal jsem to variantou té nekonečné smyčky, ne cronem. Potřebuji to teď spustit po startu. Můžu poprosit návod pro dummie?
2) například přes Putty se můžu na RPi přihlásit třeba 10x a pokaždé uvidím jinou-další konzoli-obrazovku. Program nyní při běhu melduje na obrazovku, co zrovna dělá. Je možnost to zjistit-přepnout se na tuhle obrazovku, když se připojím na RPi vzdáleně, tj. ne přes HDMI kabel? A když bude program spuštěn po startu RPi, uvidím to aspoň na to hdmi monitorku?
děkuji.
-
Problem c. 2) celkem dobre resi tmux nebo screen.
-
Startup scripty se na Raspberry Pi davaji do /etc/rc.local dolu pred "exit 0".
Jak uz bylo receno, pouzij tmux nebo screen, v nich pobezi tvuj program a pak se na to muzes kdykoliv pripojit.
Ja pouzivam tmux, do rc.local pred exit 0 bych dal
tmux new -d -s meteostanice '/cesta/k/programu'
To vytvori novou tmux session (pojmenovanou meteostanice, neni treba jestli tmux pouzijes jenom na tohle), spusti v ni tvuj program a odpoji se. Ty se tam pak pripojis pomoci
sudo tmux attach -t meteostanice
Takle se to spousti pod rootem, jestli nepotrebujes roota tak tmux v rc.local spust napr. pomoci sudo -u ... jako jiny uzivatel. Se screenem to bude podobny, ale nevim jak presne, nepouzivam ho.
-
2) ...Program nyní při běhu melduje na obrazovku, co zrovna dělá....
Co takle si udelat meldovani do logu nekde na ramdisku a pak si na to pustit tail?
-
Startup scripty se na Raspberry Pi davaji do /etc/rc.local dolu pred "exit 0".
Jak uz bylo receno, pouzij tmux nebo screen, v nich pobezi tvuj program a pak se na to muzes kdykoliv pripojit.
Ja pouzivam tmux, do rc.local pred exit 0 bych dal
tmux new -d -s meteostanice '/cesta/k/programu'
To vytvori novou tmux session (pojmenovanou meteostanice, neni treba jestli tmux pouzijes jenom na tohle), spusti v ni tvuj program a odpoji se. Ty se tam pak pripojis pomoci
sudo tmux attach -t meteostanice
Takle se to spousti pod rootem, jestli nepotrebujes roota tak tmux v rc.local spust napr. pomoci sudo -u ... jako jiny uzivatel. Se screenem to bude podobny, ale nevim jak presne, nepouzivam ho.
Děkuji, šlape to, zatím jen z příkazového řádku, po startu to dám později. Spouštím přes:
tmux new -d -s meteostanice -c '/home/pi/Meteo' 'python weatherbh.py'
aby mi to startovalo v mém adresáři Meteo.
Chtěl bych se zeptat k tomu ještě na 1 věc:
1) jak vyskočím z TMUXu zase do příkazové řádky, aniž bych ukončil běžící pythoní program?
A našel jsem si tmux list-sessions
(to měla být druhá otázka-se sudo na začátku to nefunguje), to vypíše, jaké sessions jsou spuštěné. Může se hodit.
-
edit, už to vím:
CTRL-b d
-
doporucuju vyzkouset Byobu, jde o pohodlnejsi/funkcnejsi nadstavbu Tmux nebo Screen: https://cs.wikipedia.org/wiki/Byobu
-
ad byobu: napoveda F9, opusteni bez ukonceni F6...
-
Díky. Já bych ještě potřeboval poradit s tím tmuxem-jsem zjistil, že vydrží běžet různě dlouho a pak se session ukončí, nevím proč. Předtím program běžel ve smyčce 2-3 dny a žádný problém, teď to vydrží různě dlouho, hodinu, 10 minut, tak nevím.
to "ctrl-b d" je dobře?
-
Tu meteostanici jsem tehdy nedorazil do úspěšného finále. Zlobilo mi čidlo BME280, tak jsem to odložil.
Teď se to snažím rozchodit znova, čerstvá instalace Raspbian Buster. Kameru jsem vyměnil, místo Hikvision jsem dal starlight Dahua. A s touhle výměnou jsem se zasekal na celý den a už to vzdávám, prostě nevím, jak na to.
- Mám nainstalovaný Pillow, vč. knihoven na JPEG, PNG a TT fonty.
- Změnil jsem URL obrázku z kamery Hikvision na kameru Dahua.
- Program spadne na tom, že "IO Error: cannot identify image file <_io.BytesIO object at 0x75c37f30>"
- Že kamera dodává snímek jsem ověřil z RPI přes wget url - stáhne se soubor snapshot.cgi, což je JPEG obrázek
- Že problém není s formátem snímku jsem si ověřil tím, že jsem ho nahrál na svůj server a místo z kamery jsem ho načetl ze serveru. Normálně programem prošel.
- Tedy jsem vydedukoval, že problém bude s příponou .cgi. Ale prostě jsem nevygooglil, jak donutit program, aby to považoval za JPEG.
Kód:
response=requests.get("http://uzivatel:heslo@10.0.0.75/cgi-bin/snapshot.cgi", timeout=(7, 7))
img=Image.open(io.BytesIO(response.content))
...
na tom druhém řádku to spadne. Poradíte mi prosím?
-
Máš na té malině potřebné knihovny pro obrázkové formáty? https://pillow.readthedocs.io/en/latest/installation.html
Než přes wget bych zkusil uložit ten response.content do souboru (abys měl jistotu, že to je přesně stejné) a ten teprve analyzovat třeba přes mediainfo.
-
Kód:
response=requests.get("http://uzivatel:heslo@10.0.0.75/cgi-bin/snapshot.cgi", timeout=(7, 7))
img=Image.open(io.BytesIO(response.content))
...
na tom druhém řádku to spadne. Poradíte mi prosím?
Zapiš response.content do souboru (f = open("/tmp/aaa.jpg", "wb"); f.write(response.content); f.close()) a podívej se, jestli to je validní JPEG. Následně ho zkus z toho souboru, nikoli přímo z té URL, udělat Image.open.
Můžeš mít blbě autentizaci, Accept hlavičku, nebo z nějakého jiného důvodu dostáváš přes pythoní requests jiný výsledek než wgetem.
-
Mimochodem náhodou zrovna teď tohle řeším, a na mé Dahue mi tahle adresa vrací HTTP 500. Musel jsi někde něco speciálně nastavovat, aby to ten snapshot udělalo? Video mi funguje, ale já dělám časosběrné záběry a tak by mi stačil jednou za 20 sekund obrázek. (alternativa je pustit si FTP server a nechat to nahrávat tam)
-
v Dahue musí být v System-Safety-System service povoleno CGI-Service
zkoušel bych to pod adminem, ale když si založíš uživatele, tak musí mít povoleno: File Backup, Storage, User, Live.
Jinak na Dahuu je víc možností, jak se na ni dobouchat, podle typu. Vydá to na několik stránek. Myslím ale, že v návodu k typu to je.
Mě fungují 2 metody, u první na mě vyskočí okýnko s přihlášením, kdy i když to mám v URL, tak to stejně chce přihlásit a při tom, co jsem popsal výše, to zobrazí rovnou obrázek (tedy podle browseru, FF si řekne o potvrzení, Opera o celý login a Vivaldi ho rovnou zobrazí. IE samozřejmě netrefí na adresu a hodí chybu..).
Ten save přímo z response zkusím.
A pro redustin: jo, knihovny mám (bojoval jsem s tím dlouho, ale mám), to by jinak nezobrazilo pojmenovaný jpeg.
-
Zapiš response.content do souboru (f = open("/tmp/aaa.jpg", "wb"); f.write(response.content); f.close()) a podívej se, jestli to je validní JPEG. Následně ho zkus z toho souboru, nikoli přímo z té URL, udělat Image.open.
Můžeš mít blbě autentizaci, Accept hlavičku, nebo z nějakého jiného důvodu dostáváš přes pythoní requests jiný výsledek než wgetem.
No, tak ten soubor je prázdný - nula bajtů. :-O
EDIT: tak já už vidím tu strašlivou zradu. Wget se tam prostě probije, i přes stížnost kamery 401 Unauthorized. Python samozřejmě ne.. :-/
pi@raspberrypi:~ $ wget http://uzivatel:heslo@10.0.0.75/cgi-bin/snapshot.cgi
--2021-03-28 21:14:22-- http://meteo:*password*@10.0.0.75/cgi-bin/snapshot.cgi
Connecting to 10.0.0.75:80... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Syntax error in Set-Cookie: secure; HttpOnly at position 7.
Authentication selected: Digest realm="Login to 6bnějakýstrašlivýkóde8", qop="auth", nonce="21224249", opaque="71dalšítajnéhesloproakcie3"
Connecting to 10.0.0.75:80... connected.
HTTP request sent, awaiting response... 200 OK
Syntax error in Set-Cookie: secure; HttpOnly at position 7.
Length: 215628 (211K) [image/jpeg]
Saving to: ‘snapshot.cgi’
snapshot.cgi 100%[===================>] 210.57K --.-KB/s in 0.02s
2021-03-28 21:14:23 (10.4 MB/s) - ‘snapshot.cgi’ saved [215628/215628]
-
Tak už to šlape, ufff. Celý den jsem nad tím strávil. Nápověda je zde:
https://docs.python-requests.org/en/master/user/authentication/ (https://docs.python-requests.org/en/master/user/authentication/)
tedy nejdřív:
from requests.auth import HTTPDigestAuth
A můj request vypadá nyní takto:
response=requests.get("http://uzivatel:heslo@10.0.0.75/cgi-bin/snapshot.cgi", auth=HTTPDigestAuth('uzivatel', 'heslo'), timeout=(7, 7))
s tím, že v URL by to uživatelské jméno a heslo nejspíš být nemuselo.
JENDO, MOC DÍKY ZA POMOC!