Síťový Dohledový Systém - MICRO
Portál Portál Beta E-shop Měření energie Domácí dorozumívací technika Diskuzní fórum Dokumentace

SDS µ SDS-C : příklad odesílání na server PHP skript

Ukažme si na příkladu, jak to celé provést.

Úkolem je v pravidelně posílat na server aktuální údaje. V tomto případě se bude jednat o stav impulsního počítadla třetího S0 vstupu, a časové vzdálenosti mezi S0 impulsy. Obě tyto hodnoty jsou základem pro další zpracování, které probíhá v PHP skriptu už na straně serveru, který z těchto údajů snadno spočte spotřebu v kWh a aktuální výkon v kW.

Na straně serveru je potřebný jen jediný speciální PHP skript, jeho úkolem je přijímat data posíláná ze SDS MICRO a tyto data uložit na serveru. Nejsnazší a nejjednodušší je ukládání buď do MySQL databáze, nebo také do obyčejného souboru na serveru. Z obou těchto míst pak není problém pro jiné PHP skripty, které se starají o pravidelné zobrazovaní údajů, tyto aktualizované údaje přečíst. Tento zmíněný skrip je tedy velmi jednoduchý.

Jak to celé bude fungovat:

V zařízení SDS MICRO se spustí program napsaný v jazyce SDS-C. Tento program je dostupný z této stránky, a můžete si jej dále upravit dle potřeby. Tento program má jediný úkol - pravidelně kontaktovat server, tedy zmíněný PHP skript, a předat mu požadované údaje. Toto předání se provede nejsnazší formou - přes URL. To znamená, že se provádí HTTP GET, což znamená tu nejmenší dosažitelnou zátěž serveru !
Pokud by SDS MICRO provádělo např. přímý zápis do MySQL databáze, pak celá transakce bude složitá, pomalá a hlavně náročná na množství přenesených dat při každém takovém zápisu ! Kdežto když se tento zápis provede až na straně serveru (bude-li se vůbec provádět, tj. když se nepoužije zápis do souboru), tak jsou nároky na síťové prostředky a množství dat minimální.

Co se bude dít, krok za krokem:
1. V SDS MICRO trvale běží SDS-C program, server je v provozu a čeká na data
2. SDS-C program se rozhodne odeslat data na server (např. co 1 minutu)
3. SDS-C program vytvoří kompletní URL, které je posláno na server jako HTTP GET požadavek
4. Server přijme HTTP GET požadavek, předá ho konkrétnímu PHP skriptu, který zpracuje příchozí URL a uloží si data
5. Hotovo. Lze využít i zpětné odezvy, tj. PHP skript může nastavit jiný http result code než je 200 (OK). Na základě tohoto kódu pak může SDS-C program provést nějakou další akci - toto ale už je nad rámec tohoto příkladu, byť je to snadno realizovatelné doplněním programů.

HTTP GET požadavek pak vypadá takto: www.server.cz/data.php?impulsy=HODNOTA1&vykon=HODNOTA2

Takže dojde k aktivaci PHP skriptu data.php na serveru www.server.cz, přičemž PHP skriptu jsou předány následující údaje:
impulsy o obsahu HODNOTA1 (viz SDS-C program, předává se obsah sys[495])
vykon o obsahu HODNOTA2 (viz SDS-C program, předává se obsah sys[594])

Jak jistě tušíte, sys[] jsou aktuální stavové hodnoty zařízení SDS MICRO, přístupné právě pro SDS-C program. Kompletní seznam sys[] proměnných naleznete zde.

Teď tedy PHP skript má aktuální údaje, které mu výrobek SDS MICRO zaslal (předal PHP skriptu přes URL). Protože zadání bylo o něco složitější, znělo získat hodnoty kWh a kW, musíme předané údaje ještě dále v PHP skriptu zpracovat. Protože první z údajů je sys[495], což je přímá číselná hodnota počítadla S0 (počítadlo impulsů), je potřeba toto číslo v PHP skriptu vydělit tzv. impulsní konstantou pro použitý měřič energie (např. hodnotou 1000 imp./kWh), a tím získáme údaj přímo v kWh. Pro bližší popis viz stránka o S0 měření na WiKi. Druhá předaná hodnota, sys[594], je údaj o počtu milisekund, které byly spočítány mezi posledními dvěmi přijatými S0 impulsy (tj. mezi tím nejposledněji přijatým a jeho předchozím). Tento údaj přímo odpovídá okamžitému výkonu, jen je ho opět potřeba jednoduše přepočítat (na kW).
vykon v kW = 3600000 / (sys[594] * impulsni_konstanta) , kde impulsni_konstanta = např. 1000 imp./kWh (podle měřiče).

Proč je zvolen ten způsob, že SDS MICRO neprovádí v tomto uvedeném příkladu přepočet přímo, ale je tento přepočet přesunut až do PHP skriptu? Z více praktických důvodů. Především, výkon serveru je mnohonásobně vyšší než výkon SDS MICRO, takže raději zatížíme server, který si toho "ani nevšimne", než trápit SDS MICRO. Dále SDS MICRO neumí pracovat s desetinnými čísly (umí ale je potřeba provádět triky, viz návody pro SDS-C), takže pro snadnější život programátora je opět lepší nechat to na PHP.


Vzorový SDS-C program: php_send.c

Jak tento program nahrajete do zařízení? Zatím máme pouze návod pro jiný případ, ovšem postup je tam zcela shodný i pro tento. Nezapomeňte si program před použitím upravit - tj. přepsat název serveru na váš server, popř. upravit si i zbytek vytvářené URL.

PHP skript: ke stažení jako textový soubor (přejmenujte si ho na .PHP sami) data.php.txt

Není pak problém si PHP skript dle potřeby upravit. Tento vzorový skript převezme data (impulsy, vykon) a uloží je do souboru "soubor.txt" ve stejné složce jako je tento skript. Úpravou cest uvedených ve skriptu to můžete změnit, je to tam zřejmé. Každý příjem nových dat, zaslaných ze SDS MICRO, způsobí přepsání obsahu souboru těmito novými údaji. V tomto vzorovém PHP skriptu jsem už nestihl dopsat zpracování dat (převedení impulsů na kWh atd.), až se k tomu zase dostanu, tak to doplním. Nicméně věřím, že by vám to nemělo dělat problém si tyto jednoduché doplňky doplnit.

Skript tedy ukládá přijaté data do souboru. Není pak problém mít další skript (nebo více různých), které tento soubor otevřou pro čtení a na základě přečtených hodnot vygenerují aktuální webovou stránku. Skript lze samozřejmě upravit i pro zápis do MySQL tabulky, a tak dále . . .