FVE se střídači GoodWe - SEMS Portal

Ucelené projekty, návody a postupy.
kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Kamarád má malou domácí FVE (2 střídače, baterku) a rád by spínal/vypínal několik okruhů v závislosti na různých údajích. Nabití baterie, nějaký odhad jak bude nabitá zítra, aktuální spotřeba - vydrží do dalšího slunce?...

To mi připadá jak dělané pro HA.

Budu sem postupně přidávat příspěvky jak pokračuji a nějakou radu či postřeh uvítám. S HA začínám.

Kde vzít data -
1. údaje z elektrárny - buď se připojovat v LAN (což nakonec asi tak dopadne), nebo data načítat přes semsportal
2. pak by se hodil nějaký více či méně přesný odhad jak to bude svítit zítra -
3. Nějaké rozhraní s přehledem jak to vypadá a s možností převzetí ručního řízení s prioritou.
4. Když budu mít data tak automatika v Node-Red by asi mohla být to pravé.

ad 1. Na gitu pár projektů je, jen mi připadalo že načítají málo údajů
Samozřejmě mne zajímalo co vlastně lze z portálu dostat za data.
Co jsem pochopil tak buď se dá parsovat stránka, nebo použít jedno ze dvou API které používají mobilní aplikace.

První varianta se mi vůbec nelíbí - nějak nechci řešit až se stránka změní protože pokrok.

Jsou dvě verze API - na V1 jsem si upravil nějaký kus powershelového skriptu už ani nevím odkud

A v2 používá i https://github.com/bouwew/sems2mqtt který se mi líbí. Jenže jak říkám - málo údajů.
Tak jsem si jej nainstaloval, připojil se přes MQTT explorer k mosquitu na HA a vidím co chodí za MQTT zprávy z první ruky.
To že tam měří původně proud ve voltech je detail, a další údaje jsou také asi dostupné, budu upravovat.
GoodweMqtt.png
Pak si prohlídnu kód, narazím na načítání dat - hezky napsané - sbírá s tím i přihlašovací token - a vidím

Kód: Vybrat vše

data = r.json()
No a protože ještě netuším jak to v HA chodí se zápisy do souborů a zatím to nechci řešit tak přihodím jen jeden řádek kódu

Kód: Vybrat vše

 _LOGGER.error(data)

a přečtu si to hezky červeně v logu HA :)

a co lze dostat za údaje z API1 i API2 vkládám:

API1:

Kód: Vybrat vše

sn                          : 98000ETU211X1111
dict                        : @{left=System.Object[]; right=System.Object[]}
is_stored                   : True
name                        : GW8K-ET
in_pac                      : 0,2
out_pac                     : 22,23
eday                        : 50,6
emonth                      : 133,1
etotal                      : 4531,5
status                      : 1
turnon_time                 : 10/26/2020 20:44:50
releation_id                : 4f0ee6eb-5320-4308-a397-1111111ffb1b
type                        : GW8K-ET
capacity                    : 8,0
d                           : @{pw_id=131ffabf-df0e-46b2-99dd-311111110d96; capacity=8kW; model=GW8K-ET; output_power=1468W; output_current=0.6A; grid_voltage=237.9V/240.6V/240.1V; backup_output=237.6V/15W; soc=61%; soh=100%; las
                              t_refresh_time=07.06.2021 21:59:39; work_mode=Wait Mode; dc_input1=113.8V/0.1A; dc_input2=108.5V/0.1A; battery=295.3V/5A/1476W; bms_status=DischargingOfBattery; warning=Normal; charge_current_limit=2
                              5A; discharge_current_limit=25A; firmware_version=616,0; creationDate=07/07/2021 03:59:39; eDay=50,6; eTotal=4531,5; pac=22,23; hTotal=5435,0; vpv1=113,8; vpv2=108,5; vpv3=; vpv4=; ipv1=0,1; ipv2=0,1
                              ; ipv3=; ipv4=; vac1=237,9; vac2=240,6; vac3=240,1; iac1=0,6; iac2=5,0; iac3=1,0; fac1=50,01; fac2=50,01; fac3=50,02; istr1=0,0; istr2=0,0; istr3=; istr4=; istr5=; istr6=8,0; istr7=; istr8=118,7; ist
                              r9=; istr10=19,6; istr11=; istr12=0,0; istr13=0,0; istr14=0,0; istr15=0,0; istr16=0,0}
it_change_flag              : False
tempperature                : 41,4
check_code                  : 031027
next                        : 98000ETU911X1111
prev                        : 
next_device                 : @{sn=98000ETU911X1111; isStored=True}
prev_device                 : @{sn=; isStored=False}
invert_full                 : @{sn=98000ETU211X1111; powerstation_id=131ffabf-df0e-46b2-99dd-311111110d96; name=GW8K-ET; model_type=GW8K-ET; change_type=0; change_time=0; capacity=8,0; eday=50,6; iday=8,712; etotal=4531,5; itotal
                              =924,11; hour_total=5435,0; status=1; turnon_time=1603716290753; pac=22,23; tempperature=41,4; vpv1=113,8; vpv2=108,5; vpv3=; vpv4=; ipv1=0,1; ipv2=0,1; ipv3=; ipv4=; vac1=237,9; vac2=240,6; vac3=240
                              ,1; iac1=0,6; iac2=5,0; iac3=1,0; fac1=50,01; fac2=50,01; fac3=50,02; istr1=0,0; istr2=0,0; istr3=; istr4=; istr5=; istr6=8,0; istr7=; istr8=118,7; istr9=; istr10=19,6; istr11=; istr12=0,0; istr13=0,
                              0; istr14=0,0; istr15=0,0; istr16=0,0; last_time=1625601579639; vbattery1=295,3; ibattery1=5,0; pmeter=30,0; soc=61,0; soh=100,0; bms_discharge_i_max=25,0; bms_charge_i_max=25,0; bms_warning=0; bms_a
                              larm=0; battary_work_mode=2; workmode=1; vload=237,6; iload=0,2; firmwareversion=6,0; pbackup=15,0; seller=32,01; buy=55,61; yesterdaybuytotal=3464,313; yesterdaysellertotal=2847,36; yesterdayct2sell
                              ertotal=; yesterdayetotal=4480,9; yesterdayetotalload=933,5; yesterdaylastime=0; thismonthetotle=133,1; lastmonthetotle=4347,8; ram=16,0; outputpower=1468,0; fault_messge=0; isbuettey=True; isbuettey
                              bps=False; isbuetteybpu=False; isESUOREMU=False; backUpPload_S=10,0; backUpVload_S=240,7; backUpIload_S=0,3; backUpPload_T=5,0; backUpVload_T=239,9; backUpIload_T=0,3; eTotalBuy=45,2; eDayBuy=0,1; eB
                              atteryCharge=1746,4; eChargeDay=15,3; eBatteryDischarge=1579,8; eDischargeDay=5,7; battStrings=156,4; meterConnectStatus=0,0; mtActivepowerR=2,0; mtActivepowerS=5,0; mtActivepowerT=22,0; ezPro_connec
                              t_status=; dataloggersn=; equipment_name=; hasmeter=True; meter_type=0,0; pre_hour_lasttotal=1590,8; pre_hour_time=1617958763580; current_hour_pv=0,0; extend_properties=; eP_connect_status_happen=; e
                              P_connect_status_recover=; total_sell=2879,368; total_buy=3519,926; errors=}
time                        : 07/06/2021 22:06:57
battery                     : 295.3V/5A/1476W
firmware_version            : 616,0
warning_bms                 : Normal
soh                         : 100%
discharge_current_limit_bms : 25A
charge_current_limit_bms    : 25A
soc                         : 61%
pv_input_2                  : 108.5V/0.1A
pv_input_1                  : 113.8V/0.1A
back_up_output              : 237.6V/15W
output_voltage              : 237.9V/240.6V/240.1V
backup_voltage              : 237.6V/240.7V/239.9V
output_current              : 0.6A
output_power                : 1468W
total_generation            : 4531.5kWh
daily_generation            : 50.6kWh
battery_charging            : 295.3V/5A/1476W
last_refresh_time           : 07/06/2021 21:59:39
bms_status                  : DischargingOfBattery
pw_id                       : 131ffabf-df0e-46b2-99dd-311111110d96
fault_message               : 
battery_power               : 1476,5
point_index                 : 12
points                      : {@{target_index=1; target_name=Vpv1; display=Vpv1(V); unit=V; target_key=Vpv1; text_cn=直流电压1; target_sn_six=; target_sn_seven=; target_type=; storage_name=}, @{target_index=2; target_name=Vpv2; displ
                              ay=Vpv2(V); unit=V; target_key=Vpv2; text_cn=直流电压2; target_sn_six=; target_sn_seven=; target_type=; storage_name=}, @{target_index=5; target_name=Ipv1; display=Ipv1(A); unit=A; target_key=Ipv1; text_
                              cn=直流电流1; target_sn_six=; target_sn_seven=; target_type=; storage_name=}, @{target_index=6; target_name=Ipv2; display=Ipv2(A); unit=A; target_key=Ipv2; text_cn=直流电流2; target_sn_six=; target_sn_seven=
                              ; target_type=; storage_name=}...}
backup_pload_s              : 10,0
backup_vload_s              : 240,7
backup_iload_s              : 0,3
backup_pload_t              : 5,0
backup_vload_t              : 239,9
backup_iload_t              : 0,3
etotal_buy                  : 45,2
eday_buy                    : 0,1
ebattery_charge             : 1579,8
echarge_day                 : 15,3
ebattery_discharge          : 1579,8
edischarge_day              : 5,7
batt_strings                : 156,4
meter_connect_status        : 0,0
mtactivepower_r             : 2,0
mtactivepower_s             : 5,0
mtactivepower_t             : 22,0
has_tigo                    : False
canStartIV                  : False

sn                          : 98000ETU911X1111
dict                        : @{left=System.Object[]; right=System.Object[]}
is_stored                   : True
name                        : GW8K-ET
in_pac                      : 0,0
out_pac                     : 0,0
eday                        : 50,4
emonth                      : 132,3
etotal                      : 4257,2
status                      : 1
turnon_time                 : 12/18/2020 22:19:58
releation_id                : 38533274-7243-4a96-b11d-f552456ab00d
type                        : GW8K-ET
capacity                    : 8,0
d                           : @{pw_id=131ffabf-df0e-46b2-99dd-311111110d96; capacity=8kW; model=GW8K-ET; output_power=1228W; output_current=0.5A; grid_voltage=239.9V/240.8V/240V; backup_output=238.5V/16W; soc=59%; soh=100%; last_
                              refresh_time=07.06.2021 22:05:47; work_mode=Wait Mode; dc_input1=76.4V/0A; dc_input2=74.9V/0A; battery=295.1V/4.3A/1269W; bms_status=DischargingOfBattery; warning=Normal; charge_current_limit=25A; di
                              scharge_current_limit=25A; firmware_version=616,0; creationDate=07/07/2021 04:05:47; eDay=50,4; eTotal=4257,2; pac=0,0; hTotal=4156,0; vpv1=76,4; vpv2=74,9; vpv3=; vpv4=; ipv1=0,0; ipv2=0,0; ipv3=; i
                              pv4=; vac1=239,9; vac2=240,8; vac3=240,0; iac1=0,5; iac2=4,9; iac3=0,4; fac1=50,0; fac2=50,0; fac3=50,02; istr1=0,0; istr2=0,0; istr3=; istr4=; istr5=; istr6=3,9; istr7=; istr8=114,3; istr9=; istr10=
                              5,4; istr11=; istr12=0,0; istr13=0,0; istr14=0,0; istr15=0,0; istr16=0,0}
it_change_flag              : False
tempperature                : 41,0
check_code                  : 055705
next                        : 
prev                        : 98000ETU211X1111
next_device                 : @{sn=; isStored=False}
prev_device                 : @{sn=98000ETU211X1111; isStored=True}
invert_full                 : @{sn=98000ETU911X1111; powerstation_id=131ffabf-df0e-46b2-99dd-311111110d96; name=GW8K-ET; model_type=GW8K-ET; change_type=0; change_time=0; capacity=8,0; eday=50,4; iday=9,1740000000000013; etotal=4
                              257,2; itotal=893,508; hour_total=4156,0; status=1; turnon_time=1608301198920; pac=0,0; tempperature=41,0; vpv1=76,4; vpv2=74,9; vpv3=; vpv4=; ipv1=0,0; ipv2=0,0; ipv3=; ipv4=; vac1=239,9; vac2=240,8
                              ; vac3=240,0; iac1=0,5; iac2=4,9; iac3=0,4; fac1=50,0; fac2=50,0; fac3=50,02; istr1=0,0; istr2=0,0; istr3=; istr4=; istr5=; istr6=3,9; istr7=; istr8=114,3; istr9=; istr10=5,4; istr11=; istr12=0,0; is
                              tr13=0,0; istr14=0,0; istr15=0,0; istr16=0,0; last_time=1625601947241; vbattery1=295,1; ibattery1=4,3; pmeter=-2,0; soc=59,0; soh=100,0; bms_discharge_i_max=25,0; bms_charge_i_max=25,0; bms_warning=0
                              ; bms_alarm=0; battary_work_mode=2; workmode=1; vload=238,5; iload=0,3; firmwareversion=6,0; pbackup=16,0; seller=32,01; buy=55,62; yesterdaybuytotal=3464,313; yesterdaysellertotal=2847,36; yesterday
                              ct2sellertotal=; yesterdayetotal=4206,8; yesterdayetotalload=220,6; yesterdaylastime=0; thismonthetotle=132,3; lastmonthetotle=4074,5; ram=16,0; outputpower=1228,0; fault_messge=0; isbuettey=True; is
                              buetteybps=False; isbuetteybpu=False; isESUOREMU=False; backUpPload_S=22,0; backUpVload_S=240,6; backUpIload_S=0,4; backUpPload_T=0,0; backUpVload_T=238,7; backUpIload_T=0,5; eTotalBuy=20,4; eDayBuy=
                              0,1; eBatteryCharge=1661,9; eChargeDay=14,7; eBatteryDischarge=1464,9; eDischargeDay=6,6; battStrings=129,2; meterConnectStatus=0,0; mtActivepowerR=-8,0; mtActivepowerS=-7,0; mtActivepowerT=13,0; ezP
                              ro_connect_status=; dataloggersn=; equipment_name=; hasmeter=True; meter_type=0,0; pre_hour_lasttotal=1370,8; pre_hour_time=1617958743075; current_hour_pv=0,0; extend_properties=; eP_connect_status_h
                              appen=; eP_connect_status_recover=; total_sell=2879,371; total_buy=3519,929; errors=}
time                        : 07/06/2021 22:06:57
battery                     : 295.1V/4.3A/1269W
firmware_version            : 616,0
warning_bms                 : Normal
soh                         : 100%
discharge_current_limit_bms : 25A
charge_current_limit_bms    : 25A
soc                         : 59%
pv_input_2                  : 74.9V/0A
pv_input_1                  : 76.4V/0A
back_up_output              : 238.5V/16W
output_voltage              : 239.9V/240.8V/240V
backup_voltage              : 238.5V/240.6V/238.7V
output_current              : 0.5A
output_power                : 1228W
total_generation            : 4257.2kWh
daily_generation            : 50.4kWh
battery_charging            : 295.1V/4.3A/1269W
last_refresh_time           : 07/06/2021 22:05:47
bms_status                  : DischargingOfBattery
pw_id                       : 131ffabf-df0e-46b2-99dd-311111110d96
fault_message               : 
battery_power               : 1268,93
point_index                 : 12
points                      : {@{target_index=1; target_name=Vpv1; display=Vpv1(V); unit=V; target_key=Vpv1; text_cn=直流电压1; target_sn_six=; target_sn_seven=; target_type=; storage_name=}, @{target_index=2; target_name=Vpv2; displ
                              ay=Vpv2(V); unit=V; target_key=Vpv2; text_cn=直流电压2; target_sn_six=; target_sn_seven=; target_type=; storage_name=}, @{target_index=5; target_name=Ipv1; display=Ipv1(A); unit=A; target_key=Ipv1; text_
                              cn=直流电流1; target_sn_six=; target_sn_seven=; target_type=; storage_name=}, @{target_index=6; target_name=Ipv2; display=Ipv2(A); unit=A; target_key=Ipv2; text_cn=直流电流2; target_sn_six=; target_sn_seven=
                              ; target_type=; storage_name=}...}
backup_pload_s              : 22,0
backup_vload_s              : 240,6
backup_iload_s              : 0,4
backup_pload_t              : 0,0
backup_vload_t              : 238,7
backup_iload_t              : 0,5
etotal_buy                  : 20,4
eday_buy                    : 0,1
ebattery_charge             : 1464,9
echarge_day                 : 14,7
ebattery_discharge          : 1464,9
edischarge_day              : 6,6
batt_strings                : 129,2
meter_connect_status        : 0,0
mtactivepower_r             : -8,0
mtactivepower_s             : -7,0
mtactivepower_t             : 13,0
has_tigo                    : False
canStartIV                  : False


ad 2. Jak to bude svítit zítra - údaje lze získat z pvforecast.cz přímo pro určité zeměpisné souřadnice a prý je to přesné.

To si mohu zavolat přímo z Node-Red přes http request
získániPredpovediPVF.png
A co si to poslat na Telegram když už tady na fóru je zajímavý návod
naTelegram.png
Co s daty - počítají s plochou střechou, ale kamarád má panely má ve dvou sklonech, poloha slunce, úhly, výkon při různé teplotě... Data by se dala získat a počítat - půjdu na to jinak. Dostanu z předpovědi nějaké číslo, změřím kolik v tu hodinu vyrobí elektrárna, podělím a mám nějakou "konstantu" Těch si nasekám postupně cca 12 měsíců x 24 hodin (to až někdo vymyslí i měsíční panely :) a po každém měření v daném měsíci a denní hodině si ji upravím váženým průměrem. A použiju ji jako základ pro další "měsícohodinu". Pokud budou předpovědi přesné tak by se to mělo upřesňovat samo.A když někdy ulítnou nevadí - vážený průměr. Případně budou "čtrnáctidnohodiny".

Pro dnes vše.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Zpráva max. 60000 znaků, takže výsledky z API2 zde:

Kód: Vybrat vše

{'hasError': False, 
'code': 100001, 
'msg': 'No access, please login.', 
'data': None, 
'components': 
    {'para': None, 
    'langVer': 107, 
    'timeSpan': 0, 
    'api': 'http://eu.semsportal.com:82/api/v2/PowerStation/GetMonitorDetailByPowerstationId', 
    'msgSocketAdr': ''}}

    {'language': 'en',
    'function': ['ADD', 'VIEW', 'EDIT', 'UNBIND', 'INVERTER_A', 'INVERTER_E', 'INVERTER_D'], 
    'hasError': False, 
    'msg': 'success', 
    'code': '0', 
    'data': 
        {'info': 
            {'powerstation_id': '131ffabf-df0e-46b2-99dd-301111110d96', 
            'time': '07/06/2021 23:23:46', 
            'date_format': 'MM.dd.yyyy', 
            'date_format_ym': 'MM.yyyy', 
            'stationname': 'Rakosi 25', 
            'address': 'Rákosí 25', 
            'owner_name': 'jiri@raketa.cz', 
            'owner_phone': '', 
            'owner_email': 'jiri@raketa.cz', 
            'battery_capacity': 26.0, 
            'turnon_time': '08/01/2020 02:01:08', 
            'create_time': '08/01/2020 01:57:42', 
            'capacity': 20.0, 
            'longitude': 13.1111111, 
            'latitude': 49.1111111, 
            'powerstation_type': 'Battery Storage', 
            'status': 1, 
            'is_stored': True, 
            'is_powerflow': True, 
            'charts_type': 1, 
            'has_pv': True, 
            'has_statistics_charts': True, 
            'only_bps': False, 
            'only_bpu': False, 
            'time_span': -2.0, 
            'pr_value': ''}, 

        'kpi': 
            {'month_generation': 366.4, 
            'pac': 0.0, 'power': 101.0, 
            'total_power': 8788.7, 
            'day_income': 22.22, 
            'total_income': 1933.51, 
            'yield_rate': 0.22, 
            'currency': 'USD'}, 

        'powercontrol_status': 0, 
        'images': ['https://oversea-gops.oss-cn-hongkong.aliyuncs.com/powerstation_img/c1111111-0fde-42ff-bb4e-c5941e2771d3.jpg'],
        'weather': 
            {'HeWeather6': [
                {'daily_forecast': [
                    {'cond_code_d': '102', 'cond_code_n': '103', 'cond_txt_d': 'Few Clouds', 'cond_txt_n': 'Partly Cloudy', 'date': '2021-07-07', 'time': '2021-07-07 00:00:00', 'hum': '91', 'pcpn': '0.0', 'pop': '25', 'pres': '970', 
                        'tmp_max': '22', 'tmp_min': '15', 'uv_index': '5', 'vis': '24', 'wind_deg': '10', 'wind_dir': 'N', 'wind_sc': '1-2', 'wind_spd': '6'},
                    {'cond_code_d': '302',  'cond_code_n': '101', 'cond_txt_d': 'Thundershower', 'cond_txt_n': 'Cloudy', 'date': '2021-07-08', 'time': '2021-07-08 00:00:00', 'hum': '98', 'pcpn': '11.9', 'pop': '66', 'pres': '968', 
                        'tmp_max': '23', 'tmp_min': '15', 'uv_index': '7', 'vis': '22', 'wind_deg': '57', 'wind_dir': 'NE', 'wind_sc': '1-2', 'wind_spd': '6'},
                    {'cond_code_d': '302', 'cond_code_n': '103', 'cond_txt_d': 'Thundershower', 'cond_txt_n': 'Partly Cloudy', 'date': '2021-07-09', 'time': '2021-07-09 00:00:00', 'hum': '93', 'pcpn': '7.6', 'pop': '61', 'pres': '969', 
                        'tmp_max': '21', 'tmp_min': '14', 'uv_index': '5', 'vis': '24', 'wind_deg': '255', 'wind_dir': 'SW', 'wind_sc': '1-2', 'wind_spd': '6'}, 
                    {'cond_code_d': '300', 'cond_code_n': '101', 'cond_txt_d': 'Shower Rain', 'cond_txt_n': 'Cloudy', 'date': '2021-07-10', 'time': '2021-07-10 00:00:00', 'hum': '73', 'pcpn': '4.8', 'pop': '67', 'pres': '965', 
                        'tmp_max': '22', 'tmp_min': '13', 'uv_index': '4', 'vis': '25', 'wind_deg': '127', 'wind_dir': 'SE', 'wind_sc': '1-2', 'wind_spd': '6'},
                    {'cond_code_d': '103', 'cond_code_n': '103', 'cond_txt_d': 'Partly Cloudy', 'cond_txt_n': 'Partly Cloudy', 'date': '2021-07-11', 'time': '2021-07-11 00:00:00', 'hum': '69', 'pcpn': '1.1', 'pop': '56', 'pres': '966', 
                        'tmp_max': '24', 'tmp_min': '15', 'uv_index': '8', 'vis': '25', 'wind_deg': '106', 'wind_dir': 'SE', 'wind_sc': '1-2', 'wind_spd': '6'},  
                    {'cond_code_d': '999', 'cond_code_n': '999', 'cond_txt_d': '-', 'cond_txt_n': '-', 'date': '2021-07-12', 'time': '2021-07-12 00:00:00', 'hum': '-', 'pcpn': '-', 'pop': '-', 'pres': '-', 
                        'tmp_max': '-', 'tmp_min': '-', 'uv_index': '-', 'vis': '-', 'wind_deg': '-', 'wind_dir': '--', 'wind_sc': '--', 'wind_spd': '-'},  
                    {'cond_code_d': '999', 'cond_code_n': '999', 'cond_txt_d': '-', 'cond_txt_n': '-', 'date': '2021-07-13', 'time': '2021-07-13 00:00:00', 'hum': '-', 'pcpn': '-', 'pop': '-', 'pres': '-', 
                        'tmp_max': '-', 'tmp_min': '-', 'uv_index': '-', 'vis': '-', 'wind_deg': '-', 'wind_dir': '--', 'wind_sc': '--', 'wind_spd': '-'}],
                     
                'basic': {'cid': 'A3870', 
                        'location': 'Blbov', 
                        'cnty': 'Czech Republic', 
                        'lat': '49.111111', 
                        'lon': '13.111111', 
                        'tz': '+2.00'}, 
                        'update': {'loc': '2021-07-06 00:30:00', 'utc': '2021-07-05 22:30:00'}, 
                        'status': 'ok'}]}, 

'inverter': [
    {'sn': '98000ETU211X1118', 
    'dict': {'left': [{'isHT': False, 'key': 'dmDeviceType', 'value': 'GW8K-ET', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'serialNum', 'value': '98000ETU211X1118', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'laCheckcode', 'value': '031027', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'capacity', 'value': '8', 'unit': 'kW', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'innerTemp', 'value': '40.7', 'unit': '℃', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'ouptputPower', 'value': '1318', 'unit': 'W', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'outputV', 'value': '237.6/241.9/239.6', 'unit': 'V', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'bakupOutput', 'value': '21', 'unit': 'W', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'bakupV', 'value': '237.3/242.1/239.5', 'unit': 'V', 'isFaultMsg': 0, 'faultMsgCode': 0}], 
            'right': [{'isHT': False, 'key': 'dcVandC1', 'value': '0/0', 'unit': 'V/A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'dcVandC2', 'value': '0/0', 'unit': 'V/A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'StatusOfBattery', 'value': '294.4/4.5/1325', 'unit': 'V/A/W', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'batteryStatus', 'value': 'DischargingOfBattery', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'warnBMS', 'value': 'Normal', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'chargeClimitBMS', 'value': '25', 'unit': 'A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'dischargeClimitBMS', 'value': '25', 'unit': 'A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'SOH', 'value': '100', 'unit': '%', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                      {'isHT': False, 'key': 'firmwareVersion', 'value': '616', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}]}, 
    'is_stored': True, 
    'name': 'GW8K-ET', 
    'in_pac': 0.0, 
    'out_pac': 0.0, 
    'eday': 50.6, 
    'emonth': 133.1, 
    'etotal': 4531.5, 
    'status': 1, 
    'turnon_time': '10/26/2020 20:44:50', 
    'releation_id': '4f0ff1fb-5320-4308-a397-8111111efb1b', 
    'type': 'GW8K-ET', 
    'capacity': 8.0, 
    'd': {'pw_id': '131ffabf-df0e-46b2-99dd-301111110d96', 
            'capacity': '8kW', 
            'model': 'GW8K-ET', 
            'output_power': '1318W', 
            'output_current': '0.7A', 
            'grid_voltage': '237.6V/241.9V/239.6V', 
            'backup_output': '237.3V/21W', 
            'soc': '47%', 
            'soh': '100%', 
            'last_refresh_time': '07.06.2021 23:22:59', 
            'work_mode': 'Wait Mode', 
            'dc_input1': '0V/0A', 
            'dc_input2': '0V/0A', 
            'battery': '294.4V/4.5A/1325W', 
            'bms_status': 'DischargingOfBattery', 
            'warning': 'Normal', 
            'charge_current_limit': '25A', 
            'discharge_current_limit': '25A', 
            'firmware_version': 616.0, 
            'creationDate': '07/07/2021 05:22:59', 
            'eDay': 50.6, 
            'eTotal': 4531.5, 
            'pac': 0.0, 
            'hTotal': 5437.0, 
            'vpv1': 0.0, 
            'vpv2': 0.0, 
            'vpv3': None, 
            'vpv4': None, 
            'ipv1': 0.0, 
            'ipv2': 0.0, 
            'ipv3': None, 
            'ipv4': None, 
            'vac1': 237.6, 
            'vac2': 241.9, 
            'vac3': 239.6, 
            'iac1': 0.7, 
            'iac2': 5.0, 
            'iac3': 0.4, 
            'fac1': 50.01, 
            'fac2': 50.0, 
            'fac3': 50.0, 
            'istr1': 0.0, 
            'istr2': 0.0, 
            'istr3': None, 
            'istr4': None, 
            'istr5': None, 
            'istr6': 9.8, 
            'istr7': None, 
            'istr8': 120.8, 
            'istr9': None, 
            'istr10': 2.1, 
            'istr11': None, 
            'istr12': 0.0, 
            'istr13': 0.0, 
            'istr14': 0.0, 
            'istr15': 0.0, 
            'istr16': 0.0}, 
    'it_change_flag': False, 
    'tempperature': 40.7, 
    'check_code': '031027', 
    'next': '98000ETU111X1111', 
    'prev': None, 
    'next_device': {'sn': '98000ETU111X1111', 'isStored': True}, 
    'prev_device': {'sn': None, 'isStored': False}, 
    'invert_full': {'sn': '98000ETU211X1118', 
        'powerstation_id': '131ffabf-df0e-46b2-99dd-301111110d96', 
        'name': 'GW8K-ET', 
        'model_type': 'GW8K-ET', 
        'change_type': 0, 
        'change_time': 0, 
        'capacity': 8.0, 
        'eday': 50.6, 
        'iday': 9.152000000000001, 
        'etotal': 4531.5, 
        'itotal': 924.55, 
        'hour_total': 5437.0, 
        'status': 1, 
        'turnon_time': 1603716290753, 
        'pac': 0.0, 
        'tempperature': 40.7, 
        'vpv1': 0.0, 
        'vpv2': 0.0, 
        'vpv3': None, 
        'vpv4': None, 
        'ipv1': 0.0, 
        'ipv2': 0.0, 
        'ipv3': None, 
        'ipv4': None, 
        'vac1': 237.6, 
        'vac2': 241.9, 
        'vac3': 239.6, 
        'iac1': 0.7, 
        'iac2': 5.0, 
        'iac3': 0.4, 
        'fac1': 50.01, 
        'fac2': 50.0, 
        'fac3': 50.0, 
        'istr1': 0.0, 
        'istr2': 0.0, 
        'istr3': None, 
        'istr4': None, 
        'istr5': None, 
        'istr6': 9.8, 
        'istr7': None, 
        'istr8': 120.8, 
        'istr9': None, 
        'istr10': 2.1, 
        'istr11': None, 
        'istr12': 0.0, 
        'istr13': 0.0, 
        'istr14': 0.0, 
        'istr15': 0.0, 
        'istr16': 0.0, 
        'last_time': 1625606579316, 
        'vbattery1': 294.4, 
        'ibattery1': 4.5, 
        'pmeter': -22.0, 
        'soc': 47.0, 
        'soh': 100.0, 
        'bms_discharge_i_max': 25.0, 
        'bms_charge_i_max': 25.0, 
        'bms_warning': 0, 
        'bms_alarm': 0, 
        'battary_work_mode': 2, 
        'workmode': 1, 
        'vload': 237.3, 
        'iload': 0.3, 
        'firmwareversion': 6.0, 
        'pbackup': 21.0, 
        'seller': 32.05, 
        'buy': 55.69, 
        'yesterdaybuytotal': 3464.313, 
        'yesterdaysellertotal': 2847.36, 
        'yesterdayct2sellertotal': None, 
        'yesterdayetotal': 4480.9, 
        'yesterdayetotalload': 933.5, 
        'yesterdaylastime': 0, 
        'thismonthetotle': 133.1, 
        'lastmonthetotle': 4347.8, 
        'ram': 16.0, 
        'outputpower': 1318.0, 
        'fault_messge': 0, 
        'isbuettey': True, 
        'isbuetteybps': False, 
        'isbuetteybpu': False, 
        'isESUOREMU': False, 
        'backUpPload_S': 12.0, 
        'backUpVload_S': 242.1, 
        'backUpIload_S': 0.3, 
        'backUpPload_T': 0.0, 
        'backUpVload_T': 239.5, 
        'backUpIload_T': 0.3, 
        'eTotalBuy': 45.2, 
        'eDayBuy': 0.1, 
        'eBatteryCharge': 1746.4, 
        'eChargeDay': 15.3, 
        'eBatteryDischarge': 1581.7, 
        'eDischargeDay': 7.6, 
        'battStrings': 147.6, 
        'meterConnectStatus': 0.0, 
        'mtActivepowerR': -5.0, 
        'mtActivepowerS': -14.0, 
        'mtActivepowerT': -2.0, 
        'ezPro_connect_status': None, 
        'dataloggersn': '', 
        'equipment_name': None, 
        'hasmeter': True, 
        'meter_type': 0.0, 
        'pre_hour_lasttotal': 1590.8, 
        'pre_hour_time': 1617958763580, 
        'current_hour_pv': 0.0, 
        'extend_properties': None, 
        'eP_connect_status_happen': None, 
        'eP_connect_status_recover': None, 
        'total_sell': 2879.413, 
        'total_buy': 3520.006, 
        'errors': None}, 
    'time': '07/06/2021 23:23:46', 
    'battery': '294.4V/4.5A/1325W', 
    'firmware_version': 616.0, 
    'warning_bms': 'Normal', 
    'soh': '100%', 
    'discharge_current_limit_bms': '25A', 
    'charge_current_limit_bms': '25A', 
    'soc': '47%', 
    'pv_input_2': '0V/0A', 
    'pv_input_1': '0V/0A', 
    'back_up_output': '237.3V/21W', 
    'output_voltage': '237.6V/241.9V/239.6V', 
    'backup_voltage': '237.3V/242.1V/239.5V', 
    'output_current': '0.7A', 
    'output_power': '1318W', 
    'total_generation': '4531.5kWh', 
    'daily_generation': '50.6kWh', 
    'battery_charging': '294.4V/4.5A/1325W', 
    'last_refresh_time': '07/06/2021 23:22:59', 
    'bms_status': 'DischargingOfBattery', 
    'pw_id': '131ffabf-df0e-46b2-99dd-301111110d96', 
    'fault_message': '', 
    'battery_power': 1324.8, 
    'point_index': '12', 
    'points': [{'target_index': 1, 'target_name': 'Vpv1', 'display': 'Vpv1(V)', 'unit': 'V', 'target_key': 'Vpv1', 'text_cn': '直流电压1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 2, 'target_name': 'Vpv2', 'display': 'Vpv2(V)', 'unit': 'V', 'target_key': 'Vpv2', 'text_cn': '直流电压2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 5, 'target_name': 'Ipv1', 'display': 'Ipv1(A)', 'unit': 'A', 'target_key': 'Ipv1', 'text_cn': '直流电流1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 6, 'target_name': 'Ipv2', 'display': 'Ipv2(A)', 'unit': 'A', 'target_key': 'Ipv2', 'text_cn': '直流电流2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 9, 'target_name': 'Vac1', 'display': 'Vac1(V)', 'unit': 'V', 'target_key': 'Vac1', 'text_cn': '交流电压1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 10, 'target_name': 'Vac2', 'display': 'Vac2(V)', 'unit': 'V', 'target_key': 'Vac2', 'text_cn': '交流电压2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 11, 'target_name': 'Vac3', 'display': 'Vac3(V)', 'unit': 'V', 'target_key': 'Vac3', 'text_cn': '交流电压3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 12, 'target_name': 'Iac1', 'display': 'Iac1(A)', 'unit': 'A', 'target_key': 'Iac1', 'text_cn': '交流电流1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 13, 'target_name': 'Iac2', 'display': 'Iac2(A)', 'unit': 'A', 'target_key': 'Iac2', 'text_cn': '交流电流2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 14, 'target_name': 'Iac3', 'display': 'Iac3(A)', 'unit': 'A', 'target_key': 'Iac3', 'text_cn': '交流电流3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 15, 'target_name': 'Fac1', 'display': 'Fac1(Hz)', 'unit': 'Hz', 'target_key': 'Fac1', 'text_cn': '频率1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 16, 'target_name': 'Fac2', 'display': 'Fac2(Hz)', 'unit': 'Hz', 'target_key': 'Fac2', 'text_cn': '频率2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 17, 'target_name': 'Fac3', 'display': 'Fac3(Hz)', 'unit': 'Hz', 'target_key': 'Fac3', 'text_cn': '频率3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 19, 'target_name': 'WorkMode', 'display': 'WorkMode()', 'unit': '', 'target_key': 'WorkMode', 'text_cn': '工作模式', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 20, 'target_name': 'Temperature', 'display': 'Temperature(℃)', 'unit': '℃', 'target_key': 'Tempperature', 'text_cn': '温度', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 23, 'target_name': 'HTotal', 'display': 'HTotal(h)', 'unit': 'h', 'target_key': 'HTotal', 'text_cn': '工作时长', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 37, 'target_name': 'PV Generation', 'display': 'PV Generation(kWh)', 'unit': 'kWh', 'target_key': 'pv_etotal_l+pv_etotal_h*65536', 'text_cn': '光伏发电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 38, 'target_name': 'Pmeter', 'display': 'Pmeter(W)', 'unit': 'W', 'target_key': 'Pac_EXP_1', 'text_cn': '电表功率', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 39, 'target_name': 'Pbackup', 'display': 'Pbackup(W)', 'unit': 'W', 'target_key': 'Pbackup', 'text_cn': '后备输出功率', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 40, 'target_name': 'Vbackup', 'display': 'Vbackup(V)', 'unit': 'V', 'target_key': 'Vload', 'text_cn': '后备输出电压1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 41, 'target_name': 'Ibackup', 'display': 'Ibackup(A)', 'unit': 'A', 'target_key': 'Iload', 'text_cn': '后备输出电流1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 42, 'target_name': 'Vbat', 'display': 'Vbat(V)', 'unit': 'V', 'target_key': 'VBattery1', 'text_cn': '电池电压', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 43, 'target_name': 'Ibat', 'display': 'Ibat(A)', 'unit': 'A', 'target_key': 'IBattery1', 'text_cn': '电池电流', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 44, 'target_name': 'SOC', 'display': 'SOC(%)', 'unit': '%', 'target_key': 'Cbattery1', 'text_cn': '电池电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 45, 'target_name': 'SOH', 'display': 'SOH(%)', 'unit': '%', 'target_key': 'SOH', 'text_cn': '电池健康度', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 46, 'target_name': 'BMS_Temperature', 'display': 'BMS_Temperature(℃)', 'unit': '℃', 'target_key': 'BMS_Temperature', 'text_cn': '电池温度', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 47, 'target_name': 'BMS_Charge_I_Max', 'display': 'BMS_Charge_I_Max(A)', 'unit': 'A', 'target_key': 'BMS_Charge_I_Max', 'text_cn': '电池充电最大电流', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 48, 'target_name': 'BMS_Discharge_I_Max', 'display': 'BMS_Discharge_I_Max(A)', 'unit': 'A', 'target_key': 'BMS_Discharge_I_Max', 'text_cn': '电池放电最大电流', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 49, 'target_name': 'Daily Output', 'display': 'Daily Output(kWh)', 'unit': 'kWh', 'target_key': 'EDay_EXP_1', 'text_cn': '日输出电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 50, 'target_name': 'Total Output', 'display': 'Total Output(kWh)', 'unit': 'kWh', 'target_key': 'ETotal_EXP_1', 'text_cn': '总输出电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 51, 'target_name': 'Pbackup1', 'display': 'Pbackup1(W)', 'unit': 'W', 'target_key': 'BackUpPload_R', 'text_cn': '后备输出功率1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 52, 'target_name': 'Pbackup2', 'display': 'Pbackup2(W)', 'unit': 'W', 'target_key': 'BackUpPload_S', 'text_cn': '后备输出功率2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 53, 'target_name': 'Istr18', 'display': 'Istr18(V)', 'unit': 'V', 'target_key': 'Vbackup2', 'text_cn': '后备输出电压2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 54, 'target_name': 'Ibackup2', 'display': 'Ibackup2(A)', 'unit': 'A', 'target_key': 'BackUpIload_S', 'text_cn': '后备输出电流2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 55, 'target_name': 'Pbackup3', 'display': 'Pbackup3(W)', 'unit': 'W', 'target_key': 'BackUpPload_T', 'text_cn': '后备输出功率3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 56, 'target_name': 'Vbackup3', 'display': 'Vbackup3(V)', 'unit': 'V', 'target_key': 'BackUpVload_T', 'text_cn': '后备输出电压3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 57, 'target_name': 'Ibackup3', 'display': 'Ibackup3(A)', 'unit': 'A', 'target_key': 'BackUpIload_T', 'text_cn': '后备输出电流3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 58, 'target_name': 'Pmeter phase 1', 'display': 'Pmeter phase 1(W)', 'unit': 'W', 'target_key': 'MTActivepowerR', 'text_cn': '电表功率1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 59, 'target_name': 'Pmeter phase 2', 'display': 'Pmeter phase 2(W)', 'unit': 'W', 'target_key': 'MTActivepowerS', 'text_cn': '电表功率2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
               {'target_index': 60, 'target_name': 'Pmeter phase 3', 'display': 'Pmeter phase 3(W)', 'unit': 'W', 'target_key': 'MTActivepowerT', 'text_cn': '电表功率3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}], 
    'backup_pload_s': 12.0, 
    'backup_vload_s': 242.1, 
    'backup_iload_s': 0.3, 
    'backup_pload_t': 0.0, 
    'backup_vload_t': 239.5, 
    'backup_iload_t': 0.3, 
    'etotal_buy': 45.2, 
    'eday_buy': 0.1, 
    'ebattery_charge': 1581.7, 
    'echarge_day': 15.3, 
    'ebattery_discharge': 1581.7, 
    'edischarge_day': 7.6, 
    'batt_strings': 147.6, 
    'meter_connect_status': 0.0, 
    'mtactivepower_r': -5.0, 
    'mtactivepower_s': -14.0, 
    'mtactivepower_t': -2.0, 
    'has_tigo': False, 
    'canStartIV': False}, 



    {'sn': '98000ETU111X1111', 
    'dict': 
        {'left': [{'isHT': False, 'key': 'dmDeviceType', 'value': 'GW8K-ET', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'serialNum', 'value': '98000ETU111X1111', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'laCheckcode', 'value': '055705', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'capacity', 'value': '8', 'unit': 'kW', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'innerTemp', 'value': '39.9', 'unit': '℃', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'ouptputPower', 'value': '1216', 'unit': 'W', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'outputV', 'value': '238/243.5/240.2', 'unit': 'V', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'bakupOutput', 'value': '30', 'unit': 'W', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'bakupV', 'value': '236.6/242.6/238.8', 'unit': 'V', 'isFaultMsg': 0, 'faultMsgCode': 0}], 
        'right': [{'isHT': False, 'key': 'dcVandC1', 'value': '0/0', 'unit': 'V/A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'dcVandC2', 'value': '0/0', 'unit': 'V/A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'StatusOfBattery', 'value': '294.4/4.2/1236', 'unit': 'V/A/W', 'isFaultMsg': 0, 'faultMsgCode': 0},        
                  {'isHT': False, 'key': 'batteryStatus', 'value': 'DischargingOfBattery', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0},         
                  {'isHT': False, 'key': 'warnBMS', 'value': 'Normal', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0},         
                  {'isHT': False, 'key': 'chargeClimitBMS', 'value': '25', 'unit': 'A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'dischargeClimitBMS', 'value': '25', 'unit': 'A', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'SOH', 'value': '100', 'unit': '%', 'isFaultMsg': 0, 'faultMsgCode': 0}, 
                  {'isHT': False, 'key': 'firmwareVersion', 'value': '616', 'unit': '', 'isFaultMsg': 0, 'faultMsgCode': 0}]}, 
        'is_stored': True, 'name': 'GW8K-ET', 'in_pac': 0.0, 'out_pac': 0.0, 'eday': 50.4, 'emonth': 132.3, 'etotal': 4257.2, 'status': 1, 'turnon_time': '12/18/2020 22:19:58', 'releation_id': '38533274-7243-4a96-b11d-111111111111', 'type': 'GW8K-ET', 'capacity': 8.0, 
        'd': {'pw_id': '131ffabf-df0e-46b2-99dd-301111110d96', 'capacity': '8kW', 'model': 'GW8K-ET', 'output_power': '1216W', 'output_current': '0.7A', 
              'grid_voltage': '238V/243.5V/240.2V', 'backup_output': '236.6V/30W', 'soc': '48%', 'soh': '100%', 'last_refresh_time': '07.06.2021 23:22:55', 
              'work_mode': 'Wait Mode', 'dc_input1': '0V/0A', 'dc_input2': '0V/0A', 'battery': '294.4V/4.2A/1236W', 'bms_status': 'DischargingOfBattery', 
              'warning': 'Normal', 'charge_current_limit': '25A', 'discharge_current_limit': '25A', 'firmware_version': 616.0, 'creationDate': '07/07/2021 05:22:55', 'eDay': 50.4, 'eTotal': 4257.2, 'pac': 0.0, 'hTotal': 4157.0, 
              'vpv1': 0.0, 'vpv2': 0.0, 'vpv3': None, 'vpv4': None, 'ipv1': 0.0, 'ipv2': 0.0, 'ipv3': None, 'ipv4': None, 'vac1': 238.0, 'vac2': 243.5, 'vac3': 240.2, 
              'iac1': 0.7, 'iac2': 4.5, 'iac3': 0.4, 'fac1': 50.01, 'fac2': 50.0, 'fac3': 50.0, 
              'istr1': 0.0, 'istr2': 0.0, 'istr3': None, 'istr4': None, 'istr5': None, 'istr6': 11.9, 'istr7': None, 'istr8': 106.8, 'istr9': None, 'istr10': 2.8, 'istr11': None, 'istr12': 0.0, 'istr13': 0.0, 'istr14': 0.0, 'istr15': 0.0, 'istr16': 0.0}, 
        'it_change_flag': False, 'tempperature': 39.9, 'check_code': '055705', 'next': None, 'prev': '98000ETU211X1118', 
        'next_device': {'sn': None, 'isStored': False}, 'prev_device': {'sn': '98000ETU211X1118', 'isStored': True}, 
        'invert_full': {'sn': '98000ETU111X1111', 'powerstation_id': '131ffabf-df0e-46b2-99dd-301111110d96', 'name': 'GW8K-ET', 'model_type': 'GW8K-ET', 'change_type': 0, 'change_time': 0, 'capacity': 8.0, 
            'eday': 50.4, 'iday': 9.504000000000001, 'etotal': 4257.2, 'itotal': 893.8380000000001, 'hour_total': 4157.0, 'status': 1, 'turnon_time': 1608301198920, 
            'pac': 0.0, 'tempperature': 39.9, 'vpv1': 0.0, 'vpv2': 0.0, 'vpv3': None, 'vpv4': None, 'ipv1': 0.0, 'ipv2': 0.0, 'ipv3': None, 'ipv4': None, 
            'vac1': 238.0, 'vac2': 243.5, 'vac3': 240.2, 'iac1': 0.7, 'iac2': 4.5, 'iac3': 0.4, 'fac1': 50.01, 'fac2': 50.0, 'fac3': 50.0, 
            'istr1': 0.0, 'istr2': 0.0, 'istr3': None, 'istr4': None, 'istr5': None, 'istr6': 11.9, 'istr7': None, 'istr8': 106.8, 'istr9': None, 'istr10': 2.8, 'istr11': None, 'istr12': 0.0, 'istr13': 0.0, 'istr14': 0.0, 'istr15': 0.0, 'istr16': 0.0, 
            'last_time': 1625606575654, 'vbattery1': 294.4, 'ibattery1': 4.2, 'pmeter': -29.0, 'soc': 48.0, 'soh': 100.0, 'bms_discharge_i_max': 25.0, 'bms_charge_i_max': 25.0, 'bms_warning': 0, 'bms_alarm': 0, 'battary_work_mode': 2, 
            'workmode': 1, 'vload': 236.6, 'iload': 0.3, 'firmwareversion': 6.0, 'pbackup': 30.0, 'seller': 32.05, 'buy': 55.69, 
            'yesterdaybuytotal': 3464.313, 'yesterdaysellertotal': 2847.36, 'yesterdayct2sellertotal': None, 'yesterdayetotal': 4206.8, 'yesterdayetotalload': 220.6, 'yesterdaylastime': 0, 
            'thismonthetotle': 132.3, 'lastmonthetotle': 4074.5, 'ram': 16.0, 'outputpower': 1216.0, 'fault_messge': 0, 'isbuettey': True, 'isbuetteybps': False, 'isbuetteybpu': False, 'isESUOREMU': False, 
            'backUpPload_S': 17.0, 'backUpVload_S': 242.6, 'backUpIload_S': 0.3, 'backUpPload_T': 4.0, 'backUpVload_T': 238.8, 'backUpIload_T': 0.4, 
            'eTotalBuy': 20.4, 'eDayBuy': 0.1, 'eBatteryCharge': 1661.9, 'eChargeDay': 14.7, 'eBatteryDischarge': 1466.5, 'eDischargeDay': 8.2, 
            'battStrings': 131.0, 'meterConnectStatus': 0.0, 'mtActivepowerR': -39.0, 'mtActivepowerS': -1.0, 'mtActivepowerT': 12.0, 'ezPro_connect_status': None, 
            'dataloggersn': '', 'equipment_name': None, 'hasmeter': True, 'meter_type': 0.0, 'pre_hour_lasttotal': 1370.8, 'pre_hour_time': 1617958743075, 'current_hour_pv': 0.0, 'extend_properties': None, 
            'eP_connect_status_happen': None, 'eP_connect_status_recover': None, 'total_sell': 2879.413, 'total_buy': 3520.006, 'errors': None}, 
        'time': '07/06/2021 23:23:46', 'battery': '294.4V/4.2A/1236W', 'firmware_version': 616.0, 'warning_bms': 'Normal', 'soh': '100%', 
        'discharge_current_limit_bms': '25A', 'charge_current_limit_bms': '25A', 'soc': '48%', 'pv_input_2': '0V/0A', 'pv_input_1': '0V/0A', 
        'back_up_output': '236.6V/30W', 'output_voltage': '238V/243.5V/240.2V', 'backup_voltage': '236.6V/242.6V/238.8V', 'output_current': '0.7A', 
        'output_power': '1216W', 'total_generation': '4257.2kWh', 'daily_generation': '50.4kWh', 'battery_charging': '294.4V/4.2A/1236W', 
        'last_refresh_time': '07/06/2021 23:22:55', 'bms_status': 'DischargingOfBattery', 'pw_id': '131ffabf-df0e-46b2-99dd-301111110d96', 'fault_message': '', 
        'battery_power': 1236.48, 'point_index': '12', 
        'points': [{'target_index': 1, 'target_name': 'Vpv1', 'display': 'Vpv1(V)', 'unit': 'V', 'target_key': 'Vpv1', 'text_cn': '直流电压1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 2, 'target_name': 'Vpv2', 'display': 'Vpv2(V)', 'unit': 'V', 'target_key': 'Vpv2', 'text_cn': '直流电压2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 5, 'target_name': 'Ipv1', 'display': 'Ipv1(A)', 'unit': 'A', 'target_key': 'Ipv1', 'text_cn': '直流电流1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 6, 'target_name': 'Ipv2', 'display': 'Ipv2(A)', 'unit': 'A', 'target_key': 'Ipv2', 'text_cn': '直流电流2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 9, 'target_name': 'Vac1', 'display': 'Vac1(V)', 'unit': 'V', 'target_key': 'Vac1', 'text_cn': '交流电压1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 10, 'target_name': 'Vac2', 'display': 'Vac2(V)', 'unit': 'V', 'target_key': 'Vac2', 'text_cn': '交流电压2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 11, 'target_name': 'Vac3', 'display': 'Vac3(V)', 'unit': 'V', 'target_key': 'Vac3', 'text_cn': '交流电压3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 12, 'target_name': 'Iac1', 'display': 'Iac1(A)', 'unit': 'A', 'target_key': 'Iac1', 'text_cn': '交流电流1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 13, 'target_name': 'Iac2', 'display': 'Iac2(A)', 'unit': 'A', 'target_key': 'Iac2', 'text_cn': '交流电流2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 14, 'target_name': 'Iac3', 'display': 'Iac3(A)', 'unit': 'A', 'target_key': 'Iac3', 'text_cn': '交流电流3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 15, 'target_name': 'Fac1', 'display': 'Fac1(Hz)', 'unit': 'Hz', 'target_key': 'Fac1', 'text_cn': '频率1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 16, 'target_name': 'Fac2', 'display': 'Fac2(Hz)', 'unit': 'Hz', 'target_key': 'Fac2', 'text_cn': '频率2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 17, 'target_name': 'Fac3', 'display': 'Fac3(Hz)', 'unit': 'Hz', 'target_key': 'Fac3', 'text_cn': '频率3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 19, 'target_name': 'WorkMode', 'display': 'WorkMode()', 'unit': '', 'target_key': 'WorkMode', 'text_cn': '工作模式', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 20, 'target_name': 'Temperature', 'display': 'Temperature(℃)', 'unit': '℃', 'target_key': 'Tempperature', 'text_cn': '温度', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 23, 'target_name': 'HTotal', 'display': 'HTotal(h)', 'unit': 'h', 'target_key': 'HTotal', 'text_cn': '工作时长', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 37, 'target_name': 'PV Generation', 'display': 'PV Generation(kWh)', 'unit': 'kWh', 'target_key': 'pv_etotal_l+pv_etotal_h*65536', 'text_cn': '光伏发电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 38, 'target_name': 'Pmeter', 'display': 'Pmeter(W)', 'unit': 'W', 'target_key': 'Pac_EXP_1', 'text_cn': '电表功率', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 39, 'target_name': 'Pbackup', 'display': 'Pbackup(W)', 'unit': 'W', 'target_key': 'Pbackup', 'text_cn': '后备输出功率', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 40, 'target_name': 'Vbackup', 'display': 'Vbackup(V)', 'unit': 'V', 'target_key': 'Vload', 'text_cn': '后备输出电压1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 41, 'target_name': 'Ibackup', 'display': 'Ibackup(A)', 'unit': 'A', 'target_key': 'Iload', 'text_cn': '后备输出电流1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 42, 'target_name': 'Vbat', 'display': 'Vbat(V)', 'unit': 'V', 'target_key': 'VBattery1', 'text_cn': '电池电压', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 43, 'target_name': 'Ibat', 'display': 'Ibat(A)', 'unit': 'A', 'target_key': 'IBattery1', 'text_cn': '电池电流', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 44, 'target_name': 'SOC', 'display': 'SOC(%)', 'unit': '%', 'target_key': 'Cbattery1', 'text_cn': '电池电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 45, 'target_name': 'SOH', 'display': 'SOH(%)', 'unit': '%', 'target_key': 'SOH', 'text_cn': '电池健康度', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 46, 'target_name': 'BMS_Temperature', 'display': 'BMS_Temperature(℃)', 'unit': '℃', 'target_key': 'BMS_Temperature', 'text_cn': '电池温度', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 47, 'target_name': 'BMS_Charge_I_Max', 'display': 'BMS_Charge_I_Max(A)', 'unit': 'A', 'target_key': 'BMS_Charge_I_Max', 'text_cn': '电池充电最大电流', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 48, 'target_name': 'BMS_Discharge_I_Max', 'display': 'BMS_Discharge_I_Max(A)', 'unit': 'A', 'target_key': 'BMS_Discharge_I_Max', 'text_cn': '电池放电最大电流', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 49, 'target_name': 'Daily Output', 'display': 'Daily Output(kWh)', 'unit': 'kWh', 'target_key': 'EDay_EXP_1', 'text_cn': '日输出电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 50, 'target_name': 'Total Output', 'display': 'Total Output(kWh)', 'unit': 'kWh', 'target_key': 'ETotal_EXP_1', 'text_cn': '总输出电量', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 51, 'target_name': 'Pbackup1', 'display': 'Pbackup1(W)', 'unit': 'W', 'target_key': 'BackUpPload_R', 'text_cn': '后备输出功率1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 52, 'target_name': 'Pbackup2', 'display': 'Pbackup2(W)', 'unit': 'W', 'target_key': 'BackUpPload_S', 'text_cn': '后备输出功率2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 53, 'target_name': 'Istr18', 'display': 'Istr18(V)', 'unit': 'V', 'target_key': 'Vbackup2', 'text_cn': '后备输出电压2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 54, 'target_name': 'Ibackup2', 'display': 'Ibackup2(A)', 'unit': 'A', 'target_key': 'BackUpIload_S', 'text_cn': '后备输出电流2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 55, 'target_name': 'Pbackup3', 'display': 'Pbackup3(W)', 'unit': 'W', 'target_key': 'BackUpPload_T', 'text_cn': '后备输出功率3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 56, 'target_name': 'Vbackup3', 'display': 'Vbackup3(V)', 'unit': 'V', 'target_key': 'BackUpVload_T', 'text_cn': '后备输出电压3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 57, 'target_name': 'Ibackup3', 'display': 'Ibackup3(A)', 'unit': 'A', 'target_key': 'BackUpIload_T', 'text_cn': '后备输出电流3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 58, 'target_name': 'Pmeter phase 1', 'display': 'Pmeter phase 1(W)', 'unit': 'W', 'target_key': 'MTActivepowerR', 'text_cn': '电表功率1', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 59, 'target_name': 'Pmeter phase 2', 'display': 'Pmeter phase 2(W)', 'unit': 'W', 'target_key': 'MTActivepowerS', 'text_cn': '电表功率2', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}, 
                   {'target_index': 60, 'target_name': 'Pmeter phase 3', 'display': 'Pmeter phase 3(W)', 'unit': 'W', 'target_key': 'MTActivepowerT', 'text_cn': '电表功率3', 'target_sn_six': None, 'target_sn_seven': None, 'target_type': None, 'storage_name': None}], 
            'backup_pload_s': 17.0, 'backup_vload_s': 242.6, 'backup_iload_s': 0.3, 'backup_pload_t': 4.0, 'backup_vload_t': 238.8, 'backup_iload_t': 0.4, 'etotal_buy': 20.4, 'eday_buy': 0.1, 
            'ebattery_charge': 1466.5, 'echarge_day': 14.7, 'ebattery_discharge': 1466.5, 'edischarge_day': 8.2, 'batt_strings': 131.0, 'meter_connect_status': 0.0, 'mtactivepower_r': -39.0, 'mtactivepower_s': -1.0, 
            'mtactivepower_t': 12.0, 'has_tigo': False, 'canStartIV': False}], 'hjgx': {'co2': 8.762333900000002, 'tree': 480.302455, 'coal': 3.5506348000000005}, 'pre_powerstation_id': None, 'nex_powerstation_id': None, 
            'homKit': {'homeKitLimit': False, 'sn': None}, 'isTigo': False, 'tigoIntervalTimeMinute': 15, 
            'smuggleInfo': {'isAllSmuggle': False, 'isSmuggle': False, 'descriptionText': None, 'sns': None}, 
            'hasPowerflow': True, 'powerflow': {'pv': '0(W)', 'pvStatus': -1, 'bettery': '2561.28(W)', 'betteryStatus': 2, 'betteryStatusStr': None, 'load': '2590.28(W)', 'loadStatus': 1, 
            'grid': '29(W)', 'soc': 48, 'socText': '48%', 'hasEquipment': True, 'gridStatus': 1, 'isHomKit': False, 'isBpuAndInverterNoBattery': False}, 'hasEnergeStatisticsCharts': True, 
            'energeStatisticsCharts': {'contributingRate': 0.55, 'selfUseRate': 0.68, 'sum': 101.0, 'buy': 55.69, 'buyPercent': 44.7, 'sell': 32.05, 'sellPercent': 31.7, 'selfUseOfPv': 68.95, 'consumptionOfLoad': 124.64, 'chartsType': 1, 'hasPv': True, 'hasCharge': False, 'charge': 0.0, 'disCharge': 0.0}, 
            'energeStatisticsTotals': {'contributingRate': 0.0, 'selfUseRate': 0.0, 'sum': 8735.7, 'buy': 13712265.6, 'buyPercent': 100.0, 'sell': 12810171.7, 
                'sellPercent': 100.0, 'selfUseOfPv': 0.0, 'consumptionOfLoad': 13712265.59, 'chartsType': 1, 'hasPv': True, 'hasCharge': False, 'charge': 0.0, 'disCharge': 0.0}, 
            'soc': {'power': 48, 'status': 2}, 
            'environmental': [], 
            'equipment': [{'type': '5', 'title': 'GW8K-ET', 'status': 1, 'statusText': None, 'capacity': None, 'actionThreshold': None, 'subordinateEquipment': '', 
                            'powerGeneration': 'PV:0(kW)', 'eday': 'Today Generation: 50.6(kWh)', 'brand': '', 'isStored': True, 'soc': 'SOC:47%', 'isChange': False, 
                            'relationId': '4f0ff1fb-5320-4308-a397-8111111efb1b', 'sn': '98000ETU211X1118', 'has_tigo': False, 'is_sec': False, 'is_secs': False, 'targetPF': None, 'exportPowerlimit': None}, 
                         {'type': '5', 'title': 'GW8K-ET', 'status': 1, 'statusText': None, 'capacity': None, 'actionThreshold': None, 'subordinateEquipment': '', 
                            'powerGeneration': 'PV:0(kW)', 'eday': 'Today Generation: 50.4(kWh)', 'brand': '', 'isStored': True, 'soc': 'SOC:48%', 'isChange': False, 
                            'relationId': '38533274-7243-4a96-b11d-111111111111', 'sn': '98000ETU111X1111', 'has_tigo': False, 'is_sec': False, 'is_secs': False, 'targetPF': None, 'exportPowerlimit': None}]}, 



'components': {'para': '{"model":{"PowerStationId":"131ffabf-df0e-46b2-99dd-301111110d96"}}', 'langVer': 107, 'timeSpan': 78, 'api': 'http://eu.semsportal.com:82/api/v2/PowerStation/GetMonitorDetailByPowerstationId', 'msgSocketAdr': None}}
[/code]
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Protože jsem chtěl všechny údaje a to z více invertorů tak mi nezbývalo než proniknout do pythonu a napsat si to sám.
Mám dva invertory, takže to vytvoří dvě zařízení se všemi senzory (Senzory se objeví ihned po prvním načtení dat z portálu (pár minut po restartu HA, ale nějakou dobu trvá než jsou v HA senzory přiřazeny pod zařízení)

https://github.com/kiklhorn/semsapi2mqtt

mám v úmyslu ještě pokračovat a dopsat u něčeho jednotky a srozumitelnější názvy než vrací api sems portálu
plus možná nějaké výpočty a případně i režim bez portálu - načítání na síti kde jsou přímo připojeny střídače.

Ale to je vše budoucnost, prozatím mi tohle bohatě stačí.

Pokud by někdo chtěl doplnit názvy-jednotky-ikony, tak ať si repo forkne a slovník dopíše.
Přílohy
devices.png
sensors.png
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Tak nějaké umělé senzory (vypočtené hodnoty) budu potřebovat

Číselný stav baterie (1,2,3) mi prostě nestačí, zvlášť když mám údaj o procentu nabití - toho by se dalo využít
První pátrání - jak sakra vytvořit ten správný senzor co by uměl načíst více hodnot z různých senzorů?
Nějaké rozšířené senzory z HACS zatím vynechám, pro tento účel mi nepřipadají vhodné, ale něco v budoucnu určitě použiji.
Vždyť by to mělo se dát vyčíst nějak jinak.
Jdeme na to.
Ve vývojářských nástrojích nějak vypotím první pokus který mi dává co potřebuji. Šikovná věcička.

Kód: Vybrat vše

{% if ((states.sensor.battary_work_mode_04.state) | int == 1) and (states.sensor.soc_04.state | int >= 95)-%}
 Nabito, odpočívá
{%- elif ((states.sensor.battary_work_mode_04.state) | int == 1) and (states.sensor.soc_04.state | int <= 10)-%}
 Vybito, odpočívá
{%- elif ((states.sensor.battary_work_mode_04.state) | int == 1) and (states.sensor.soc_04.state | int > 10) and (states.sensor.soc_04.state | int < 95)-%}
 Odpočívá
{%- elif ((states.sensor.battary_work_mode_04.state) | int == 2) -%}
 Vybíjí se
{%- elif ((states.sensor.battary_work_mode_04.state) | int == 3) -%}
 Nabíjí se
{%- else -%}
 Stav neznámý
{%- endif %}
Zabrousím pak na dokumentaci a zjišťuji že tomuto se doporučuje vyhnout protože to bude dělat binec při startu HA když ještě není plně načten.
Tak znovu a lépe

Kód: Vybrat vše

{% if ((states('sensor.battary_work_mode_04')) | int == 1) and (states('sensor.soc_04') | int >= 95)-%}
 Nabito, odpočívá
{%- elif ((states('sensor.battary_work_mode_04')) | int == 1) and (states('sensor.soc_04') | int <= 10)-%}
 Vybito, odpočívá
{%- elif ((states('sensor.battary_work_mode_04')) | int == 1) and (states('sensor.soc_04') | int > 10) and (states('sensor.soc_04') | int < 95)-%}
 Odpočívá
{%- elif ((states('sensor.battary_work_mode_04')) | int == 2) -%}
 Vybíjí se
{%- elif ((states('sensor.battary_work_mode_04')) | int == 3) -%}
 Nabíjí se
{%- else -%}
 Stav neznámý
{%- endif %}
To by šlo, pár závorek je asi zbytečných, jdu to vyzkoušet do configuration.yaml
Poprvé to nechodí, nastavení, ovládání serveru, ověření konfigurace - jasně chyba, ale moc mi nenapoví.
Takže co mi poví G jak se píše if v template? No chybělo mi >- za value_template
Ale zároveň mne trklo do oka - vždyť se dají použít proměnné.
batstatus_18 dělá pro druhou baterii to samé co batstatus_04, ale už je to daleko čitelnější

Kód: Vybrat vše

sensor:
  - platform: template
    sensors:
      batstatus_04:
        friendly_name: "Bat-04"
        value_template: >-
          {% if (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int >= 95)-%}
            Nabito, odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int <= 10)-%}
            Vybito, odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int > 10) and (states('sensor.soc_04') | int < 95)-%}
            Odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 2) -%}
            Vybíjí se
          {%- elif (states('sensor.battary_work_mode_04') | int == 3) -%}
            Nabíjí se
          {%- else -%}
            Stav neznámý
          {%- endif %}
      batstatus_18:
        friendly_name: "Bat-18"
        value_template: >-
          {% set bat = states('sensor.battary_work_mode_18') | int %}
          {% set soc = states('sensor.soc_18') | int %}
          {% if bat == 1 and soc >= 95 %} Nabito, odpočívá
          {% elif bat ==1 and soc <= 10 %} Vybito, odpočívá
          {% elif bat == 1 and soc > 10 and soc < 95 %} Odpočívá
          {% elif bat == 2 %} Vybíjí se
          {% elif bat == 3 %} Nabíjí se
          {% else %} Stav neznámý
          {% endif %}
Senzory se objevily
sensors-bat.png
sensors-bat.png (11.54 KiB) Zobrazeno 10665 x
Takže si je přidám bez jména a ikony do panelu elektrárny
lovelace_textsensor.png
Kudy na to už vím, další umělé senzory už budou sranda.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Takže hodnoty snad už mám všechny co by mne pro účely regulace mohly zajímat, konfigurační soubor se trochu rozrostl.
Proč vždy budou nějaké odchylky v měření s více invertory - pracují do stejné sítě - kde tedy měří každý nejen sebe ale i toho druhého - tipuji to na různý čas zaslání dat měniči.
configuration.yaml - není to ani zdaleka dokonalé, ale účel plní

Kód: Vybrat vše

  - platform: template
    sensors:
      batstatus_04:
        friendly_name: "Bat-04"
        value_template: >-
          {% if (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int >= 95)-%}
            Nabito, odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int <= 10)-%}
            Vybito, odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int > 10) and (states('sensor.soc_04') | int < 95)-%}
            Odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 2) -%}
            Vybíjí se
          {%- elif (states('sensor.battary_work_mode_04') | int == 3) -%}
            Nabíjí se
          {%- else -%}
            Stav neznámý
          {%- endif %}
      batstatus_18:
        friendly_name: "Bat-18"
        value_template: >-
          {% set bat = states('sensor.battary_work_mode_18') | int %}
          {% set soc = states('sensor.soc_18') | int %}
          {% if bat == 1 and soc >= 95 %} Nabito, odpočívá
          {% elif bat ==1 and soc <= 10 %} Vybito, odpočívá
          {% elif bat == 1 and soc > 10 and soc < 95 %} Odpočívá
          {% elif bat == 2 %} Vybíjí se
          {% elif bat == 3 %} Nabíjí se
          {% else %} Stav neznámý
          {% endif %}
      batstatus_all:
        friendly_name: "Bat-all"
        value_template: >-
          {% if states('sensor.batstatus_04') == states('sensor.batstatus_18') %} {{states('sensor.batstatus_18')}}
          {% else %} různé
          {% endif %}
      p_pvstring1_04:
        friendly_name: "PVstring1-04"
        value_template: "{{ states('sensor.string1_voltage_04') | float * states('sensor.string1_current_04') | float }}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvstring2_04:
        friendly_name: "PVstring2-04"
        value_template: "{{ states('sensor.string2_voltage_04') | float * states('sensor.string2_current_04') | float}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvstring1_18:
        friendly_name: "PVstring1-18"
        value_template: "{{ states('sensor.string1_voltage_18') | float * states('sensor.string1_current_18') | float}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvstring2_18:
        friendly_name: "PVstring2-18"
        value_template: "{{ states('sensor.string2_voltage_18') | float * states('sensor.string2_current_18') | float}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvtotal:
        friendly_name: "PV_power_total"
        value_template: "{{(states('sensor.p_pvstring1_04') | float) + (states('sensor.p_pvstring2_04') | float) + (states('sensor.p_pvstring1_18') | float) + (states('sensor.p_pvstring2_18') | float)}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_soc_avg:
        friendly_name: "SOC_avg"
        value_template: "{{((states('sensor.soc_04') | float + states('sensor.soc_18') | float)) / 2}}"
        unit_of_measurement: "%"
        device_class: "battery"
      p_output_sum:
        friendly_name: "Výstup celkem"
        value_template: "{{((states('sensor.outputpower_04') | float + states('sensor.outputpower_18') | float))}}"
        unit_of_measurement: "W"
        device_class: "power"
      p_battery_04:
        friendly_name: "Výkon baterie 04"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.vbattery1_04') | float * states('sensor.ibattery1_04') | float))}}"
      p_battery_18:
        friendly_name: "Výkon baterie 18"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.vbattery1_18') | float * states('sensor.ibattery1_18') | float))}}"
      p_battery_sum:
        friendly_name: "Výkon baterie celkem"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_04') | float + states('sensor.p_battery_18') | float))}}"
      p_pmeter_diff:
        friendly_name: "pmeter diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pmeter_04') | float - states('sensor.pmeter_18') | float)) | abs}}"
      p_mtactivepowerr_diff:
        friendly_name: "mtApR diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowerr_04') | float - states('sensor.mtactivepowerr_18') | float)) | abs}}"
      p_mtactivepowers_diff:
        friendly_name: "mtApS diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowers_04') | float - states('sensor.mtactivepowers_18') | float)) | abs}}"
      p_mtactivepowert_diff:
        friendly_name: "mtApT diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowert_04') | float - states('sensor.mtactivepowert_18') | float)) | abs}}"
      p_mtactivepower_sum_04:
        friendly_name: "mtAp-04 sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowerr_04') | float + states('sensor.mtactivepowers_04') | float + states('sensor.mtactivepowert_04') | float))}}"
      p_mtactivepower_sum_18:
        friendly_name: "mtAp-18 sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowerr_18') | float + states('sensor.mtactivepowers_18') | float + states('sensor.mtactivepowert_18') | float))}}"
      p_mtactivepower_diff:
        friendly_name: "mtAp diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_mtactivepower_sum_04') | float - states('sensor.p_mtactivepower_sum_18') | float)) | abs}}"
      p_backup_r_sum:
        friendly_name: "P backupR sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pbackup_04') | float + states('sensor.pbackup_18') | float))}}"
      p_backup_s_sum:
        friendly_name: "P backupS sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.backuppload_s_04') | float + states('sensor.backuppload_s_18') | float))}}"
      p_backup_t_sum:
        friendly_name: "P backupT sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.backuppload_t_04') | float + states('sensor.backuppload_t_18') | float))}}"
      p_backup_sum:
        friendly_name: "P backup sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_backup_r_sum') | float + states('sensor.p_backup_s_sum') | float + states('sensor.p_backup_t_sum') | float))}}"
      p_backup_rst_04_sum:
        friendly_name: "BackRSTsum04"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pbackup_04') | float + states('sensor.backuppload_s_04') | float + states('sensor.backuppload_t_04') | float))}}"
      p_backup_rst_18_sum:
        friendly_name: "BackRSTsum18"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pbackup_18') | float + states('sensor.backuppload_s_18') | float + states('sensor.backuppload_t_18') | float))}}"
      p_rozdil_04:
        friendly_name: "rozdil04"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_04') | float - states('sensor.outputpower_04') | float ))}}"
      p_rozdil_18:
        friendly_name: "rozdil18"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_18') | float - states('sensor.outputpower_18') | float ))}}"
      p_rozdil_sum:
        friendly_name: "rozdilsum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_sum') | float - states('sensor.p_output_sum') | float ))}}"
      p_lasttime_04:
        value_template: "{{ (states('sensor.last_time_04') | float /1000) | timestamp_custom('%H:%M:%S')}}"
        # value_template: "{{ (states('sensor.last_time_04') | float /1000) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        unit_of_measurement: ""
        friendly_name: "Platne v case-04"
      p_timebefore_04:
        value_template: "{{ (now().timestamp() - (states('sensor.last_time_04') | float /1000))/60 }}"
        unit_of_measurement: "minutami"
        friendly_name: "Platne pred-04"
      p_lasttime_18:
        # value_template: "{{ (states('sensor.last_time_18') | float /1000) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        value_template: "{{ (states('sensor.last_time_18') | float /1000) | timestamp_custom('%H:%M:%S')}}"
        unit_of_measurement: ""
        friendly_name: "Platne v case-18"
      p_timebefore_18:
        value_template: "{{ (now().timestamp() - (states('sensor.last_time_18') | float /1000))/60 }}"
        unit_of_measurement: "minutami"
        friendly_name: "Platne pred-18"
      p_time_diff:
        value_template: "{{((states('sensor.p_timebefore_04') | float - states('sensor.p_timebefore_18') | float)) * 60 | abs}}"
        unit_of_measurement: "sec"
        friendly_name: "Rozdíl v času měření"
      p_time_avg:
        value_template: "{{(((states('sensor.last_time_04') | int /1000 ) + (states('sensor.last_time_18') | int /1000 )) /2) | timestamp_custom('%H:%M:%S')}}"
        # value_template: "{{(((states('sensor.last_time_04') | int /1000 ) + (states('sensor.last_time_18') | int /1000 )) /2) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        unit_of_measurement: ""
        friendly_name: "Střední čas"
