Используйте 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.
Когда я получу возможность проверить один, я подтвердлю или исправлю этот ответ.

Другие вопросы по тегам