Skip to content

Commit

Permalink
[hdpowerview] Add shade identify command (openhab#12175)
Browse files Browse the repository at this point in the history
* Add shade identify command.

Fixes openhab#12174 

Signed-off-by: Jacob Laursen <[email protected]>
Signed-off-by: Nick Waterton <[email protected]>
  • Loading branch information
jlaur authored and NickWaterton committed Apr 27, 2022
1 parent cd0bd82 commit 415149a
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 2 deletions.
2 changes: 1 addition & 1 deletion bundles/org.openhab.binding.hdpowerview/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ All of these channels appear in the binding, but only those which have a physica
| position | Rollershutter | The vertical position of the shade's rail -- see [next chapter](#Roller-Shutter-Up/Down-Position-vs.-Open/Close-State). Up/Down commands will move the rail completely up or completely down. Percentage commands will move the rail to an intermediate position. Stop commands will halt any current movement of the rail. |
| secondary | Rollershutter | The vertical position of the secondary rail (if any). Its function is similar to the `position` channel above -- but see [next chapter](#Roller-Shutter-Up/Down-Position-vs.-Open/Close-State). |
| vane | Dimmer | The degree of opening of the slats or vanes. Setting this to a non-zero value will first move the shade `position` fully down, since the slats or vanes can only have a defined state if the shade is in its down position -- see [Interdependency between Channel positions](#Interdependency-between-Channel-positions). |
| command | String | Send a command to the shade. Valid values are: `CALIBRATE` |
| command | String | Send a command to the shade. Valid values are: `CALIBRATE`, `IDENTIFY` |
| lowBattery | Switch | Indicates ON when the battery level of the shade is low, as determined by the hub's internal rules. |
| batteryLevel | Number | Battery level (10% = low, 50% = medium, 100% = high)
| batteryVoltage | Number:ElectricPotential | Battery voltage reported by the shade. |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.openhab.binding.hdpowerview.internal.api.ShadePosition;
import org.openhab.binding.hdpowerview.internal.api.requests.RepeaterBlinking;
import org.openhab.binding.hdpowerview.internal.api.requests.ShadeCalibrate;
import org.openhab.binding.hdpowerview.internal.api.requests.ShadeJog;
import org.openhab.binding.hdpowerview.internal.api.requests.ShadeMove;
import org.openhab.binding.hdpowerview.internal.api.requests.ShadeStop;
import org.openhab.binding.hdpowerview.internal.api.responses.FirmwareVersion;
Expand Down Expand Up @@ -247,6 +248,22 @@ public ShadeData stopShade(int shadeId)
return shadeDataFromJson(jsonResponse);
}

/**
* Instructs the hub to jog a specific shade
*
* @param shadeId id of the shade to be jogged
* @return ShadeData class instance
* @throws HubInvalidResponseException if response is invalid
* @throws HubProcessingException if there is any processing error
* @throws HubMaintenanceException if the hub is down for maintenance
*/
public ShadeData jogShade(int shadeId)
throws HubInvalidResponseException, HubProcessingException, HubMaintenanceException {
String jsonRequest = gson.toJson(new ShadeJog());
String jsonResponse = invoke(HttpMethod.PUT, shades + Integer.toString(shadeId), null, jsonRequest);
return shadeDataFromJson(jsonResponse);
}

/**
* Instructs the hub to calibrate a specific shade
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2010-2022 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.hdpowerview.internal.api.requests;

import org.eclipse.jdt.annotation.NonNullByDefault;

/**
* A request to jog a shade for identification
*
* @author Jacob Laursen - Initial contribution
*/
@NonNullByDefault
public class ShadeJog {

public ShadeMotion shade;

public ShadeJog() {
this.shade = new ShadeMotion(ShadeMotion.Type.JOG);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class ShadeMotion {

public enum Type {
STOP("stop"),
JOG("jog"),
CALIBRATE("calibrate");

private String motion;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ private enum RefreshKind {
}

private static final String COMMAND_CALIBRATE = "CALIBRATE";
private static final String COMMAND_IDENTIFY = "IDENTIFY";

private final Logger logger = LoggerFactory.getLogger(HDPowerViewShadeHandler.class);
private final ShadeCapabilitiesDatabase db = new ShadeCapabilitiesDatabase();
Expand Down Expand Up @@ -226,7 +227,10 @@ private void handleShadeCommand(String channelId, Command command, HDPowerViewWe

case CHANNEL_SHADE_COMMAND:
if (command instanceof StringType) {
if (COMMAND_CALIBRATE.equals(((StringType) command).toString())) {
if (COMMAND_IDENTIFY.equals(((StringType) command).toString())) {
logger.debug("Identify shade {}", shadeId);
identifyShade(webTargets, shadeId);
} else if (COMMAND_CALIBRATE.equals(((StringType) command).toString())) {
logger.debug("Calibrate shade {}", shadeId);
calibrateShade(webTargets, shadeId);
}
Expand Down Expand Up @@ -447,6 +451,11 @@ private void stopShade(HDPowerViewWebTargets webTargets, int shadeId)
requestRefreshShadePosition();
}

private void identifyShade(HDPowerViewWebTargets webTargets, int shadeId)
throws HubInvalidResponseException, HubProcessingException, HubMaintenanceException {
updateShadePositions(webTargets.jogShade(shadeId));
}

private void calibrateShade(HDPowerViewWebTargets webTargets, int shadeId)
throws HubInvalidResponseException, HubProcessingException, HubMaintenanceException {
updateShadePositions(webTargets.calibrateShade(shadeId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ channel-type.hdpowerview.repeater-identify.description = Flash repeater to ident
channel-type.hdpowerview.repeater-identify.command.option.IDENTIFY = Identify
channel-type.hdpowerview.shade-command.label = Command
channel-type.hdpowerview.shade-command.description = Send a command to the shade
channel-type.hdpowerview.shade-command.command.option.IDENTIFY = Identify
channel-type.hdpowerview.shade-command.command.option.CALIBRATE = Calibrate
channel-type.hdpowerview.shade-position.label = Position
channel-type.hdpowerview.shade-position.description = The vertical position of the shade
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@
<description>Send a command to the shade</description>
<command>
<options>
<option value="IDENTIFY">Identify</option>
<option value="CALIBRATE">Calibrate</option>
</options>
</command>
Expand Down

0 comments on commit 415149a

Please sign in to comment.