Portál AbcLinuxu, 20. listopadu 2025 20:28
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.