Используйте Calimero для Java для чтения и записи значений int со знаком системы KNX
Используя Calimero, я хочу читать и записывать значения int со знаком в системе KNX.
Я использую методы readUnsigned и write в ProcessCommunicatorImpl для неподписанных целых, но нет методов для чтения и записи подписанных целых.
Например эти типы я не могу получить доступ:
DataPoint 6.x (дополнение 8 бит 2)
DataPoint 8.x (дополнение 16 бит 2)
DataPoint 13.x (дополнение 32 бит 2)
Доступны только следующие методы:
String read (Datapoint)
Строка readString (GroupAddress)
int readControl (GroupAddress)
двойной readFloat(GroupAddress, логический)
int readUnsigned (GroupAddress, String)
bool readBool (GroupAddress)
И у меня есть только GroupAddress, без Datapoint.
Кто-нибудь знает, как я могу читать и писать эти типы точек данных?
Спасибо!
1 ответ
Используя комментарий zapl в качестве вдохновения, я придумал этот код:
int getIntFrom8Bit2Complement(GroupAddress groupAddress) throws KNXException, InterruptedException {
final Datapoint dp = new StateDP(groupAddress, "my datapoint "+groupAddress.toString());
dp.setDPT(0, DPTXlator8BitSigned.DPT_VALUE_1_UCOUNT.getID());
String result = processCommunicator.read(dp);
try {
return Integer.parseInt(result);
} catch (NumberFormatException e) {
throw new KNXException("Error Parsing 8 bit 2 complement result as int -- result = "+result);
}
}
Я не уверен на 100% в разборе результата как int, но я не могу проверить, потому что у меня нет устройства KNX, которое отправит мне подписанное int.
Когда я получу возможность проверить один, я подтвердлю или исправлю этот ответ.