2 * Copyright (c) 2010-2024 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.solax.internal.local;
15 import static org.junit.jupiter.api.Assertions.assertEquals;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.openhab.binding.solax.internal.model.InverterType;
19 import org.openhab.binding.solax.internal.model.local.LocalInverterData;
22 * The {@link TestX3HybridG4Parser} simple test that tests for proper parsing against a real data from the inverter
24 * @author Konstantin Polihronov - Initial contribution
27 public class TestX3HybridG4Parser extends AbstractParserTest {
29 private static final String RAW_DATA = """
34 2316,2329,2315,18,18,18,372,363,365,1100,
35 12,23,34,45,56,67,4996,4996,4996,2,
36 0,0,0,0,0,0,0,0,0,0,
37 0,0,0,1,65494,65535,0,0,0,31330,
38 320,1034,3078,1,44,1100,256,1294,0,0,
39 7445,5895,100,0,38,0,0,0,0,0,
40 0,0,0,0,0,0,0,0,505,0,
41 396,0,0,0,102,0,142,0,62,110,
42 570,0,463,0,0,0,1925,0,369,0,
43 506,1925,304,309,0,0,0,0,0,0,
44 0,0,0,45,1,59,1,34,54,256,
45 3504,2400,300,300,295,276,33,33,2,1620,779,15163,15163,14906,0,0,0,3270,3264,45581,0,20564,12339,18753,12353,18742,12356,13625,20564,12339,18754,12866,18743,14151,13104,20564,12339,18754,12866,18743,14151,12592,20564,12339,18754,12865,18738,12871,13620,0,0,0,0,0,0,0,1025,8195,769,259,0,31460,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
46 Information:[12.000,14,XY,8,1.23,0.00,1.24,1.09,0.00,1]
51 protected InverterType getInverterType() {
52 return InverterType.X3_HYBRID_G4;
56 protected void assertParserSpecific(LocalInverterData data) {
57 assertEquals("XYZ", data.getWifiSerial());
58 assertEquals("3.005.01", data.getWifiVersion());
60 assertEquals(231.6, data.getVoltagePhase1()); // [0]
61 assertEquals(232.9, data.getVoltagePhase2()); // [1]
62 assertEquals(231.5, data.getVoltagePhase3()); // [2]
64 assertEquals(1.8, data.getCurrentPhase1()); // [3]
65 assertEquals(1.8, data.getCurrentPhase2()); // [4]
66 assertEquals(1.8, data.getCurrentPhase3()); // [5]
68 assertEquals(372, data.getOutputPowerPhase1()); // [6]
69 assertEquals(363, data.getOutputPowerPhase2()); // [7]
70 assertEquals(365, data.getOutputPowerPhase3()); // [8]
72 assertEquals(1100, data.getTotalOutputPower()); // [9]
74 assertEquals(1.2, data.getPV1Voltage()); // [10]
75 assertEquals(2.3, data.getPV2Voltage()); // [11]
76 assertEquals(3.4, data.getPV1Current()); // [12]
77 assertEquals(4.5, data.getPV2Current()); // [13]
78 assertEquals(56, data.getPV1Power()); // [14]
79 assertEquals(67, data.getPV2Power()); // [15]
81 assertEquals(49.96, data.getFrequencyPhase1()); // [16]
82 assertEquals(49.96, data.getFrequencyPhase2()); // [17]
83 assertEquals(49.96, data.getFrequencyPhase3()); // [18]
85 assertEquals(2, data.getInverterWorkModeCode()); // [19]
86 assertEquals("2", data.getInverterWorkMode()); // [19]
88 assertEquals(-41, data.getFeedInPower()); // [34] - [35]
90 assertEquals(313.3, data.getBatteryVoltage()); // [39]
91 assertEquals(3.2, data.getBatteryCurrent()); // [40]
92 assertEquals(1034, data.getBatteryPower()); // [41]
93 assertEquals(45, data.getBatteryLevel()); // [103]
94 assertEquals(59, data.getBatteryTemperature()); // [105]
97 assertEquals(1294, data.getPowerUsage()); // [47]
98 assertEquals(50.5, data.getTotalEnergy()); // [68]
99 assertEquals(102, data.getTotalBatteryDischargeEnergy()); // [74]
100 assertEquals(142, data.getTotalBatteryChargeEnergy()); // [76]
101 assertEquals(57, data.getTotalPVEnergy()); // [80]
102 assertEquals(1925, data.getTotalFeedInEnergy()); // [86]
103 assertEquals(36.9, data.getTotalConsumption()); // [88]
104 assertEquals(46.3, data.getTodayEnergy()); // [82] / 10
105 assertEquals(5.06, data.getTodayFeedInEnergy()); // [90] / 100
106 assertEquals(3.04, data.getTodayConsumption()); // [92] / 100
107 assertEquals(6.2, data.getTodayBatteryDischargeEnergy()); // [78] / 100
108 assertEquals(11, data.getTodayBatteryChargeEnergy()); // [79] / 100
112 protected String getRawData() {