Browse Source

Lwm2m: front: refactoring5

pull/3980/head
nickAS21 6 years ago
parent
commit
fa8df68207
  1. 10
      application/src/main/java/org/thingsboard/server/controller/DeviceLwm2mController.java
  2. 323
      application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java
  3. 4
      common/data/src/main/java/org/thingsboard/server/common/data/lwm2m/LwM2mObject.java
  4. 14
      ui-ngx/src/app/core/http/device-profile.service.ts
  5. 7
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts

10
application/src/main/java/org/thingsboard/server/controller/DeviceLwm2mController.java

@ -48,13 +48,15 @@ import java.util.Map;
@RequestMapping("/api") @RequestMapping("/api")
public class DeviceLwm2mController extends BaseController { public class DeviceLwm2mController extends BaseController {
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/lwm2m/deviceProfile/{objectIds}", method = RequestMethod.GET) @RequestMapping(value = "/lwm2m/deviceProfile", params = {"objectIds"}, method = RequestMethod.GET)
@ResponseBody @ResponseBody
public List<LwM2mObject> getLwm2mListObjects(@PathVariable("objectIds") int[] objectIds) throws ThingsboardException { public List<LwM2mObject> getLwm2mListObjects(@RequestParam int[] objectIds,
@RequestParam(required = false) String textSearch,
@RequestParam(required = false) String sortProperty,
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
try { try {
return lwM2MModelsRepository.getLwm2mObjects(objectIds, null); return lwM2MModelsRepository.getLwm2mObjects(objectIds, textSearch, sortProperty, sortOrder);
} catch (Exception e) { } catch (Exception e) {
throw handleException(e); throw handleException(e);
} }

323
application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java

@ -23,8 +23,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.lwm2m.*;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.lwm2m.LwM2mInstance;
import org.thingsboard.server.common.data.lwm2m.LwM2mObject;
import org.thingsboard.server.common.data.lwm2m.LwM2mResource;
import org.thingsboard.server.common.data.lwm2m.ServerSecurityConfig;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigBootstrap; import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigBootstrap;
@ -32,17 +35,23 @@ import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigServer;
import org.thingsboard.server.dao.service.Validator; import org.thingsboard.server.dao.service.Validator;
import org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode; import org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode;
import java.lang.reflect.Field;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.*; import java.security.AlgorithmParameters;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.KeyStoreException;
import java.security.PublicKey;
import java.security.cert.CertificateEncodingException; import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.security.spec.ECGenParameterSpec; import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec; import java.security.spec.ECParameterSpec;
import java.security.spec.ECPublicKeySpec;
import java.security.spec.ECPoint; import java.security.spec.ECPoint;
import java.security.spec.ECPublicKeySpec;
import java.security.spec.KeySpec; import java.security.spec.KeySpec;
import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@ -70,22 +79,26 @@ public class LwM2MModelsRepository {
* Filter by Predicate (uses objectIds, if objectIds is null then it uses textSearch, * Filter by Predicate (uses objectIds, if objectIds is null then it uses textSearch,
* if textSearch is null then it uses AllList from List<ObjectModel>) * if textSearch is null then it uses AllList from List<ObjectModel>)
*/ */
public List<LwM2mObject> getLwm2mObjects(int[] objectIds, String textSearch) { public List<LwM2mObject> getLwm2mObjects(int[] objectIds, String textSearch, String sortProperty, String sortOrder) {
return getLwm2mObjects((objectIds != null && objectIds.length > 0) ? return getLwm2mObjects((objectIds != null && objectIds.length > 0 && textSearch != null && !textSearch.isEmpty()) ?
(ObjectModel element) -> IntStream.of(objectIds).anyMatch(x -> x == element.id) : (ObjectModel element) -> IntStream.of(objectIds).anyMatch(x -> x == element.id) || element.name.contains(textSearch) :
(textSearch != null && !textSearch.isEmpty()) ? (ObjectModel element) -> element.name.contains(textSearch) : null); (objectIds != null && objectIds.length > 0) ?
(ObjectModel element) -> IntStream.of(objectIds).anyMatch(x -> x == element.id) :
(textSearch != null && !textSearch.isEmpty()) ? (ObjectModel element) -> element.name.contains(textSearch) : null,
sortProperty, sortOrder);
} }
/** /**
* @param predicate * @param predicate
* @return list of LwM2mObject * @return list of LwM2mObject
*/ */
private List<LwM2mObject> getLwm2mObjects(Predicate<? super ObjectModel> predicate) { private List<LwM2mObject> getLwm2mObjects(Predicate<? super ObjectModel> predicate, String sortProperty, String sortOrder) {
List<LwM2mObject> lwM2mObjects = new ArrayList<>(); List<LwM2mObject> lwM2mObjects = new ArrayList<>();
List<ObjectModel> listObjects = (predicate == null) ? this.contextServer.getModelsValue() : List<ObjectModel> listObjects = (predicate == null) ? this.contextServer.getModelsValue() :
contextServer.getModelsValue().stream() contextServer.getModelsValue().stream()
.filter(predicate) .filter(predicate)
.collect(Collectors.toList()); .collect(Collectors.toList());
listObjects.forEach(obj -> { listObjects.forEach(obj -> {
LwM2mObject lwM2mObject = new LwM2mObject(); LwM2mObject lwM2mObject = new LwM2mObject();
lwM2mObject.setId(obj.id); lwM2mObject.setId(obj.id);
@ -105,153 +118,177 @@ public class LwM2MModelsRepository {
lwM2mObject.setInstances(new LwM2mInstance[]{instance}); lwM2mObject.setInstances(new LwM2mInstance[]{instance});
lwM2mObjects.add(lwM2mObject); lwM2mObjects.add(lwM2mObject);
}); });
try {
Field field = LwM2mObject.class.getField(sortProperty);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
switch (sortProperty) {
case "name":
switch (sortOrder) {
case "ASC":
// ASC
lwM2mObjects.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
break;
case "DESC":
// DESC
lwM2mObjects.stream().sorted(Comparator.comparing(LwM2mObject::getName).reversed());
break;
}
case "id":
switch (sortOrder) {
case "ASC":
// ASC
lwM2mObjects.sort((o1, o2) -> Long.compare(o1.getId(), o2.getId()));
break;
case "DESC":
// DESC
lwM2mObjects.sort((o1, o2) -> Long.compare(o2.getId(), o1.getId()));
}
}
return lwM2mObjects; return lwM2mObjects;
} }
/** /**
* @param tenantId * @param tenantId
* @param pageLink * @param pageLink
* @return List of LwM2mObject in PageData format * @return List of LwM2mObject in PageData format
*/ */
public PageData<LwM2mObject> findDeviceLwm2mObjects(TenantId tenantId, PageLink pageLink) { public PageData<LwM2mObject> findDeviceLwm2mObjects (TenantId tenantId, PageLink pageLink){
log.trace("Executing findDeviceProfileInfos tenantId [{}], pageLink [{}]", tenantId, pageLink); log.trace("Executing findDeviceProfileInfos tenantId [{}], pageLink [{}]", tenantId, pageLink);
validateId(tenantId, INCORRECT_TENANT_ID + tenantId); validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
Validator.validatePageLink(pageLink); Validator.validatePageLink(pageLink);
return this.findLwm2mListObjects(pageLink); return this.findLwm2mListObjects(pageLink);
} }
/** /**
* @param pageLink * @param pageLink
* @return List of LwM2mObject in PageData format, filter == TextSearch * @return List of LwM2mObject in PageData format, filter == TextSearch
* PageNumber = 1, PageSize = List<LwM2mObject>.size() * PageNumber = 1, PageSize = List<LwM2mObject>.size()
*/ */
public PageData<LwM2mObject> findLwm2mListObjects(PageLink pageLink) { public PageData<LwM2mObject> findLwm2mListObjects (PageLink pageLink){
PageImpl page = new PageImpl(getLwm2mObjects(null, pageLink.getTextSearch())); PageImpl page = new PageImpl(getLwm2mObjects(null, pageLink.getTextSearch(), pageLink.getSortOrder().getProperty(), pageLink.getSortOrder().getDirection().name()));
PageData pageData = new PageData(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.hasNext()); PageData pageData = new PageData(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.hasNext());
return pageData; return pageData;
} }
/** /**
* * @param securityMode
* @param securityMode * @param bootstrapServerIs
* @param bootstrapServerIs * @return ServerSecurityConfig more value is default: Important - port, host, publicKey
* @return ServerSecurityConfig more value is default: Important - port, host, publicKey */
*/ public ServerSecurityConfig getBootstrapSecurityInfo (String securityMode,boolean bootstrapServerIs){
public ServerSecurityConfig getBootstrapSecurityInfo(String securityMode, boolean bootstrapServerIs) { LwM2MSecurityMode lwM2MSecurityMode = LwM2MSecurityMode.fromSecurityMode(securityMode.toLowerCase());
LwM2MSecurityMode lwM2MSecurityMode = LwM2MSecurityMode.fromSecurityMode(securityMode.toLowerCase()); return getBootstrapServer(bootstrapServerIs, lwM2MSecurityMode);
return getBootstrapServer(bootstrapServerIs, lwM2MSecurityMode); }
}
/** /**
* * @param bootstrapServerIs
* @param bootstrapServerIs * @param mode
* @param mode * @return ServerSecurityConfig more value is default: Important - port, host, publicKey
* @return ServerSecurityConfig more value is default: Important - port, host, publicKey */
*/ private ServerSecurityConfig getBootstrapServer ( boolean bootstrapServerIs, LwM2MSecurityMode mode){
private ServerSecurityConfig getBootstrapServer(boolean bootstrapServerIs, LwM2MSecurityMode mode) { ServerSecurityConfig bsServ = new ServerSecurityConfig();
ServerSecurityConfig bsServ = new ServerSecurityConfig(); bsServ.setBootstrapServerIs(bootstrapServerIs);
bsServ.setBootstrapServerIs(bootstrapServerIs); if (bootstrapServerIs) {
if (bootstrapServerIs) { bsServ.setServerId(contextBootStrap.getBootstrapServerId());
bsServ.setServerId(contextBootStrap.getBootstrapServerId()); switch (mode) {
switch (mode) { case NO_SEC:
case NO_SEC: bsServ.setHost(contextBootStrap.getBootstrapHost());
bsServ.setHost(contextBootStrap.getBootstrapHost()); bsServ.setPort(contextBootStrap.getBootstrapPortNoSecPsk());
bsServ.setPort(contextBootStrap.getBootstrapPortNoSecPsk()); bsServ.setServerPublicKey("");
bsServ.setServerPublicKey(""); break;
break; case PSK:
case PSK: bsServ.setHost(contextBootStrap.getBootstrapSecureHost());
bsServ.setHost(contextBootStrap.getBootstrapSecureHost()); bsServ.setPort(contextBootStrap.getBootstrapSecurePortPsk());
bsServ.setPort(contextBootStrap.getBootstrapSecurePortPsk()); bsServ.setServerPublicKey("");
bsServ.setServerPublicKey(""); break;
break; case RPK:
case RPK: bsServ.setHost(contextBootStrap.getBootstrapSecureHost());
bsServ.setHost(contextBootStrap.getBootstrapSecureHost()); bsServ.setPort(contextBootStrap.getBootstrapSecurePortRpk());
bsServ.setPort(contextBootStrap.getBootstrapSecurePortRpk()); bsServ.setServerPublicKey(getRPKPublicKey(this.contextBootStrap.getBootstrapPublicX(), this.contextBootStrap.getBootstrapPublicY()));
bsServ.setServerPublicKey(getRPKPublicKey(this.contextBootStrap.getBootstrapPublicX(), this.contextBootStrap.getBootstrapPublicY())); break;
break; case X509:
case X509: bsServ.setHost(contextBootStrap.getBootstrapSecureHost());
bsServ.setHost(contextBootStrap.getBootstrapSecureHost()); bsServ.setPort(contextBootStrap.getBootstrapSecurePortX509());
bsServ.setPort(contextBootStrap.getBootstrapSecurePortX509()); bsServ.setServerPublicKey(getServerPublicKeyX509(contextBootStrap.getBootstrapAlias()));
bsServ.setServerPublicKey(getServerPublicKeyX509(contextBootStrap.getBootstrapAlias())); break;
break; default:
default: break;
break; }
} } else {
} else { bsServ.setServerId(contextServer.getServerId());
bsServ.setServerId(contextServer.getServerId()); switch (mode) {
switch (mode) { case NO_SEC:
case NO_SEC: bsServ.setHost(contextServer.getServerHost());
bsServ.setHost(contextServer.getServerHost()); bsServ.setPort(contextServer.getServerPortNoSecPsk());
bsServ.setPort(contextServer.getServerPortNoSecPsk()); bsServ.setServerPublicKey("");
bsServ.setServerPublicKey(""); break;
break; case PSK:
case PSK: bsServ.setHost(contextServer.getServerSecureHost());
bsServ.setHost(contextServer.getServerSecureHost()); bsServ.setPort(contextServer.getServerPortPsk());
bsServ.setPort(contextServer.getServerPortPsk()); bsServ.setServerPublicKey("");
bsServ.setServerPublicKey(""); break;
break; case RPK:
case RPK: bsServ.setHost(contextServer.getServerSecureHost());
bsServ.setHost(contextServer.getServerSecureHost()); bsServ.setPort(contextServer.getServerPortRpk());
bsServ.setPort(contextServer.getServerPortRpk()); bsServ.setServerPublicKey(getRPKPublicKey(this.contextServer.getServerPublicX(), this.contextServer.getServerPublicY()));
bsServ.setServerPublicKey(getRPKPublicKey(this.contextServer.getServerPublicX(), this.contextServer.getServerPublicY())); break;
break; case X509:
case X509: bsServ.setHost(contextServer.getServerSecureHost());
bsServ.setHost(contextServer.getServerSecureHost()); bsServ.setPort(contextServer.getServerPortX509());
bsServ.setPort(contextServer.getServerPortX509()); bsServ.setServerPublicKey(getServerPublicKeyX509(contextServer.getServerAlias()));
bsServ.setServerPublicKey(getServerPublicKeyX509(contextServer.getServerAlias())); break;
break; default:
default: break;
break; }
} }
return bsServ;
} }
return bsServ;
}
/** /**
* * @param alias
* @param alias * @return PublicKey format HexString or null
* @return PublicKey format HexString or null */
*/ private String getServerPublicKeyX509 (String alias){
private String getServerPublicKeyX509 (String alias) { try {
try { X509Certificate serverCertificate = (X509Certificate) contextServer.getKeyStoreValue().getCertificate(alias);
X509Certificate serverCertificate = (X509Certificate) contextServer.getKeyStoreValue().getCertificate(alias); return Hex.encodeHexString(serverCertificate.getEncoded());
return Hex.encodeHexString(serverCertificate.getEncoded()); } catch (CertificateEncodingException | KeyStoreException e) {
} catch (CertificateEncodingException | KeyStoreException e) { e.printStackTrace();
e.printStackTrace(); }
return null;
} }
return null;
}
/** /**
* * @param publicServerX
* @param publicServerX * @param publicServerY
* @param publicServerY * @return PublicKey format HexString or null
* @return PublicKey format HexString or null */
*/ private String getRPKPublicKey (String publicServerX, String publicServerY){
private String getRPKPublicKey(String publicServerX, String publicServerY) { try {
try { /** Get Elliptic Curve Parameter spec for secp256r1 */
/** Get Elliptic Curve Parameter spec for secp256r1 */ AlgorithmParameters algoParameters = AlgorithmParameters.getInstance("EC");
AlgorithmParameters algoParameters = AlgorithmParameters.getInstance("EC"); algoParameters.init(new ECGenParameterSpec("secp256r1"));
algoParameters.init(new ECGenParameterSpec("secp256r1")); ECParameterSpec parameterSpec = algoParameters.getParameterSpec(ECParameterSpec.class);
ECParameterSpec parameterSpec = algoParameters.getParameterSpec(ECParameterSpec.class); if (publicServerX != null && !publicServerX.isEmpty() && publicServerY != null && !publicServerY.isEmpty()) {
if (publicServerX != null && !publicServerX.isEmpty() && publicServerY != null && !publicServerY.isEmpty()) { /** Get point values */
/** Get point values */ byte[] publicX = Hex.decodeHex(publicServerX.toCharArray());
byte[] publicX = Hex.decodeHex(publicServerX.toCharArray()); byte[] publicY = Hex.decodeHex(publicServerY.toCharArray());
byte[] publicY = Hex.decodeHex(publicServerY.toCharArray()); /** Create key specs */
/** Create key specs */ KeySpec publicKeySpec = new ECPublicKeySpec(new ECPoint(new BigInteger(publicX), new BigInteger(publicY)),
KeySpec publicKeySpec = new ECPublicKeySpec(new ECPoint(new BigInteger(publicX), new BigInteger(publicY)), parameterSpec);
parameterSpec); /** Get keys */
/** Get keys */ PublicKey publicKey = KeyFactory.getInstance("EC").generatePublic(publicKeySpec);
PublicKey publicKey = KeyFactory.getInstance("EC").generatePublic(publicKeySpec); if (publicKey != null && publicKey.getEncoded().length > 0) {
if (publicKey != null && publicKey.getEncoded().length > 0 ) { return Hex.encodeHexString(publicKey.getEncoded());
return Hex.encodeHexString(publicKey.getEncoded()); }
} }
} catch (GeneralSecurityException | IllegalArgumentException e) {
log.error("[{}] Failed generate Server RPK for profile", e.getMessage());
throw new RuntimeException(e);
} }
} catch (GeneralSecurityException | IllegalArgumentException e) { return null;
log.error("[{}] Failed generate Server RPK for profile", e.getMessage());
throw new RuntimeException(e);
} }
return null;
} }
}

4
common/data/src/main/java/org/thingsboard/server/common/data/lwm2m/LwM2mObject.java

@ -16,7 +16,11 @@
package org.thingsboard.server.common.data.lwm2m; package org.thingsboard.server.common.data.lwm2m;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Data @Data
public class LwM2mObject { public class LwM2mObject {
int id; int id;

14
ui-ngx/src/app/core/http/device-profile.service.ts

@ -23,6 +23,7 @@ import { PageData } from '@shared/models/page/page-data';
import { DeviceProfile, DeviceProfileInfo, DeviceTransportType } from '@shared/models/device.models'; import { DeviceProfile, DeviceProfileInfo, DeviceTransportType } from '@shared/models/device.models';
import { isDefinedAndNotNull } from '@core/utils'; import { isDefinedAndNotNull } from '@core/utils';
import { ObjectLwM2M, ServerSecurityConfig } from '@home/components/profile/device/lwm2m/profile-config.models'; import { ObjectLwM2M, ServerSecurityConfig } from '@home/components/profile/device/lwm2m/profile-config.models';
import { SortOrder } from '@shared/models/page/sort-order';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -31,7 +32,8 @@ export class DeviceProfileService {
constructor( constructor(
private http: HttpClient private http: HttpClient
) { } ) {
}
public getDeviceProfiles(pageLink: PageLink, config?: RequestConfig): Observable<PageData<DeviceProfile>> { public getDeviceProfiles(pageLink: PageLink, config?: RequestConfig): Observable<PageData<DeviceProfile>> {
return this.http.get<PageData<DeviceProfile>>(`/api/deviceProfiles${pageLink.toQuery()}`, defaultHttpOptionsFromConfig(config)); return this.http.get<PageData<DeviceProfile>>(`/api/deviceProfiles${pageLink.toQuery()}`, defaultHttpOptionsFromConfig(config));
@ -41,8 +43,14 @@ export class DeviceProfileService {
return this.http.get<DeviceProfile>(`/api/deviceProfile/${deviceProfileId}`, defaultHttpOptionsFromConfig(config)); return this.http.get<DeviceProfile>(`/api/deviceProfile/${deviceProfileId}`, defaultHttpOptionsFromConfig(config));
} }
public getLwm2mObjects(objectIds: number[], config?: RequestConfig): Observable<Array<ObjectLwM2M>> { public getLwm2mObjects(objectIds?: number[], searchText?: string, sortOrder?: SortOrder, config?: RequestConfig):
return this.http.get<Array<ObjectLwM2M>>(`/api/lwm2m/deviceProfile/${objectIds}`, defaultHttpOptionsFromConfig(config)); Observable<Array<ObjectLwM2M>> {
// tslint:disable-next-line:no-debugger
debugger;
return this.http.get<Array<ObjectLwM2M>>
(`/api/lwm2m/deviceProfile/?objectIds=${objectIds}&searchText=${searchText}&sortProperty=${sortOrder.property}
&sortOrder=${sortOrder.direction}`,
defaultHttpOptionsFromConfig(config));
} }
public getLwm2mBootstrapSecurityInfo(securityMode: string, bootstrapServerIs: boolean, public getLwm2mBootstrapSecurityInfo(securityMode: string, bootstrapServerIs: boolean,

7
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts

@ -37,6 +37,7 @@ import { deepClone, isUndefined } from '@core/utils';
import { WINDOW } from '@core/services/window.service'; import { WINDOW } from '@core/services/window.service';
import { JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point'; import { JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point';
import { isNotNullOrUndefined } from 'codelyzer/util/isNotNullOrUndefined'; import { isNotNullOrUndefined } from 'codelyzer/util/isNotNullOrUndefined';
import { Direction, SortOrder } from '@shared/models/page/sort-order';
@Component({ @Component({
selector: 'tb-profile-lwm2m-device-transport-configuration', selector: 'tb-profile-lwm2m-device-transport-configuration',
@ -128,7 +129,11 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
const modelValue = {objectIds: null, objectsList: []}; const modelValue = {objectIds: null, objectsList: []};
modelValue.objectIds = this.getObjectsFromJsonAllConfig(); modelValue.objectIds = this.getObjectsFromJsonAllConfig();
if (modelValue.objectIds !== null) { if (modelValue.objectIds !== null) {
this.deviceProfileService.getLwm2mObjects(modelValue.objectIds).subscribe( const sortOrder = {
property: 'id',
direction: Direction.ASC
};
this.deviceProfileService.getLwm2mObjects(modelValue.objectIds, null, sortOrder).subscribe(
(objectsList) => { (objectsList) => {
modelValue.objectsList = objectsList; modelValue.objectsList = objectsList;
this.updateWriteValue(modelValue); this.updateWriteValue(modelValue);

Loading…
Cancel
Save