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
+
+