Skip to content

Commit 51e1205

Browse files
authored
[Solax] Changes in values parser for X3-Hybrid-G4 (openhab#17549)
* Fixes in indexes from Ruepert #1 Signed-off-by: Konstantin Polihronov <[email protected]>
1 parent 58f5905 commit 51e1205

File tree

5 files changed

+83
-62
lines changed

5 files changed

+83
-62
lines changed

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

+33-33
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,23 @@ default String getRawData() {
4545
LocalConnectRawDataBean getData();
4646

4747
default double getPV1Voltage() {
48-
return Short.MIN_VALUE;
48+
return Integer.MIN_VALUE;
4949
}
5050

5151
default double getPV1Current() {
52-
return Short.MIN_VALUE;
52+
return Integer.MIN_VALUE;
5353
}
5454

5555
default short getPV1Power() {
5656
return Short.MIN_VALUE;
5757
}
5858

5959
default double getPV2Voltage() {
60-
return Short.MIN_VALUE;
60+
return Integer.MIN_VALUE;
6161
}
6262

6363
default double getPV2Current() {
64-
return Short.MIN_VALUE;
64+
return Integer.MIN_VALUE;
6565
}
6666

6767
default short getPV2Power() {
@@ -77,11 +77,11 @@ default double getPVTotalCurrent() {
7777
}
7878

7979
default double getBatteryVoltage() {
80-
return Short.MIN_VALUE;
80+
return Integer.MIN_VALUE;
8181
}
8282

8383
default double getBatteryCurrent() {
84-
return Short.MIN_VALUE;
84+
return Integer.MIN_VALUE;
8585
}
8686

8787
default short getBatteryPower() {
@@ -104,7 +104,7 @@ default short getBatteryLevel() {
104104
return Short.MIN_VALUE;
105105
}
106106

107-
default short getFeedInPower() {
107+
default int getFeedInPower() {
108108
return Short.MIN_VALUE;
109109
}
110110

@@ -113,87 +113,87 @@ default short getPowerUsage() {
113113
}
114114

115115
default double getTotalEnergy() {
116-
return Short.MIN_VALUE;
116+
return Integer.MIN_VALUE;
117117
}
118118

119-
default short getTotalBatteryDischargeEnergy() {
120-
return Short.MIN_VALUE;
119+
default double getTotalBatteryDischargeEnergy() {
120+
return Integer.MIN_VALUE;
121121
}
122122

123-
default short getTotalBatteryChargeEnergy() {
124-
return Short.MIN_VALUE;
123+
default double getTotalBatteryChargeEnergy() {
124+
return Integer.MIN_VALUE;
125125
}
126126

127127
default double getTotalPVEnergy() {
128-
return Short.MIN_VALUE;
128+
return Integer.MIN_VALUE;
129129
}
130130

131-
default short getTotalFeedInEnergy() {
132-
return Short.MIN_VALUE;
131+
default double getTotalFeedInEnergy() {
132+
return Integer.MIN_VALUE;
133133
}
134134

135135
default double getTotalConsumption() {
136-
return Short.MIN_VALUE;
136+
return Integer.MIN_VALUE;
137137
}
138138

139139
default double getTodayEnergy() {
140-
return Short.MIN_VALUE;
140+
return Integer.MIN_VALUE;
141141
}
142142

143143
default double getTodayFeedInEnergy() {
144-
return Short.MIN_VALUE;
144+
return Integer.MIN_VALUE;
145145
}
146146

147147
default double getTodayConsumption() {
148-
return Short.MIN_VALUE;
148+
return Integer.MIN_VALUE;
149149
}
150150

151151
default double getTodayBatteryDischargeEnergy() {
152-
return Short.MIN_VALUE;
152+
return Integer.MIN_VALUE;
153153
}
154154

155155
default double getTodayBatteryChargeEnergy() {
156-
return Short.MIN_VALUE;
156+
return Integer.MIN_VALUE;
157157
}
158158

159159
default double getInverterVoltage() {
160-
return Short.MIN_VALUE;
160+
return Integer.MIN_VALUE;
161161
}
162162

163163
default double getInverterCurrent() {
164-
return Short.MIN_VALUE;
164+
return Integer.MIN_VALUE;
165165
}
166166

167167
default short getInverterOutputPower() {
168168
return Short.MIN_VALUE;
169169
}
170170

171171
default double getInverterFrequency() {
172-
return Short.MIN_VALUE;
172+
return Integer.MIN_VALUE;
173173
}
174174

175175
default double getVoltagePhase1() {
176-
return Short.MIN_VALUE;
176+
return Integer.MIN_VALUE;
177177
}
178178

179179
default double getVoltagePhase2() {
180-
return Short.MIN_VALUE;
180+
return Integer.MIN_VALUE;
181181
}
182182

183183
default double getVoltagePhase3() {
184-
return Short.MIN_VALUE;
184+
return Integer.MIN_VALUE;
185185
}
186186

187187
default double getCurrentPhase1() {
188-
return Short.MIN_VALUE;
188+
return Integer.MIN_VALUE;
189189
}
190190

191191
default double getCurrentPhase2() {
192-
return Short.MIN_VALUE;
192+
return Integer.MIN_VALUE;
193193
}
194194

195195
default double getCurrentPhase3() {
196-
return Short.MIN_VALUE;
196+
return Integer.MIN_VALUE;
197197
}
198198

199199
default short getOutputPowerPhase1() {
@@ -213,15 +213,15 @@ default short getTotalOutputPower() {
213213
}
214214

215215
default double getFrequencyPhase1() {
216-
return Short.MIN_VALUE;
216+
return Integer.MIN_VALUE;
217217
}
218218

219219
default double getFrequencyPhase2() {
220-
return Short.MIN_VALUE;
220+
return Integer.MIN_VALUE;
221221
}
222222

223223
default double getFrequencyPhase3() {
224-
return Short.MIN_VALUE;
224+
return Integer.MIN_VALUE;
225225
}
226226

227227
default short getInverterWorkModeCode() {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public double getInverterFrequency() {
4949
}
5050

5151
@Override
52-
public short getFeedInPower() {
52+
public int getFeedInPower() {
5353
return getFromRawData(32);
5454
}
5555

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

+16-15
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import org.eclipse.jdt.annotation.NonNullByDefault;
1616
import org.openhab.binding.solax.internal.connectivity.rawdata.local.LocalConnectRawDataBean;
17+
import org.openhab.binding.solax.internal.util.ByteUtil;
1718

1819
/**
1920
* The {@link X3HybridG4Data} is an implementation of the single phased inverter data interface for X3 Hybrid G4
@@ -129,7 +130,7 @@ public double getFrequencyPhase3() {
129130

130131
@Override
131132
public double getBatteryVoltage() {
132-
return ((double) getFromRawData(39)) / 100;
133+
return ((double) ByteUtil.read32BitSigned(getFromRawData(169), getFromRawData(170))) / 100;
133134
}
134135

135136
@Override
@@ -155,8 +156,8 @@ public short getBatteryLevel() {
155156
// Feed in power
156157

157158
@Override
158-
public short getFeedInPower() {
159-
return (short) (getFromRawData(34) - getFromRawData(35));
159+
public int getFeedInPower() {
160+
return ByteUtil.read32BitSigned(getFromRawData(34), getFromRawData(35));
160161
}
161162

162163
// Totals
@@ -168,47 +169,47 @@ public short getPowerUsage() {
168169

169170
@Override
170171
public double getTotalEnergy() {
171-
return ((double) getFromRawData(68)) / 10;
172+
return ((double) ByteUtil.read32BitSigned(getFromRawData(68), getFromRawData(69))) / 10;
172173
}
173174

174175
@Override
175-
public short getTotalBatteryDischargeEnergy() {
176-
return getFromRawData(74);
176+
public double getTotalBatteryDischargeEnergy() {
177+
return ((double) ByteUtil.read32BitSigned(getFromRawData(74), getFromRawData(75))) / 10;
177178
}
178179

179180
@Override
180-
public short getTotalBatteryChargeEnergy() {
181-
return getFromRawData(76);
181+
public double getTotalBatteryChargeEnergy() {
182+
return ((double) ByteUtil.read32BitSigned(getFromRawData(76), getFromRawData(77))) / 10;
182183
}
183184

184185
@Override
185186
public double getTotalPVEnergy() {
186-
return ((double) getFromRawData(80)) / 10;
187+
return ((double) ByteUtil.read32BitSigned(getFromRawData(80), getFromRawData(81))) / 10;
187188
}
188189

189190
@Override
190-
public short getTotalFeedInEnergy() {
191-
return getFromRawData(86);
191+
public double getTotalFeedInEnergy() {
192+
return ((double) ByteUtil.read32BitSigned(getFromRawData(86), getFromRawData(87))) / 100;
192193
}
193194

194195
@Override
195196
public double getTotalConsumption() {
196-
return ((double) getFromRawData(88)) / 10;
197+
return ((double) ByteUtil.read32BitSigned(getFromRawData(88), getFromRawData(89))) / 10;
197198
}
198199

199200
@Override
200201
public double getTodayEnergy() {
201-
return ((double) getFromRawData(82)) / 10;
202+
return ((double) getFromRawData(70)) / 10;
202203
}
203204

204205
@Override
205206
public double getTodayFeedInEnergy() {
206-
return ((double) getFromRawData(90)) / 100;
207+
return ((double) ByteUtil.read32BitSigned(getFromRawData(90), getFromRawData(91))) / 100;
207208
}
208209

209210
@Override
210211
public double getTodayConsumption() {
211-
return ((double) getFromRawData(92)) / 100;
212+
return ((double) ByteUtil.read32BitSigned(getFromRawData(92), getFromRawData(93))) / 100;
212213
}
213214

214215
@Override

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public class X3HybridG4DataParser implements RawDataParser {
4545
CHANNEL_INVERTER_OUTPUT_FREQUENCY_PHASE3, CHANNEL_POWER_USAGE, CHANNEL_TOTAL_ENERGY,
4646
CHANNEL_TOTAL_BATTERY_CHARGE_ENERGY, CHANNEL_TOTAL_PV_ENERGY, CHANNEL_TOTAL_CONSUMPTION,
4747
CHANNEL_TODAY_ENERGY, CHANNEL_TODAY_FEED_IN_ENERGY, CHANNEL_TODAY_CONSUMPTION,
48-
CHANNEL_TODAY_BATTERY_CHARGE_ENERGY, CHANNEL_TODAY_BATTERY_DISCHARGE_ENERGY, CHANNEL_INVERTER_WORKMODE);
48+
CHANNEL_TODAY_BATTERY_CHARGE_ENERGY, CHANNEL_TODAY_BATTERY_DISCHARGE_ENERGY, CHANNEL_INVERTER_WORKMODE,
49+
CHANNEL_TOTAL_FEED_IN_ENERGY, CHANNEL_TOTAL_BATTERY_DISCHARGE_ENERGY);
4950

5051
@Override
5152
public LocalData getData(LocalConnectRawDataBean rawData) {

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

+31-12
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ public class TestX3HybridG4Parser extends AbstractParserTest {
3131
{
3232
sn:XYZ,
3333
ver:3.005.01,
34-
type:14,Data:[
34+
type:14,
35+
Data:[
3536
2316,2329,2315,18,18,18,372,363,365,1100,
3637
12,23,34,45,56,67,4996,4996,4996,2,
3738
0,0,0,0,0,0,0,0,0,0,
3839
0,0,0,1,65494,65535,0,0,0,31330,
3940
320,1034,3078,1,44,1100,256,1294,0,0,
4041
7445,5895,100,0,38,0,0,0,0,0,
41-
0,0,0,0,0,0,0,0,505,0,
42+
0,0,0,0,0,0,0,0,588,1,
4243
396,0,0,0,102,0,142,0,62,110,
4344
570,0,463,0,0,0,1925,0,369,0,
4445
506,1925,304,309,0,0,0,0,0,0,
@@ -47,6 +48,24 @@ public class TestX3HybridG4Parser extends AbstractParserTest {
4748
Information:[12.000,14,XY,8,1.23,0.00,1.24,1.09,0.00,1]
4849
}
4950
""";
51+
private static final String RAW_DATA_X3_RUEPERT = """
52+
{
53+
"sn":"SRABCDEFGH",
54+
"ver":"3.009.03",
55+
"type":14,
56+
"Data":[
57+
2367,2360,2375,10,10,10,48,48,58,154,
58+
6077,5297,19,19,1177,1058,5003,5003,5003,2,
59+
0,0,0,0,0,0,0,0,0,0,
60+
0,0,0,0,0,0,0,0,0,32310,
61+
600,1971,3213,61,1959,1,46,154,256,10528,
62+
3083,6154,100,0,34,0,0,0,0,0,
63+
0,0,0,0,0,0,0,0,2380,1,
64+
52,77,0,0,6253,0,7500,0,37,46,
65+
6854,1,64,4,0,0,2662,8,10050,0,
66+
30,0,518,0,0,0,0,0,0,0,
67+
0,0,1,51,1,23,47,256,3504,2400,300,300,249,227,34,33,74,1620,1024,16448,16448,16448,0,0,0,3352,3344,57729,21,20564,12339,18753,12354,16694,13124,12848,20564,12339,19010,12857,16690,13124,13368,20564,12339,19010,12601,16691,12356,12597,20564,12339,19010,12601,16691,12356,14387,0,0,0,0,0,0,0,515,257,1281,1027,0,32310,0,0,0,0,0,0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"Information":[10.000,14,"H34A10IA999999",8,1.41,0.00,1.40,1.09,0.00,1]}
68+
""";
5069

5170
@Override
5271
protected InverterType getInverterType() {
@@ -86,25 +105,25 @@ protected void assertParserSpecific(LocalData data) {
86105
assertEquals(2, data.getInverterWorkModeCode()); // [19]
87106
assertEquals("2", data.getInverterWorkMode()); // [19]
88107

89-
assertEquals(-41, data.getFeedInPower()); // [34] - [35]
108+
assertEquals(-42, data.getFeedInPower()); // [34][35]
90109

91-
assertEquals(313.3, data.getBatteryVoltage()); // [39]
110+
assertEquals(2.59, data.getBatteryVoltage()); // [39]
92111
assertEquals(3.2, data.getBatteryCurrent()); // [40]
93112
assertEquals(1034, data.getBatteryPower()); // [41]
94113
assertEquals(45, data.getBatteryLevel()); // [103]
95114
assertEquals(59, data.getBatteryTemperature()); // [105]
96115

97116
// Totals
98117
assertEquals(1294, data.getPowerUsage()); // [47]
99-
assertEquals(50.5, data.getTotalEnergy()); // [68]
100-
assertEquals(102, data.getTotalBatteryDischargeEnergy()); // [74]
101-
assertEquals(142, data.getTotalBatteryChargeEnergy()); // [76]
102-
assertEquals(57, data.getTotalPVEnergy()); // [80]
103-
assertEquals(1925, data.getTotalFeedInEnergy()); // [86]
118+
assertEquals(6612.4, data.getTotalEnergy()); // [68][69]
119+
assertEquals(10.2, data.getTotalBatteryDischargeEnergy()); // [74][75]
120+
assertEquals(14.2, data.getTotalBatteryChargeEnergy()); // [76][77]
121+
assertEquals(57, data.getTotalPVEnergy()); // [80][81]
122+
assertEquals(19.25, data.getTotalFeedInEnergy()); // [86][87]
104123
assertEquals(36.9, data.getTotalConsumption()); // [88]
105-
assertEquals(46.3, data.getTodayEnergy()); // [82] / 10
106-
assertEquals(5.06, data.getTodayFeedInEnergy()); // [90] / 100
107-
assertEquals(3.04, data.getTodayConsumption()); // [92] / 100
124+
assertEquals(39.6, data.getTodayEnergy()); // [82] / 10
125+
assertEquals(1261573.06, data.getTodayFeedInEnergy()); // [90][91] / 100
126+
assertEquals(202509.28, data.getTodayConsumption()); // [92][93] / 100
108127
assertEquals(6.2, data.getTodayBatteryDischargeEnergy()); // [78] / 100
109128
assertEquals(11, data.getTodayBatteryChargeEnergy()); // [79] / 100
110129
}

0 commit comments

Comments
 (0)