Add controller capabilities reader
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
package com.litoralregas.backend.acquisition;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public record ControllerCapabilities(
|
||||
Integer irrigationControllerCount,
|
||||
Integer fertilizerChannelCount,
|
||||
Boolean irrigationEnabled,
|
||||
Boolean climateEnabled,
|
||||
Boolean lightingEnabled,
|
||||
Integer climateGreenhouseCount,
|
||||
Integer rawFeatureFlags,
|
||||
Instant timestamp
|
||||
) {
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.litoralregas.backend.acquisition;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class ControllerCapabilitiesController {
|
||||
|
||||
private final ControllerCapabilitiesReader controllerCapabilitiesReader;
|
||||
|
||||
public ControllerCapabilitiesController(ControllerCapabilitiesReader controllerCapabilitiesReader) {
|
||||
this.controllerCapabilitiesReader = controllerCapabilitiesReader;
|
||||
}
|
||||
|
||||
@GetMapping("/api/acquisition/capabilities")
|
||||
public ControllerCapabilities getCapabilities() {
|
||||
return controllerCapabilitiesReader.readCapabilities();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.litoralregas.backend.acquisition;
|
||||
|
||||
import com.litoralregas.backend.modbus.LrModbusClient;
|
||||
import com.litoralregas.backend.modbus.ModbusReadResult;
|
||||
import com.litoralregas.backend.modbus.ModbusUnit;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class ControllerCapabilitiesReader {
|
||||
|
||||
private static final int CAPABILITIES_START_ADDRESS = 6;
|
||||
private static final int CAPABILITIES_REGISTER_COUNT = 4;
|
||||
|
||||
private final LrModbusClient modbusClient;
|
||||
|
||||
public ControllerCapabilitiesReader(LrModbusClient modbusClient) {
|
||||
this.modbusClient = modbusClient;
|
||||
}
|
||||
|
||||
public ControllerCapabilities readCapabilities() {
|
||||
ModbusReadResult result = modbusClient.readInputRegisters(
|
||||
ModbusUnit.PC,
|
||||
CAPABILITIES_START_ADDRESS,
|
||||
CAPABILITIES_REGISTER_COUNT
|
||||
);
|
||||
|
||||
List<Integer> values = result.values();
|
||||
|
||||
if (values.size() != CAPABILITIES_REGISTER_COUNT) {
|
||||
throw new IllegalStateException("Invalid controller capabilities response size.");
|
||||
}
|
||||
|
||||
Integer irrigationControllerCount = values.get(0);
|
||||
Integer fertilizerChannelCount = values.get(1);
|
||||
Integer rawFeatureFlags = values.get(2);
|
||||
Integer climateGreenhouseCount = values.get(3);
|
||||
|
||||
return new ControllerCapabilities(
|
||||
irrigationControllerCount,
|
||||
fertilizerChannelCount,
|
||||
isBitSet(rawFeatureFlags, 0),
|
||||
isBitSet(rawFeatureFlags, 1),
|
||||
isBitSet(rawFeatureFlags, 2),
|
||||
climateGreenhouseCount,
|
||||
rawFeatureFlags,
|
||||
Instant.now()
|
||||
);
|
||||
}
|
||||
|
||||
private boolean isBitSet(Integer value, int bitOffset) {
|
||||
return ((value >> bitOffset) & 1) == 1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user