Vyčítání dat z Victron Phoenix 24V 375VA

Měniče Victron
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

Ahoj, nezkoumal už někdo někdy protokol Victronu, nebo nemá k tomu někdo nějakou dokumentaci?

Hrne to na mě asi v 500ms intervalech tyhle bloky dat.

Kód: Vybrat vše

# od -x /dev/ttyUSB0 
0000000 0000 e0e0 0000 00e0 e000 e0e0 0000 00e0
0000020 e000 00e0 0000 0000 e0e0 e000 0000 e000
0000040 0000 0000 e000 00e0 e000 0000 e000 e0e0
0000060 e0e0 00e0 0000 e000 0000 0000 0000 e0e0
0000100 0000 00e0 00e0 e0e0 e0e0 e000 0000 e0e0
0000120 00e0 e000 0000 0000 e0e0 e000 e0e0 0000
0000140 e000 0000 0000 00e0 00e0 0000 e0e0 00e0
0000160 e0e0 00e0 e000 e0e0 00e0 e0e0 0000 00e0
0000200 e0e0 e000 00e0 00e0 e000 e0e0 e000 00e0
0000220 0000 0000 e0e0 0000 00e0 00e0 e0e0 e000
0000240 e0e0 0000 00e0 e000 00e0 e000 e000 e000
0000260 00e0 e0e0 e0e0 00e0 e0e0 e0e0 e0e0 e000
0000300 e0e0 e0e0 00e0 e0e0 e0e0 0000 0000 0000
0000320 0000 00e0 0000 0000 00e0 e0e0 0000 00e0
0000340 00e0 e0e0 e000 e0e0 e0e0 e000 e0e0 e0e0
0000360 00e0 e0e0 e0e0 e0e0 00e0 e000 00e0 e000
0000400 e0e0 e000 00e0 e000 0000 e0e0 e0e0 0000
0000420 0000 e000 e0e0 0000 0000 0000 00e0 e000
0000440 00e0 e000 e000 e000 0000 e0e0 00e0 0000
0000460 e000 00e0 e000 e000 e0e0 e0e0 e000 0000
0000500 e0e0 0000 e0e0 0000 0000 e0e0 0000 00e0
0000520 00e0 00e0 e0e0 e0e0 e000 00e0 e0e0 e0e0
0000540 e0e0 e000 e0e0 e0e0 e0e0 e0e0 00e0 e000
To asi nebude úplně OK komunikace. Že by rychlost portu nebo tak něco?

Zatím moje první pokusy. Cílem je měření malé AC spotřeby, pokud tam data budou (výkon, proud, napětí).
gupa
Příspěvky: 2503
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od gupa »

https://www.victronenergy.com/live/vedi ... otocol:faq

resp. otevři a dole poslední dva u HEX direct pro phoenix dopiš mail a mělo by něco jako popis protokolu dojít.
https://www.victronenergy.com/support-a ... hitepapers
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

óóó, děkuji mnohokráte za nákop. Takže:

Kód: Vybrat vše

# stty -F /dev/ttyUSB0 19200
a jedem.. Kazdych asi 500ms, od "PID" po "Checksum" :

Kód: Vybrat vše

# cat /dev/ttyUSB0 
�
PID	0xA212
FW	0100
SER#	HQ16061TZH5
MODE	2
CS	9
AC_OUT_V	22994
AC_OUT_I	3
V	24049
AR	0
WARN	0
Checksum	�
PID	0xA212
FW	0100
SER#	HQ16061TZH5
MODE	2
CS	9
AC_OUT_V	22997
AC_OUT_I	3
V	24050
AR	0
WARN	0
Checksum	�
PID	0xA212
FW	0100
SER#	HQ16061TZH5
MODE	2
CS	9
AC_OUT_V	22981
AC_OUT_I	3
V	24053
AR	0
WARN	0
Checksum	�
xmasin
Příspěvky: 1767
Registrován: čtv čer 28, 2012 9:45 pm

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od xmasin »

