Skip Navigation Links
AKCEExpand AKCE
POČASÍExpand POČASÍ
ASTRO
FOTO
PDA
PROGRAMOVÁNÍExpand PROGRAMOVÁNÍ

Teplotu měřím od  28.3.2004 od 14 hodin. Používal jsem tzv. černou skříňku od Commet systém. Tato sice má seriové spojení s PC, ale pouze na hromadné stahování dat, ne online.

Proto jsem si v roce 2007 pořídil USB teploměr od firmy Papouch. K teploměru je sice dodáván program, který umožňuje posílání dat na internet ve stanovený interval, ale odpočítávání se spustí v okamžiku strartu programu (čas byl například 12:40,další 12:55 atd). Proto jsem si napsal vlastní program, který data odešle po celých čtvrthodinách. Data jsou zobrazována tedy co 15 minut (např. 12:00,12:15 atd) Na webu se pak data ukládají do databáze Access, která následně umožňuje různé zobrazení dat..

1.4.2007 jsem zprovoznil meteorologickou stanici WS 3600. Stanice umí měřit :
- teplota
- tlak
- relativní vlhkost
- rosný bod
- absolutní tlak
- relativní tlak
- dešťové srážky
- směr a rychlost větru

Ke stanici jsou přiloženy dva programy:

- HeavyWeather - ten komunikuje se stanicí a ukládá data do své databáze a poslední hodnotu ještě do souboru currdat.lst

- HeawyWeatherPublisher - tento čte data ze souboru currdat.lst. Data lze uspořádat do obrázku a program pak obrázek odešle na server pomocí FTP. Nevýhodou je, že FTP umí pouze aktivní režim. Lze to řešit spuštěním FTP serveru na vlastním PC a od tama je posílat nějakým lepším FTP (JaSFTP) na internetový server.

Já jsem to řešil tak, že jsem si udělal vlastní program, který odesílá data na server pomocí http. To znamená něco jako :
www.komutatory.cz?teplota=32&tlak=1050 ....... Na serveru je přečtu a uložím do databáze. Pak tvořím grafy.

Jde číst i přímo data ze databáze HeawyWeather. Popis jsem získal od Filipa z z www.meteorologie.unas.cz. Tímto mu děkuji :-)
.
Příklad z VB.
Formát je takto:

délka věty je 56, čtou se sekvenčně následující údaje:

Open strHistoryDat For Binary As #1

Get #1, , dblDate 'date and time
Get #1, , sAbsPress 'abs presure
Get #1, , sRelPress 'rel presure
Get #1, , sWindSpeed 'wind speed
Get #1, , lWindDir 'wind direction (0 = N, 1 = NNE, or multiply 22,5 to value in degrees
Get #1, , sWindGust 'wind gust
Get #1, , sTotRain 'total rainfall
Get #1, , sNewRain 'new rainfall
Get #1, , sIndoorTemp 'indoor temp
Get #1, , sOutdoorTemp 'outdoor temp
Get #1, , sIndoorHumidity 'indoor humidity
Get #1, , sOutdoorHumidity 'outdoor humidity
Get #1, , lDummy 'unknown (value always 0)

datum (Date) je dDate = DateSerial(1899, 12, 30) + dblDate
prefix s je Single, l Long, dbl Double


Trochu problém je z datumem. C# počítá datum jinak než VB. Já jsem to udělal :

double datum = lReader.ReadDouble(); //přečteme ze souboru
Int64 cele = Convert.ToInt64(Math.Floor(datum));
double zbytek = datum - cele;
cele = cele * 24 * 60 * 60 * 10000000; // prevedeme celou část ticks
zbytek = zbytek * 24 * 60 * 60 * 10000000; //převedeme desetinnou část na ticks
Int64 komplet = cele + Convert.ToInt64(zbytek); //kompletní ticks
TimeSpan tsKomplet = new TimeSpan(komplet);//převedeme na interval
DateTime dtOd = new DateTime(1899, 12, 30); //od tud se počítá datum
DateTime datumA = dtOd + tsKomplet; // připočteme k němu interval a máme konečně celé datum. Dokonce to i souhlasí :-)


Data lze číst i přímo ze stanic. Informace jsou na  http://open3600.fast-mail.nl/tiki-index.php :

History records are 18 bytes long:
1 - minute (BCD)
2 - hour (BCD)
3 - day of month (BCD)
4 - month (BCD)
5 - year (BCD)
6 - indoor temperature 1s and 0.1s (BCD)
7 - higher half of byte: outdoor temperature 0.1s (BCD), lower half of byte: indoor temperature 10s (BCD)
8 - outdoor temperature 10s and 1s (BCD)
9 - pressure 1s and 0.1s (BCD)
10 - pressure 100s and 10s (BCD)
11 - higher half of byte: indoor humidity 1s (BCD), lower half of byte: pressure 1000s (BCD)
12 - higher half of byte: outdoor humidity 1s (BCD), lower half of byte: indoor humidity 10s (BCD)
13 - higher half of byte: lower half of byte of rain counter (BIN), lower half of byte: outdoor humidity 10s (BCD)
14 - higher byte of rain counter(BIN)
15 - lower byte of windspeed (BIN)
16 - higher half of byte: wind direction, lower half of byte: higher byte (or half of byte) of wind speed (BIN)
17 - lower byte of gust (BIN)
18 - higher half of byte: ? (always 0), lower half of byte: higher byte (or half of byte) of gust (BIN)

For more information about BCD code read http://en.wikipedia.org/wiki/Binary-coded_decimal.

Temperatures are shifted by 40 (DEC). From value in history record should be subtracted 40.0.


Zjistil jsem, že čtení z currdat.lst není vhodné. Neukládají se nové srážky. Proto jsem začal číst přímo z databáze. 
Ale srážky se mi nějak divně zobrazují. Jsou odlišné od hodnot z databáze Weather - history.dat. Neváhal jsem a napsal Filipovi:

Prosím tě, ještě se ni nějak divně čtou srážky a to jak celkové tak i nové. Misto např 0,5 to přečtu jako 0,518 atd. Nevíš čím to může býti, Díky

Filip píše :
To je v pořádku. Jeden impuls ve srážkoměru skutečně odpovídá 0,518 mm. Asi nějaký násobek či zlomek některé anglosaské jednotky (? inch ?). Stanice to zaokrouhluje, takže zobrazuje 0,5 mm 1,0 mm ale 1,6 mm místo 1,5 mm (3 x 1,5)

Zase jsem chytřejší. Svoji úpravu na zaokrouhlování srážek vezmu nazpět :-)












BrůBikers tým (c) by ČPBBT