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.*;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.junit.jupiter.api.Test;
19 import org.openhab.binding.solax.internal.connectivity.rawdata.local.LocalConnectRawDataBean;
20 import org.openhab.binding.solax.internal.model.InverterType;
21 import org.openhab.binding.solax.internal.model.local.LocalInverterData;
22 import org.openhab.binding.solax.internal.model.local.parsers.RawDataParser;
25 * The {@link TestX3HybridG4Parser} simple test that tests for proper parsing against a real data from the inverter
27 * @author Konstantin Polihronov - Initial contribution
30 public class TestX3HybridG4Parser {
37 2316,2329,2315,18,18,18,372,363,365,1100,
38 12,23,34,45,56,67,4996,4996,4996,2,
39 0,0,0,0,0,0,0,0,0,0,
40 0,0,0,1,65494,65535,0,0,0,31330,
41 320,1034,3078,1,44,1100,256,1294,0,0,
42 7445,5895,100,0,38,0,0,0,0,0,
43 0,0,0,0,0,0,0,0,505,0,
44 396,0,0,0,102,0,142,0,62,110,
45 570,0,463,0,0,0,1925,0,369,0,
46 506,1925,304,309,0,0,0,0,0,0,
47 0,0,0,45,1,59,1,34,54,256,
48 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],
49 Information:[12.000,14,XY,8,1.23,0.00,1.24,1.09,0.00,1]
54 public void testParser() {
55 LocalConnectRawDataBean bean = LocalConnectRawDataBean.fromJson(rawData);
56 int type = bean.getType();
57 InverterType inverterType = InverterType.fromIndex(type);
58 assertEquals(InverterType.X3_HYBRID_G4, inverterType, "Inverter type not recognized properly");
60 RawDataParser parser = inverterType.getParser();
61 assertNotNull(parser);
63 LocalInverterData data = parser.getData(bean);
64 assertEquals("XYZ", data.getWifiSerial());
65 assertEquals("3.005.01", data.getWifiVersion());
67 assertEquals(231.6, data.getVoltagePhase1()); // [0]
68 assertEquals(232.9, data.getVoltagePhase2()); // [1]
69 assertEquals(231.5, data.getVoltagePhase3()); // [2]
71 assertEquals(1.8, data.getCurrentPhase1()); // [3]
72 assertEquals(1.8, data.getCurrentPhase2()); // [4]
73 assertEquals(1.8, data.getCurrentPhase3()); // [5]
75 assertEquals(372, data.getOutputPowerPhase1()); // [6]
76 assertEquals(363, data.getOutputPowerPhase2()); // [7]
77 assertEquals(365, data.getOutputPowerPhase3()); // [8]
79 assertEquals(1100, data.getTotalOutputPower()); // [9]
81 assertEquals(1.2, data.getPV1Voltage()); // [10]
82 assertEquals(2.3, data.getPV2Voltage()); // [11]
83 assertEquals(3.4, data.getPV1Current()); // [12]
84 assertEquals(4.5, data.getPV2Current()); // [13]
85 assertEquals(56, data.getPV1Power()); // [14]
86 assertEquals(67, data.getPV2Power()); // [15]
88 assertEquals(49.96, data.getFrequencyPhase1()); // [16]
89 assertEquals(49.96, data.getFrequencyPhase2()); // [17]
90 assertEquals(49.96, data.getFrequencyPhase3()); // [18]
92 assertEquals(2, data.getInverterWorkModeCode()); // [19]
93 assertEquals("2", data.getInverterWorkMode()); // [19]
95 assertEquals(-41, data.getFeedInPower()); // [34] - [35]
97 assertEquals(313.3, data.getBatteryVoltage()); // [39]
98 assertEquals(3.2, data.getBatteryCurrent()); // [40]
99 assertEquals(1034, data.getBatteryPower()); // [41]
100 assertEquals(45, data.getBatteryLevel()); // [103]
101 assertEquals(59, data.getBatteryTemperature()); // [105]
104 assertEquals(1294, data.getPowerUsage()); // [47]
105 assertEquals(50.5, data.getTotalEnergy()); // [68]
106 assertEquals(102, data.getTotalBatteryDischargeEnergy()); // [74]
107 assertEquals(142, data.getTotalBatteryChargeEnergy()); // [76]
108 assertEquals(57, data.getTotalPVEnergy()); // [80]
109 assertEquals(1925, data.getTotalFeedInEnergy()); // [86]
110 assertEquals(36.9, data.getTotalConsumption()); // [88]
111 assertEquals(46.3, data.getTodayEnergy()); // [82] / 10
112 assertEquals(5.06, data.getTodayFeedInEnergy()); // [90] / 100
113 assertEquals(3.04, data.getTodayConsumption()); // [92] / 100
114 assertEquals(6.2, data.getTodayBatteryDischargeEnergy()); // [78] / 100
115 assertEquals(11, data.getTodayBatteryChargeEnergy()); // [79] / 100