V čem naprogramovat meteostanici na Raspberry Pi2?

PedroKV

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #90 kdy: 25. 10. 2016, 20:53:59 »
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.


PedroKV

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #91 kdy: 25. 10. 2016, 20:59:41 »
...
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?

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #92 kdy: 25. 10. 2016, 21:10:47 »
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).

PedroKV

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #93 kdy: 25. 10. 2016, 21:20:07 »
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ě:
Kód: [Vybrat]
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.

PedroKV

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #94 kdy: 25. 10. 2016, 21:22:18 »
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


noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #95 kdy: 25. 10. 2016, 21:22:50 »
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:
Kód: [Vybrat]
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.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #96 kdy: 25. 10. 2016, 21:24:28 »
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.

PedroKV

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #97 kdy: 25. 10. 2016, 21:41:22 »
aha, no, to bych se asi zbláznil. To pak musím zakomentovat, než to poběží na ostro. Díky.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #98 kdy: 25. 10. 2016, 22:19:08 »
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.

gll

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #99 kdy: 25. 10. 2016, 22:35:10 »
...
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

Kód: [Vybrat]
flock -n nejaky_soubor prikaz

Ondrej

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #100 kdy: 25. 10. 2016, 23:14:54 »
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:

Kód: [Vybrat]
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.

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #101 kdy: 01. 11. 2016, 22:13:39 »
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. 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/

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #102 kdy: 02. 11. 2016, 09:36:59 »
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.

ehmmm

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #103 kdy: 02. 11. 2016, 09:59:13 »
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.

nobody(ten pravej)

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #104 kdy: 02. 11. 2016, 13:47:33 »
[...]Googlím jak vytvořit RAMdisk[...]

mas ho uz ve vychozi instalaci pripravenej/pripojenej v /dev/shm , tedy ne ramdisk, ale vhodnejsi 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