openfvelog:start
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
openfvelog:start [2011/11/03 00:32] – [Odeslání dat na server] mypower_cz | openfvelog:start [2013/09/22 16:20] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
====== OpenFVELog ====== | ====== OpenFVELog ====== | ||
- | OpenFVELog je jednoduchý protokol využívající HTTP pro přenos měřených dat z FVE ve formátu XML. XML data jsou serializována pomocí PHP funkce serialize, komprimována pomocí gzcompress, výsledná binární data jsou kódována pomocí base64_encode a odeslána metodou POST na server jako formulářové pole HTML formuláře s názvem " | + | Pokud chcete zasílat data z vaší FVE na server [[http:// |
+ | |||
+ | ===== Hotové aplikace ===== | ||
+ | |||
+ | Hotové aplikace umožňující přenos dat na MyPower.CZ | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ===== OpenFVELog/GET ===== | ||
+ | |||
+ | OpenFVELog/ | ||
+ | |||
+ | Příklad HTTP dotazu na server: | ||
+ | |||
+ | http:// | ||
+ | |||
+ | * **unix** - unixtimestamp - čas měření | ||
+ | * **u_in**, **i_in**, **u_bat**, **u_tgt**, **p_bat**, **e_dly** - měřené veličiny FVE systému - mohou být odlišné pro různé FVE. | ||
+ | |||
+ | Jiný příklad HTTP dotazu na server: | ||
+ | |||
+ | http:// | ||
+ | |||
+ | 26.11.2012 byl [[http:// | ||
+ | |||
+ | * **fveid** - identifikace FVE tam kde to není možno detekovat podle statické IP adresy, nebo je IP adresa společná pro více měření | ||
+ | |||
+ | Příklad HTTP dotazu na server s parametrerm fveid: | ||
+ | |||
+ | http:// | ||
+ | |||
+ | ===== OpenFVELog/ | ||
+ | |||
+ | OpenFVELog/ | ||
$data=base64_encode(gzcompress(serialize($xmldata))) | $data=base64_encode(gzcompress(serialize($xmldata))) | ||
Řádek 7: | Řádek 42: | ||
Ze serveru se vrátí krátká zpráva obsahující výsledek HTTP dotazu. Na tomto jednoduchém komunikačním protokolu je realizováno například měření [[http:// | Ze serveru se vrátí krátká zpráva obsahující výsledek HTTP dotazu. Na tomto jednoduchém komunikačním protokolu je realizováno například měření [[http:// | ||
- | ===== Odeslání dat na server | + | ==== Odeslání dat na server ==== |
* URL: **http:// | * URL: **http:// | ||
Řádek 14: | Řádek 49: | ||
* Form variable name: **src** - dohodnutý název FVE | * Form variable name: **src** - dohodnutý název FVE | ||
- | Pokud chcete zasílat data z vaší FVE na server MyPower.CZ, ozvěte se prosím na fóru, dohodneme detaily, měřené veličiny, zabezpečení přenosu dat, atd. | + | ==== Příklad zasílaných dat ($xmldata) ==== |
- | + | ||
- | ===== Příklad zasílaných dat ($xmldata) | + | |
< | < | ||
Řádek 68: | Řádek 101: | ||
* 904 Unknown data - data se nepodařilo dekodovat | * 904 Unknown data - data se nepodařilo dekodovat | ||
* 905 XML parse error - chyba pri parsovani XML - problem s formatem XML dat | * 905 XML parse error - chyba pri parsovani XML - problem s formatem XML dat | ||
- | * 906 Cannot | + | * 906 Cannot |
* 907 Values not found - nenalezeno pole " | * 907 Values not found - nenalezeno pole " | ||
* 908 Cannot get time from XML - round($xmldata[" | * 908 Cannot get time from XML - round($xmldata[" | ||
* 909 SQL error - Chyba při zápisu do databáze | * 909 SQL error - Chyba při zápisu do databáze | ||
* 910 FVE name not known - neznámý název FVE (u systémů které posílají i název FVE) | * 910 FVE name not known - neznámý název FVE (u systémů které posílají i název FVE) | ||
+ | |||
+ | ===== Buffering ===== | ||
+ | |||
+ | S ohledem na možné výpadky sítě, či problémy ať už na straně serveru či na straně klienta (měřené FVE) je doporučováno měření rozdělit na dvě různé funkce. První funkcí je samotné měření, tedy odečítání dat z čidel FVE. Data je doporučeno ukládat do datového úložiště, | ||
+ | |||
+ | Příklad scriptu zajišťujícího odečítání dat: | ||
+ | < | ||
+ | # | ||
+ | <? | ||
+ | |||
+ | function GetValuesFromFVE() { | ||
+ | $data=array(); | ||
+ | // ... kód pro načtení dat z čidel FVE do asociativního pole uloženého do proměnné $data ... | ||
+ | $data[" | ||
+ | return ($data); | ||
+ | } | ||
+ | |||
+ | $data=GetValuesFromFVE(); | ||
+ | file_put_contents("/ | ||
+ | |||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Výše uvedený script je spouštěn jako naplánovaná úloha (například pomocí programu cron), u FVE Napajedla konkrétně jednou za 2 minuty. Tímto způsobem máme zajištěno vytváření úložiště s měřenými daty. | ||
+ | |||
+ | Dalším scriptem je script, který nezávisle na prvním scriptu zajistí přesun jednotlivých měření na server a jejich smazání po úspěšném přenosu, aby se data nepřenášela vícekrát. Smazání souboru je provedeno pouze pokud server po zaslání dat vráti návratovou hodnotu OK. Pokud nikoliv, script se ukončí a příští spuštění zajistí nový pokus o odeslání posledního vzorku měření, který zaručeně na serveru ještě není uložen. | ||
+ | |||
+ | < | ||
+ | # | ||
+ | <? | ||
+ | |||
+ | clearstatcache(); | ||
+ | $files=glob("/ | ||
+ | sort($files); | ||
+ | reset($files); | ||
+ | while ($cc=each($files)) | ||
+ | { | ||
+ | clearstatcache(); | ||
+ | $filename=$cc[" | ||
+ | if (!is_file($filename)) | ||
+ | die(" | ||
+ | $content=file_get_contents($filename); | ||
+ | $result=trim(file_get_contents(" | ||
+ | if ($result==" | ||
+ | unlink($filename); | ||
+ | else | ||
+ | die(" | ||
+ | } | ||
+ | | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Script pro transfer dat je spouštěn rovněž jako plánovaná úloha. Není nutno ho spouštět ve stejném intervalu jako měření, je možno použít i delší interval. Například transfer 1x za 10 minut a měření 1x za 2 minuty. Doporučený postup však je spouštět měření i transfer ve stejných časových intervalech. | ||
+ | |||
+ | Vhodnou technikou je také zamykání a expirace zámku pro zamezení vícenásobného spuštění transferu, což by mohlo způsobit kolize. Ve výše uvedeném scriptu je použita jednoduchá detekce. V případě, že script pro transfer poběží vícekrát, pak nejspíše dojde k tomu, že jednomu z nich přestanou existovat dříve nalezené soubory s daty měření, které se povedlo odeslat jinému běžícímu scriptu a tyto po smazání přestanou existovat. Script se při této situaci ukončí a dále už nepokračuje. Tato technika není stoprocentní, | ||
+ | |||
+ | Výše uvedené postupy je nutno chápat pouze jako ukázku principů, nikoliv jako hotové řešení. Lze však z těchto scriptů vyjít při tvorbě řešení pro měření a přenos, které bude odolné proti výpadkům sítě, nebo serveru v případě, že server z nějakého důvodu data nemůže příjmout. | ||
===== Changelog ===== | ===== Changelog ===== | ||
- | v.0.1 - vytvoreno a vyuzito pro prenos dat z [[http:// | + | v.0.1 - vytvoreno a vyuzito pro prenos dat z [[http:// |
+ | v.0.2 - 3.11.2011 - pridan parametr src a protokol rozdelen na /GET a /XML variantu. |
openfvelog/start.1320276774.txt.gz · Poslední úprava: 2011/11/03 05:32 (upraveno mimo DokuWiki)