====== PHP MicroLog ======
===== Popis =====
**PHP MicroLog** je příkaz do příkazové řádky a také knihovna určená pro začlenění do dalších projektů.
{{:schema.png?350 |}} Projekt je vyvíjen ve scriptovacím jazyce PHP jako software k volnému užití s otevřeným zdrojovým kódem.
Je určen pro dlouhodobé odesílání dat z měření fotovoltaických elektráren a jiných podobných zařízení prostřednictvím speciálního protokolu, který standardně užívá projekt [[start|MyPower MicroLog]].
Projekt je tedy plně kompatibilní se současným měřením, kde je možné se online [[http://mypower.cz/ulogadmin-register|registrovat]], získat FVEID a logovat data na server MyPower.CZ s možností jejich následné vizualizace a realizace dalších výpočtů, dostupných na serveru.
Data z měření je díky tomu možno odesílat z libovolného zařízení s podporou jazyka PHP, například Raspbian pro Raspberry PI, atd. Projekt MicroLog tak získává nezávislost na platformě Arduino s níž však zachovává plnou zpětnou kompatibilitu.
===== Syntax =====
$ php microlog.php [-data AX:valueX[,AY:valueY[,AZ:valueZ[...]]]]
===== Download =====
{{::php-microlog-2-04-01.tgz|}}
===== Instalace =====
Pro instalaci postačí rozbalit stažený archiv.
$ tar xzf php-microlog-2-04-01.tgz
Archiv obsahuje následující strukturu souborů:
.
└── php-microlog
├── index.php
├── lib-mpw-microlog.php
└── microlog.php
PHP MicroLog se po rozbalení nachází v adresáři //./php-microlog//
$ cd php-microlog
===== Nastavení =====
==== FVEID ====
Po instalaci je potřeba nakonfigurovat vaše FVEID, které bylo získáno registrací nového měření. V ukázkovém scriptu //microlog.php// je FVEID definováno v proměnné **$fveid**.
$fveid="mojefve123456";
Řetězec //mojefve123456// nahraďte vašim FVEID.
==== Konfigurace pinů ====
Nastavení pinů je definováno jako asociativní PHP pole v ukázkovém scriptu //microlog.php//. Klíč jednotlivých položek pole je název pinu ve tvaru známém z Arduina, tedy A0 - A15.
**Příklad definice pinu A0 a A6:**
$pinconfig=array(
"A0" => array (
"name" => "Panely FV1",
"unit" => "V",
"min" => 0,
"max" => 150,
"opt" => ["enabled","smp","group0"],
),
// ...
"A6" => array (
"name" => "Proud AC L1",
"unit" => "A",
"min" => 0,
"max" => 32,
"opt" => ["enabled","rms","group2"],
),
);
{{ ::schema3.png?400|}}**Parametry pinu**
* **name** - Název pinu
* **unit** - Jednotka měřených hodnot na tomto pinu
* **min** - Minimální hodnota
* **max** - Maximální hodnota
* **opt** - Nastavení pinu
Pole **min** a **max** jsou typu //float//, je tedy možno použít desetinnou tečku.
Nastavení pinu v poli **opt** se skládá z pole 3 položek typu //string//.
První položka specifikuje stav pinu a může nabývat hodnot **enabled** nebo **disabled**. Jedná se o signalizaci pro server, zdali je pin aktivní nebo neaktivní. Bez ohledu na toto nastavení jsou data daného pinu odesílána.
Druhá určuje typ hodnoty pinu. Význam hodnot je následující:
* **smp** - Vzorek z měření
* **avg** - Průměrná hodnota
* **rms** - Efektivní hodnota
* **min** - Minimální hodnota
* **max** - Maximální hodnota
* **res1** - Rezerva pro speciální účely
* **res2** - Rezerva pro speciální účely
* **def** - Výchozí hodnota
Typ pinu je možno využít v případě, že v rámci jednoho měření pořizujeme více vzorků, tedy stejně jako [[mod:sampler|sampler]] projektu MyPower MicroLog. Z těchto vzorků jsme schopni spočítat průměrnou hodnotu, efektivní hodnotu, minimální a maximální hodnotu v daném měření a nebo použít jednotlivý vzorek. Poslední varianta může vzhledem k rušení vést k nepřesným výsledkům. U střídavých průběhů (například střídavý proud) je možno použít typ pinu **rms** a zasíláme vypočtenou efektivní hodnotu. Zároveň tím serveru dáváme najevo, že posíláme efektivní hodnotu.
Třetí hodnota určuje skupinu, do které měřený PIN patří. Je možno použít jednu ze čtyř skupin, **group0**, **group1**, **group2**, **group3**. Nastavení není povinné a je určeno pro informativní účely, pokud na toto nastavení není například navázána nějaká speciální funkce na straně serveru.
===== Použití =====
Script lze použít jako příkaz příkazové řádky. V takovém případě lze data předávat v parametru //-data//.
==== Logování hodnot z příkazové řádky ====
$ php microlog.php -data A0:25.68,A6:231,A15:2.7
==== Integrace do vlastního projektu ====
Knihovnu PHP MicroLog, konkrétně //lib-mpw-microlog.php// je možné pomocí příkazu //include// vložit do vašeho projektu, je-li také psán v PHP. Pro odeslání dat je určena funkce
Microlog_SendDataToMyPower($fveid,$pinconfig,$data)
Parametry funkce jsou:
* **$fveid** (string) - obsahuje přidělené FVEID
* **$pinconfig** (array) - obsahuje datovou strukturu konfigurace pinů, která je popsána výše v [[#konfigurace-pinu|nastavení]].
* **$data** (array) - obsahuje datovou strukturu s naměřenými hodnotami jednotlivých pinů
Pro odesílání dat slouží datová struktura typu asociativní pole, kdy klíčem je číslo pinu (A0-A15) a hodnotou je buď přímá hodnota, nebo asociativní pole se všemi typy hodnot.
Příklad definice datové struktury pro pin A0 a A6:
$data=array(
"A0" => 25.722322566,
"A6" => array(
"smp" => 2.2116,
"rms" => 6.52,
"avg" => 5.321,
"min" => 0,
"max" => 7.1235,
),
);
Z podstaty jazyka PHP jsou pochopitelně možné i následující zápisy:
"A11" => (0b1011001110),
"A11" => 0x3ff,
"A11" => 1023,
{{ :schema2.png?400 |}}
Pokud se odeslání dat podaří, funkce vrací pole hodnot jako výsledek odesílání dat.
Je-li definován index pole s názvem //"message"//, pak toto obsahuje zprávu ze serveru, například o použití neplatného FVEID atd. Pokud je index s názvem //"finalresult"// roven hodnotě //"OK"//, pak odeslání proběhlo v pořádku. Ukázkové použití je ve scriptu //microlog.php//.
Funkce je vybavena **ukládáním dat do bufferu v případě výpadku internetového spojení**, nebo selhání odeslání dat na server. Je tedy schopna výpadky spojení překlenout. Záznamy dat z měření, které nebyly odeslány při předchozím pokusu o odeslání budou odeslány prioritně dle času, ke kterému byl daný vzorek pořízen.
===== Konfigurační proměnné =====
V kódu knihovny //lib-mpw-microlog.php// jsou v úvodu 3 konfigurační proměnné.
$_microlog_storage_dir = "/tmp/microlog";
$_microlog_true_values = "yes"; // yes / no
$_microlog_failover_buffer = "yes"; // yes / no
Proměnná **$_microlog_storage_dir** určuje adresář, který je potřebný pro ukládání nezbytných persistentních dat. Zejména je zde ukládán hash konfigurace pinů. Pokud je konfigurace změněna, je proveden přístup na server v režimu //login// a je přenesena i konfigurace pinů. Adresář slouží zároveň jako úložiště pro ukládání dat při nemožnosti se spojit se serverem log.mypower.cz (failover buffer).
Proměnná **$_microlog_true_values** může mít hodnotu //"yes"// nebo //"no"//. V případě zapnuté volby (//"yes"//) je využito rozšíření protokolu MicroLog pro přenos dat a jsou zasílány pravé hodnoty a nikoliv původní 10 bitový rozsah, který je dán omezením analogových pinů Arduina. Je-li volba vypnuta (//"no"//), je použit rozsah 0-1023 a naměřená hodnota je přepočítána dle nastavení daného pinu a jeho maxima a minima, kdy minimum reprezentuje hodnotu 0 a maximum hodnotu 1023.
Proměnná **$_microlog_failover_buffer** má opět možné hodnoty //"yes"// nebo //"no"//. Je-li volba zapnuta, je použit buffer v případě výpadku spojení nebo selhání odesílání dat. Pokud je volba vypnuta, v případě selhání jsou naměřená data zahozena.
===== Diskuze o projektu =====
Téma k tomuto projektu na fóru MyPower.CZ naleznete na adrese http://forum.mypower.cz/viewtopic.php?f=95&t=5199