diff --git a/src/main/angular/src/app/Device/device-tile/device-tile.component.ts b/src/main/angular/src/app/Device/device-tile/device-tile.component.ts
index 08adcc2..4f24819 100644
--- a/src/main/angular/src/app/Device/device-tile/device-tile.component.ts
+++ b/src/main/angular/src/app/Device/device-tile/device-tile.component.ts
@@ -28,11 +28,17 @@ export class DeviceTileComponent {
//
}
- ngClass(device: Device) {
+ ngClass() {
return {
- "stateOn": device.stateProperty?.state?.value === true,
- "stateOff": device.stateProperty?.state?.value === false,
+ "stateOn": this.device.stateProperty?.state?.value === true,
+ "stateOff": this.device.stateProperty?.state?.value === false,
};
}
+ setState(newState: boolean) {
+ if (!this.device.hasTagBySlug('confirm') || confirm("Sicher?")) {
+ this.deviceService.setState(this.device, newState);
+ }
+ }
+
}
diff --git a/src/main/angular/src/app/Shutter/Shutter.ts b/src/main/angular/src/app/Shutter/Shutter.ts
index 054b2a8..ff36c5c 100644
--- a/src/main/angular/src/app/Shutter/Shutter.ts
+++ b/src/main/angular/src/app/Shutter/Shutter.ts
@@ -1,8 +1,9 @@
import {Property} from "../Property/Property";
-import {orNull, validateString} from "../api/validators";
+import {orNull, validateList, validateString} from "../api/validators";
import {Area} from '../Area/Area';
import {Thing} from '../Thing/Thing';
+import {Tag} from '../Tag/Tag';
export class Shutter extends Thing {
@@ -11,10 +12,11 @@ export class Shutter extends Thing {
uuid: string,
name: string,
slug: string,
+ tagList: Tag[],
readonly positionPropertyId: string,
readonly positionProperty: Property | null,
) {
- super(area, uuid, name, slug);
+ super(area, uuid, name, slug, tagList);
}
static fromJson(json: any): Shutter {
@@ -23,6 +25,7 @@ export class Shutter extends Thing {
validateString(json.uuid),
validateString(json.name),
validateString(json.slug),
+ validateList(json.tagList, Tag.fromJson),
validateString(json.positionPropertyId),
orNull(json.positionProperty, Property.fromJson),
);
diff --git a/src/main/angular/src/app/Tag/Tag.ts b/src/main/angular/src/app/Tag/Tag.ts
index 9635b39..2f13c18 100644
--- a/src/main/angular/src/app/Tag/Tag.ts
+++ b/src/main/angular/src/app/Tag/Tag.ts
@@ -4,6 +4,7 @@ export class Tag {
constructor(
readonly uuid: string,
+ readonly slug: string,
readonly name: string,
) {
//
@@ -12,6 +13,7 @@ export class Tag {
static fromJson(json: any): Tag {
return new Tag(
validateString(json.uuid),
+ validateString(json.slug),
validateString(json.name),
);
}
diff --git a/src/main/angular/src/app/Thing/Thing.ts b/src/main/angular/src/app/Thing/Thing.ts
index 954ac4b..ebe1c86 100644
--- a/src/main/angular/src/app/Thing/Thing.ts
+++ b/src/main/angular/src/app/Thing/Thing.ts
@@ -1,4 +1,5 @@
import {Area} from '../Area/Area';
+import {Tag} from '../Tag/Tag';
export abstract class Thing {
@@ -7,6 +8,7 @@ export abstract class Thing {
readonly uuid: string,
readonly name: string,
readonly slug: string,
+ readonly tagList: Tag[],
) {
//
}
@@ -25,6 +27,11 @@ export abstract class Thing {
return this.area.name + ' ' + this.name;
}
+ hasTagBySlug(slug: string): boolean {
+ const slugLower = slug.toLowerCase();
+ return this.tagList.some(t => t.slug.toLocaleLowerCase() === slugLower);
+ }
+
static trackBy(index: number, thing: Thing) {
return thing.uuid;
}
diff --git a/src/main/angular/src/app/Tunable/Tunable.ts b/src/main/angular/src/app/Tunable/Tunable.ts
index 83f8c46..578e76b 100644
--- a/src/main/angular/src/app/Tunable/Tunable.ts
+++ b/src/main/angular/src/app/Tunable/Tunable.ts
@@ -1,7 +1,8 @@
import {Property} from "../Property/Property";
-import {orNull, validateString} from "../api/validators";
+import {orNull, validateList, validateString} from "../api/validators";
import {Area} from '../Area/Area';
import {Thing} from '../Thing/Thing';
+import {Tag} from '../Tag/Tag';
export class Tunable extends Thing {
@@ -10,6 +11,7 @@ export class Tunable extends Thing {
uuid: string,
name: string,
slug: string,
+ tagList: Tag[],
readonly statePropertyId: string,
readonly stateProperty: Property | null,
readonly brightnessPropertyId: string,
@@ -17,7 +19,7 @@ export class Tunable extends Thing {
readonly coldnessPropertyId: string,
readonly coldnessProperty: Property | null,
) {
- super(area, uuid, name, slug);
+ super(area, uuid, name, slug, tagList);
}
static fromJson(json: any): Tunable {
@@ -26,6 +28,7 @@ export class Tunable extends Thing {
validateString(json.uuid),
validateString(json.name),
validateString(json.slug),
+ validateList(json.tagList, Tag.fromJson),
validateString(json.statePropertyId),
orNull(json.stateProperty, Property.fromJson),
validateString(json.brightnessPropertyId),
diff --git a/src/main/angular/src/app/app.component.html b/src/main/angular/src/app/app.component.html
index 2c97049..cdcabb6 100644
--- a/src/main/angular/src/app/app.component.html
+++ b/src/main/angular/src/app/app.component.html
@@ -3,6 +3,7 @@
Dash
Geräte
Licht
+
Deko
Rollladen
KNX
diff --git a/src/main/java/de/ph87/home/device/DeviceDto.java b/src/main/java/de/ph87/home/device/DeviceDto.java
index f7e2d31..c717063 100644
--- a/src/main/java/de/ph87/home/device/DeviceDto.java
+++ b/src/main/java/de/ph87/home/device/DeviceDto.java
@@ -3,7 +3,7 @@ package de.ph87.home.device;
import de.ph87.home.area.AreaDto;
import de.ph87.home.property.PropertyDto;
import de.ph87.home.property.PropertyTypeMismatch;
-import de.ph87.home.tag.Tag;
+import de.ph87.home.tag.TagDto;
import de.ph87.home.web.IWebSocketMessage;
import jakarta.annotation.Nullable;
import lombok.Getter;
@@ -39,7 +39,7 @@ public class DeviceDto implements IWebSocketMessage {
private final PropertyDto