Homeautomation/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntry.java
2021-10-29 11:27:53 +02:00

134 lines
3.1 KiB
Java

package de.ph87.homeautomation.schedule.entry;
import com.luckycatlabs.sunrisesunset.Zenith;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.ZonedDateTime;
import java.util.Random;
@Getter
@Setter
@Entity
public class ScheduleEntry {
private static final Random RANDOM = new Random(System.currentTimeMillis());
@Id
@GeneratedValue
@Setter(AccessLevel.NONE)
private Long id;
private boolean enabled = false;
private boolean monday = true;
private boolean tuesday = true;
private boolean wednesday = true;
private boolean thursday = true;
private boolean friday = true;
private boolean saturday = true;
private boolean sunday = true;
@Column(nullable = false)
private ScheduleEntryType type = ScheduleEntryType.TIME;
private double zenith = Zenith.CIVIL.degrees().doubleValue();
private int hour = 0;
private int minute = 0;
private int second = 0;
private int fuzzySeconds = 0;
private double value = 0;
private ZonedDateTime nextClearTimestamp;
private ZonedDateTime lastClearTimestamp;
@Setter(AccessLevel.NONE)
private ZonedDateTime nextFuzzyTimestamp;
public void setNextClearTimestamp(final ZonedDateTime next) {
nextClearTimestamp = next;
if (nextClearTimestamp == null) {
nextFuzzyTimestamp = null;
} else {
final int rangeFull = 2 * fuzzySeconds;
final int fuzzySeconds = rangeFull > 0 ? RANDOM.nextInt(rangeFull) - this.fuzzySeconds : 0;
nextFuzzyTimestamp = nextClearTimestamp.plusSeconds(fuzzySeconds);
}
}
public void setWorkday(final boolean enabled) {
monday = enabled;
tuesday = enabled;
wednesday = enabled;
thursday = enabled;
friday = enabled;
}
public void setWeekend(final boolean enabled) {
saturday = enabled;
sunday = enabled;
}
public void setEveryday(final boolean enabled) {
setWorkday(enabled);
setWeekend(enabled);
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append(getClass().getSimpleName());
builder.append("(id=");
builder.append(id);
builder.append(", enabled=");
builder.append(enabled);
builder.append(", type=");
builder.append(type);
builder.append(", weekdays=");
builder.append(monday ? 1 : 0);
builder.append(tuesday ? 1 : 0);
builder.append(wednesday ? 1 : 0);
builder.append(thursday ? 1 : 0);
builder.append(friday ? 1 : 0);
builder.append(saturday ? 1 : 0);
builder.append(sunday ? 1 : 0);
if (type != null) {
switch (type) {
case TIME:
builder.append(", hour=");
builder.append(hour);
builder.append(", minute=");
builder.append(minute);
builder.append(", second=");
builder.append(second);
break;
case SUNRISE:
case SUNSET:
builder.append(", zenith=");
builder.append(zenith);
break;
}
}
builder.append(")");
return builder.toString();
}
}