Säädata-tietokanta ja muuta mukavaa

Aloittaja weatherc, tiistai, 21.10.2008, 21:53

« edellinen - seuraava »

0 Jäsenet ja 2 Vieraat katselee tätä aihetta.

weatherc

No niin, tulipa se rakennettua, MySQL-tietokanta johon tallennettu koko sääasemani historian (30.01.2006 alk.) säädatat yhden (1) minuutin välein :)
Pienellä vippaskonstilla se päivityy puolen tunnin välein uudella datalla jolloin sinne ajetaan edellisen 30 minuutin datat.

En saanut WD:n omaa MySQL-palikkaa toimimaan (veikkaan että mun adsl-boxin palomuuri on liian kranttu) joten käytin WD:n custom-lokia (loki jonka sisällön ja pituuden voit päättää itse) jonka ajan serverille ja php-skriptillä ajan tiedot sitten tietokantaan.

Tulos on aika muikea:
Tällä hetkellä on 1340000 riviä dataa (119.4 MB)  ;D ;D

On myös päivittäinen tietokanta jonne tallentuu pikkasen puolenyön jälkeen yksi rivi joka päivä sisältäen mm. keskiarvot ja max/min-lukemat.

Tarkoituksena olis tehdä käppyrät jotka päivittyvät suoraan tietokannasta ja siten päästä eroon mm erillisestä käyräohjelmasta joka puksee mun 24h-käyriä tällä hetkellä. Myös helposti selailtava ariksto olis mahdollista tehdä sieltä, kattoo nyt.
Oikeastaan tietokanta-idea lähti siitä kun tuossa pari päivää sitten uudistin muutamaa sensoria niin olis kiva saada tiedot talteen ja myös mahdollista tehdä vaikkapa vuokausikäppyrä siitä.

Sensoreita jota uudistin on maa-sensorit. Nytten mulla lämpötila-sesnsorit seuraavasti:
+ 2 metrissä - päälämpötila
+ 10 cm - maapinta
- 25 cm
- 50 cm

Intressanttia nähdä tuleeko routaa vai ei ;)



J.Jäntti

Kiinnostus samantyyppiseen ratkaisuun olisi täällä niinikään suuri, sillä toistaiseksi MySQL-kantani ei ole, kuin Foorumin ja yhden leikkimielisen, täysin sään ulkopuolisen testiprojektin käytössä.
Kehtaanko edes kysellä, suostuisitko heittelemään minulle speksejä tuon ratkaisun suhteen? (Hmm.. taisin jo kehdata. ;D)
Juha Jäntti
Foorumin ja sivuston ylläpitäjä
Finland Weather Exchange (FinWX)

http://www.finwx.net/
------------------------------------------
Ukkoskausi avattu Suomessa: --.--.2024
Ukkoskausi avattu Helsingissä: --.--.2024
-------------------------------------------
Ukkospäivälaskuri 2024; Helsinki/Viikinmäki
0 ukkospäivää.
------------------------------------------
X, FinWX:n ylläpidon ilmoitukset
------------------------------------------

weatherc

#2
Juuh, kehtaahan sitä  ;D

Näin lyhyesti:

Minuutti-tietokanta:

WD:n customloki toimii siten että se tekee tageilla generoidun rivin dataa tiedostoon joka minuutti. Kyseinen loki on pätkäisty poikki vuorokauden kohdalla (nykyisistä käppyröistä johtuen) niin että siinä on aina viimeisen 24h:n tiedot eli kun uutta pukkaa niin tippuu vanhin pois. Tämän WD lataa nettiin. Tulos on tämän tyylinen:

