diff --git a/bundles/org.openhab.binding.kaleidescape/README.md b/bundles/org.openhab.binding.kaleidescape/README.md
index 523f4a0d593..2849d66a26d 100644
--- a/bundles/org.openhab.binding.kaleidescape/README.md
+++ b/bundles/org.openhab.binding.kaleidescape/README.md
@@ -71,6 +71,7 @@ The following channels are available:
| ui#title_num | Number | The current movie title number that is playing |
| ui#title_length | Number:Time | The total running time of the currently playing movie (seconds) |
| ui#title_loc | Number:Time | The running time elapsed of the currently playing movie (seconds) |
+| ui#endtime | DateTime | The date/time when the currently playing movie will end (timestamp) |
| ui#chapter_num | Number | The current chapter number of the movie that is playing |
| ui#chapter_length | Number:Time | The total running time of the current chapter (seconds) |
| ui#chapter_loc | Number:Time | The running time elapsed of the current chapter |
@@ -105,6 +106,7 @@ The following channels are available:
| music#track | String | The name of the currently playing track |
| music#artist | String | The name of the currently playing artist |
| music#album | String | The name of the currently playing album |
+| music#title | String | The raw output from the MUSIC_TITLE api response for use in rules that require track, artist and album changes in one update |
| music#play_mode | String | The current playback mode of the music |
| music#play_speed | String | The speed of playback scanning |
| music#track_length | Number:Time | The total running time of the current playing track (seconds) |
@@ -162,6 +164,7 @@ String z1_Ui_PlaySpeed "Play Speed: [%s]" { channel="kaleidescape:player:myzone1
Number z1_Ui_TitleNum "Title Number: [%s]" { channel="kaleidescape:player:myzone1:ui#title_num" }
Number:Time z1_Ui_TitleLength "Title Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#title_length" }
Number:Time z1_Ui_TitleLoc "Title Location: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#title_loc" }
+DateTime z1_Ui_TitleEndTime "Title End Time: [%s]" { channel="kaleidescape:player:myzone1:ui#endtime" }
Number z1_Ui_ChapterNum "Chapter Number: [%s]" { channel="kaleidescape:player:myzone1:ui#chapter_num" }
Number:Time z1_Ui_ChapterLength "Chapter Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#chapter_length" }
Number:Time z1_Ui_ChapterLoc "Chapter Location: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#chapter_loc" }
@@ -203,6 +206,7 @@ String z1_Music_PlaySpeed "Play Speed: [%s]" { channel="kaleidescape:player:myzo
Number:Time z1_Music_TrackLength "Track Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:music#track_length" }
Number:Time z1_Music_TrackPosition "Track Position: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:music#track_position" }
Number z1_Music_TrackProgress "Track Progress: [%s %%]" { channel="kaleidescape:player:myzone1:music#track_progress" }
+String z1_Music_Title "Music Title Raw: [%s]" { channel="kaleidescape:player:myzone1:music#title" }
String z1_Music_TrackHandle "Track Handle: [%s]" { channel="kaleidescape:player:myzone1:music#track_handle" }
String z1_Music_AlbumHandle "Album Handle: [%s]" { channel="kaleidescape:player:myzone1:music#album_handle" }
String z1_Music_NowplayHandle "Now Playing Handle: [%s]" { channel="kaleidescape:player:myzone1:music#nowplay_handle" }
@@ -291,6 +295,7 @@ sitemap kaleidescape label="Kaleidescape" {
Text item=z1_Ui_TitleNum icon="video"
Text item=z1_Ui_TitleLength icon="time"
Text item=z1_Ui_TitleLoc icon="time"
+ Text item=z1_Ui_TitleEndTime icon="time"
Text item=z1_Ui_MovieMediaType icon="colorwheel"
Text item=z1_Ui_ChapterNum icon="video"
Text item=z1_Ui_ChapterLength icon="time"
@@ -334,6 +339,7 @@ sitemap kaleidescape label="Kaleidescape" {
Text item=z1_Music_TrackLength icon="time"
Text item=z1_Music_TrackPosition icon="time"
Text item=z1_Music_TrackProgress icon="time"
+ Text item=z1_Music_Title icon="zoom"
Text item=z1_Music_TrackHandle icon="zoom"
Text item=z1_Music_AlbumHandle icon="zoom"
Text item=z1_Music_NowplayHandle icon="zoom"
diff --git a/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/KaleidescapeBindingConstants.java b/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/KaleidescapeBindingConstants.java
index f6874fd59ac..0cb77410235 100644
--- a/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/KaleidescapeBindingConstants.java
+++ b/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/KaleidescapeBindingConstants.java
@@ -56,6 +56,7 @@ public class KaleidescapeBindingConstants {
public static final String TITLE_NUM = "ui#title_num";
public static final String TITLE_LENGTH = "ui#title_length";
public static final String TITLE_LOC = "ui#title_loc";
+ public static final String ENDTIME = "ui#endtime";
public static final String CHAPTER_NUM = "ui#chapter_num";
public static final String CHAPTER_LENGTH = "ui#chapter_length";
public static final String CHAPTER_LOC = "ui#chapter_loc";
@@ -91,6 +92,7 @@ public class KaleidescapeBindingConstants {
public static final String MUSIC_TRACK = "music#track";
public static final String MUSIC_ARTIST = "music#artist";
public static final String MUSIC_ALBUM = "music#album";
+ public static final String MUSIC_TITLE_RAW = "music#title";
public static final String MUSIC_PLAY_MODE = "music#play_mode";
public static final String MUSIC_PLAY_SPEED = "music#play_speed";
public static final String MUSIC_TRACK_LENGTH = "music#track_length";
diff --git a/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeHandler.java b/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeHandler.java
index 72122cf8d12..55cf6e67c1a 100644
--- a/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeHandler.java
+++ b/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeHandler.java
@@ -500,6 +500,7 @@ public class KaleidescapeHandler extends BaseThingHandler implements Kaleidescap
case TITLE_NUM:
case TITLE_LENGTH:
case TITLE_LOC:
+ case ENDTIME:
case CHAPTER_NUM:
case CHAPTER_LENGTH:
case CHAPTER_LOC:
@@ -565,6 +566,7 @@ public class KaleidescapeHandler extends BaseThingHandler implements Kaleidescap
case MUSIC_TRACK:
case MUSIC_ARTIST:
case MUSIC_ALBUM:
+ case MUSIC_TITLE_RAW:
case MUSIC_TRACK_HANDLE:
case MUSIC_ALBUM_HANDLE:
case MUSIC_NOWPLAY_HANDLE:
diff --git a/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeMessageHandler.java b/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeMessageHandler.java
index 95119b780d9..68afa5c0751 100644
--- a/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeMessageHandler.java
+++ b/bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeMessageHandler.java
@@ -17,6 +17,7 @@ import static org.eclipse.jetty.http.HttpStatus.OK_200;
import static org.openhab.binding.kaleidescape.internal.KaleidescapeBindingConstants.*;
import java.math.BigDecimal;
+import java.time.ZonedDateTime;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -29,6 +30,7 @@ import org.openhab.binding.kaleidescape.internal.KaleidescapeBindingConstants;
import org.openhab.binding.kaleidescape.internal.KaleidescapeException;
import org.openhab.binding.kaleidescape.internal.communication.KaleidescapeFormatter;
import org.openhab.binding.kaleidescape.internal.communication.KaleidescapeStatusCodes;
+import org.openhab.core.library.types.DateTimeType;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.PercentType;
@@ -116,11 +118,15 @@ public enum KaleidescapeMessageHandler {
handler.updateChannel(TITLE_NUM, new DecimalType(Integer.parseInt(matcher.group(3))));
- handler.updateChannel(TITLE_LENGTH,
- new QuantityType<>(Integer.parseInt(matcher.group(4)), handler.apiSecondUnit));
+ final int titleLength = Integer.parseInt(matcher.group(4));
+ final int titleLoc = Integer.parseInt(matcher.group(5));
- handler.updateChannel(TITLE_LOC,
- new QuantityType<>(Integer.parseInt(matcher.group(5)), handler.apiSecondUnit));
+ handler.updateChannel(TITLE_LENGTH, new QuantityType<>(titleLength, handler.apiSecondUnit));
+
+ handler.updateChannel(TITLE_LOC, new QuantityType<>(titleLoc, handler.apiSecondUnit));
+
+ handler.updateChannel(ENDTIME, titleLength < 1 ? UnDefType.UNDEF
+ : new DateTimeType(ZonedDateTime.now().plusSeconds(titleLength - titleLoc)));
handler.updateChannel(CHAPTER_NUM, new DecimalType(Integer.parseInt(matcher.group(6))));
@@ -270,6 +276,10 @@ public enum KaleidescapeMessageHandler {
// first replace delimited : in track/artist/album name with ||, fix it later in formatString()
Matcher matcher = p.matcher(message.replace("\\:", "||"));
if (matcher.find()) {
+ // if not an empty message, the colon delimiters in raw MUSIC_TITLE message are changed to pipe
+ handler.updateChannel(MUSIC_TITLE_RAW, ":::::".equals(matcher.group(0)) ? UnDefType.NULL
+ : new StringType(KaleidescapeFormatter.formatString(matcher.group(0).replace(":", "|"))));
+
handler.updateChannel(MUSIC_TRACK,
new StringType(KaleidescapeFormatter.formatString(matcher.group(1))));
diff --git a/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/i18n/kaleidescape.properties b/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/i18n/kaleidescape.properties
index ecd06216239..abc44652c82 100644
--- a/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/i18n/kaleidescape.properties
+++ b/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/i18n/kaleidescape.properties
@@ -116,6 +116,8 @@ channel-type.kaleidescape.directors.label = Directors
channel-type.kaleidescape.directors.description = A list of directors of the selected Movie
channel-type.kaleidescape.disc_location.label = Disc Location
channel-type.kaleidescape.disc_location.description = Indicates where the disc for the selected item is currently residing in the system (ie Vault, Tray, etc.)
+channel-type.kaleidescape.endtime.label = Title End Time
+channel-type.kaleidescape.endtime.description = The date/time when the currently playing movie will end
channel-type.kaleidescape.genres.label = Genres
channel-type.kaleidescape.genres.description = A list of genres of the selected item
channel-type.kaleidescape.highlighted_selection.label = Highlighted Selection
@@ -138,6 +140,8 @@ channel-type.kaleidescape.music_play_mode.label = Play Mode
channel-type.kaleidescape.music_play_mode.description = The current playback mode of the music
channel-type.kaleidescape.music_play_speed.label = Play Speed
channel-type.kaleidescape.music_play_speed.description = The speed of playback scanning
+channel-type.kaleidescape.music_title.label = Music Title
+channel-type.kaleidescape.music_title.description = The raw output from the MUSIC_TITLE api response
channel-type.kaleidescape.nowplay_handle.label = Now Playing Handle
channel-type.kaleidescape.nowplay_handle.description = The handle of the current now playing list
channel-type.kaleidescape.random.label = Random
diff --git a/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/thing/channels.xml b/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/thing/channels.xml
index f0fb0586f9b..4664cb7e729 100644
--- a/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/thing/channels.xml
+++ b/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/thing/channels.xml
@@ -33,7 +33,7 @@
unknownunknownunknown
- 1
+ 2
@@ -68,7 +68,7 @@
unknownunknownunknown
- 1
+ 2
@@ -99,7 +99,7 @@
unknownunknownunknown
- 1
+ 2
@@ -130,7 +130,7 @@
unknownunknownunknown
- 1
+ 2
@@ -150,6 +150,7 @@
+
@@ -190,6 +191,7 @@
+
@@ -229,6 +231,7 @@
+
@@ -267,6 +270,7 @@
+
@@ -376,6 +380,18 @@
+
+ DateTime
+
+ The date/time when the currently playing movie will end
+ Time
+
+ Status
+ Timestamp
+
+
+
+
Number
@@ -602,6 +618,13 @@
+
+ String
+
+ The raw output from the MUSIC_TITLE api response
+
+
+
String
diff --git a/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/update/instructions.xml b/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/update/instructions.xml
index 1a576ce589f..1d04f494dd1 100644
--- a/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/update/instructions.xml
+++ b/bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/update/instructions.xml
@@ -35,4 +35,42 @@
+
+
+
+ kaleidescape:endtime
+
+
+ kaleidescape:music_title
+
+
+
+
+
+
+
+ kaleidescape:endtime
+
+
+ kaleidescape:music_title
+
+
+
+
+
+
+
+ kaleidescape:endtime
+
+
+
+
+
+
+
+ kaleidescape:endtime
+
+
+
+