use of me.retrodaredevil.solarthing.solar.tracer.batteryconfig.TracerBatteryConfigBuilder in project solarthing by wildmountainfarms.
the class TracerPacketListUpdater method receive.
@Override
public void receive(List<Packet> packets) {
TracerStatusPacket packet = TracerStatusPackets.createFromReadTable(number, read);
packets.add(packet);
if (tracerClockOptions != null) {
// Sorry to anyone in the year 2256, that's just too bad for you
// We make the year 21 represent 2021, because the tracer stores the year using 8 bits
LocalDateTime currentTime = packet.getSolarThingLocalDateTime();
final LocalDateTime desiredTime;
ZoneOffset zoneOffset = tracerClockOptions.getZoneOffset();
if (zoneOffset != null) {
desiredTime = Instant.now().atOffset(zoneOffset).toLocalDateTime();
} else {
ZoneId zone = tracerClockOptions.getZoneId() != null ? tracerClockOptions.getZoneId() : ZoneId.systemDefault();
desiredTime = Instant.now().atZone(zone).toLocalDateTime();
}
if (Duration.between(currentTime, desiredTime).abs().compareTo(tracerClockOptions.getDurationThreshold()) > 0) {
LOGGER.info("Going to update time to " + desiredTime + " from " + currentTime);
write.setSolarThingLocalDateTime(desiredTime);
LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Success updating time!");
}
}
if (connectionHandler != null) {
TracerBatteryConfigBuilder builder = new TracerBatteryConfigBuilder(packet);
connectionHandler.handleRequests(request -> {
String[] split = StringUtil.terminalSplit(request);
if (split.length == 1) {
if ("flushBatteryConfig".equals(split[0])) {
try {
write.setBatteryConfig(builder);
} catch (FunctionCodeException ex) {
return ex.getMessage();
} catch (ModbusRuntimeException ex) {
LOGGER.error("Got modbus exception while flushing", ex);
return "Unknown error:" + ex.getMessage();
}
return "flush success";
}
}
if (connectionHandlerHasFlushLogic && split.length > 1) {
// check if we're writing something
String fieldName = split[0];
String value = split[1];
// If we can successfully read from this reader, then that means that the input is a field in TracerBatteryConfigBuilder
//
ObjectReader reader = MAPPER.readerForUpdating(builder);
ObjectNode input = new ObjectNode(JsonNodeFactory.instance);
input.put(fieldName, value);
boolean success = true;
try {
reader.readValue(input);
} catch (IOException e) {
success = false;
}
if (success) {
return "queued up";
}
}
return NetCatUtil.handle(write, packet, request);
});
}
}
Aggregations