V čem naprogramovat meteostanici na Raspberry Pi2?

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #105 kdy: 02. 11. 2016, 17:21:30 »
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.


Ondrej

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #106 kdy: 02. 11. 2016, 18:55:53 »
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...

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #107 kdy: 02. 11. 2016, 19:57:17 »
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.
« Poslední změna: 02. 11. 2016, 20:07:07 od PedroKV »

nobody(ten pravej)

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #108 kdy: 02. 11. 2016, 21:33:22 »
[...] Co se ramdisku týče, vygooglil [...]
tohle 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...

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #109 kdy: 02. 11. 2016, 22:07:41 »
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.


Pavel Tisnovsky

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #110 kdy: 02. 11. 2016, 22:42:20 »
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).

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #111 kdy: 02. 11. 2016, 23:01:38 »
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.

nobody(ten pravej)

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #112 kdy: 02. 11. 2016, 23:58:28 »
@PedroKV melo by stacit v /etc/default/tmpfs zmenit radku (a do fstab pridavat jen pri pozadavku na jine volby)
Kód: [Vybrat]
#RAMTMP=nona
Kód: [Vybrat]
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:
Kód: [Vybrat]
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:
Kód: [Vybrat]
man tmpfs
jinak v situaci kdy bys to potreboval prikazem tak nejak takto:
Kód: [Vybrat]
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...

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #113 kdy: 04. 11. 2016, 20:19:56 »
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/
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%.

nobody(ten pravej)

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #114 kdy: 05. 11. 2016, 00:27:19 »
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...

ehmmm

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #115 kdy: 05. 11. 2016, 08:55:38 »
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.

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #116 kdy: 05. 11. 2016, 09:26:29 »

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:
Kód: [Vybrat]
tmpfs     /tmp tmpfs     nodev,nosuid,size=20%,mode=1777    0    0

tak mě to nejde, nabootuju do root@raspberrypi a journalctl -xb vypíše:
Kód: [Vybrat]
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
)

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.
« Poslední změna: 05. 11. 2016, 09:36:18 od PedroKV »

JardaP .

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

nobody(ten pravej)

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #118 kdy: 05. 11. 2016, 19:04:47 »
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

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #119 kdy: 05. 11. 2016, 20:20:39 »
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.

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:

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