V čem naprogramovat meteostanici na Raspberry Pi2?

JardaP .

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


Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #121 kdy: 05. 11. 2016, 23:53:28 »
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))

tak momentálně to mám takhle:
Kód: [Vybrat]

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.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #122 kdy: 06. 11. 2016, 00:16:34 »
.... 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.

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #123 kdy: 06. 11. 2016, 09:42:01 »
Nechám to takhle, jak to je (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.

Ondrej

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #124 kdy: 06. 11. 2016, 21:17:43 »
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))

tak momentálně to mám takhle:
Kód: [Vybrat]

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é.


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

Ondrej

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #126 kdy: 07. 11. 2016, 21:33:37 »
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ří.

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #127 kdy: 08. 11. 2016, 21:53:57 »
áha, ok.

No já mám kameru 4:3 - 1280x960 a resizuju na 800x600, takže u mě je to buřt. ;-)

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

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #129 kdy: 13. 11. 2016, 10:18:43 »
Co si o tom myslíte?

Toz ja si myslim, ze USB flash nema wear levelling. Na rozdil od SSD.

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

nobody(ten pravej)

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

Ondrej

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

JardaP .

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

Re:V čem naprogramovat meteostanici na Raspberry Pi2?
« Odpověď #134 kdy: 13. 11. 2016, 23:00:08 »
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.