use of org.openhab.core.automation.Rule in project openhab-addons by openhab.
the class Scenes method modifySceneLightStateApi.
@PUT
@Path("{username}/scenes/{id}/lightstates/{lightid}")
@Operation(summary = "Set scene attributes", responses = { @ApiResponse(responseCode = "200", description = "OK") })
public //
Response modifySceneLightStateApi(//
@Context UriInfo uri, @PathParam("username") @Parameter(description = "username") String username, @PathParam("id") @Parameter(description = "scene id") String id, @PathParam("lightid") @Parameter(description = "light id") String lightid, String body) {
if (!userManagement.authorizeUser(username)) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.UNAUTHORIZED, "Not Authorized");
}
final HueStateChange changeRequest = Objects.requireNonNull(cs.gson.fromJson(body, HueStateChange.class));
Rule rule = ruleRegistry.remove(id);
if (rule == null) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.NOT_AVAILABLE, "Scene does not exist!");
}
RuleBuilder builder = RuleBuilder.create(rule);
List<Action> actions = new ArrayList<>(rule.getActions());
// Remove existing action
actions.removeIf(action -> action.getId().equals(lightid));
// Assign new action
Command command = StateUtils.computeCommandByChangeRequest(changeRequest);
if (command == null) {
logger.warn("Failed to compute command for {}", body);
return NetworkUtils.singleError(cs.gson, uri, HueResponse.NOT_AVAILABLE, "Cannot compute command!");
}
actions.add(actionFromState(lightid, command));
builder.withActions(actions);
try {
ruleRegistry.add(builder.build());
} catch (IllegalStateException e) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.ARGUMENTS_INVALID, e.getMessage());
}
return NetworkUtils.successList(cs.gson, //
Arrays.asList(//
new HueSuccessGeneric(changeRequest.on, "/scenes/" + id + "/lightstates/" + lightid + "/on"), //
new HueSuccessGeneric(changeRequest.hue, "/scenes/" + id + "/lightstates/" + lightid + "/hue"), //
new HueSuccessGeneric(changeRequest.sat, "/scenes/" + id + "/lightstates/" + lightid + "/sat"), //
new HueSuccessGeneric(changeRequest.bri, "/scenes/" + id + "/lightstates/" + lightid + "/bri"), new HueSuccessGeneric(changeRequest.transitiontime, "/scenes/" + id + "/lightstates/" + lightid + "/transitiontime")));
}
use of org.openhab.core.automation.Rule in project openhab-addons by openhab.
the class Schedules method postNewSchedule.
@SuppressWarnings({ "null" })
@POST
@Path("{username}/schedules")
@Operation(summary = "Create a new schedule", responses = { @ApiResponse(responseCode = "200", description = "OK") })
public Response postNewSchedule(@Context UriInfo uri, @PathParam("username") @Parameter(description = "username") String username, String body) {
if (!userManagement.authorizeUser(username)) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.UNAUTHORIZED, "Not Authorized");
}
HueScheduleEntry newScheduleData = cs.gson.fromJson(body, HueScheduleEntry.class);
if (newScheduleData == null || newScheduleData.name.isEmpty() || newScheduleData.localtime.isEmpty()) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.INVALID_JSON, "Invalid request: No name or localtime!");
}
String uid = UUID.randomUUID().toString();
RuleBuilder builder = RuleBuilder.create(uid);
Rule rule;
try {
rule = createRule(uid, builder, Collections.emptyList(), Collections.emptyList(), newScheduleData, cs.ds);
} catch (IllegalStateException e) {
// No stacktrace required, we just need the exception message
return NetworkUtils.singleError(cs.gson, uri, HueResponse.ARGUMENTS_INVALID, e.getMessage());
}
ruleRegistry.add(rule);
return NetworkUtils.singleSuccess(cs.gson, uid, "id");
}
use of org.openhab.core.automation.Rule in project openhab-addons by openhab.
the class Schedules method activate.
/**
* Registers to the {@link RuleRegistry} and enumerates currently existing rules.
*/
@Activate
public void activate() {
ruleRegistry.removeRegistryChangeListener(this);
ruleRegistry.addRegistryChangeListener(this);
for (Rule item : ruleRegistry.getAll()) {
added(item);
}
}
use of org.openhab.core.automation.Rule in project openhab-addons by openhab.
the class Schedules method modifyScheduleApi.
@PUT
@Path("{username}/schedules/{id}")
@Operation(summary = "Set schedule attributes", responses = { @ApiResponse(responseCode = "200", description = "OK") })
public //
Response modifyScheduleApi(//
@Context UriInfo uri, @PathParam("username") @Parameter(description = "username") String username, @PathParam("id") @Parameter(description = "schedule id") String id, String body) {
if (!userManagement.authorizeUser(username)) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.UNAUTHORIZED, "Not Authorized");
}
final HueChangeScheduleEntry changeRequest = Objects.requireNonNull(cs.gson.fromJson(body, HueChangeScheduleEntry.class));
Rule rule = ruleRegistry.remove(id);
if (rule == null) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.NOT_AVAILABLE, "Schedule does not exist!");
}
RuleBuilder builder = RuleBuilder.create(rule);
try {
ruleRegistry.add(createRule(rule.getUID(), builder, rule.getActions(), rule.getTriggers(), changeRequest, cs.ds));
} catch (IllegalStateException e) {
return NetworkUtils.singleError(cs.gson, uri, HueResponse.ARGUMENTS_INVALID, e.getMessage());
}
return NetworkUtils.successList(cs.gson, //
Arrays.asList(//
new HueSuccessGeneric(changeRequest.name, "/schedules/" + id + "/name"), //
new HueSuccessGeneric(changeRequest.description, "/schedules/" + id + "/description"), //
new HueSuccessGeneric(changeRequest.localtime, "/schedules/" + id + "/localtime"), //
new HueSuccessGeneric(changeRequest.status, "/schedules/" + id + "/status"), //
new HueSuccessGeneric(changeRequest.autodelete, "/schedules/1/autodelete"), //
new HueSuccessGeneric(changeRequest.command, "/schedules/1/command")));
}
use of org.openhab.core.automation.Rule in project openhab-addons by openhab.
the class Schedules method added.
/**
* Called by the registry when a rule got added (and when a rule got modified).
* <p>
* Converts the rule into a {@link HueScheduleEntry} object and add that to the hue datastore.
*/
@Override
public void added(Rule rule) {
if (!rule.getTags().contains(SCHEDULE_TAG)) {
return;
}
HueScheduleEntry entry = new HueScheduleEntry();
entry.name = rule.getName();
entry.description = rule.getDescription();
entry.autodelete = rule.getActions().stream().anyMatch(p -> p.getId().equals("autodelete"));
entry.status = ruleManager.isEnabled(rule.getUID()) ? "enabled" : "disabled";
String timeStringFromTrigger = RuleUtils.timeStringFromTrigger(rule.getTriggers());
if (timeStringFromTrigger == null) {
logger.warn("Schedule from rule '{}' invalid!", rule.getName());
return;
}
entry.localtime = timeStringFromTrigger;
for (Action a : rule.getActions()) {
if (!a.getTypeUID().equals("rules.HttpAction")) {
continue;
}
HueCommand command = RuleUtils.httpActionToHueCommand(cs.ds, a, rule.getName());
if (command == null) {
continue;
}
entry.command = command;
}
cs.ds.schedules.put(rule.getUID(), entry);
}
Aggregations