Skip to content

Commit 01ff5b5

Browse files
committed
Removed active sending as it was faulty and added more debug on
aggregated battery data to be sent to inverter
1 parent 5d11463 commit 01ff5b5

3 files changed

Lines changed: 46 additions & 27 deletions

File tree

core-api/src/main/java/com/airepublic/bmstoinverter/core/Inverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ public void process(final Runnable callback) {
186186
}
187187

188188
// create send frames based on the aggregated data
189+
LOG.debug("Collecting frames for aggregated battery data: {}", aggregatedPack.toJson());
189190
final List<ByteBuffer> sendFrames = createSendFrames(requestFrame, aggregatedPack);
190191

191192
if (sendFrames != null && !sendFrames.isEmpty()) {

core-api/src/main/java/com/airepublic/bmstoinverter/core/bms/data/BatteryPack.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
import java.util.stream.Collectors;
1616

1717
import com.airepublic.bmstoinverter.core.AlarmLevel;
18+
import com.google.gson.Gson;
1819

1920
/**
2021
* Holds all the data of a set of battery cells - a battery pack - collected from the BMS.
2122
*
2223
* Comments specify the precision and units of the value.
2324
*/
2425
public class BatteryPack {
26+
private transient final static Gson gson = new Gson();
27+
2528
public final Map<Alarm, AlarmLevel> alarms = new HashMap<>();
2629
/** Battery type: 0=lithium iron, 1=ternary lithium, 2=lithium titanate */
2730
public int type;
@@ -200,4 +203,14 @@ public AlarmLevel getAlarmLevel(final Alarm alarm) {
200203

201204
return level;
202205
}
206+
207+
208+
/**
209+
* Creates a JSON string representation of this {@link EnergyStorage} object.
210+
*
211+
* @return a JSON string representation of this {@link EnergyStorage} object
212+
*/
213+
public String toJson() {
214+
return gson.toJson(this);
215+
}
203216
}

inverter-pylon-rs485/src/main/java/com/airepublic/bmstoinverter/inverter/pylon/rs485/PylonInverterRS485Processor.java

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,27 @@ protected List<ByteBuffer> createSendFrames(final ByteBuffer requestFrame, final
7272
byte[] responseData = null;
7373

7474
switch (cid2) {
75-
case 0x4F:
75+
case 0x4F: // 0x4F Protocol Version
7676
responseData = createProtocolVersion(aggregatedPack);
77-
break; // 0x4F Protocol Version
78-
case 0x51:
77+
break;
78+
case 0x51: // 0x51 Manufacturer Code
7979
responseData = createManufacturerCode(aggregatedPack);
80-
break; // 0x51 Manufacturer Code
81-
case (byte) 0x92:
80+
break;
81+
case (byte) 0x92: // 0x92 Charge/Discharge Management Info
8282
responseData = createChargeDischargeManagementInfo(aggregatedPack);
83-
break; // 0x92 Charge/Discharge Management Info
84-
case 0x42:
83+
break;
84+
case 0x42: // 0x42 Cell Information
8585
responseData = createCellInformation(aggregatedPack);
86-
break; // 0x42 Cell Information
87-
case 0x47:
86+
break;
87+
case 0x47: // 0x47 Voltage/Current Limits
8888
responseData = createVoltageCurrentLimits(aggregatedPack);
89-
break; // 0x47 Voltage/Current Limits
90-
case 0x60:
89+
break;
90+
case 0x60: // 0x60 System Info
9191
responseData = createSystemInfo(aggregatedPack);
92-
break; // 0x60 System Info
93-
case 0x61:
92+
break;
93+
case 0x61: // 0x61 Battery Information
9494
responseData = createBatteryInformation(aggregatedPack);
95-
break; // 0x61 Battery Information
95+
break;
9696
case 0x62:
9797
responseData = createAlarms(aggregatedPack);
9898
break; // 0x62 Alarms
@@ -109,20 +109,25 @@ protected List<ByteBuffer> createSendFrames(final ByteBuffer requestFrame, final
109109

110110
frames.stream().forEach(f -> System.out.println(Port.printBuffer(f)));
111111
} else {
112+
LOG.debug("Inverter is not requesting data, no frames to send");
112113
// try to send data actively
113-
final byte adr = 0x12;
114-
frames.add(prepareSendFrame(adr, (byte) 0x4F, (byte) 0x00, createProtocolVersion(aggregatedPack)));
115-
frames.add(prepareSendFrame(adr, (byte) 0x51, (byte) 0x00, createManufacturerCode(aggregatedPack)));
116-
frames.add(prepareSendFrame(adr, (byte) 0x92, (byte) 0x00, createChargeDischargeManagementInfo(aggregatedPack)));
117-
frames.add(prepareSendFrame(adr, (byte) 0x42, (byte) 0x00, createCellInformation(aggregatedPack)));
118-
frames.add(prepareSendFrame(adr, (byte) 0x47, (byte) 0x00, createVoltageCurrentLimits(aggregatedPack)));
119-
frames.add(prepareSendFrame(adr, (byte) 0x60, (byte) 0x00, createSystemInfo(aggregatedPack)));
120-
frames.add(prepareSendFrame(adr, (byte) 0x61, (byte) 0x00, createBatteryInformation(aggregatedPack)));
121-
frames.add(prepareSendFrame(adr, (byte) 0x62, (byte) 0x00, createAlarms(aggregatedPack)));
122-
frames.add(prepareSendFrame(adr, (byte) 0x63, (byte) 0x00, createChargeDischargeIfno(aggregatedPack)));
123-
124-
LOG.debug("Actively sending {} frames to inverter", frames.size());
125-
frames.stream().forEach(f -> System.out.println(Port.printBuffer(f)));
114+
/**
115+
* final byte adr = 0x12; // this is wrong anyway as the CID1 should be 0x46 for responses
116+
* frames.add(prepareSendFrame(adr, (byte) 0x4F, (byte) 0x00,
117+
* createProtocolVersion(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte) 0x51, (byte)
118+
* 0x00, createManufacturerCode(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte) 0x92,
119+
* (byte) 0x00, createChargeDischargeManagementInfo(aggregatedPack)));
120+
* frames.add(prepareSendFrame(adr, (byte) 0x42, (byte) 0x00,
121+
* createCellInformation(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte) 0x47, (byte)
122+
* 0x00, createVoltageCurrentLimits(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte) 0x60,
123+
* (byte) 0x00, createSystemInfo(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte) 0x61,
124+
* (byte) 0x00, createBatteryInformation(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte)
125+
* 0x62, (byte) 0x00, createAlarms(aggregatedPack))); frames.add(prepareSendFrame(adr, (byte) 0x63,
126+
* (byte) 0x00, createChargeDischargeIfno(aggregatedPack)));
127+
*
128+
* LOG.debug("Actively sending {} frames to inverter", frames.size()); frames.stream().forEach(f ->
129+
* System.out.println(Port.printBuffer(f)));
130+
*/
126131
}
127132

128133
return frames;

0 commit comments

Comments
 (0)