wip, to fix
This commit is contained in:
parent
0b1170404d
commit
4c4297dfdf
4 changed files with 55 additions and 45 deletions
|
@ -8,6 +8,7 @@ import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
|
||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.StreamSupport;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.autoconfigure.*;
|
import org.springframework.boot.autoconfigure.*;
|
||||||
|
@ -22,7 +23,15 @@ public class ThermostatController {
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public List<Thermostat> findAll() {
|
public List<Thermostat> findAll() {
|
||||||
return toList(thermostatRepository.findAll());
|
Iterable<Thermostat> thermostats = thermostatRepository.findAll();
|
||||||
|
StreamSupport.stream(thermostats.spliterator(), false)
|
||||||
|
.forEach(
|
||||||
|
s ->
|
||||||
|
s.setExternalSensorsAvailable(
|
||||||
|
thermostatRepository.getTemperatureSensorCount(
|
||||||
|
s.getRoomId())
|
||||||
|
> 0));
|
||||||
|
return toList(thermostats);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
|
@ -33,7 +42,6 @@ public class ThermostatController {
|
||||||
private Thermostat save(Thermostat newT, ThermostatSaveRequest t) {
|
private Thermostat save(Thermostat newT, ThermostatSaveRequest t) {
|
||||||
newT.setTargetTemperature(t.getTargetTemperature());
|
newT.setTargetTemperature(t.getTargetTemperature());
|
||||||
newT.setState(t.getState());
|
newT.setState(t.getState());
|
||||||
newT.setAverageTemperature(t.getAverageTemperature());
|
|
||||||
newT.setTargetTemperature(t.getTargetTemperature());
|
newT.setTargetTemperature(t.getTargetTemperature());
|
||||||
newT.setId(t.getId());
|
newT.setId(t.getId());
|
||||||
newT.setName(t.getName());
|
newT.setName(t.getName());
|
||||||
|
|
|
@ -29,9 +29,6 @@ public class ThermostatSaveRequest {
|
||||||
/** Temperature to be reached */
|
/** Temperature to be reached */
|
||||||
@NotNull private BigDecimal targetTemperature;
|
@NotNull private BigDecimal targetTemperature;
|
||||||
|
|
||||||
/** Average room temperature given by all the temperature sensors in the room */
|
|
||||||
@NotNull BigDecimal averageTemperature;
|
|
||||||
|
|
||||||
/** Embedded temperature sensor */
|
/** Embedded temperature sensor */
|
||||||
@NotNull private Sensor temperatureSensor;
|
@NotNull private Sensor temperatureSensor;
|
||||||
|
|
||||||
|
@ -46,14 +43,6 @@ public class ThermostatSaveRequest {
|
||||||
return this.state;
|
return this.state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAverageTemperature(BigDecimal averageTemperature) {
|
|
||||||
this.averageTemperature = averageTemperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getAverageTemperature() {
|
|
||||||
return this.averageTemperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Sensor getTemperatureSensor() {
|
public Sensor getTemperatureSensor() {
|
||||||
return this.temperatureSensor;
|
return this.temperatureSensor;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +1,45 @@
|
||||||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.OneToOne;
|
import javax.persistence.Transient;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/** A thermostat capable of controlling cooling and heating. */
|
/** A thermostat capable of controlling cooling and heating. */
|
||||||
@Entity
|
@Entity
|
||||||
public class Thermostat extends InputDevice {
|
public class Thermostat extends OutputDevice {
|
||||||
|
|
||||||
public enum ThermostatState {
|
public enum ThermostatState {
|
||||||
|
@SerializedName("OFF")
|
||||||
OFF,
|
OFF,
|
||||||
|
@SerializedName("IDLE")
|
||||||
IDLE,
|
IDLE,
|
||||||
|
@SerializedName("COOLING")
|
||||||
COOLING,
|
COOLING,
|
||||||
|
@SerializedName("HEATING")
|
||||||
HEATING
|
HEATING
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Temperature to be reached */
|
/** Temperature to be reached */
|
||||||
@Column @NotNull private BigDecimal targetTemperature;
|
@Column @NotNull private BigDecimal targetTemperature;
|
||||||
|
|
||||||
/** Average room temperature given by all the temperature sensors in the room */
|
/** The temperature detected by the embedded sensor */
|
||||||
@Column @NotNull BigDecimal averageTemperature;
|
@Column(nullable = false, precision = 4, scale = 1)
|
||||||
|
private BigDecimal sensorTemperature;
|
||||||
/** Embedded temperature sensor */
|
|
||||||
@Column @NotNull @OneToOne private final Sensor temperatureSensor;
|
|
||||||
|
|
||||||
/** State of this thermostat */
|
/** State of this thermostat */
|
||||||
@Column @NotNull private ThermostatState state;
|
@Column @NotNull private ThermostatState state;
|
||||||
|
|
||||||
|
@Column boolean useInternalSensor = true;
|
||||||
|
|
||||||
|
/** True if there are any other sensors in the room */
|
||||||
|
@Transient boolean externalSensorsAvaliable;
|
||||||
|
|
||||||
/** Creates a thermostat with a temperature sensor and its initial OFF state */
|
/** Creates a thermostat with a temperature sensor and its initial OFF state */
|
||||||
public Thermostat() {
|
public Thermostat() {
|
||||||
super("thermostat");
|
super("thermostat");
|
||||||
this.temperatureSensor = new Sensor();
|
|
||||||
this.temperatureSensor.setSensor(Sensor.SensorType.TEMPERATURE);
|
|
||||||
this.state = ThermostatState.OFF;
|
this.state = ThermostatState.OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,29 +51,12 @@ public class Thermostat extends InputDevice {
|
||||||
return this.state;
|
return this.state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAverageTemperature(BigDecimal averageTemperature) {
|
|
||||||
this.averageTemperature = averageTemperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getAverageTemperature() {
|
|
||||||
return this.averageTemperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Sensor getTemperatureSensor() {
|
|
||||||
return this.temperatureSensor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getTargetTemperature() {
|
public BigDecimal getTargetTemperature() {
|
||||||
return this.targetTemperature;
|
return this.targetTemperature;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void setExternalSensorsAvailable(boolean externalSensorsAvaliable) {
|
||||||
* Takes all of the temperature sensors in the room inculding its own embedded sensor and set
|
this.externalSensorsAvaliable = externalSensorsAvaliable;
|
||||||
* this average temperature to the average of all the temperatures registered.
|
|
||||||
*/
|
|
||||||
public void calcAverageTemperature() {
|
|
||||||
// TODO: write actual method body
|
|
||||||
BigDecimal average = new BigDecimal(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,7 +65,7 @@ public class Thermostat extends InputDevice {
|
||||||
*
|
*
|
||||||
* @param targetTemperature - the temperature to be reached by the thermostat
|
* @param targetTemperature - the temperature to be reached by the thermostat
|
||||||
*/
|
*/
|
||||||
public void setTargetTemperature(BigDecimal targetTemperature) {
|
/*public void setTargetTemperature(BigDecimal targetTemperature) {
|
||||||
if (this.state == ThermostatState.OFF) {
|
if (this.state == ThermostatState.OFF) {
|
||||||
this.setState(ThermostatState.IDLE);
|
this.setState(ThermostatState.IDLE);
|
||||||
}
|
}
|
||||||
|
@ -91,9 +80,9 @@ public class Thermostat extends InputDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!(this.temperatureSensor.getValue().equals(this.targetTemperature))) {
|
while (!(this.temperatureSensor.getValue().equals(this.targetTemperature))) {
|
||||||
/** Do nothing, wait for the target temperature to be reached */
|
// Do nothing, wait for the target temperature to be reached
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setState(ThermostatState.IDLE);
|
this.setState(ThermostatState.IDLE);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,27 @@
|
||||||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
public interface ThermostatRepository extends DeviceRepository<Thermostat> {}
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
|
||||||
|
public interface ThermostatRepository extends DeviceRepository<Thermostat> {
|
||||||
|
/**
|
||||||
|
* Computes the average temperature of all temperature sensors in the room
|
||||||
|
*
|
||||||
|
* @param thermostatRoomId room ID of the thermostat
|
||||||
|
* @return an optional big decimal, empty if none found
|
||||||
|
*/
|
||||||
|
@Query(
|
||||||
|
"SELECT AVG(s.temperature) FROM Sensor s JOIN s.room r WHERE s.sensor = 'TEMPERATURE' AND r.id = ?1")
|
||||||
|
Optional<BigDecimal> getAverageTemperature(Long thermostatRoomId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the average temperature of all temperature sensors in the room
|
||||||
|
*
|
||||||
|
* @param thermostatRoomId room ID of the thermostat
|
||||||
|
* @return an optional big decimal, empty if none found
|
||||||
|
*/
|
||||||
|
@Query(
|
||||||
|
"SELECT COUNT(*) FROM Sensor s JOIN s.room r WHERE s.sensor = 'TEMPERATURE' AND r.id = ?1")
|
||||||
|
Integer getTemperatureSensorCount(Long thermostatRoomId);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue