Data z RPi do HC2 Fibaro

Odpovědět
frenky
Příspěvky: 17
Registrován: úte dub 06, 2021 7:18 pm
Bydliště: Doubravička
Výkon panelů v FVE [Wp]: 8700
Kapacita baterie [kWh]: 30

Data z RPi do HC2 Fibaro

Příspěvek od frenky »

Ahoj solárníci,
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:
Screenshot 2022-01-25 at 18-37-36 Home Center 2.png
Screenshot 2022-01-25 at 18-37-36 Home Center 2.png (90.8 KiB) Zobrazeno 3953 x
Jednotlivá data pak vypadají nějak takto
Screenshot 2022-01-25 at 18-39-20 Home Center 2.png
Screenshot 2022-01-25 at 18-39-20 Home Center 2.png (121.16 KiB) Zobrazeno 3953 x
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

a takhle vypadá VD v HC2, která data zobrazuje

Kód: Vybrat vše

fibaro:sleep(30000) -- scena se vykona kazdych 30s (v ms)
--fibaro:debug("test")
fibaro:startScene(47) -- proved scenu
Samozřejmně jsem na všechno nepřišel sám. Otravoval jsem s tím pár lidí okolo.
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 :buymyprints:

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. :worker:

Hodně zdaru a ať to již konečně svítí
Jaromír (Frenky)
STUDER 2ks XTM4000-48, 2ks VT-80, 4 ks sodíkových AKU E4815
frenky
Příspěvky: 17
Registrován: úte dub 06, 2021 7:18 pm
Bydliště: Doubravička
Výkon panelů v FVE [Wp]: 8700
Kapacita baterie [kWh]: 30

Re: Data z RPi do HC2 Fibaro

Příspěvek od frenky »

Já na tvoje otázky zatím neumím odpovědět, zatím pouze zobrazují data získaná jinde na jiné platformě. Porovnávat data s počasím začnu až později. Vždyť to mám udělané teprve týden. Zatím si vystačím s tím že dokážu podle stavu baterie automatický spínat užitečné zátěže jako pračku, topení v koupelně a pod. Pokud objevím nějaká zajímavá data a výsledky, tak se samozřejmě podělím. :D
STUDER 2ks XTM4000-48, 2ks VT-80, 4 ks sodíkových AKU E4815
Odpovědět

Zpět na „Automatizace, řízení“