Group.lastValueChange, Property.lastValueChange
This commit is contained in:
parent
201cfd9342
commit
cd84f25577
@ -1,4 +1,4 @@
|
|||||||
import {orNull, validateString} from '../common/validators';
|
import {orNull, validateDateOrNull, validateString} from '../common/validators';
|
||||||
import {State} from '../State/State';
|
import {State} from '../State/State';
|
||||||
|
|
||||||
export class Group {
|
export class Group {
|
||||||
@ -9,6 +9,7 @@ export class Group {
|
|||||||
readonly description: string,
|
readonly description: string,
|
||||||
readonly dpt: string,
|
readonly dpt: string,
|
||||||
readonly state: State | null,
|
readonly state: State | null,
|
||||||
|
readonly lastValueChange: Date | null,
|
||||||
) {
|
) {
|
||||||
// -
|
// -
|
||||||
}
|
}
|
||||||
@ -20,6 +21,7 @@ export class Group {
|
|||||||
validateString(json.description),
|
validateString(json.description),
|
||||||
validateString(json.dpt),
|
validateString(json.dpt),
|
||||||
orNull(json.state, State.fromJson),
|
orNull(json.state, State.fromJson),
|
||||||
|
validateDateOrNull(json.lastValueChange),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import {State} from "../State/State";
|
import {State} from "../State/State";
|
||||||
import {orNull, validateString} from "../common/validators";
|
import {orNull, validateDateOrNull, validateString} from "../common/validators";
|
||||||
|
|
||||||
export class Property {
|
export class Property {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly id: string,
|
readonly id: string,
|
||||||
readonly type: string,
|
readonly type: string,
|
||||||
readonly lastState: State | null,
|
|
||||||
readonly state: State | null,
|
readonly state: State | null,
|
||||||
|
readonly lastValueChange: Date | null,
|
||||||
) {
|
) {
|
||||||
// -
|
// -
|
||||||
}
|
}
|
||||||
@ -16,8 +16,8 @@ export class Property {
|
|||||||
return new Property(
|
return new Property(
|
||||||
validateString(json.id),
|
validateString(json.id),
|
||||||
validateString(json.type),
|
validateString(json.type),
|
||||||
orNull(json.lastState, State.fromJson),
|
|
||||||
orNull(json.state, State.fromJson),
|
orNull(json.state, State.fromJson),
|
||||||
|
validateDateOrNull(json.lastValueChange),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
<div class="timestamp">
|
<div class="timestamp">
|
||||||
{{ device.stateProperty?.state?.timestamp | relative:now }}
|
{{ device.stateProperty?.state?.timestamp | relative:now }}
|
||||||
|
{{ device.stateProperty?.lastValueChange | relative:now }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stackRight timestamp">
|
<div class="stackRight timestamp">
|
||||||
{{ group.state?.timestamp | relative:now }}:
|
{{ group.lastValueChange | relative:now }}:
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -5,10 +5,10 @@ import de.ph87.home.property.State;
|
|||||||
import jakarta.annotation.Nullable;
|
import jakarta.annotation.Nullable;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.Setter;
|
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import tuwien.auto.calimero.GroupAddress;
|
import tuwien.auto.calimero.GroupAddress;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ -35,10 +35,12 @@ public class Group {
|
|||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
private long puid;
|
private long puid;
|
||||||
|
|
||||||
@Setter
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private State<?> state;
|
private State<?> state;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private ZonedDateTime lastValueChange = null;
|
||||||
|
|
||||||
public Group(@NonNull final String id, @NonNull final GroupAddress address, @NonNull final String name, @NonNull final String description, @NonNull final DPT dpt, final long puid) {
|
public Group(@NonNull final String id, @NonNull final GroupAddress address, @NonNull final String name, @NonNull final String description, @NonNull final DPT dpt, final long puid) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
@ -48,6 +50,13 @@ public class Group {
|
|||||||
this.puid = puid;
|
this.puid = puid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setState(@NonNull final State<?> newState) {
|
||||||
|
if (newState.valueChanged(this.state)) {
|
||||||
|
lastValueChange = ZonedDateTime.now();
|
||||||
|
}
|
||||||
|
this.state = newState;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
if (this == o) {
|
if (this == o) {
|
||||||
|
|||||||
@ -5,9 +5,9 @@ import de.ph87.home.web.IWebSocketMessage;
|
|||||||
import jakarta.annotation.Nullable;
|
import jakarta.annotation.Nullable;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.Setter;
|
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ -36,9 +36,11 @@ public class GroupDto implements IWebSocketMessage {
|
|||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
private final long puid;
|
private final long puid;
|
||||||
|
|
||||||
@Setter
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private State<?> state;
|
private final State<?> state;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private final ZonedDateTime lastValueChange;
|
||||||
|
|
||||||
public GroupDto(@NonNull final Group group) {
|
public GroupDto(@NonNull final Group group) {
|
||||||
this.id = group.getId();
|
this.id = group.getId();
|
||||||
@ -48,6 +50,7 @@ public class GroupDto implements IWebSocketMessage {
|
|||||||
this.dpt = group.getDpt().toString();
|
this.dpt = group.getDpt().toString();
|
||||||
this.puid = group.getPuid();
|
this.puid = group.getPuid();
|
||||||
this.state = group.getState();
|
this.state = group.getState();
|
||||||
|
this.lastValueChange = group.getLastValueChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import lombok.NonNull;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@ -43,16 +44,17 @@ public class Property<T> implements IProperty<T> {
|
|||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
private final Consumer<Property<T>> onStateSet;
|
private final Consumer<Property<T>> onStateSet;
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@ToString.Exclude
|
|
||||||
private State<T> lastState = null;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private State<T> state = null;
|
private State<T> state = null;
|
||||||
|
|
||||||
public void update(@Nullable final State<T> state) {
|
@Nullable
|
||||||
this.lastState = this.state;
|
private ZonedDateTime lastValueChange = null;
|
||||||
this.state = state;
|
|
||||||
|
public void update(@NonNull final State<T> newState) {
|
||||||
|
if (newState.valueChanged(this.state)) {
|
||||||
|
lastValueChange = ZonedDateTime.now();
|
||||||
|
}
|
||||||
|
this.state = newState;
|
||||||
this.onStateSet.accept(this);
|
this.onStateSet.accept(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import lombok.Getter;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ToString
|
@ToString
|
||||||
public class PropertyDto<T> implements IProperty<T> {
|
public class PropertyDto<T> implements IProperty<T> {
|
||||||
@ -22,17 +24,16 @@ public class PropertyDto<T> implements IProperty<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@ToString.Exclude
|
private final State<T> state;
|
||||||
private final State<T> lastState;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private final State<T> state;
|
private final ZonedDateTime lastValueChange;
|
||||||
|
|
||||||
public PropertyDto(@NonNull final Property<T> property) {
|
public PropertyDto(@NonNull final Property<T> property) {
|
||||||
this.id = property.getId();
|
this.id = property.getId();
|
||||||
this.type = property.getType();
|
this.type = property.getType();
|
||||||
this.state = property.getState();
|
this.state = property.getState();
|
||||||
this.lastState = property.getLastState();
|
this.lastValueChange = property.getLastValueChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import lombok.NonNull;
|
|||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ToString
|
@ToString
|
||||||
@ -32,4 +33,11 @@ public class State<T> {
|
|||||||
this.string = string;
|
this.string = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean valueChanged(@Nullable final State<?> oldState) {
|
||||||
|
if (oldState == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return !Objects.equals(oldState.value, value);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user