added fetching device profile
This commit is contained in:
commit
0e6df2a343
@ -58,4 +58,6 @@ public interface LwM2mClientContext {
|
|||||||
void update(LwM2mClient lwM2MClient);
|
void update(LwM2mClient lwM2MClient);
|
||||||
|
|
||||||
void removeCredentials(TransportProtos.SessionInfoProto sessionInfo);
|
void removeCredentials(TransportProtos.SessionInfoProto sessionInfo);
|
||||||
|
|
||||||
|
void sendMsgsAfterSleeping(LwM2mClient lwM2MClient);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,11 +21,15 @@ import org.eclipse.leshan.core.SecurityMode;
|
|||||||
import org.eclipse.leshan.core.model.ResourceModel;
|
import org.eclipse.leshan.core.model.ResourceModel;
|
||||||
import org.eclipse.leshan.core.node.LwM2mPath;
|
import org.eclipse.leshan.core.node.LwM2mPath;
|
||||||
import org.eclipse.leshan.server.registration.Registration;
|
import org.eclipse.leshan.server.registration.Registration;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.thingsboard.server.common.data.DeviceProfile;
|
import org.thingsboard.server.common.data.DeviceProfile;
|
||||||
|
import org.thingsboard.server.common.data.device.data.PowerMode;
|
||||||
import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
|
import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
|
||||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||||
import org.thingsboard.server.common.transport.TransportDeviceProfileCache;
|
import org.thingsboard.server.common.transport.TransportDeviceProfileCache;
|
||||||
|
import org.thingsboard.server.common.transport.TransportServiceCallback;
|
||||||
import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse;
|
import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse;
|
||||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||||
import org.thingsboard.server.queue.util.AfterStartUp;
|
import org.thingsboard.server.queue.util.AfterStartUp;
|
||||||
@ -34,9 +38,11 @@ import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
|
|||||||
import org.thingsboard.server.transport.lwm2m.secure.TbLwM2MSecurityInfo;
|
import org.thingsboard.server.transport.lwm2m.secure.TbLwM2MSecurityInfo;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportContext;
|
import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportContext;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil;
|
import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil;
|
||||||
|
import org.thingsboard.server.transport.lwm2m.server.ota.LwM2MOtaUpdateService;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager;
|
import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MClientStore;
|
import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MClientStore;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.store.TbMainSecurityStore;
|
import org.thingsboard.server.transport.lwm2m.server.store.TbMainSecurityStore;
|
||||||
|
import org.thingsboard.server.transport.lwm2m.server.uplink.DefaultLwM2MUplinkMsgHandler;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -64,6 +70,14 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
|
|||||||
private final TbLwM2MClientStore clientStore;
|
private final TbLwM2MClientStore clientStore;
|
||||||
private final LwM2MSessionManager sessionManager;
|
private final LwM2MSessionManager sessionManager;
|
||||||
private final TransportDeviceProfileCache deviceProfileCache;
|
private final TransportDeviceProfileCache deviceProfileCache;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Lazy
|
||||||
|
private DefaultLwM2MUplinkMsgHandler defaultLwM2MUplinkMsgHandler;
|
||||||
|
@Autowired
|
||||||
|
@Lazy
|
||||||
|
private LwM2MOtaUpdateService otaUpdateService;
|
||||||
|
|
||||||
private final Map<String, LwM2mClient> lwM2mClientsByEndpoint = new ConcurrentHashMap<>();
|
private final Map<String, LwM2mClient> lwM2mClientsByEndpoint = new ConcurrentHashMap<>();
|
||||||
private final Map<String, LwM2mClient> lwM2mClientsByRegistrationId = new ConcurrentHashMap<>();
|
private final Map<String, LwM2mClient> lwM2mClientsByRegistrationId = new ConcurrentHashMap<>();
|
||||||
private final Map<UUID, Lwm2mDeviceProfileTransportConfiguration> profiles = new ConcurrentHashMap<>();
|
private final Map<UUID, Lwm2mDeviceProfileTransportConfiguration> profiles = new ConcurrentHashMap<>();
|
||||||
@ -158,6 +172,7 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
|
|||||||
}
|
}
|
||||||
client.setRegistration(registration);
|
client.setRegistration(registration);
|
||||||
clientStore.put(client);
|
clientStore.put(client);
|
||||||
|
sendMsgsAfterSleeping(client);
|
||||||
} finally {
|
} finally {
|
||||||
client.unlock();
|
client.unlock();
|
||||||
}
|
}
|
||||||
@ -248,6 +263,28 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
|
|||||||
//TODO: implement
|
//TODO: implement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMsgsAfterSleeping(LwM2mClient lwM2MClient) {
|
||||||
|
if (LwM2MClientState.REGISTERED.equals(lwM2MClient.getState())) {
|
||||||
|
PowerMode powerMode = lwM2MClient.getPowerMode();
|
||||||
|
if (powerMode == null) {
|
||||||
|
Lwm2mDeviceProfileTransportConfiguration deviceProfile = getProfile(lwM2MClient.getProfileId());
|
||||||
|
powerMode = deviceProfile.getClientLwM2mSettings().getPowerMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PowerMode.PSM.equals(powerMode) || PowerMode.E_DRX.equals(powerMode)) {
|
||||||
|
defaultLwM2MUplinkMsgHandler.initAttributes(lwM2MClient);
|
||||||
|
TransportProtos.TransportToDeviceActorMsg persistentRpcRequestMsg = TransportProtos.TransportToDeviceActorMsg
|
||||||
|
.newBuilder()
|
||||||
|
.setSessionInfo(lwM2MClient.getSession())
|
||||||
|
.setSendPendingRPC(TransportProtos.SendPendingRPCMsg.newBuilder().build())
|
||||||
|
.build();
|
||||||
|
context.getTransportService().process(persistentRpcRequestMsg, TransportServiceCallback.EMPTY);
|
||||||
|
otaUpdateService.init(lwM2MClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<LwM2mClient> getLwM2mClients() {
|
public Collection<LwM2mClient> getLwM2mClients() {
|
||||||
return lwM2mClientsByEndpoint.values();
|
return lwM2mClientsByEndpoint.values();
|
||||||
@ -261,20 +298,21 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
|
|||||||
@Override
|
@Override
|
||||||
public Lwm2mDeviceProfileTransportConfiguration getProfile(Registration registration) {
|
public Lwm2mDeviceProfileTransportConfiguration getProfile(Registration registration) {
|
||||||
UUID profileId = getClientByEndpoint(registration.getEndpoint()).getProfileId();
|
UUID profileId = getClientByEndpoint(registration.getEndpoint()).getProfileId();
|
||||||
Lwm2mDeviceProfileTransportConfiguration result = doGetAndCache(profileId);
|
return doGetAndCache(profileId);
|
||||||
if (result == null) {
|
|
||||||
log.debug("[{}] Fetching profile [{}]", registration.getEndpoint(), profileId);
|
|
||||||
DeviceProfile deviceProfile = deviceProfileCache.get(new DeviceProfileId(profileId));
|
|
||||||
if (deviceProfile != null) {
|
|
||||||
profileUpdate(deviceProfile);
|
|
||||||
result = doGetAndCache(profileId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Lwm2mDeviceProfileTransportConfiguration doGetAndCache(UUID profileId) {
|
private Lwm2mDeviceProfileTransportConfiguration doGetAndCache(UUID profileId) {
|
||||||
return profiles.get(profileId);
|
Lwm2mDeviceProfileTransportConfiguration result = profiles.get(profileId);
|
||||||
|
if (result == null) {
|
||||||
|
log.debug("Fetching profile [{}]", profileId);
|
||||||
|
DeviceProfile deviceProfile = deviceProfileCache.get(new DeviceProfileId(profileId));
|
||||||
|
if (deviceProfile != null) {
|
||||||
|
result = profileUpdate(deviceProfile);
|
||||||
|
} else {
|
||||||
|
log.info("Device profile was not found! Most probably device profile [{}] has been removed from the database.", profileId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -42,7 +42,6 @@ import org.thingsboard.common.util.DonAsynchron;
|
|||||||
import org.thingsboard.server.common.data.Device;
|
import org.thingsboard.server.common.data.Device;
|
||||||
import org.thingsboard.server.common.data.DeviceProfile;
|
import org.thingsboard.server.common.data.DeviceProfile;
|
||||||
import org.thingsboard.server.common.data.StringUtils;
|
import org.thingsboard.server.common.data.StringUtils;
|
||||||
import org.thingsboard.server.common.data.device.data.PowerMode;
|
|
||||||
import org.thingsboard.server.common.data.device.data.lwm2m.ObjectAttributes;
|
import org.thingsboard.server.common.data.device.data.lwm2m.ObjectAttributes;
|
||||||
import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
|
import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
|
||||||
import org.thingsboard.server.common.data.device.data.lwm2m.TelemetryMappingConfiguration;
|
import org.thingsboard.server.common.data.device.data.lwm2m.TelemetryMappingConfiguration;
|
||||||
@ -388,26 +387,9 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
|||||||
@Override
|
@Override
|
||||||
public void onAwakeDev(Registration registration) {
|
public void onAwakeDev(Registration registration) {
|
||||||
log.trace("[{}] [{}] Received endpoint Awake version event", registration.getId(), registration.getEndpoint());
|
log.trace("[{}] [{}] Received endpoint Awake version event", registration.getId(), registration.getEndpoint());
|
||||||
LwM2mClient lwM2MClient = this.clientContext.getClientByEndpoint(registration.getEndpoint());
|
LwM2mClient client = this.clientContext.getClientByEndpoint(registration.getEndpoint());
|
||||||
logService.log(lwM2MClient, LOG_LWM2M_INFO + ": Client is awake!");
|
logService.log(client, LOG_LWM2M_INFO + ": Client is awake!");
|
||||||
|
clientContext.sendMsgsAfterSleeping(client);
|
||||||
if (LwM2MClientState.REGISTERED.equals(lwM2MClient.getState())) {
|
|
||||||
PowerMode powerMode = lwM2MClient.getPowerMode();
|
|
||||||
if (powerMode == null) {
|
|
||||||
Lwm2mDeviceProfileTransportConfiguration deviceProfile = clientContext.getProfile(lwM2MClient.getProfileId());
|
|
||||||
powerMode = deviceProfile.getClientLwM2mSettings().getPowerMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PowerMode.PSM.equals(powerMode) || PowerMode.E_DRX.equals(powerMode)) {
|
|
||||||
initAttributes(lwM2MClient);
|
|
||||||
TransportProtos.TransportToDeviceActorMsg persistentRpcRequestMsg = TransportProtos.TransportToDeviceActorMsg
|
|
||||||
.newBuilder()
|
|
||||||
.setSessionInfo(lwM2MClient.getSession())
|
|
||||||
.setSendPendingRPC(TransportProtos.SendPendingRPCMsg.newBuilder().build())
|
|
||||||
.build();
|
|
||||||
transportService.process(persistentRpcRequestMsg, TransportServiceCallback.EMPTY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user