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 :-)
|