Added thermostat, not complete

This commit is contained in:
Tommaso Rodolfo Masera 2020-04-09 11:30:05 +02:00
parent d979050306
commit 7cfb2ffc73
2 changed files with 67 additions and 0 deletions

View file

@ -0,0 +1,64 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.validation.constraints.NotNull;
/** A thermostat capable of controlling cooling and heating. */
public class Thermostat extends InputDevice {
enum ThermostatState {
OFF,
IDLE,
COOLING,
HEATING
}
@Column @NotNull private BigDecimal targetTemperature;
@Column @NotNull BigDecimal averageTemperature;
@Column @NotNull private final Sensor temperatureSensor;
@Column @NotNull private ThermostatState state;
/** Creates a thermostat with a temperature sensor and its initial OFF state */
public Thermostat() {
super("thermostat");
this.temperatureSensor = new Sensor();
this.temperatureSensor.setSensor(Sensor.SensorType.TEMPERATURE);
this.state = ThermostatState.OFF;
}
/** Setter method for the thermostat state */
public void setState(ThermostatState state) {
this.state = state;
}
/**
* Sets the target temperature to be reached. Changes the thermostat state accordingly and waits
* until such temperature is reached by the embedded sensor to become idle again.
*
* @param targetTemperature - the temperature to be reached by the thermostat
*/
public void setTargetTemperature(BigDecimal targetTemperature) {
if (this.state == ThermostatState.OFF) {
this.state = ThermostatState.IDLE;
}
this.targetTemperature = targetTemperature;
BigDecimal actualTemperature = this.temperatureSensor.getValue();
if (actualTemperature.compareTo(targetTemperature) == -1) {
this.setState(ThermostatState.HEATING);
} else {
this.setState(ThermostatState.COOLING);
}
while (!(this.temperatureSensor.getValue().equals(this.targetTemperature))) {
/** Do nothing, wait for the target temperature to be reached */
}
this.setState(ThermostatState.IDLE);
}
}

View file

@ -0,0 +1,3 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
public interface ThermostatRepository extends DeviceRepository<Thermostat> {}