Uživatelské nástroje

Nástroje pro tento web


openfvelog:start

Toto je starší verze dokumentu!


OpenFVELog

Pokud chcete zasílat data z vaší FVE na server MyPower.CZ, ozvěte se prosím na diskuzním fóru, dohodneme detaily, měřené veličiny, zabezpečení přenosu dat, atd.

Hotové aplikace

Hotové aplikace umožňující přenos dat na MyPower.CZ

OpenFVELog/GET

OpenFVELog/GET je protokol využívající jednoduchý HTTP dotaz pro zaslání měřených dat z FVE.

Příklad HTTP dotazu na server:

http://log.mypower.cz/?unix=1320171659&u_in=0.04&i_in=0&u_bat=25.72&u_tgt=0&p_bat=0&e_dly=3120
  • 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://log.mypower.cz/?unix=1320192323&fv1=20.78&fv2=23.33&u16v=15.86&bat2=13.82&i1=4.3&i2=6.22&i3=2.12&i3=0.78&i4=1.35&i5=2.27

26.11.2012 byl přidán parametr fveid

  • 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://log.mypower.cz/?fveid=VASEFVE&unix=1320192323&fv1=20.78&fv2=23.33&u16v=15.86&bat2=13.82&i1=4.3&i2=6.22&i3=2.12&i3=0.78&i4=1.35&i5=2.27

OpenFVELog/XML

OpenFVELog/XML 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 „data“. V zaslaných datech se může vyskytovat i pole „src“, které obsahuje dohodnutý název FVE z důvodů odlišení jednotlivých FVE, jejichž měření přichází ze stejné IP adresy.

$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í FVE Maršov na úvodní straně webu MyPower.CZ. Data jsou na serveru archivována v MySQL databázi pro generování různých statistických výstupů a monitoringu FVE.

Odeslání dat na server

  • 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)

<!--  File Name: fve_solar.xml --> 
<data> 
<time> 
<unix>1315685222</unix> 
<formated>2011-09-10 22:07:02</formated> 
</time> 
<values> 
<u_in>0.00</u_in> 
<i_in>0.00</i_in> 
<u_bat>11.90</u_bat> 
<i_bat>-3.65</i_bat> 
<almf>14</almf> 
<bat_temp>16</bat_temp> 
<fv_temp>12.6</fv_temp> 
<solar>0.0</solar> 
<twilight_switch>1</twilight_switch> 
</values> 
</data> 

Data zasílaná mezi tagy <values> a </values> se mohou lišit podle způsobu měření dané FVE a měřených veličin.

Jiný příklad:

<!--  File Name: fve_solar.xml --> 
<data> 
<time> 
<unix>1315685222</unix> 
<formated>2011-09-10 22:07:02</formated> 
</time> 
<values> 
<fv1>0.00</fv1> 
<fv2>0.00</fv2> 
<bat1>12.663</bat1> 
<bat2>12.275</bat2> 
</values> 
</data> 
  • OK - ok
  • 901 Bad server - patrně odesláno jinam než na log.mypower.cz, například x.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 „data“
  • 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 „values“
  • 908 Cannot get time from XML - round($xmldata[„time“][„unix“]) == 0
  • 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ě, ať již se jedná o souborový systém, nebo o databázi, záleží pouze na vašich preferencích. Při měření FVE Napajedla je využíváno techniky ukládání serializovaných dat do souborů, jejichž název je unixtimestamp (čas), kvůli možnosti setřídění a přípona „.dat“.

Příklad scriptu zajišťujícího odečítání dat:

#!/usr/bin/php
<?

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["unix"]=time();
return ($data);
}

$data=GetValuesFromFVE();
file_put_contents("/path/to/datafiles/".$data["unix"].".dat",serialize($data));

?>

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.

#!/usr/bin/php
<?

clearstatcache();
$files=glob("/path/to/datafiles/*.dat");
sort($files);
reset($files);
while ($cc=each($files))
  {
  clearstatcache();
  $filename=$cc["value"];
  if (!is_file($filename))
    die("Pravděpodobně běžím vícekrát :(").
  $content=file_get_contents($filename);
  $result=trim(file_get_contents("http://log.mypower.cz?data=".base64_encode($content)));
  if ($result=="OK")
    unlink($filename);
  else
    die("Chyba");
  }
  
?>

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í, ale s vysokou pravděpodobností bude ve většině případů fungovat správně.

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 FVE Maršov
v.0.2 - 3.11.2011 - pridan parametr src a protokol rozdelen na /GET a /XML variantu.

openfvelog/start.1354009290.txt.gz · Poslední úprava: 2012/11/27 16:41 (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki