Skip to content

Commit

Permalink
Add DailyTotal NamedTyple
Browse files Browse the repository at this point in the history
  • Loading branch information
Darsstar committed Mar 29, 2024
1 parent da3526e commit e3f462a
Show file tree
Hide file tree
Showing 13 changed files with 62 additions and 38 deletions.
18 changes: 11 additions & 7 deletions solax/inverters/qvolt_hyb_g3_3p.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter, InverterHttpClient
from solax.units import Total, Units
from solax.units import DailyTotal, Measurement, Total, Units
from solax.utils import div10, div100, pack_u16, to_signed, twoway_div10, twoway_div100


Expand Down Expand Up @@ -122,22 +122,26 @@ def response_decoder(cls):
Total(Units.KWH),
div10,
),
"Today's Battery Discharge Energy": (78, Units.KWH, div10),
"Today's Battery Charge Energy": (79, Units.KWH, div10),
"Today's Battery Discharge Energy": (78, DailyTotal(Units.KWH), div10),
"Today's Battery Charge Energy": (79, DailyTotal(Units.KWH), div10),
"Total PV Energy": (pack_u16(80, 81), Total(Units.KWH), div10),
"Today's Energy": (82, Units.KWH, div10),
"Today's Energy": (82, DailyTotal(Units.KWH), div10),
# 83-85: always 0
"Total Feed-in Energy": (pack_u16(86, 87), Total(Units.KWH), div100),
"Total Consumption": (pack_u16(88, 89), Total(Units.KWH), div100),
"Today's Feed-in Energy": (90, Units.KWH, div100),
"Today's Feed-in Energy": (90, DailyTotal(Units.KWH), div100),
# 91: always 0
"Today's Consumption": (92, Units.KWH, div100),
"Today's Consumption": (92, DailyTotal(Units.KWH), div100),
# 93-101: always 0
# 102: always 1
"Battery Remaining Capacity": (103, Units.PERCENT),
# 104: always 1
"Battery Temperature": (105, Units.C),
"Battery Remaining Energy": (106, Units.KWH, div10),
"Battery Remaining Energy": (
106,
Measurement(Units.KWH, storage=True),
div10,
),
# 107: always 256 or 0
# 108: always 3504
# 109: always 2400
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x1.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import startswith


Expand Down Expand Up @@ -38,7 +38,7 @@ def response_decoder(cls):
"Network Voltage": (5, Units.V),
"AC Power": (6, Units.W),
"Inverter Temperature": (7, Units.C),
"Today's Energy": (8, Units.KWH),
"Today's Energy": (8, DailyTotal(Units.KWH)),
"Total Energy": (9, Total(Units.KWH)),
"Exported Power": (10, Units.W),
"PV1 Power": (11, Units.W),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x1_boost.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import div10, div100, pack_u16, to_signed


Expand Down Expand Up @@ -46,7 +46,7 @@ def response_decoder(cls):
"PV2 Power": (8, Units.W),
"AC Frequency": (9, Units.HZ, div100),
"Total Generated Energy": (pack_u16(11, 12), Total(Units.KWH), div10),
"Today's Generated Energy": (13, Total(Units.KWH), div10),
"Today's Generated Energy": (13, DailyTotal(Units.KWH), div10),
"Inverter Temperature": (39, Units.C),
"Exported Power": (48, Units.W, to_signed),
"Total Export Energy": (pack_u16(50, 51), Total(Units.KWH), div100),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x1_hybrid_gen4.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import div10, div100, pack_u16, to_signed


Expand Down Expand Up @@ -44,7 +44,7 @@ def response_decoder(cls):
"PV1 power": (8, Units.W),
"PV2 power": (9, Units.W),
"On-grid total yield": (pack_u16(11, 12), Total(Units.KWH), div10),
"On-grid daily yield": (13, Units.KWH, div10),
"On-grid daily yield": (13, DailyTotal(Units.KWH), div10),
"Battery voltage": (14, Units.V, div100),
"Battery current": (15, Units.A, div100),
"Battery power": (16, Units.W),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x1_mini.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import startswith


Expand Down Expand Up @@ -34,7 +34,7 @@ def response_decoder(cls):
"Network Voltage": (5, Units.V),
"AC Power": (6, Units.W),
"Inverter Temperature": (7, Units.C),
"Today's Energy": (8, Units.KWH),
"Today's Energy": (8, DailyTotal(Units.KWH)),
"Total Energy": (9, Total(Units.KWH)),
"Exported Power": (10, Units.W),
"PV1 Power": (11, Units.W),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x1_mini_v34.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import div10, div100