21,10,2008,17,54,11.1,95,10.3,996.1,1.6,2.6,150,7.3,11.1,0,0,0,11.1,8.3,8.7,10.4
21,10,2008,17,55,11.1,95,10.3,996.0,1.6,2.6,152,5.5,11.1,0,0,0,11.1,8.4,8.8,10.4
21,10,2008,17,56,11.1,95,10.3,996.0,1.5,2.1,150,3.9,11.1,0,0,0,11.1,8.5,8.7,10.4
21,10,2008,17,57,11.1,95,10.3,996.1,1.3,2.6,150,3.2,11.1,0,0,0,10.9,8.4,8.7,10.4
21,10,2008,17,58,11.1,95,10.3,996.0,1.2,3.6,149,2.8,11.1,0,0,0,10.5,8.4,8.7,10.4
21,10,2008,17,59,11.1,95,10.3,996.0,1.3,3.6,152,2.5,11.1,0,0,0,9.6,8.5,8.8,10.4

Tuossa täytyy tietty muistaa kirajata ylös että mikä arvo on mitäkin ;)
Kumminkin, sitten ajan php-skriptin puolen tunnin välein joka parsii ulos 30 viimeisintä riviä ja tekee siitä insertin sql:ää varten, yksinkertaisuudeesa se ottaa rivin kerraallaan ja tekee sen insertin ja päivittää tietokannan.

Kyseinen koodin pätkä on lyhyt ja ytmiekäs:

Lainaa$rawdata = file($filetoprocess);

$howmany = count($rawdata);

$start = ($howmany - 30);

for ($i = $start; $i < $howmany; $i++) {

$stuff = explode(',', $rawdata[$i]);

$datetime = $stuff[2] . '-' . $stuff[1] . '-' . $stuff[0] . ' ' . $stuff[3] . ':' . $stuff[4] . ':00';

$sql = "insert into wx_data values ('$datetime','$stuff[5]','$stuff[6]','$stuff[7]','$stuff[8]','$stuff[9]','$stuff[10]','$stuff[11]','$stuff[12]','$stuff[13]','$stuff[14]','$stuff[15]','$stuff[16]','$stuff[17]',
'$stuff[18]','$stuff[19]','$stuff[20]')";
echo $sql;   
mysql_query("" .$sql. "");

}
mysql_close();

Tietokannassa on aika-sarake joka asetettu unique-arvoon eli samaa arvoa ei voi olla kahdesti ja siten ei ole pelkoa että sama aika menisi kahdesti, testasin sen kun latasin noita vanhoja tietoja. Oikean muotoisen ajan rakennan tuossa $datetime-kohdassa jotta mysql osaa lukea sitä. Helppoa.

Päivittäinen tietokanta on samalla idealla tehty mutta hiukan eri tavalla. WD kun tekee custom-sivuja/tiedostoja noilla tageilla niin se voi olla myös valmis sivu johon se vaan parsii tagit joukkoon. Tämän olen tehnyt sillä, se on valmis php-sivu johon WD tuppaa haluamani arvot tuohon sql-inerttiin ja sen ajan kerran päivässä hiukka puolen yön jälkeen,

Osa viime yön tiedostosta näytti tältä kun WD oli tuupannut arvot siihen ja puskenut sen nettiin:

Lainaa$sql = "insert into wx_daily values (10.8,2.2,8.9, 10.6,11.9,9.4,89.8,998.2,164,183.30,6.3,10.6,80.2,566.0,11.3,0,78,'00:00',0.4,45,'0.0','7.3','10',2008,'2008-10-21 00:00:00',8.4,8.7)";

Tuossa on se miltä se näyttää templatena:

Lainaa$sql = "insert into wx_daily values (%last24houravtemp%,%avgspeedsincereset%,%maxgst%,%dayrn%,%maxtemp%,%mintemp%,%last24houravhum%,%last24houravbaro%,
%last24houravdir%,%windruntoday%,%minwindch%,%vpstormrain%,%monthrn%,%yearrn%,%maxrainratehr%,%snownowcm%,%lighteningcountmidnight%,'%sunshinehourstodateday%',%currentwdet%,%highsolar%,'%cddday%','%hddday%','%date-month%',%date-year%,'%date-year%-%date-month%-%date-day% 00:00:00',%dallashumtemp3%,%dallasextratemp1%)";

;D

Henkka