Řešil jsem stejný problém viz popis tady https://forum.mypower.cz/viewtopic.php?f ... one#p61599 a nakonec jsem koupil VenusGX a informace vyčítám přes něj pomocí Modbus TCP. Přišlo mně to jako lepší řešení. Ten Victroní protokol je dost obtížný na implementaci obzvlášť v dotazovacím režimu. Pokud se zařízení periodicky nedostazuje, tak začne posílat informace o stavu každých 500 ms.
Uživatelský avatar
youda
Příspěvky: 3074
Registrován: stř dub 27, 2016 12:12 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od youda »

Ahoj chlapi,

pokud se nepletu, tak Victron Venus existuje i ve verzi pro Raspberry:
https://github.com/victronenergy/venus
https://github.com/victronenergy/venus/wiki

další možnosti a popis několika způsobů komunikace je i zde:
https://www.victronenergy.com/live/open ... l_gx_venus
Youdova ostrovní laboratoř 20kWp: https://youda.mypower.cz
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

xmasin píše:Ten Victroní protokol je dost obtížný na implementaci obzvlášť v dotazovacím režimu. Pokud se zařízení periodicky nedostazuje, tak začne posílat informace o stavu každých 500 ms.
Asi zkusim tohle:

5s ctu data do souboru a nejlepe jeste k tomu ramdisk, at nedrazdim zbytecne bunky na SD karte RPi

Kód: Vybrat vše

# timeout 5s cat /dev/ttyUSB0 > /tmp/victron.log
soubor:

Kód: Vybrat vše

# cat /tmp/victron.log 
�
PID	0xA212
FW	0100
SER#	HQ16061TZH5
MODE	2
CS	9
AC_OUT_V	23002
AC_OUT_I	3
V	23313
AR	0
WARN	0
Checksum	
... zkraceno ...
PID	0xA212
FW	0100
SER#	HQ16061TZH5
MODE	2
CS	9
AC_OUT_V	23016
AC_OUT_I	3
V	23312
AR	0
WARN	0
Checksum	
Parsnu PHPkem, vytvorim prumer (?) z opakujicich se hodnot V, AC_OUT_I, AC_OUT_V

PS: jak v jinem vlakne experimentuju s LIFE, tos koukam ze dle victronu mam olovo pekne vymlacene po dnesnim zatazenu a vcerejsim prelivani. Bude v noci veselo :)) Zitra zlehka dosviti a v pondeli se to zhluboka nadechne a dosviti to snad uplne doplna :)) Takze budu drsny a necham to klidne i padnout na hubu jak onehda loni v zime :))
marsyn
Příspěvky: 21
Registrován: sob črc 21, 2018 2:46 pm

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od marsyn »

youda píše:pokud se nepletu, tak Victron Venus existuje i ve verzi pro Raspberry:
ano existuje, funguje mi už rok na BMV700, MPPT 100/30, Phoenix 24V/375VA a 2 měsíce Elektroměry Carlo Gavazzi 3F a 1F
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

Hm.. beztak spotrebu mensi nez 23W nezmerim :sm1: V dokumentaci se pise ze AC_OUT_I je v jednotkach 0.1A. 0.1A*230V=23W a pod toto ukazuje hodnota AC_OUT_I rovnou NULU (cislicemi: 0 :)) ). A ja mam ted na AC spotrebu asi mensi nez 23W, jinak nevim, pac AC_OUT_I==0. Monitor fullHD asi 13W, velmi usporny philips, RPi jako desktop ze ktereho ted pisu a na nemz ted vesele ve 3 rano programuji knihovnu pro vycitani dat z victrona z USB, wifi, 2 switche. Zapnu dalsi monitor (ACER), samozrejme AC_OUT_I okamzite vylitne na 2 az 3. Takze proste malou spotrebu na AC neodmerim. No uvidime jak se to bude chovat na grafech.