Musím ještě přijít na některé detaily - senzory snad k tomu mám všechny:
mereni.png

Kód: Vybrat vše

type: grid
cards:
  - type: vertical-stack
    cards:
      - type: entity
        entity: sensor.p_lasttime_04
        icon: ' '
        name: ' v čase'
      - type: entity
        entity: sensor.p_timebefore_04
        icon: ' '
        name: ' před min.'
      - type: gauge
        entity: sensor.solar_power_04
        min: 0
        max: 10000
        severity:
          green: 4000
          yellow: 1000
          red: 0
        name: Panely
      - type: gauge
        entity: sensor.soc_04
        min: 0
        max: 100
        severity:
          green: 60
          yellow: 25
          red: 0
      - type: entity
        entity: sensor.batstatus_04
        name: ' '
        icon: none
      - type: sensor
        entity: sensor.p_battery_04
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.outputpower_04
        graph: line
        unit: W
        icon: hass:flash
        detail: 2
      - type: sensor
        entity: sensor.p_rozdil_04
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.pmeter_04
        graph: line
        detail: 2
        icon: mdi:flash
        unit: W
      - type: sensor
        entity: sensor.p_mtactivepower_sum_04
        graph: line
        name: mtap-04sum
        detail: 2
      - type: sensor
        entity: sensor.p_backup_rst_04_sum
        graph: line
        detail: 2
        name: BckRST04
  - type: vertical-stack
    cards:
      - type: entity
        entity: sensor.p_lasttime_18
        name: ' v čase'
        icon: ' '
      - type: entity
        entity: sensor.p_timebefore_18
        icon: ' '
        name: před min.
      - type: gauge
        entity: sensor.solar_power_18
        min: 0
        max: 10000
        severity:
          green: 4000
          yellow: 1000
          red: 0
        name: Panely
      - type: gauge
        entity: sensor.soc_18
        min: 0
        max: 100
        severity:
          green: 60
          yellow: 25
          red: 0
      - type: entity
        entity: sensor.batstatus_18
        name: ' '
        icon: ' '
      - type: sensor
        entity: sensor.p_battery_18
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.outputpower_18
        graph: line
        icon: hass:flash
        unit: W
        detail: 2
      - type: sensor
        entity: sensor.p_rozdil_18
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.pmeter_18
        graph: line
        detail: 2
        unit: W
        icon: mdi:flash
      - type: sensor
        entity: sensor.p_mtactivepower_sum_18
        graph: line
        name: mtap-18sum
        detail: 2
      - type: sensor
        entity: sensor.p_backup_rst_18_sum
        graph: line
        detail: 2
        name: bckRST18
  - type: vertical-stack
    cards:
      - type: entity
        entity: sensor.p_time_avg
        icon: ' '
      - type: entity
        entity: sensor.p_time_diff
        icon: ' '
        name: sec rozdíl
      - type: gauge
        entity: sensor.p_pvtotal
        min: 0
        name: SUM
        severity:
          green: 8000
          yellow: 2000
          red: 0
        max: 20000
      - type: gauge
        entity: sensor.p_soc_avg
        min: 0
        max: 100
        severity:
          green: 60
          yellow: 25
          red: 0
      - type: entity
        entity: sensor.batstatus_all
        icon: ' '
        name: ' '
      - type: sensor
        entity: sensor.p_battery_sum
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.p_output_sum
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.p_rozdil_sum
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.p_pmeter_diff
        graph: line
        detail: 2
      - type: sensor
        entity: sensor.p_mtactivepower_diff
        graph: line
      - type: sensor
        entity: sensor.p_backup_sum
        graph: line
        detail: 2
