From 9af7ae8884b3b5da9db60f465e5ace1fd30ae9f0 Mon Sep 17 00:00:00 2001 From: Mark Hilbush Date: Thu, 25 Feb 2021 16:56:02 -0500 Subject: [PATCH] [squeezebox] Add sleep channel (#10196) Signed-off-by: Mark Hilbush --- bundles/org.openhab.binding.squeezebox/README.md | 1 + .../internal/SqueezeBoxBindingConstants.java | 1 + .../internal/handler/SqueezeBoxPlayerHandler.java | 11 +++++++++++ .../internal/handler/SqueezeBoxServerHandler.java | 4 ++++ .../src/main/resources/OH-INF/thing/thing-types.xml | 7 +++++++ 5 files changed, 24 insertions(+) diff --git a/bundles/org.openhab.binding.squeezebox/README.md b/bundles/org.openhab.binding.squeezebox/README.md index f54efad10e..5f9da04034 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 632797f280..dcd9771772 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 a29082516b..aa02f8e479 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 static org.openhab.binding.squeezebox.internal.SqueezeBoxBindingConstants 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 class SqueezeBoxPlayerHandler extends BaseThingHandler implements Squeeze 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 fcc20b29a6..a8e8c1d926 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 class SqueezeBoxServerHandler extends BaseBridgeHandler { } } + 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 24816a8060..d0e872e68d 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 + + -- 2.47.3