diff --git a/bundles/org.openhab.binding.squeezebox/README.md b/bundles/org.openhab.binding.squeezebox/README.md index f54efad10e229..5f9da040347ab 100644 --- a/bundles/org.openhab.binding.squeezebox/README.md +++ b/bundles/org.openhab.binding.squeezebox/README.md @@ -119,6 +119,7 @@ All devices support some of the following channels: | numberPlaylistTracks | Number | Number of playlist tracks | | playFavorite | String | ID of Favorite to play (channel's state options contains available favorites) | | rate | Switch | "Like" or "unlike" the currently playing song (if supported by the streaming service) | +| sleep | Number | Power off the player in the specified number of minutes. Sending 0 cancels the timer | ## Example .Items File diff --git a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/SqueezeBoxBindingConstants.java b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/SqueezeBoxBindingConstants.java index 632797f280e2c..dcd9771772a9e 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/SqueezeBoxBindingConstants.java +++ b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/SqueezeBoxBindingConstants.java @@ -68,4 +68,5 @@ public class SqueezeBoxBindingConstants { public static final String CHANNEL_MODEL = "model"; public static final String CHANNEL_FAVORITES_PLAY = "playFavorite"; public static final String CHANNEL_RATE = "rate"; + public static final String CHANNEL_SLEEP = "sleep"; } diff --git a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerHandler.java b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerHandler.java index a29082516b334..aa02f8e479e93 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerHandler.java +++ b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerHandler.java @@ -16,6 +16,7 @@ import java.net.URI; import java.net.URISyntaxException; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -308,6 +309,16 @@ public void handleCommand(ChannelUID channelUID, Command command) { squeezeBoxServerHandler.rate(mac, unlikeCommand); } break; + case CHANNEL_SLEEP: + if (command instanceof DecimalType) { + Duration sleepDuration = Duration.ofMinutes(((DecimalType) command).longValue()); + if (sleepDuration.isNegative() || sleepDuration.compareTo(Duration.ofDays(1)) > 0) { + logger.debug("Sleep timer of {} minutes must be >= 0 and <= 1 day", sleepDuration.toMinutes()); + return; + } + squeezeBoxServerHandler.sleep(mac, sleepDuration); + } + break; default: break; } diff --git a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxServerHandler.java b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxServerHandler.java index fcc20b29a67a9..a8e8c1d92657b 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxServerHandler.java +++ b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxServerHandler.java @@ -301,6 +301,10 @@ public void rate(String mac, String rateCommand) { } } + public void sleep(String mac, Duration sleepDuration) { + sendCommand(mac + " sleep " + String.valueOf(sleepDuration.toSeconds())); + } + /** * Send a generic command to a given player * diff --git a/bundles/org.openhab.binding.squeezebox/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.squeezebox/src/main/resources/OH-INF/thing/thing-types.xml index 24816a8060e8f..d0e872e68d931 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.squeezebox/src/main/resources/OH-INF/thing/thing-types.xml @@ -84,6 +84,7 @@ + @@ -304,4 +305,10 @@ Likes or unlikes the current song (if the service supports it) + + Number + + Power off player in specified number of minutes + +