AplicomProtocolDecoder event 186

Amine BALOUT 9 hours ago

For the next update, the following should be added to the AplicomProtocolDecoder.java :

private void decodeEventData(Position position, ByteBuf buf, int event) {
        int extDataLength;
        String extDataHex;
        switch (event) {
            case 2, 40 -> buf.readUnsignedByte();
            case 9 -> buf.readUnsignedMedium();
            case 31, 32 -> buf.readUnsignedShort();
            case 38 -> buf.skipBytes(4 * 9);
            case 113 -> {
                buf.readUnsignedInt();
                buf.readUnsignedByte();
            }
            case 119 -> position.set("eventData", ByteBufUtil.hexDump(
                    buf, buf.readerIndex(), Math.min(buf.readableBytes(), 1024)));
            case 121, 142 -> buf.readLong();
            case 130 -> buf.readUnsignedInt(); // incorrect
            case 188 -> decodeEB(position, buf);
            case 186 -> {
                buf.markReaderIndex();
                extDataLength = Math.min(buf.readableBytes(), 1024);
                extDataHex = ByteBufUtil.hexDump(buf, buf.readerIndex(), extDataLength);
                position.set("extData", extDataHex);
                if (buf.readableBytes() >= 10) {
                    ByteBuf slice = buf.readSlice(10);
                    long sensorId = slice.readLong();
                    int temperatureRaw = slice.readUnsignedShort();
                    position.set("sensorId", String.format("%016x", sensorId));
                    position.set("temperature", temperatureRaw / 10.0);
                } else {
                    buf.resetReaderIndex();
                }
            }
        }
    }

to handle event code 186, by exposing sensorId and temperature as new position attributes.

Anton Tananaev 8 hours ago

If you want it to be added, I recommend sending a pull request. Make sure you provide the documentation and logs as well.