Skip to content

Commit aa474db

Browse files
authored
[solax] Add missing channels for X1 Hybrid G4 inverter (#20660)
* [solax] Add missing channels for X1 Hybrid G4 inverter Signed-off-by: Konstantin Polihronov <polychronov@gmail.com>
1 parent c1abdb6 commit aa474db

4 files changed

Lines changed: 54 additions & 2 deletions

File tree

bundles/org.openhab.binding.solax/src/main/java/org/openhab/binding/solax/internal/model/local/CommonLocalDeviceData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public long packU16(int indexMajor, int indexMinor) {
7272
short major = getFromRawData(indexMajor);
7373
short minor = getFromRawData(indexMinor);
7474
if (major == 0) {
75-
return minor;
75+
return Short.toUnsignedLong(minor);
7676
}
7777

7878
return Integer.toUnsignedLong(major << 16 | minor & 0xFFFF);

bundles/org.openhab.binding.solax/src/main/java/org/openhab/binding/solax/internal/model/local/X1HybridG4Data.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,44 @@ public short getBatteryLevel() {
112112
public short getInverterWorkModeCode() {
113113
return getFromRawData(10);
114114
}
115+
116+
@Override
117+
public short getPowerUsage() {
118+
return getFromRawData(38);
119+
}
120+
121+
@Override
122+
public double getTodayEnergy() {
123+
return ((double) getFromRawData(13)) / 10;
124+
}
125+
126+
@Override
127+
public double getTotalPVEnergy() {
128+
return ((double) packU16(12, 11)) / 10;
129+
}
130+
131+
@Override
132+
public double getTotalFeedInEnergy() {
133+
return ((double) packU16(35, 34)) / 100;
134+
}
135+
136+
@Override
137+
public double getTotalConsumption() {
138+
return ((double) packU16(37, 36)) / 100;
139+
}
140+
141+
@Override
142+
public double getTodayFeedInEnergy() {
143+
return ((double) getFromRawData(39)) / 10;
144+
}
145+
146+
@Override
147+
public double getTodayBatteryDischargeEnergy() {
148+
return ((double) getFromRawData(87)) / 10;
149+
}
150+
151+
@Override
152+
public double getTodayBatteryChargeEnergy() {
153+
return ((double) getFromRawData(85)) / 10;
154+
}
115155
}

bundles/org.openhab.binding.solax/src/main/java/org/openhab/binding/solax/internal/model/local/inverters/X1HybridG4DataParser.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ public class X1HybridG4DataParser implements RawDataParser {
3737
CHANNEL_INVERTER_PV_TOTAL_CURRENT, CHANNEL_BATTERY_POWER, CHANNEL_BATTERY_VOLTAGE, CHANNEL_BATTERY_CURRENT,
3838
CHANNEL_BATTERY_TEMPERATURE, CHANNEL_BATTERY_STATE_OF_CHARGE, CHANNEL_FEED_IN_POWER, CHANNEL_TIMESTAMP,
3939
CHANNEL_RAW_DATA, CHANNEL_INVERTER_OUTPUT_POWER, CHANNEL_INVERTER_OUTPUT_CURRENT,
40-
CHANNEL_INVERTER_OUTPUT_VOLTAGE, CHANNEL_INVERTER_OUTPUT_FREQUENCY, CHANNEL_INVERTER_WORKMODE);
40+
CHANNEL_INVERTER_OUTPUT_VOLTAGE, CHANNEL_INVERTER_OUTPUT_FREQUENCY, CHANNEL_INVERTER_WORKMODE,
41+
CHANNEL_POWER_USAGE, CHANNEL_TODAY_ENERGY, CHANNEL_TOTAL_PV_ENERGY, CHANNEL_TOTAL_FEED_IN_ENERGY,
42+
CHANNEL_TOTAL_CONSUMPTION, CHANNEL_TODAY_FEED_IN_ENERGY, CHANNEL_TODAY_BATTERY_DISCHARGE_ENERGY,
43+
CHANNEL_TODAY_BATTERY_CHARGE_ENERGY);
4144

4245
@Override
4346
public LocalData getData(LocalConnectRawDataBean rawData) {

bundles/org.openhab.binding.solax/src/test/java/org/openhab/binding/solax/internal/local/parsers/TestX1HybridG4Parser.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ protected void assertParserSpecific(LocalData data) {
7373
assertEquals(99, data.getBatteryLevel()); // [18]
7474

7575
assertEquals(12, data.getFeedInPower()); // [32]
76+
77+
assertEquals(7.0, data.getTodayEnergy()); // [13]
78+
assertEquals(5978.1, data.getTotalPVEnergy()); // packU16(12,11) / 10
79+
assertEquals(448, data.getPowerUsage()); // [38]
80+
assertEquals(132.4, data.getTotalFeedInEnergy()); // packU16(35,34) / 100
81+
assertEquals(1944.2, data.getTotalConsumption()); // packU16(37,36) / 100
82+
assertEquals(4.3, data.getTodayFeedInEnergy()); // [39]
83+
assertEquals(5.7, data.getTodayBatteryDischargeEnergy()); // [87]
84+
assertEquals(11.6, data.getTodayBatteryChargeEnergy()); // [85]
7685
}
7786

7887
@Override

0 commit comments

Comments
 (0)