Skip to content

Commit

Permalink
Enable home being both energy and security (openhab#16026)
Browse files Browse the repository at this point in the history
Signed-off-by: clinique <gael@lhopital.org>
Signed-off-by: Jørgen Austvik <jaustvik@acm.org>
  • Loading branch information
clinique authored and austvik committed Mar 27, 2024
1 parent 874fce5 commit 3acf669
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,18 @@ public class NAHomeStatusResponse extends ApiResponse<NAHomeStatus> {

public class HomeStatus extends NAThing {
private @Nullable NAObjectMap<HomeStatusModule> modules;
private @Nullable NAObjectMap<Room> rooms;
private @Nullable NAObjectMap<HomeStatusPerson> persons;

public NAObjectMap<HomeStatusModule> getModules() {
NAObjectMap<HomeStatusModule> local = modules;
return local != null ? local : new NAObjectMap<>();
}
}

public class Energy extends HomeStatus {
private @Nullable NAObjectMap<Room> rooms;

public NAObjectMap<Room> getRooms() {
NAObjectMap<Room> local = rooms;
return local != null ? local : new NAObjectMap<>();
}
}

public class Security extends HomeStatus {
private @Nullable NAObjectMap<HomeStatusPerson> persons;

public NAObjectMap<HomeStatusPerson> getPersons() {
NAObjectMap<HomeStatusPerson> local = persons;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
import org.openhab.binding.netatmo.internal.api.NetatmoException;
import org.openhab.binding.netatmo.internal.api.data.ModuleType;
import org.openhab.binding.netatmo.internal.api.dto.HomeData;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus.HomeStatus;
import org.openhab.core.i18n.TimeZoneProvider;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.OpenClosedType;
Expand Down Expand Up @@ -52,10 +50,6 @@ public NADeserializer(@Reference TimeZoneProvider timeZoneProvider) {
.registerTypeAdapter(NAObjectMap.class, new NAObjectMapDeserializer())
.registerTypeAdapter(NAPushType.class, new NAPushTypeDeserializer())
.registerTypeAdapter(ModuleType.class, new ModuleTypeDeserializer())
.registerTypeAdapter(HomeStatus.class,
(JsonDeserializer<HomeStatus>) (json, type, context) -> context.deserialize(json,
json.getAsJsonObject().has("persons") ? NAHomeStatus.Security.class
: NAHomeStatus.Energy.class))
.registerTypeAdapter(HomeData.class,
(JsonDeserializer<HomeData>) (json, type, context) -> context.deserialize(json,
json.getAsJsonObject().has("therm_mode") ? HomeData.Energy.class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import org.openhab.binding.netatmo.internal.api.dto.HomeDataModule;
import org.openhab.binding.netatmo.internal.api.dto.HomeDataRoom;
import org.openhab.binding.netatmo.internal.api.dto.HomeStatusModule;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus.HomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.Room;
import org.openhab.binding.netatmo.internal.config.HomeConfiguration;
Expand Down Expand Up @@ -85,29 +84,27 @@ protected void updateHomeData(HomeData homeData) {
}

@Override
protected void updateHomeStatus(HomeStatus homeStatus) {
if (homeStatus instanceof NAHomeStatus.Energy energyStatus) {
NAObjectMap<Room> rooms = energyStatus.getRooms();
NAObjectMap<HomeStatusModule> modules = energyStatus.getModules();
handler.getActiveChildren(FeatureArea.ENERGY).forEach(childHandler -> {
String childId = childHandler.getId();
logger.trace("childId: {}", childId);
rooms.getOpt(childId).ifPresentOrElse(roomData -> {
logger.trace("roomData: {}", roomData);
childHandler.setNewData(roomData);
}, () -> {
modules.getOpt(childId).ifPresent(moduleData -> {
logger.trace("moduleData: {}", moduleData);
childHandler.setNewData(moduleData);
modules.values().stream().filter(module -> childId.equals(module.getBridge()))
.forEach(bridgedModule -> {
logger.trace("bridgedModule: {}", bridgedModule);
childHandler.setNewData(bridgedModule);
});
});
protected void updateHomeStatus(HomeStatus energyStatus) {
NAObjectMap<Room> rooms = energyStatus.getRooms();
NAObjectMap<HomeStatusModule> modules = energyStatus.getModules();
handler.getActiveChildren(FeatureArea.ENERGY).forEach(childHandler -> {
String childId = childHandler.getId();
logger.trace("childId: {}", childId);
rooms.getOpt(childId).ifPresentOrElse(roomData -> {
logger.trace("roomData: {}", roomData);
childHandler.setNewData(roomData);
}, () -> {
modules.getOpt(childId).ifPresent(moduleData -> {
logger.trace("moduleData: {}", moduleData);
childHandler.setNewData(moduleData);
modules.values().stream().filter(module -> childId.equals(module.getBridge()))
.forEach(bridgedModule -> {
logger.trace("bridgedModule: {}", bridgedModule);
childHandler.setNewData(bridgedModule);
});
});
});
}
});
}

public void setThermPoint(String roomId, SetpointMode mode, long endtime, double temp) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import org.openhab.binding.netatmo.internal.api.dto.HomeEvent;
import org.openhab.binding.netatmo.internal.api.dto.HomeStatusModule;
import org.openhab.binding.netatmo.internal.api.dto.HomeStatusPerson;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus.HomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.NAObject;
import org.openhab.binding.netatmo.internal.config.HomeConfiguration;
Expand Down Expand Up @@ -88,21 +87,19 @@ protected void updateHomeData(HomeData homeData) {
}

@Override
protected void updateHomeStatus(HomeStatus homeStatus) {
if (homeStatus instanceof NAHomeStatus.Security securityStatus) {
NAObjectMap<HomeStatusPerson> persons = securityStatus.getPersons();
NAObjectMap<HomeStatusModule> modules = securityStatus.getModules();
handler.getActiveChildren(FeatureArea.SECURITY).forEach(childHandler -> {
String childId = childHandler.getId();
persons.getOpt(childId).ifPresentOrElse(personData -> childHandler.setNewData(personData), () -> {
modules.getOpt(childId).ifPresent(childData -> {
childHandler.setNewData(childData);
modules.values().stream().filter(module -> childId.equals(module.getBridge()))
.forEach(bridgedModule -> childHandler.setNewData(bridgedModule));
});
protected void updateHomeStatus(HomeStatus securityStatus) {
NAObjectMap<HomeStatusPerson> persons = securityStatus.getPersons();
NAObjectMap<HomeStatusModule> modules = securityStatus.getModules();
handler.getActiveChildren(FeatureArea.SECURITY).forEach(childHandler -> {
String childId = childHandler.getId();
persons.getOpt(childId).ifPresentOrElse(personData -> childHandler.setNewData(personData), () -> {
modules.getOpt(childId).ifPresent(childData -> {
childHandler.setNewData(childData);
modules.values().stream().filter(module -> childId.equals(module.getBridge()))
.forEach(bridgedModule -> childHandler.setNewData(bridgedModule));
});
});
}
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.openhab.binding.netatmo.internal.api.dto.HomeData;
import org.openhab.binding.netatmo.internal.api.dto.HomeDataPerson;
import org.openhab.binding.netatmo.internal.api.dto.HomeStatusPerson;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.NAHomeStatus.HomeStatus;
import org.openhab.binding.netatmo.internal.api.dto.NAObject;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.types.State;
Expand Down Expand Up @@ -51,7 +51,7 @@ public void setNewData(@Nullable NAObject data) {
super.setNewData(data);
if (data instanceof HomeData.Security securityData) {
knownIds = securityData.getKnownPersons().stream().map(HomeDataPerson::getId).toList();
} else if (data instanceof NAHomeStatus.Security securityStatus) {
} else if (data instanceof HomeStatus securityStatus) {
List<HomeStatusPerson> present = securityStatus.getPersons().values().stream()
.filter(HomeStatusPerson::atHome).toList();

Expand Down

0 comments on commit 3acf669

Please sign in to comment.