Pruser je co s tim. 23W x 24H neni zanedbatelnych. Pocitat s minimem? Tedy ze proste zeru 23W trvale? To ale taky nebude davat smysl. Bude to cele pak nepresne. Jakoby treba muzu dojit do stavu kdy spotreba bude vetsi nez vyroba z panelu a jelikoz na chate nemam elektriku jinou nez z ostrovni fve (pokud opomenu elektocentralu), tak by to byl nesmysl. Hmhmhm .. to bude jeste zajimave. :))
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

hmhmhm, ono to beztak jak tak sleduju "šumí". I pri malych spotrebach tam obcas behem tech 5s vlitne 1 do tech amper na AC strane. Prumerovanim opakujicich se hodnot vznikne nejake jakoby orientacni "pseudojemnejsi" mereni spotreby (boze co jsem to vymyslel za silene slovni spojeni pro total random mereni niceho z niceho :)) ). Zkouseno ted s uspornou zarovkou (asi 15W) k tomu celemu navic. Nicmene male vykony budou proste problem. Je to prilis hrube :))

Kód: Vybrat vše

    ["AC_OUT_I"]=>
    array(3) {
      ["min"]=>
      int(0)
      ["max"]=>
      int(1)
      ["avg"]=>
      float(0.9)
    }
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

Mno .. 4 rano, v 5 budu mit data uz snad i v DB a pak odpadnu *fall* a pak az zas zitra (dneska) .

Kód: Vybrat vše

<?

// lib-hw-victron.php

// -------------------------------------------------------
   function Victron_GetUSBData()
// -------------------------------------------------------
{
$xret=false;
$xOutFile="/tmp/victron.log";
$xVictronDev="/dev/ttyUSB0";
clearstatcache();
if ( (is_file($xOutFile)) and (!unlink($xOutFile)) ) 
  die("Can not unlink ".$xOutFile);
system("stty -F ".$xVictronDev." 19200");
system("timeout 5s cat /dev/ttyUSB0 > ".$xOutFile);
clearstatcache();
if ( (is_file($xOutFile)) and (is_array($xData=Victron_ParseData(@file_get_contents($xOutFile)))) )
  $xret=$xData;
return $xret;
}

// -------------------------------------------------------
   function Victron_ParseData($xstr)
// -------------------------------------------------------
{
$avgvalues=array("AC_OUT_V","AC_OUT_I","V");
$xret=array();
$xlines=explode("\n",$xstr);
while ($cc=each($xlines))
  if (count($tt=explode("\t",trim($cc["value"])))==2)
    {
    $xkey=$tt[0];
    $xval=$tt[1];
    if (in_array($xkey,$avgvalues))
      $xret[$xkey][]=(int)$xval;    
    else
      $xret[$xkey]=$xval;        
    }  
reset($avgvalues);
while ($cc=each($avgvalues))
  {
  $xk=$cc["value"];
  if ( (isset($xret[$xk])) and (is_array($xv=$xret[$xk])) )
    $xret["_"][$xk]=array(
      "min"=>min($xv),
      "max"=>max($xv),
      "avg"=>array_sum($xv)/count($xv));
  }
return $xret;
}

?>
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

Tak uz mi to beha do DB. Az ted. Odpadl jsem driv :))

Vsechno co je v_* jsou Victroni data. "V" samozrejme jako Victron :)) I stavove data ukladam. Pro zajimavost co to bude delat.

...
Getting Velleman data...
Reading 1.56 kB bytes from USB recorder (/dev/hidraw0).
Getting Arduino data...
Getting Victron data...
Done.
Data:
bat1: 24.425
bat2: 12.968
fv1: 34.387
fv2: 68.513
v_acoutv: 230.016
v_acouti: 0.1
v_bat: 23.9819
v_mode: 2
v_cs: 9
v_ar: 0
v_warn: 0

Stored at 26.8.2018 18:36:14.
Finished :)
(exec time: 13 sec, 328.2511 msec)