Teď na pár dní vyměním klávesnici za pádlo a pak budu pokračovat vymýšlením jak udělat persistentní databázi s 366*24*4(stringy) položkami pro samoučící se odhad denního výkonu s použitím předpovědních dat z pvforecast.cz
Pak navážu automatizaci která by měla být jednoduchá - co nejméně pouštět přebytky do sítě. A v případě nedostatku namísto drahého nakupování odtamtéž použít energii z jiného levnějšího zdroje.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Tak momentálně jsem zklamaný z pvforecast.cz, očekával jsem nějaké odchylky v poměru předpověď/vyrobeno, ale ne v rozsahu téměř dvou řádů.
Rozchodil jsem SQLite pod Node-Red a cpu tam vše relevantní. Hodinové předpovědi, hodinové výroby a po každé hodině spočítaný poměr.
Data mám jen za pár posledních dní a jeden den to sedí o pár desítek procent (předpověď/vyrobeno cca 12-17 s jedním úletem ke 40) a další den to lítá mezi 2 a 190.

Až budou data za delší dobu tak to ještě zkusím analyzovat a uvidím jestli pokračovat touto cestou.

Za dnešek jsem dal dohromady HA na RPi3 jen na SD kartě, do toho MQTT, ESP-Home a custom integraci na SEMS portal a na CEZ data HDO.