Expand Down Expand Up @@ -53,7 +53,7 @@ def response_decoder(cls):
"PV2 Power": (8, Units.W),
"Grid Frequency": (9, Units.HZ, div100),
"Total Energy": (11, Total(Units.KWH), div10),
"Today's Energy": (13, Units.KWH, div10),
"Today's Energy": (13, DailyTotal(Units.KWH), div10),
"Total Feed-in Energy": (41, Total(Units.KWH), div10),
"Total Consumption": (42, Total(Units.KWH), div10),
"Power Now": (43, Units.W, div10),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x1_smart.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import div10, div100, to_signed


Expand Down Expand Up @@ -44,7 +44,7 @@ def response_decoder(cls):
"PV2 Power": (8, Units.W),
"Grid Frequency": (9, Units.HZ, div100),
"Total Energy": (11, Total(Units.KWH), div10),
"Today's Energy": (13, Units.KWH, div10),
"Today's Energy": (13, DailyTotal(Units.KWH), div10),
"Inverter Temperature": (39, Units.C),
"Exported Power": (48, Units.W, to_signed),
"Total Feed-in Energy": (50, Total(Units.KWH), div100),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x3.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import startswith


Expand Down Expand Up @@ -34,7 +34,7 @@ def response_decoder(cls):
"Network Voltage Phase 1": (5, Units.V),
"AC Power": (6, Units.W),
"Inverter Temperature": (7, Units.C),
"Today's Energy": (8, Units.KWH),
"Today's Energy": (8, DailyTotal(Units.KWH)),
"Total Energy": (9, Total(Units.KWH)),
"Exported Power": (10, Units.W),
"PV1 Power": (11, Units.W),
Expand Down
16 changes: 10 additions & 6 deletions solax/inverters/x3_hybrid_g4.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Measurement, Total, Units
from solax.utils import (
div10,
div100,
Expand Down Expand Up @@ -104,25 +104,29 @@ def response_decoder(cls):
"Load/Generator Power": (47, Units.W, to_signed),
"Radiator Temperature": (54, Units.C, to_signed),
"Yield total": (pack_u16(68, 69), Total(Units.KWH), div10),
"Yield today": (70, Units.KWH, div10),
"Yield today": (70, DailyTotal(Units.KWH), div10),
"Battery Discharge Energy total": (
pack_u16(74, 75),
Total(Units.KWH),
div10,
),
"Battery Charge Energy total": (pack_u16(76, 77), Total(Units.KWH), div10),
"Battery Discharge Energy today": (78, Units.KWH, div10),
"Battery Charge Energy today": (79, Units.KWH, div10),
"Battery Discharge Energy today": (78, DailyTotal(Units.KWH), div10),
"Battery Charge Energy today": (79, DailyTotal(Units.KWH), div10),
"PV Energy total": (pack_u16(80, 81), Total(Units.KWH), div10),
"EPS Energy total": (pack_u16(83, 84), Total(Units.KWH), div10),
"EPS Energy today": (85, Units.KWH, div10),
"EPS Energy today": (85, DailyTotal(Units.KWH), div10),
"Feed-in Energy": (pack_u16(86, 87), Total(Units.KWH), div100),
"Consumed Energy": (pack_u16(88, 89), Total(Units.KWH), div100),
"Feed-in Energy total": (pack_u16(90, 91), Total(Units.KWH), div100),
"Consumed Energy total": (pack_u16(92, 93), Total(Units.KWH), div100),
"Battery Remaining Capacity": (103, Units.PERCENT),
"Battery Temperature": (105, Units.C, to_signed),
"Battery Remaining Energy": (106, Units.KWH, div10),
"Battery Remaining Energy": (
106,
Measurement(Units.KWH, storage=True),
div10,
),
"Battery mode": (168, Units.NONE),
"Battery mode text": (168, Units.NONE, X3HybridG4._decode_battery_mode),
"Battery Voltage": (pack_u16(169, 170), Units.V, div100),
Expand Down
4 changes: 2 additions & 2 deletions solax/inverters/x3_mic_pro_g2.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units
from solax.utils import div10, div100, pack_u16, to_signed, to_signed32, twoway_div10


Expand Down Expand Up @@ -69,7 +69,7 @@ def response_decoder(cls):
# "Run Mode": (21, Units.NONE),
"Run Mode": (21, Units.NONE, X3MicProG2._decode_run_mode),
"Total Yield": (pack_u16(22, 23), Total(Units.KWH), div10),
"Daily Yield": (24, Units.KWH, div10),
"Daily Yield": (24, DailyTotal(Units.KWH), div10),
"Feed-in Power ": (pack_u16(72, 73), Units.W, to_signed32),
"Total Feed-in Energy": (pack_u16(74, 75), Total(Units.KWH), div100),
"Total Consumption": (pack_u16(76, 77), Total(Units.KWH), div100),
Expand Down
22 changes: 15 additions & 7 deletions solax/inverters/x3_v34.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter
from solax.units import Total, Units
from solax.units import DailyTotal, Measurement, Total, Units
from solax.utils import div10, div100, pack_u16, to_signed, twoway_div10, twoway_div100


Expand Down Expand Up @@ -46,12 +46,12 @@ def response_decoder(cls):
"PV1 Power": (13, Units.W),
"PV2 Power": (14, Units.W),
"Total PV Energy": (pack_u16(89, 90), Total(Units.KWH), div10),
"Today's PV Energy": (112, Units.KWH, div10),
"Today's PV Energy": (112, DailyTotal(Units.KWH), div10),
"Grid Frequency Phase 1": (15, Units.HZ, div100),
"Grid Frequency Phase 2": (16, Units.HZ, div100),
"Grid Frequency Phase 3": (17, Units.HZ, div100),
"Total Energy": (pack_u16(19, 20), Total(Units.KWH), div10),
"Today's Energy": (21, Units.KWH, div10),
"Today's Energy": (21, DailyTotal(Units.KWH), div10),
"Battery Voltage": (24, Units.V, div100),
"Battery Current": (25, Units.A, twoway_div100),
"Battery Power": (26, Units.W, to_signed),
Expand All @@ -62,20 +62,28 @@ def response_decoder(cls):
Total(Units.KWH),
div10,
),
"Today's Battery Discharge Energy": (113, Units.KWH, div10),
"Battery Remaining Energy": (32, Units.KWH, div10),
"Today's Battery Discharge Energy": (113, DailyTotal(Units.KWH), div10),
"Battery Remaining Energy": (
32,
Measurement(Units.KWH, storage=True),
div10,
),
"Total Battery Charge Energy": (
pack_u16(87, 88),
Total(Units.KWH),
div10,
),
"Today's Battery Charge Energy": (114, Units.KWH, div10),
"Today's Battery Charge Energy": (114, DailyTotal(Units.KWH), div10),
"Exported Power": (65, Units.W, to_signed),
"Total Feed-in Energy": (pack_u16(67, 68), Total(Units.KWH), div100),
"Total Consumption": (pack_u16(69, 70), Total(Units.KWH), div100),
"AC Power": (181, Units.W, to_signed),
"EPS Frequency": (63, Units.HZ, div100),
"EPS Total Energy": (pack_u16(110, 111), Units.KWH, div10),
"EPS Total Energy": (
pack_u16(110, 111),
Measurement(Units.KWH, storage=False),
div10,
),
}