Ten rozdil je propastny  :lol:  ::facepalm:: . Prvni bat1 rika Velleman, druhe v_bat rika Victron. Oba jsou na olovu. Jsem si jisty ze multimetr bude rikat neco taky jineho  :D klasika. A ted babo rad, cemu vic verit.

A druha vec, pri pohledu na v_bat mereno Victronem, mi beha hlavou jedina myslenka: olovo pekne v prdeli  :lol: No nic, zitra konecne vyjde zas slunko, tak se to dososne :))

Kazdopadne zachvili si u sebe na mereni Napajedla nahodim grafek z Victrona a budu zkoumat jak se to chova vcetne nejakeho srovnani napeti mereneho z velemana a z victrona, treba to da i nejaky smysl  :comp:

BTW: na to, ze me napadlo vcera v 10:40 se tady prvne zeptat na komunikaci s victronem a diky vyborne napovede na primou dokumentaci na protokol, bych rekl ze slusny cas implementace victroniho vycitani vsech dat co victron dava od doby, kdy nevim nic, do doby kdy kreslim grafy...

BTW2: na to, ze ten kabel z victrona mam vrazeny v RPi uz nekolik let a nebyl jsem schopen se popidit po dokumentaci, bych rekl, ze bych si nakopal do prdele.

:yes:
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od rottenkiwi »

U mňa je rozdiel medzi U-Pb a U-LiFE podľa toho, aký je odber a kde merám.
Keď sa nabíja 200 A prúdom, tak Pb majú 14.2, ale na LiFe
je aj 13.7, a keď ešte z LiFe berie Victron 160 A, tak mi ukazuje cez Mk2-USB cc. 13.3,
proste nemáme supravodivú meď.

Asi je vhodné ciachovaným multimetrom pomerať nejaké body pri roznom
prúde, urobiť si nejaký mat. filter nameraných hodnot, zlé vzhodiť, dobré
usporiadať a vybrať prostredný prvok.

Aj tak si myslím, že či mám 8, 10, 12 či 18 bit ADC, tak šum je rádovo vačší ako rozlíšienie,
hlavne keď sú zapnuté meniče a spínané DC-DC.

Mne podobne trvalo vyčítať dáta z EpSolaru. Nemal som dokumentáciu. Potom, ked
som to náhodou objavil na youtube, už to bola otázka pájkovania a programovania Arduina,
rádovo pol hodina.

Teraz zase nemám 6 pin konektory a RS-485 prevodník, aby som mohol urobiť aj SRNE regle.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

a jedem .. :))

Obrázek

ubat = napeti na bateriich jak to vidi Velleman
vubat = napeti na bateriich jak to vidi Victron
uac = AC napeti, obvykle 230V, zakresleno na levou vertikalni osu deleno deseti. 23 tedy je 230V.
iac = AC proud s hodnotami v radu miliAmperu na vertikalni ose vpravo
pac = spocitany AC vykon pac = iac x uac. Hodnoty jsou na prave ose a odpovida to kdyz si misto napriklad 50m predstavime 50W. Tedy oproti miliamperum je to x 1000.

Na proudu a tudiz i na vykonu jde videt rozsviceni kdejake usporky :) Zajimave, uvidim jak se to bude chovat.

Stavove informace jsou zatim nezakresleny.

::popcorn::
kodl69
Příspěvky: 7627
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od kodl69 »