Automatizaci dělám teď bez Node-Red.
ovladani.png
Protože nemám použitelnou předpověď výroby tak si přes den elektrárny nevšímat kromě mezních stavů - tj třeba svítí moc a jsou dobité baterie tak připnout třeba další ohřívání vody.
Po západu slunce podle odběru zjistit na kolik minut mi vystačí baterie a optimalizovat jejich využití hlavně na překlenutí těch 2-3 nočních hodin ve vysokém tarifu pokud by výpočtem baterie nevystačily na celou noc.

Takže teď musím nějak vyparsovat data HDO a udělat z nich použitelné entity. Budu potřebovat něco na způsob kalendáře a nějaký senzor který mi vyhodí celkový počet minut vysokého tarifu do něčeho jako "východ slunce + hodina"

Tím prozatím skončím, odvezu HA kamarádovi, vysvětlím co s tím - jak si naklikat další případné automatizace - bude mít k dispozici všechny možné i nemožné senzory co se týká hodnot i časů, desku s 4x relé a už jsem mu dával na hraní pár kousků Shelly 1PM, tak je jenom zaintegrujeme.

Počítám že sem do konce týdne hodím toto prozatím "finální" řešení.

Co mne bude čekat v neurčitě vzdálené budoucnosti -

1- Alternativní načítání dat invertorů z LAN místo z webu - integrace existuje, vezmu si z ní načítání dat a uzpůsobím ji pro více invertorů na jedné straně a MQTT na výstupu. Data nasměruji do stejných MQTT topiků jako teď, takže se nebude muset nic dalšího měnit.
2- senzor reálného HDO - jen mi případně posune časové okno, rezervovaná kapacita baterií bude stejná - takže opět téměř žádná změna v automatizacích.
3- Někde získat použitelnou předpověď výroby. (a na její využití už mám tak ze 70% hotové řešení v Node-Red)
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Nyní mám nainstalovaný doplněk
https://github.com/zigul/HomeAssistant-CEZdistribuce
a v configuration.yaml

Kód: Vybrat vše

binary_sensor:
  # Example configuration.yaml entry for showing current HDO state
  - platform: cezdistribuce
    name: nizky tarif
    region: zapad
    code: A1B7DP1
Tento senzor mi říká jestli je právě aktivní nízký tarif. (měl by být podle plánu)
V atributech má tento senzor ale vše vrácené při načtení z webu https://www.cezdistribuce.cz/distHdo/ad ... de=A1B7DP1
Což jsou hodnoty které bych potřeboval pro nějaké nové senzory jako jejich value_template. Ale jak se k nim dostat:

Pokud si chcete zkusit jak se dostat ke konkrétní hodnotě ve struktuře uložené v atributech senzoru tak doporučuji si doplněk nainstalovat a překopírovat si příklad ctrl+c ctrl+v přímo do vývojářských nástrojů.

Kód: Vybrat vše

{## Imitate available variables: ##}
Tohle je ve vývojářské nastroje/šablony

{% set my_test_json = {
  "temperature": 25,
  "unit": "°C"
} %}

The temperature is {{ my_test_json.temperature }} {{ my_test_json.unit }}.

Tak neco zkusim - senzor z CEZ integrace mam pojmenovany nizky_tarif
A ve Vyvojarske nastroje/stavy vidim jeho state i atributy - ty jsou nejaky dict/list

Co dostanu přes funkci:
{{ states('binary_sensor.nizky_tarif') }}
Jasně, pouze state

A co dostanu přes přímý přístup:
{{ states.binary_sensor.nizky_tarif }}
Vše včetně attributů, ale přímý přístup se nedoporučuje - dělá to problémy hlavně při startu HA
Takže to zkusíme funkcí

Atributy umím vytáhnout jednoduché:
{{ state_attr('binary_sensor.nizky_tarif','icon') }}

A taky složené - tohle je nejaký dict obsahující json
{{ state_attr('binary_sensor.nizky_tarif','response_json') }}

Na následující dostávám pochopitelnou chybu "TypeError: the JSON object must be str, bytes or bytearray, not dict"
Takže si to křížky zakomentuji
{#{ (state_attr('binary_sensor.nizky_tarif','response_json')|from_json())['values'][0][0] }#}

A zkusím to jinak:
{{ (state_attr('binary_sensor.nizky_tarif','response_json'))['data']}}
Hura uz se blizim, mam oba datove objekty, prvni je prac dny, druhy so-ne


no ani "DATA" nejsou json, je to listkomentuji, bude se to někdy hodit pro přístup k json 
{#{ ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"]|from_json())['values'][0][0]}#}

A jdeme na to přímo - hodnoty pro pracovní dny jsou v
{{ (state_attr('binary_sensor.nizky_tarif','response_json'))['data'][0]}}

---------------------------------------------
a jakoukoliv konkrétní hodnotu pro pracovní den dostanu přes index 0:
{{ (state_attr('binary_sensor.nizky_tarif','response_json'))['data'][0]['CAS_ZAP_2'] }}

a pro so-ne: přes index 1
{{ (state_attr('binary_sensor.nizky_tarif','response_json'))['data'][1]['CAS_VYP_3'] }}

-----------------------------------------------
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

Na nějaký čas tento projekt pozastavuji. HA jsem předal v tomto stavu, bez počítání s nočním tarifem.
Počítání jsem zvládnul, i přes šílený kód v Jinja2.
Zarazil jsem se na tom jak přiřadit vypočtené hodnoty "cizím" senzorům.
Tedy vypočtu si v nějakém cyklu začátek 1. intervalu, konec 1. intervalu... n-tého intervalu.
Z kódu jsem schopný načíst hodnoty (libovolných senzorů nebo třeba pomocníků), ale zatím jsem nepřišel na to jak je tam i zapsat.
Kromě toho že bych do configuration.yaml pro každou hodnotu vyrobil senzor (tedy ne v pomocnících) a zopakoval téměř stejný mnohařádkový kód.
Bylo by to nepřehledné a nehezké.

Možná to půjde přes Jinja macro - zatím netuším jestli ve verzi Jinja která je v HA to bude podporováno.
A dost se už ztrácím v závorkách. Většinu času neřeším nějakou logiku co chci dosáhnout, ale kde mám jakou závorku a přijde mi to celé dost nepřehledné. Navíc v editoru sice fungují zkratky ctrl+x a ctrl-v, ale už ne stejně ekvivalenty shift+del shift+insert takže se u toho dost vztekám. ;)

Možná půjde použít https://hacs-pyscript.readthedocs.io/en ... index.html

Zatím mám pocit že bude nejlepší si na to napsat vlastní integraci, která vyrobí entity a nastaví jim hodnoty.

Mám se ještě co učit.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Uživatelský avatar
Lion®
Administrátor fóra
Administrátor fóra
Příspěvky: 1604
Registrován: 28. září 2020, 14:07
Bydliště: podkrkonoší
Dal poděkování: 144 poděkování
Dostal poděkování: 193 poděkování
Kontaktovat uživatele:

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od Lion® »

Sakra :o to je pro mě jako by si připravoval konkurenční let SpaceXu na Mars.

Udivuje mě trochu, že při předvedené preciznosti používáš nějaký "odhad" spínacích časů HDO a nemonitoruješ jeho skutečný stav.

Jinak to je asi jediné co jsem z článku pobral :D :lol:
Díky za něj...
  1. binary_sensor.nizky_tarif asi nemá žádné atributy, když je to binární senzor? Vidíme jen data.
  2. Nevymýšlíš už vymyšlené? Znáš Utility Meter https://www.home-assistant.io/integrati ... ity_meter/
________________
🍻 Přispěj a získej přístup do obsahu fóra pro dárce. :thx:
Oficiální sada s Raspberry Pi 4B/4GB, černá +Argon NEO Raspberry Pi 4 Case
Patriot Burst 2.5" SATA SSD 120GB + AXAGON EE25-XA6 ALINE box

Galerie realizací

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: FVE se střídači GoodWe - SEMS Portal

Příspěvek od kiklhorn »

nizky_tarif ma v atributech načtenou následující stránku: https://www.cezdistribuce.cz/distHdo/ad ... de=A1B7DP1
(nebo jiný region a kód)
A s těmi hodnotami jsem schopný pracovat.

Odhad času musím spočítat dopředu, ne zpětně, abych věděl kolik energie v bateriích si musím rezervovat na překlenutí ideálně všech úseků VT.
Přeci v NT nepojedu z baterie a ve VT ze sítě když už budou baterie vybité.
A zase nechci jet ani v NT ze sítě pokud je v bateriích dost energie.

Řekněme že stálá spotřeba je 4kW, energie v baterii po západu slunce okolo 20kWh
VT trvá v noci 3 x 1 hodina - takže chci spotřebovat z baterií 12kWh v úsecích VT (3h * 4kW), a 8kWh v NT
To je 5 nočních hodin. Zbytek času už bude energie ze sítě a to chci raději v intervalech NT než VT - proto potřebuji ten odhad kolik energie rezervovat v bateriích na zbývající úseky VT do doby než to zas začne napájet slunce.

Reálné časy VT můžu snímat za HDO, až zmizí ovládací fáze - malé trafo, relátko, relátko na 230V (to jsem koukal že jsi kreslil ve schématech v návodech), optočlen přes RC článek, nebo jestli tam má nějaký pomocný kontakt na ovládaném stykači. K tomu třeba pověšené ESP32.

Tak jak to po sobě čtu tak zjišťuji že mi možná bude stačit vyrobit jen jeden další senzor - součet časů v úsecích VT zbývajících do "východ slunce + hodina"
Díky za nakopnutí :D
To by mi mohlo pro automatizaci stačit .
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Odpovědět

Zpět na „Komplexní projekty“