Browse Source

Merge pull request #4021 from thingsboard/lwm2m_cert

[3.3] Lwm2m cert
pull/4065/head
Vladyslav 5 years ago
committed by GitHub
parent
commit
79814877cd
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java
  2. 7
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts
  3. 2
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.html
  4. 158
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts
  5. 1
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts
  6. 3
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts
  7. 5
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-list.component.ts
  8. 1
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts
  9. 33
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts
  10. 18
      ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts

2
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java

@ -148,7 +148,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
public void onRegistered(LeshanServer lwServer, Registration registration, Collection<Observation> previousObsersations) {
executorRegistered.submit(() -> {
try {
// log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId());
log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId());
LwM2MClient lwM2MClient = lwM2mInMemorySecurityStore.updateInSessionsLwM2MClient(lwServer, registration);
if (lwM2MClient != null) {
lwM2MClient.setLwM2MTransportServiceImpl(this);

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

@ -51,6 +51,7 @@ import { TranslateService } from '@ngx-translate/core';
export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor {
private requiredValue: boolean;
private disabled = false;
valuePrev = null;
serverFormGroup: FormGroup;
@ -61,10 +62,6 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor {
lenMaxServerPublicKey = LEN_MAX_PUBLIC_KEY_RPK;
currentSecurityMode = null;
@Input()
disabled: boolean;
@Input()
bootstrapServerIs: boolean;
@ -142,7 +139,7 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor {
Validators.maxLength(this.lenMaxServerPublicKey)]);
}
writeValue(value: any): void {
writeValue(value: ServerSecurityConfig): void {
if (value) {
this.updateValueFields(value);
}

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

@ -15,7 +15,7 @@
limitations under the License.
-->
<section style="padding-bottom: 16px;" mat-dialog-content>
<section style="padding-bottom: 16px; margin: 0" mat-dialog-content>
<mat-tab-group dynamicHeight>
<mat-tab label="{{ 'device-profile.lwm2m.model-tab' | translate }}">
<ng-template matTabContent>

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

@ -21,16 +21,11 @@ import { Store } from '@ngrx/store';
import { AppState } from '@app/core/core.state';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import {
ATTR,
INSTANCES, RESOURCES, OBSERVE_ATTR_TELEMETRY, OBSERVE, ATTRIBUTE, TELEMETRY, KEY_NAME,
getDefaultProfileConfig,
Instance,
KEY_NAME,
ObjectLwM2M,
OBSERVE,
OBSERVE_ATTR,
ProfileConfigModels,
ResourceLwM2M,
TELEMETRY
ModelValue
} from './profile-config.models';
import { DeviceProfileService } from '@core/http/device-profile.service';
import { deepClone, isDefinedAndNotNull, isUndefined } from '@core/utils';
@ -55,11 +50,6 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
lwm2mDeviceProfileFormGroup: FormGroup;
lwm2mDeviceConfigFormGroup: FormGroup;
observeAttr = OBSERVE_ATTR;
observe = OBSERVE;
attribute = ATTR;
telemetry = TELEMETRY;
keyName = KEY_NAME;
bootstrapServers: string;
bootstrapServer: string;
lwm2mServer: string;
@ -122,7 +112,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
}
}
writeValue(value: any | null): void {
writeValue(value: ProfileConfigModels | null): void {
this.configurationValue = (Object.keys(value).length === 0) ? getDefaultProfileConfig() : value;
this.lwm2mDeviceConfigFormGroup.patchValue({
configurationJson: this.configurationValue
@ -131,7 +121,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
}
private initWriteValue = (): void => {
const modelValue = {objectIds: null, objectsList: []};
const modelValue = {objectIds: null, objectsList: []} as ModelValue;
modelValue.objectIds = this.getObjectsFromJsonAllConfig();
if (modelValue.objectIds !== null) {
const sortOrder = {
@ -149,11 +139,10 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
}
}
private updateWriteValue = (value: any): void => {
const objectsList = value.objectsList;
private updateWriteValue = (value: ModelValue): void => {
this.lwm2mDeviceProfileFormGroup.patchValue({
objectIds: value,
observeAttrTelemetry: this.getObserveAttrTelemetryObjects(objectsList),
observeAttrTelemetry: this.getObserveAttrTelemetryObjects(value['objectsList']),
shortId: this.configurationValue.bootstrap.servers.shortId,
lifetime: this.configurationValue.bootstrap.servers.lifetime,
defaultMinPeriod: this.configurationValue.bootstrap.servers.defaultMinPeriod,
@ -199,22 +188,22 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
private getObserveAttrTelemetryObjects = (listObject: ObjectLwM2M[]): object => {
const clientObserveAttrTelemetry = listObject;
if (this.configurationValue[this.observeAttr]) {
const observeArray = this.configurationValue[this.observeAttr][this.observe];
const attributeArray = this.configurationValue[this.observeAttr][this.attribute];
const telemetryArray = this.configurationValue[this.observeAttr][this.telemetry];
const keyNameJson = this.configurationValue[this.observeAttr][this.keyName];
if (this.configurationValue.observeAttr) {
const observeArray = this.configurationValue.observeAttr.observe;
const attributeArray = this.configurationValue.observeAttr.attribute;
const telemetryArray = this.configurationValue.observeAttr.telemetry;
const keyNameJson = this.configurationValue.observeAttr.keyName;
if (this.includesNotZeroInstance(attributeArray, telemetryArray)) {
this.addInstances(attributeArray, telemetryArray, clientObserveAttrTelemetry);
}
if (isDefinedAndNotNull(observeArray)) {
this.updateObserveAttrTelemetryObjects(observeArray, clientObserveAttrTelemetry, 'observe');
this.updateObserveAttrTelemetryObjects(observeArray, clientObserveAttrTelemetry, OBSERVE);
}
if (isDefinedAndNotNull(attributeArray)) {
this.updateObserveAttrTelemetryObjects(attributeArray, clientObserveAttrTelemetry, 'attribute');
this.updateObserveAttrTelemetryObjects(attributeArray, clientObserveAttrTelemetry, ATTRIBUTE);
}
if (isDefinedAndNotNull(telemetryArray)) {
this.updateObserveAttrTelemetryObjects(telemetryArray, clientObserveAttrTelemetry, 'telemetry');
this.updateObserveAttrTelemetryObjects(telemetryArray, clientObserveAttrTelemetry, TELEMETRY);
}
if (isDefinedAndNotNull(keyNameJson)) {
this.updateKeyNameObjects(keyNameJson, clientObserveAttrTelemetry);
@ -273,74 +262,51 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
const telemetryArray: Array<string> = [];
const keyNameNew = {};
const observeJson: ObjectLwM2M[] = JSON.parse(JSON.stringify(val));
const paths = new Set<string>();
let pathObj;
let pathInst;
let pathRes;
observeJson.forEach(obj => {
for (const [key, value] of Object.entries(obj)) {
if (key === 'id') {
pathObj = value;
}
if (key === 'instances') {
const instancesJson = value as Instance[];
if (instancesJson.length > 0) {
instancesJson.forEach(instance => {
for (const [instanceKey, instanceValue] of Object.entries(instance)) {
if (instanceKey === 'id') {
pathInst = instanceValue;
if (obj.hasOwnProperty(INSTANCES) && Array.isArray(obj.instances)) {
obj.instances.forEach(instance => {
if (instance.hasOwnProperty(RESOURCES) && Array.isArray(instance.resources)) {
instance.resources.forEach(resource => {
if (resource.attribute || resource.telemetry) {
let pathRes = `/${obj.id}/${instance.id}/${resource.id}`;
if (resource.observe) {
observeArray.push(pathRes);
}
if (resource.attribute) {
attributeArray.push(pathRes);
}
if (instanceKey === 'resources') {
const resourcesJson = instanceValue as ResourceLwM2M[];
if (resourcesJson.length > 0) {
resourcesJson.forEach(res => {
for (const [resourceKey, value] of Object.entries(res)) {
if (resourceKey === 'id') {
pathRes = `/${pathObj}/${pathInst}/${value}`;
} else if (resourceKey === 'observe' && value) {
observeArray.push(pathRes);
} else if (resourceKey === 'attribute' && value) {
attributeArray.push(pathRes);
paths.add(pathRes);
} else if (resourceKey === 'telemetry' && value) {
telemetryArray.push(pathRes);
paths.add(pathRes);
}
else if (resourceKey === this.keyName && paths.has(pathRes)) {
console.warn(pathRes, value);
keyNameNew[pathRes] = value;
}
}
});
}
if (resource.telemetry) {
telemetryArray.push(pathRes);
}
keyNameNew[pathRes] = resource.keyName;
}
});
})
}
}
})
}
});
if (isUndefined(this.configurationValue[this.observeAttr])) {
this.configurationValue[this.observeAttr] = {
[this.observe]: observeArray,
[this.attribute]: attributeArray,
[this.telemetry]: telemetryArray
if (isUndefined(this.configurationValue.observeAttr)) {
this.configurationValue.observeAttr = {
observe: observeArray,
attribute: attributeArray,
telemetry: telemetryArray,
keyName: this.sortObjectKeyPathJson(KEY_NAME, keyNameNew)
};
} else {
this.configurationValue[this.observeAttr][this.observe] = observeArray;
this.configurationValue[this.observeAttr][this.attribute] = attributeArray;
this.configurationValue[this.observeAttr][this.telemetry] = telemetryArray;
this.configurationValue.observeAttr.observe = observeArray;
this.configurationValue.observeAttr.attribute = attributeArray;
this.configurationValue.observeAttr.telemetry = telemetryArray;
this.configurationValue.observeAttr.keyName = this.sortObjectKeyPathJson(KEY_NAME, keyNameNew);
}
this.configurationValue[this.observeAttr][this.keyName] = this.sortObjectKeyPathJson('keyName', keyNameNew);
}
sortObjectKeyPathJson = (key: string, value: object): object => {
if (key === 'keyName') {
if (key === KEY_NAME) {
return Object.keys(value).sort(this.sortPath).reduce((obj, keySort) => {
obj[keySort] = value[keySort];
return obj;
}, {});
} else if (key === 'observe' || key === 'attribute' || key === 'telemetry') {
} else if (key === OBSERVE || key === ATTRIBUTE || key === TELEMETRY) {
return Object.values(value).sort(this.sortPath).reduce((arr, arrValue) => {
arr.push(arrValue);
return arr;
@ -359,19 +325,19 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
private getObjectsFromJsonAllConfig = (): number[] => {
const objectsIds = new Set<number>();
if (this.configurationValue[this.observeAttr]) {
if (this.configurationValue[this.observeAttr][this.observe]) {
this.configurationValue[this.observeAttr][this.observe].forEach(obj => {
if (this.configurationValue.observeAttr) {
if (this.configurationValue.observeAttr.observe) {
this.configurationValue.observeAttr.observe.forEach(obj => {
objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]);
});
}
if (this.configurationValue[this.observeAttr][this.attribute]) {
this.configurationValue[this.observeAttr][this.attribute].forEach(obj => {
if (this.configurationValue.observeAttr.attribute) {
this.configurationValue.observeAttr.attribute.forEach(obj => {
objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]);
});
}
if (this.configurationValue[this.observeAttr][this.telemetry]) {
this.configurationValue[this.observeAttr][this.telemetry].forEach(obj => {
if (this.configurationValue.observeAttr.telemetry) {
this.configurationValue.observeAttr.telemetry.forEach(obj => {
objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]);
});
}
@ -390,15 +356,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
}
removeObjectsList = (value: ObjectLwM2M): void => {
const objectsOld = this.lwm2mDeviceProfileFormGroup.get('observeAttrTelemetry').value.clientLwM2M;
const objectsOld = this.lwm2mDeviceProfileFormGroup.get(OBSERVE_ATTR_TELEMETRY).value.clientLwM2M;
const isIdIndex = (element) => element.id === value.id;
const index = objectsOld.findIndex(isIdIndex);
if (index >= 0) {
objectsOld.splice(index, 1);
}
this.removeObserveAttrTelemetryFromJson(this.observe, value.id);
this.removeObserveAttrTelemetryFromJson(this.telemetry, value.id);
this.removeObserveAttrTelemetryFromJson(this.attribute, value.id);
this.removeObserveAttrTelemetryFromJson(OBSERVE, value.id);
this.removeObserveAttrTelemetryFromJson(TELEMETRY, value.id);
this.removeObserveAttrTelemetryFromJson(ATTRIBUTE, value.id);
this.removeKeyNameFromJson(value.id);
this.updateObserveAttrTelemetryObjectFormGroup(objectsOld);
this.upDateJsonAllConfig();
@ -406,15 +372,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
private removeObserveAttrTelemetryFromJson = (observeAttrTel: string, id: number): void => {
const isIdIndex = (element) => element.startsWith(`/${id}`);
let index = this.configurationValue[this.observeAttr][observeAttrTel].findIndex(isIdIndex);
let index = this.configurationValue.observeAttr[observeAttrTel].findIndex(isIdIndex);
while (index >= 0) {
this.configurationValue[this.observeAttr][observeAttrTel].splice(index, 1);
index = this.configurationValue[this.observeAttr][observeAttrTel].findIndex(isIdIndex, index);
this.configurationValue.observeAttr[observeAttrTel].splice(index, 1);
index = this.configurationValue.observeAttr[observeAttrTel].findIndex(isIdIndex, index);
}
}
private removeKeyNameFromJson = (id: number): void => {
const keyNameJson = this.configurationValue[this.observeAttr][this.keyName];
const keyNameJson = this.configurationValue.observeAttr.keyName;
Object.keys(keyNameJson).forEach(key => {
if (key.startsWith(`/${id}`)) {
delete keyNameJson[key];
@ -423,17 +389,17 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
}
isPathInJson(path: string): boolean {
let isPath = this.findPathInJson(path, this.attribute);
let isPath = this.findPathInJson(path, ATTRIBUTE);
if (!isPath) {
isPath = this.findPathInJson(path, this.telemetry);
isPath = this.findPathInJson(path, TELEMETRY);
}
return !!isPath;
}
private findPathInJson = (path: string, side: string): string => {
if (this.configurationValue[this.observeAttr]) {
if (this.configurationValue[this.observeAttr][side]) {
return this.configurationValue[this.observeAttr][side].find(
if (this.configurationValue.observeAttr) {
if (this.configurationValue.observeAttr[side]) {
return this.configurationValue.bootstrap[side].find(
pathJs => pathJs === path);
}
}

1
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts

@ -25,7 +25,6 @@ import { DeviceProfileService } from '@core/http/device-profile.service';
@Component({
selector: 'tb-profile-lwm2m-object-add-instances-list',
templateUrl: './lwm2m-object-add-instances-list.component.html',
styleUrls: [],
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => Lwm2mObjectAddInstancesListComponent),

3
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts

@ -30,8 +30,7 @@ export interface Lwm2mObjectAddInstancesData {
@Component({
selector: 'tb-lwm2m-object-add-instances',
templateUrl: './lwm2m-object-add-instances.component.html',
styleUrls: []
templateUrl: './lwm2m-object-add-instances.component.html'
})
export class Lwm2mObjectAddInstancesComponent extends DialogComponent<Lwm2mObjectAddInstancesComponent, object> implements OnInit {

5
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-list.component.ts

@ -21,7 +21,7 @@ import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { Observable } from 'rxjs';
import { filter, map, mergeMap, publishReplay, refCount, tap } from 'rxjs/operators';
import { ObjectLwM2M } from './profile-config.models';
import { ModelValue, ObjectLwM2M } from './profile-config.models';
import { TranslateService } from '@ngx-translate/core';
import { DeviceProfileService } from '@core/http/device-profile.service';
import { Direction } from '@shared/models/page/sort-order';
@ -120,7 +120,7 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
}
}
writeValue(value: any): void {
writeValue(value: ModelValue): void {
this.searchText = '';
if (isDefinedAndNotNull(value)) {
if (Array.isArray(value.objectIds)) {
@ -193,7 +193,6 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
return this.lw2mModels;
}
onFocus = (): void => {
if (!this.dirty) {
this.lwm2mListFormGroup.get('objectLwm2m').updateValueAndValidity({onlySelf: true, emitEvent: true});

1
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts

@ -25,7 +25,6 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
@Component({
selector: 'tb-profile-lwm2m-observe-attr-telemetry-resource',
templateUrl: './lwm2m-observe-attr-telemetry-resource.component.html',
styleUrls: [],
providers: [
{
provide: NG_VALUE_ACCESSOR,

33
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts

@ -28,7 +28,7 @@ import {
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Instance, ObjectLwM2M, ResourceLwM2M } from './profile-config.models';
import { CLIENT_LWM2M, Instance, INSTANCES, ObjectLwM2M, ResourceLwM2M, RESOURCES } from './profile-config.models';
import { deepClone, isDefinedAndNotNull, isEqual, isUndefined } from '@core/utils';
import { MatDialog } from '@angular/material/dialog';
import { TranslateService } from '@ngx-translate/core';
@ -78,7 +78,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
private dialog: MatDialog,
public translate: TranslateService) {
this.observeAttrTelemetryFormGroup = this.fb.group({
clientLwM2M: this.fb.array([])
[CLIENT_LWM2M]: this.fb.array([])
});
this.observeAttrTelemetryFormGroup.valueChanges.subscribe(value => {
if (isUndefined(this.disabled) || !this.disabled) {
@ -87,7 +87,8 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
});
}
private propagateChange = (v: any) => { };
private propagateChange = (v: any) => {
};
registerOnChange(fn: any): void {
this.propagateChange = fn;
@ -123,14 +124,14 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
}
}
writeValue(value: any): void {
writeValue(value: {}): void {
if (isDefinedAndNotNull(value)) {
this.buildClientObjectsLwM2M(value.clientLwM2M);
this.buildClientObjectsLwM2M(value[CLIENT_LWM2M]);
}
}
private buildClientObjectsLwM2M = (objectsLwM2M: ObjectLwM2M []): void => {
this.observeAttrTelemetryFormGroup.setControl('clientLwM2M',
this.observeAttrTelemetryFormGroup.setControl(CLIENT_LWM2M,
this.createObjectsLwM2M(objectsLwM2M)
);
}
@ -157,23 +158,23 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
}
get clientLwM2MFormArray(): FormArray {
return this.observeAttrTelemetryFormGroup.get('clientLwM2M') as FormArray;
return this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M) as FormArray;
}
instancesLwm2mFormArray = (objectLwM2M: AbstractControl): FormArray => {
return objectLwM2M.get('instances') as FormArray;
return objectLwM2M.get(INSTANCES) as FormArray;
}
changeInstanceResourcesCheckBox = (value: boolean, instance: AbstractControl, type: string): void => {
const resources = deepClone(instance.get('resources').value as ResourceLwM2M[]);
const resources = deepClone(instance.get(RESOURCES).value as ResourceLwM2M[]);
resources.forEach(resource => resource[type] = value);
instance.get('resources').patchValue(resources);
instance.get(RESOURCES).patchValue(resources);
this.propagateChange(this.observeAttrTelemetryFormGroup.value);
}
private updateValidators = (): void => {
this.observeAttrTelemetryFormGroup.get('clientLwM2M').setValidators(this.required ? Validators.required : []);
this.observeAttrTelemetryFormGroup.get('clientLwM2M').updateValueAndValidity();
this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M).setValidators(this.required ? Validators.required : []);
this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M).updateValueAndValidity();
}
trackByParams = (index: number, element: any): number => {
@ -181,7 +182,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
}
getIndeterminate = (instance: AbstractControl, type: string): boolean => {
const resources = instance.get('resources').value as ResourceLwM2M[];
const resources = instance.get(RESOURCES).value as ResourceLwM2M[];
if (isDefinedAndNotNull(resources)) {
const checkedResource = resources.filter(resource => resource[type]);
return checkedResource.length !== 0 && checkedResource.length !== resources.length;
@ -190,7 +191,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
}
getChecked = (instance: AbstractControl, type: string): boolean => {
const resources = instance.get('resources').value as ResourceLwM2M[];
const resources = instance.get(RESOURCES).value as ResourceLwM2M[];
return isDefinedAndNotNull(resources) && resources.every(resource => resource[type]);
}
@ -239,10 +240,10 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor
}
private updateInstancesIds = (data: Lwm2mObjectAddInstancesData): void => {
const objectLwM2MFormGroup = (this.observeAttrTelemetryFormGroup.get('clientLwM2M') as FormArray).controls
const objectLwM2MFormGroup = (this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M) as FormArray).controls
.find(e => e.value.id === data.objectId) as FormGroup;
const instancesArray = objectLwM2MFormGroup.value.instances as Instance [];
const instancesFormArray = objectLwM2MFormGroup.get('instances') as FormArray;
const instancesFormArray = objectLwM2MFormGroup.get(INSTANCES) as FormArray;
const instance0 = deepClone(instancesFormArray.at(0).value as Instance);
instance0.resources.forEach(r => {
r.attribute = false;

18
ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts

@ -14,11 +14,16 @@
/// limitations under the License.
///
export const OBSERVE_ATTR = 'observeAttr';
import { JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point';
export const INSTANCES = 'instances';
export const RESOURCES = 'resources';
export const OBSERVE_ATTR_TELEMETRY = 'observeAttrTelemetry';
export const OBSERVE = 'observe';
export const ATTR = 'attribute';
export const ATTRIBUTE = 'attribute';
export const TELEMETRY = 'telemetry';
export const KEY_NAME = 'keyName';
export const CLIENT_LWM2M = 'clientLwM2M';
export const DEFAULT_ID_SERVER = 123;
export const DEFAULT_ID_BOOTSTRAP = 111;
export const DEFAULT_HOST_NAME = 'localhost';
@ -53,6 +58,11 @@ export const SECURITY_CONFIG_MODE_NAMES = new Map<SECURITY_CONFIG_MODE, string>(
]
);
export interface ModelValue {
objectIds: number[] | null,
objectsList: ObjectLwM2M[]
}
export interface BootstrapServersSecurityConfig {
shortId: number;
lifetime: number;
@ -89,7 +99,7 @@ export interface ObservableAttributes {
observe: string[];
attribute: string[];
telemetry: string[];
keyName: string[];
keyName: {};
}
export function getDefaultBootstrapServersSecurityConfig(): BootstrapServersSecurityConfig {
@ -138,7 +148,7 @@ export function getDefaultProfileConfig(hostname?: any): ProfileConfigModels {
observe: [],
attribute: [],
telemetry: [],
keyName: []
keyName: {}
}
};
}

Loading…
Cancel
Save