use of il.ac.technion.cs.smarthouse.system.services.sensors_service.SensorApi in project Smartcity-Smarthouse by TechnionYP5777.
the class AcuGui method onLoad.
/*
* (non-Javadoc)
*
* @see
* il.ac.technion.cs.smarthouse.developers_api.SmarthouseApplication#onLoad(
* )
*/
/**
* [[SuppressWarningsSpartan]]
*/
@Override
public void onLoad() throws Exception {
final GuiBinderObject<Integer> currentTemp = new GuiBinderObject<>(20);
final GuiBinderObject<Integer> wantedTemp = new GuiBinderObject<>(18);
final GuiBinderObject<String> AcuState = new GuiBinderObject<>(OFF);
final SensorApi<ACUSensor> sensor = super.<SensorsService>getService(ServiceType.SENSORS_SERVICE).getSensor(Simulation.commname, ACUSensor.class);
sensor.subscribe(data -> {
// update GUI
currentTemp.setData(data.getTemp());
AcuState.setData(data.isOn() ? ON : OFF);
// instruct sensor
Integer want = wantedTemp.getData(100), have = currentTemp.getData(0);
AcuAction nextAction = (have < want) ? AcuAction.HOTTER : (have > want) ? AcuAction.COLDER : AcuAction.STOP;
sensor.instruct(nextAction + "", setStatePath);
});
wantedTemp.addOnDataChangedListener(desiredT -> desiredT.getDataAsOptional().ifPresent(t -> sensor.instruct(t + 0.2 + "", setTempPath)));
getAppBuilder().getStatusRegionBuilder().addStatusField("Current temperature in controlled location:", currentTemp).addStatusField("The air conditioner in controlled location is", AcuState);
getAppBuilder().getConfigurationsRegionBuilder().addIntegerInputField("Desired Temperature:", wantedTemp).addSensorAliasSelectionField("The Controlled location:", sensor, (oldA, newA) -> {
super.<SensorsService>getService(ServiceType.SENSORS_SERVICE).getSensor(Simulation.commname, ACUSensor.class, oldA).instruct(AcuAction.STOP + "", setStatePath);
wantedTemp.getDataAsOptional().ifPresent(t -> super.<SensorsService>getService(ServiceType.SENSORS_SERVICE).getSensor(Simulation.commname, ACUSensor.class, newA).instruct(t + 0.3 + "", setTempPath));
});
simulation.getAliases().forEach(alias -> {
SensorApi<ACUSensor> currSensor = super.<SensorsService>getService(ServiceType.SENSORS_SERVICE).getSensor(Simulation.commname, ACUSensor.class, alias);
getAppBuilder().getWidgetsRegionBuilder().addWidget(WidgetType.PROGRESS_LINE_GRAPH, new InfoCollector().addInfoEntry(getTempPath, "temperature").setTitle(alias), currSensor, acu -> {
Map<String, Object> data = new HashMap<>();
data.put(getTempPath, acu.getTemp());
return data;
});
});
}
use of il.ac.technion.cs.smarthouse.system.services.sensors_service.SensorApi in project Smartcity-Smarthouse by TechnionYP5777.
the class WidgetsRegionBuilderImpl method addWidget.
/*
* (non-Javadoc)
*
* @see il.ac.technion.cs.smarthouse.developers_api.application_builder.
* WidgetsRegionBuilder#addWidget(il.ac.technion.cs.smarthouse.system.
* dashboard.WidgetType,
* il.ac.technion.cs.smarthouse.system.dashboard.InfoCollector,
* il.ac.technion.cs.smarthouse.system.services.sensors_service.SensorApi,
* java.util.function.Function)
*/
@Override
public <T extends SensorData> WidgetsRegionBuilder addWidget(final WidgetType t, final InfoCollector c, final SensorApi<T> a, final Function<T, Map<String, Object>> sensorProcessor) {
if (!canAdd())
return this;
BasicWidget bw = t.createWidget(tileSize, c);
a.subscribe(data -> sensorProcessor.apply(data).forEach((path, val) -> bw.update(val, path)));
widgetsHbox.getChildren().add(core.createWidget(bw).get());
return this;
}
Aggregations