máme zimu a v zimě nepracuji na baráčku a mám čas rozvíjet mou domácí automatizaci. Loni jsem ladil přidané komponenty mé FVE (STUDER) do dohledu. Letos jsem si dal za úkol dostat data z RPi do HC2.
Protože jsem od přírody líný a nechce se mi přepisovat vše z fóra MP, tak kdyby někoho zaujala moje FVE tak tady je odkaz na: https://forum.mypower.cz/viewtopic.php? ... ky#p140958
Rekapitulace:
FVE komponenty STUDER, data přes krabičku studeru XCOM 232i do arduina DUE https://www.hwpro.cz/oc/index.php?route ... uct_id=380 dále data shromažďuji v raspberry, kde běží web server, sql databáze a php. Pomocí php skriptů tvořím JSON formát, který na zavolání od HC2 pošle jednotlivá data do HC2. Data pak mám možnost zobrazovat v HC2 jako VD (virtual device), vybraná data můžu ukládat do globálních proměnných a řídit podle nich provoz jednotlivých spotřebičů (boiler, topení apod.)
Výsledek:
Jednotlivá data pak vypadají nějak takto Takhle nějak vypadá php skript (běži v RPi), který vybírá data z sql databáze a tvoří z nich JSON
Kód: Vybrat vše
<?php
header("Content-Type: text/html; charset=windows-1250");
// Set the JSON header
header("Content-type: text/json");
include ("config_sql.php");
$connection = mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die(mysql_error()); //to connection vepředu je jenom kvůli uzavření
mysql_select_db(SQL_DBNAME) or die (mysql_error());
$vysledek=mysql_query("SELECT `Datum_cas`,`a011`,`a012`,`a080`,`a081`,`a088`,`s011`,`s012`,`s080`,`s081`,`s088`,
`a021`,`a022`,`a082`,`a083`,`a087`,`s021`,`s022`,`s082`,`s083`,`s087`
FROM `FVE` order by `Datum_cas` desc limit 1") or die(mysql_error());
while ($data1=mysql_fetch_row($vysledek)):
$Datum_cas[0]=$data1[0];
$a011[0]=$data1[1]; $a012[0]=$data1[2]; $a080[0]=$data1[3]; $a081[0]=$data1[4]; $a088[0]=$data1[5];
$s011[0]=$data1[6]; $s012[0]=$data1[7]; $s080[0]=$data1[8]; $s081[0]=$data1[9]; $s088[0]=$data1[10];
$a021[0]=$data1[11]; $a022[0]=$data1[12]; $a082[0]=$data1[13]; $a083[0]=$data1[14]; $a087[0]=$data1[15];
$s021[0]=$data1[16]; $s022[0]=$data1[17]; $s082[0]=$data1[18]; $s083[0]=$data1[19]; $s087[0]=$data1[20];
endwhile;
mysql_close($connection); //uzavře spojení s databází
header('Content-Type: application/json');
$XTinp = '{"XT1_Uin":'.$a011[0].',"XT2_Uin":'.$s011[0].',"XT1_Iin":'.$a012[0].',"XT2_Iin":'.$s012[0].',"XT1_Pin":'.$a088[0].'
,"XT2_Pin":'.$s088[0].',"XT1_kwd":'.$a081[0].',"XT2_kwd":'.$s081[0].',"XT1_kwv":'.$a080[0].',"XT2_kwv":'.$s080[0].'
,"XT1_Uout":'.$a021[0].',"XT2_Uout":'.$s021[0].',"XT1_Iout":'.$a022[0].',"XT2_Iout":'.$s022[0].',"XT1_Pout":'.$a087[0].'
,"XT2_Pout":'.$s087[0].',"XT1_okwd":'.$a083[0].',"XT2_okwd":'.$s083[0].',"XT1_okwv":'.$a082[0].',"XT2_okwv":'.$s082[0].'}';
$XTinput = json_encode(json_decode($XTinp), JSON_PRETTY_PRINT);
echo $XTinput;
?>
Takhle vypadá nějak LUA scéna v HC2, která čte data přes JSON a cpe je do globálních proměnných a VD
Kód: Vybrat vše
local http = net.HTTPClient()
function call(url)
http:request(url,
{
options = {method = 'JSON' },
success = function(response)
--fibaro:debug(response.data)
jsonTable = json.decode(response.data)
fibaro:setGlobal("XT1_Uin", jsonTable.XT1_Uin..'') -- udaj do globalni promenne
--udaje do VD cislo 479 a 486
fibaro:call(479, "setProperty", "ui.Label1.value", jsonTable.XT1_Uin..' V')
fibaro:call(479, "setProperty", "ui.Label2.value", jsonTable.XT2_Uin..' V')
fibaro:call(479, "setProperty", "ui.Label3.value", jsonTable.XT1_Iin..' A')
fibaro:call(479, "setProperty", "ui.Label4.value", jsonTable.XT2_Iin..' A')
fibaro:call(479, "setProperty", "ui.Label5.value", jsonTable.XT1_Pin..' W')
fibaro:call(479, "setProperty", "ui.Label6.value", jsonTable.XT2_Pin..' W')
fibaro:call(479, "setProperty", "ui.Label7.value", jsonTable.XT1_kwd..' kWh')
fibaro:call(479, "setProperty", "ui.Label8.value", jsonTable.XT2_kwd..' kWh')
fibaro:call(479, "setProperty", "ui.Label9.value", jsonTable.XT1_kwv..' kWh')
fibaro:call(479, "setProperty", "ui.Label10.value", jsonTable.XT2_kwv..' kWh')
fibaro:call(486, "setProperty", "ui.Label1.value", jsonTable.XT1_Uout..' V')
fibaro:call(486, "setProperty", "ui.Label2.value", jsonTable.XT2_Uout..' V')
fibaro:call(486, "setProperty", "ui.Label3.value", jsonTable.XT1_Iout..' A')
fibaro:call(486, "setProperty", "ui.Label4.value", jsonTable.XT2_Iout..' A')
fibaro:call(486, "setProperty", "ui.Label5.value", jsonTable.XT1_Pout..' W')
fibaro:call(486, "setProperty", "ui.Label6.value", jsonTable.XT2_Pout..' W')
fibaro:call(486, "setProperty", "ui.Label7.value", jsonTable.XT1_okwd..' kWh')
fibaro:call(486, "setProperty", "ui.Label8.value", jsonTable.XT2_okwd..' kWh')
fibaro:call(486, "setProperty", "ui.Label9.value", jsonTable.XT1_okwv..' kWh')
fibaro:call(486, "setProperty", "ui.Label10.value", jsonTable.XT2_okwv..' kWh')
local XT_Pout = jsonTable.XT1_Pout + jsonTable.XT2_Pout
local XT_okwd = jsonTable.XT1_okwd + jsonTable.XT2_okwd
--fibaro:debug(XT_Pout)
--fibaro:debug(XT_okwd)
local vysledek = 'Výkon: '.. XT_Pout.. ' W ' .. ' _ Výroba: '.. XT_okwd.. ' kWh'
--fibaro:debug(vysledek)
fibaro:call(486, "setProperty", "ui.Label11.value", vysledek.. '')
--fibaro:debug("\n\n")
end,
error = function(errorcode) fibaro:debug("error=" .. errorcode) end
})
end
call"http://192.168.0.4:80/skript_LUA1.php" -- volani skriptu v RPi
Kód: Vybrat vše
fibaro:sleep(30000) -- scena se vykona kazdych 30s (v ms)
--fibaro:debug("test")
fibaro:startScene(47) -- proved scenu
Takže velké díky zejména uživatelovi MYPOWER fóra z nikem dub042, který mě uvedl do tajů JSON a velké díky guru propagace fotovoltaiky a IT technologie mistru joudovi (Ondrovi). Bez nich, bych to nikdy nedal. Jsem jim oběma velkým dlužníkem
Samozřejmě mám na tom ještě hodně práce, musím vymyslet jak všechno dobře nastavit a jak ty data správně použít.
Hodně zdaru a ať to již konečně svítí
Jaromír (Frenky)