objectID всегда равен 0 в Observe.onResponse

Я пытаюсь настроить пользовательский сервер на основе кода Leshan-сервера. Я хочу сохранить некоторые данные, полученные от устройств, в базу данных. В настоящее время я использую предоставленную демо-версию leshan-client в качестве единственного клиента для тестирования.

Мой план состоит в том, чтобы прослушивать ответы наблюдателей с помощью обработчика ObservationListener.onResponse.

Для каждого из этих событий мне также нужно извлечь имя каждого ресурса, чтобы записать их соответственно в мою базу данных. Для этого я использую методы, связанные с server.getModelProvider.

Вот фрагмент кода моего обработчика:

private LeshanServer server;
private ObservationListener obsListener = new ObservationListener() {
    public void onResponse(Observation obs, Registration reg, ObserveResponse res) {
        LwM2mObjectInstance content = (LwM2mObjectInstance) res.getContent();
        int objectId = content.getId(); // Here I retrieve the object ID, but it's always 0
        LwM2mModel objectModel = server.getModelProvider().getObjectModel(reg);

        for (Map.Entry<Integer, LwM2mResource> r : content.getResources().entrySet()) {
            int resId = r.getValue().getId(); // This one is okay
            ResourceModel model = objectModel.getResourceModel(objectId, resId); // and here I'm trying to use it
            if (model != null) {
                System.out.println(model.name);
            }
        }
    }
    // Other handlers next...
}

Проблема заключается в том, чтобы правильно получить идентификатор объекта. Здесь мой objectId всегда равен 0. Таким образом, за исключением первого объекта, модель ресурса равна нулю (как я полагаю, она ничего не соответствует). Я не вижу никаких других соответствующих данных в ObserveResponse.

Когда я вручную устанавливаю objectId в другие значения (1, 2, 3, ...8), он работает как брелок для соответствующего объекта.

Я думаю, что это не нормально. Что может быть источником этой ошибки?

1 ответ

Решение

Я думаю, что res (). GetContent (). GetId () вернет resourceId, а не ObjectId. В моем случае я попытался установить наблюдение для ресурса с идентификатором 2, и я получил 2 от getId (). Есть другой способ получить ObjectId, который является obs.getPath (), таким образом, вы получите LwM2mPath, который содержит ObjectId, InstanceId и ResourceId.

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