# pylint: enable=duplicate-code
4 changes: 2 additions & 2 deletions solax/inverters/x_hybrid.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import voluptuous as vol

from solax.inverter import Inverter, InverterHttpClient, Method
from solax.units import Total, Units
from solax.units import DailyTotal, Total, Units


class XHybrid(Inverter):
Expand Down Expand Up @@ -55,7 +55,7 @@ def response_decoder(cls):
"Network Voltage": (5, Units.V),
"Power Now": (6, Units.W),
"Inverter Temperature": (7, Units.C),
"Today's Energy": (8, Units.KWH),
"Today's Energy": (8, DailyTotal(Units.KWH)),
"Total Energy": (9, Total(Units.KWH)),
"Exported Power": (10, Units.W),
"PV1 Power": (11, Units.W),
Expand Down
8 changes: 8 additions & 0 deletions solax/units.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ class Measurement(NamedTuple):

unit: Units
is_monotonic: bool = False
resets_daily: bool = False
storage: bool = False


class Total(Measurement):
Expand All @@ -30,4 +32,10 @@ class Total(Measurement):
is_monotonic: bool = True


class DailyTotal(Measurement):
"""A Measurement where the values are reset daily."""

resets_daily: bool = True


SensorUnit = Union[Measurement, Total]

0 comments on commit e3f462a

Please sign in to comment.