openfvelog:start
no way to compare when less than two revisions
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Předchozí verzeNásledující verze | |||
— | openfvelog:start [2013/09/21 22:37] – [Hotové aplikace] mypower_cz | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== OpenFVELog ====== | ||
+ | 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/ | ||
+ | |||
+ | 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))) | ||
+ | |||
+ | 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 ==== | ||
+ | |||
+ | * URL: **http:// | ||
+ | * Method: **POST** | ||
+ | * Form variable name: **data** - data z měření | ||
+ | * Form variable name: **src** - dohodnutý název FVE | ||
+ | |||
+ | ==== Příklad zasílaných dat ($xmldata) ==== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Data zasílaná mezi tagy < | ||
+ | |||
+ | Jiný příklad: | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Návratové hodnoty ===== | ||
+ | |||
+ | * OK - ok | ||
+ | * 901 Bad server - patrně odesláno jinam než na log.mypower.cz, | ||
+ | * 902 Bad IP - neregistrovaná IP - data byly zaslány z jiné než povolené IP | ||
+ | * 903 Data form field not found - nenalezena proměnná v POST datech s názvem " | ||
+ | * 904 Unknown data - data se nepodařilo dekodovat | ||
+ | * 905 XML parse error - chyba pri parsovani XML - problem s formatem XML dat | ||
+ | * 906 Cannot detect FVE name/type. IP AAA.BBB.CCC.DDD - nelze detekovat nazev FVE nebo jeji typ | ||
+ | * 907 Values not found - nenalezeno pole " | ||
+ | * 908 Cannot get time from XML - round($xmldata[" | ||
+ | * 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) | ||
+ | |||
+ | ===== 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 ===== | ||
+ | |||
+ | 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.txt · Poslední úprava: 2013/09/22 16:20 autor: 127.0.0.1