Je dobrý nazývat věci pravými jmény: Šum je to, co vzniká přímo v obvodu, bez působení vnějších vlivů, a to bývá obvykle méně než LSB ADC převodníku, jinak by tam ten LSB k ničemu nebyl.
To co ty nazýváš šumem, je rušivé napětí, které lze kompenzovat několika způsoby, obvykle kombinací více možností.
1.) správná volba HW a pečlivý návrh obvodu, tj bez zemních smyček, krátké signálové cesty, stínění, stabilita ref. napětí atd.
2.) dolní propust na vstupu ADC pro měřené DC hodnoty, několik RC článků za sebou udělá kus práce, zajímavá je kombinace několika čas. konstatn za sebou.
3.) digitální filtrování, třeba i v té nejsprostší podobě, první stupeň vyhodí hodnoty, co jsou jistě mimo předpokládaný rozsah, a potom třeba jenom U=(U*3+Unaměř)/4 pokud se použije větší koeficient, tak se hodnota trochu "táhne" ale zase záleží na požadovaném rozlišení a četnosti měření, když mám 3 měření proudu za s, tak pro vyhodnocení SOC není problém ani podstatně "pomalejší" filtr. Stejně jako u měření napětí, kde rušení může způsobit chybné vyhodnocení stavu článku a s tím související poplach, balancování atd... Na 100Ah aku se prakticky nic neděje v řádu sekund, ale všecno "trvá" s výjimkou zkratu jak vnějšího (řeší pojistky), tak vnitřního (řeší hasiči).
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od rottenkiwi »

NO kdesi som videl, že je správne na ATtiny a pravdepodobne aj na Atmelxyz povypínať
všetko, lebo tam je "šum" a ak sa to vypne, tak / rozne oscilátory / to vyčítava presnejšie.

Ďalej je tu elektrostatické rušenie, kde možeme vo veľmi krátkom čase dostať
hodnotu, ktorá tam nepatrí, to sa dá u napatia načítať znova.

Dalej je tu rušenie z meniča, to sa mi prenáša hlavne do merania prúdu.
Neviem či by výmena Amploc-u 100 A za BMV 702 priniesla aj 5-násobné spresnenie
merania prúdu a tým 5x presnejšie meranie SOC.

Mne u 12 V systému pri presnosti 0.1 A robí chybu 1.2 W.
Ale u 48 V systému už potrebujeme presnosť oveľa lepšiu.

Ak však budeme prúdy merať presne, ale nevieme koľko sa z toho stratí v baterkách,
tak sa nám to SOC bude aj tak rozchádzať.

Ak má niekto kombináciu LiFE s úč. 96 % a Pb s úč. 85 %, tak pri určitom pomere
kapacity LiFE/Pb, si neviem predstaviť, ako by som presne počítal SOC.

Potom je tu nelinerita merania a posun offsetu vplyvom zlého kontaktu a/alebo teploty.

No a ešte to každý porovnáva so svojim nekalibrovným multimetrom.

Ono sa to nezdá, ale metrológia a metronómia je veda, nie je také jednoduché
presne merať. To sa ukazuje v eutách, kde niektoré ukazujú 0 km, ale ešte dojdú
aj 20 km, a iné ukazujú 10 km a pár metrov stoja.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

Tos jeste jeden poznatek k tomuto, treba se to nekomu bude hodit...

Mozna jste si nekdo vsimli na mych grafech v mereni z victrona tech vystrelu dolu, nekdy i brutalne nahoru:

Obrázek

Vite cim to bylo?

:wall:  ::facepalm::  *fall*

Znovu se vratme k vystupu co posila victron:

Kód: Vybrat vše

# cat /tmp/victron.log 
�
PID   0xA212
FW   0100
SER#   HQ16061TZH5
MODE   2
CS   9
AC_OUT_V   23002
AC_OUT_I   3
V   23313
AR   0
WARN   0
Checksum   
... zkraceno ...
PID   0xA212
FW   0100
SER#   HQ16061TZH5
MODE   2
CS   9
AC_OUT_V   23016
AC_OUT_I   3
V   23312
AR   0
WARN   0
Checksum   
Ja to ctu tak, ze nejprve inicializuju seriovou linku (respektive USB zarizeni)

Kód: Vybrat vše

# stty -F /dev/ttyUSB0 19200
Nasledne ctu 5s data

Kód: Vybrat vše

# timeout 5s cat /dev/ttyUSB0 > /tmp/victron.log
Co se zcela pochopitelne stane, kdyz se timeout trefi a utne to nekde v pulce dat?

