Portál AbcLinuxu, 12. května 2025 19:32
Dobrý večer, meteostanice poběží na Routeru WL500gPv2(oleg firmware) s programem open2300, Otázka zní, jakým způsobem nahrávat v intervalech data na databázový server?
Nabízí se 3 možnosti.
1. Přeposlat data pomoci skriptu z mysql2300 do oficiální databáze.
na routeru je MySQL: 4.1.22-3
Bude potřeba změnit jména tabulek a zaslat jen zvolené hodnoty.
2. Upravit funkci open2300.c jenž zasílá hodnoty do mysql2300 databáze
Možná nejideálnější, ale nutnost kompilace na routeru + obtížné na mé znalosti.
3. Vytvořit skript jenž bude hodnoty sbírat z log2300 a dále posílat do databáze (jine nazvy hodnot)
--dosavadní skript bych raději vynechal, jelikož je nutno jej spouštět přes php a využil nový s voláním mysql
Vypis z log2300:
Popis: Timestamp Date Time Temp_indoor Temp_outdoor Dewpoint Rel_humidity_indoor Rel_humidity_outdoor Wind_speed Wind_direction-degrees Wind_direction_text Wind_chill Rain_1h Rain_24h Rain_total Rel_pressure Tendency Forecast Příklad: 20051014081004 2005-Oct-14 08:10:04 27.6 10.2 7.2 35 82 0.0 90.0 E 10.2 0.00 0.00 125.35 1024.600 Falling Cloudy
Ofic databázový server:
MySQL: 5.1.49
dosavadní php script pro upload do databáze ze souboru: aktual-hodnoty
-- Struktura dosavadni mysql tabulky `hodnoty` -- CREATE TABLE IF NOT EXISTS `hodnoty` ( `cas` datetime DEFAULT NULL, `teplota` float DEFAULT NULL, `tlak` float DEFAULT NULL, `vlhkost` tinyint(4) DEFAULT NULL, `rychlost` float DEFAULT NULL, `smer` float DEFAULT NULL, KEY `cas` (`cas`), KEY `cas_2` (`cas`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Vypisuji data pro tabulku `hodnoty` -- INSERT INTO `hodnoty` (`cas`, `teplota`, `tlak`, `vlhkost`, `rychlost`, `smer`) VALUES ('2009-06-21 18:49:12', 21.2, 1004.4, 51, 0, 337.5),
Dále přibudou proměnné srážky v cyklu 1hodina a 24hodin.
S databázemi nemám v podstatě žádné zkušenosti, navíc skript není má práce, ale chci meteostanici přemístit a tak bych byl rád kdybyste mi dali nějakou radu a především jaký způsob bude nejjednodužší. Děkuji Indiánský lotr
Řešení dotazu:
Oprava: na routeru je Mysql 5.0.88-1, navíc uvedený script je pro starší řešení s open2300 ho nevyužiji.
Ano toho jsem si věděm, ovšem nejsem si jist jak udělat abych požadované hodnoty cas,teplota,tlak,vlhkost,rychlost,smer,srazky24h uložil na ofic databazovy server.
Jo díky teď už to chápu :) akorát bych potřeboval vědět jakým scriptem aktualizuji poslední zapsané hodnoty do databáze
while True: recordset = cursor.execute("SELECT * FROM weather") while not recordset.EOF: mujtimestamp = recordset("timestamp") mojeteplota = recordset("temp_out") ... ... cursor.execute("INSERT INTO mojetabulka () ....") cursor.execute("DELETE FROM weather WHERE timestamp=mujtimestamp") sleep(30) #treba ve vterinach
Po dlouhém týdnu se mi podařilo zprovoznit mysql5. Rád bych vytvořil .sql script jenž by buď přečetl log2300 a poslal hodnoty do mistni + vzdalene databaze. Nebo druhým způsobem s použitím mysql2300 a následné vytažení dat z databáze a poslání na server. Za jakékoliv nasměrování budu vděčný.
Dosavadní php script:
< php $file = FOpen("file:////tmp/open2300current.log", "r"); $aktualni_hodnoty = FRead($file, filesize("file:////tmp/open2300current.log")); FClose($file); $data = explode(" ", $aktualni_hodnoty); $datum = explode("-", $data[1]); $rok = "$datum[0]"; $mesic = "$datum[1]"; $den = "$datum[2]"; $aktualnicas = "$data[2]"; if ($mesic == 'Jan') { $mesic = "01"; } elseif ($mesic == 'Feb') { $mesic = "02"; } elseif ($mesic == 'Mar') { $mesic = "03"; } elseif ($mesic == 'Apr') { $mesic = "04"; } elseif ($mesic == 'May') { $mesic = "05"; } elseif ($mesic == 'Jun') { $mesic = "06"; } elseif ($mesic == 'Jul') { $mesic = "07"; } elseif ($mesic == 'Aug') { $mesic = "08"; } elseif ($mesic == 'Sep') { $mesic = "09"; } elseif ($mesic == 'Oct') { $mesic = "10"; } elseif ($mesic == 'Nov') { $mesic = "11"; } elseif ($mesic == 'Dec') { $mesic = "12"; } $datum = "$rok-$mesic-$den $aktualnicas"; $teplota = "$data[4]"; $tlak = $data[15]; $vlhkost = $data[7]; $rychlost = $data[8]; $smer = $data[9]; $srazky = $data[12]; // ulozi nova data $sql = ("insert into hodnoty set cas='$datum', teplota=$teplota, tlak=$tlak, vlhkost=$vlhkost, rychlost=$rychlost, smer=$smer, srazky=$srazky"); $spojeni = mysql_connect('nejakyserver.cz', 'meteo', ''); MySQL_DB_Query('meteo_hodnoty', $sql, $spojeni); mysql_Close(); $spojeni = mysql_connect('localhost', 'meteo', ''); MySQL_DB_Query('meteo_hodnoty', $sql, $spojeni); mysql_Close(); ? >
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.