Vznikne:

Kód: Vybrat vše

...
FW   0100
SER#   HQ16061TZH5
MODE   2
CS   9
AC_OUT_V   23016
AC_OUT_I   3
V   23
Nasledne pri vyklofavani hodnot a jejich prumerovani ziskam u polozky V (napeti na bateriich) hodnotu 23. Pocitam s tim ze victron mi to posila jako 1000nasobky. 23061 je tedy 23.061V.

Posledni hodnota 23 je tedy radove mensi (0.023V) a pokud s ni pocitam v prumeru hodnot napeti na bateriich, ziskanych behem jednoho cteni, tak dostavam ve vysledku vyrazne nizsi prumer nez by byl zadouci.

Takze jednoduche reseni: Jelikoz victron posila radky oddelene \n, tedy ENTER, tedy LINE FEED, tedy 0x0A, neboli ASCII 10, tak proste posledni radek ignoruji, protoze muze byt nekompletni a je vystarano.

Tolik prace a pritom takova blbost ...  ::facepalm::

Nicmene ted uz by to melo byt bez vystrelu. Hodnoty napeti vetsi nez 31000 a mensi nez 18000 jsou navic povazovany u napeti za nevalidni, takze ani vystrel nahoru uz by se nemel konat. Totez plati o AC napeti, coz je 100 nasobek, takze 310 - 180 VAC, vse mimo je proste mimo a zahodit.

Obrázek

:))
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Re: Vyčítání dat z Victron Phoenix 24V 375VA

Příspěvek od mypower.cz »

Jeste pridavam opravenou verzi PHP knihovny pro vycitani dat z victronu osetrenou prave o ty vystrely dolu i nahoru... :)) necht je k uzitku :))

Kód: Vybrat vše

<?

// lib-hw-victron.php

// -------------------------------------------------------
   function Victron_GetUSBData()
// -------------------------------------------------------
{
$xret=false;
$xOutFile="/tmp/victron.log";
$xVictronDev="/dev/ttyUSB0";
clearstatcache();
if ( (is_file($xOutFile)) and (!unlink($xOutFile)) ) 
  die("Can not unlink ".$xOutFile);
system("stty -F ".$xVictronDev." 19200");
system("timeout 5s cat /dev/ttyUSB0 > ".$xOutFile);
clearstatcache();
if ( (is_file($xOutFile)) and (is_array($xData=Victron_ParseData(@file_get_contents($xOutFile)))) )
  $xret=$xData;
return $xret;
}

// -------------------------------------------------------
   function Victron_ParseData($xstr)
// -------------------------------------------------------
{
$avgvalues=array("AC_OUT_V","AC_OUT_I","V");
$notnulvalues=array("AC_OUT_V","V");
$xret=array();
$xlines=explode("\n",$xstr);
array_pop($xlines); // last line bug fix :)
while ($cc=each($xlines))
  if (count($tt=explode("\t",trim($cc["value"])))==2)
    {
    $xkey=$tt[0];
    $xval=$tt[1];
    if (in_array($xkey,$avgvalues))
      {
      if (in_array($xkey,$notnulvalues))
        {        
        $xv=(int)$xval;
        if (($xv>18000) and ($xv<31000)) // voltage limit
          $xret[$xkey][]=$xv;    
        }
      else
        $xret[$xkey][]=(int)$xval;    
      }
    else
    if (isset($xret[$xkey]))
      $xret[$xkey]=$xval;        
    }  
reset($avgvalues);
while ($cc=each($avgvalues))
  {
  $xk=$cc["value"];
  if ( (isset($xret[$xk])) and (is_array($xv=$xret[$xk])) )
    $xret["_"][$xk]=array(
      "min"=>min($xv),
      "max"=>max($xv),
      "avg"=>array_sum($xv)/count($xv));
  }
return $xret;
}

?>

  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek