]> git.basschouten.com Git - openhab-addons.git/commitdiff
[kaleidescape] Add movie end time and music title channels (#17423)
authormlobstein <michael.lobstein@gmail.com>
Tue, 17 Sep 2024 17:25:04 +0000 (12:25 -0500)
committerGitHub <noreply@github.com>
Tue, 17 Sep 2024 17:25:04 +0000 (19:25 +0200)
* Add movie end time and music end title channels

Signed-off-by: Michael Lobstein <michael.lobstein@gmail.com>
bundles/org.openhab.binding.kaleidescape/README.md
bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/KaleidescapeBindingConstants.java
bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeHandler.java
bundles/org.openhab.binding.kaleidescape/src/main/java/org/openhab/binding/kaleidescape/internal/handler/KaleidescapeMessageHandler.java
bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/i18n/kaleidescape.properties
bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/thing/channels.xml
bundles/org.openhab.binding.kaleidescape/src/main/resources/OH-INF/update/instructions.xml

index 523f4a0d5939daf0b429b6144adc9b0a3a101e06..2849d66a26ddaaf3a3c17a06bbe1dfffa2b62bd8 100644 (file)
@@ -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"
index f6874fd59ac9eaccf8ad6cc829912cbb67c25994..0cb774102350f2ef598a4dff279bebfeede9b982 100644 (file)
@@ -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";
index 72122cf8d12301d28145993ea4f937b147874790..55cf6e67c1a0ab12ee3f349a693ca2dd0669f6b6 100644 (file)
@@ -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:
index 95119b780d9f1d7fab37d8fa39275d3a66bc84c6..68afa5c0751e861da0fa8f27853c8706f1616c70 100644 (file)
@@ -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_LENGTH, new QuantityType<>(titleLength, handler.apiSecondUnit));
 
-                handler.updateChannel(TITLE_LOC,
-                        new QuantityType<>(Integer.parseInt(matcher.group(5)), 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))));
 
index ecd062162392c65304b54157f22bf7437bfd0ab8..abc44652c8242eea6b90db6d46d5577ff63602b5 100644 (file)
@@ -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
index f0fb0586f9bff3983e50acd255d39388de2650a2..4664cb7e729f276294e24d601ef247a47c8af1f3 100644 (file)
@@ -33,7 +33,7 @@
                        <property name="Control Protocol ID">unknown</property>
                        <property name="System Version">unknown</property>
                        <property name="Protocol Version">unknown</property>
-                       <property name="thingTypeVersion">1</property>
+                       <property name="thingTypeVersion">2</property>
                </properties>
 
                <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
@@ -68,7 +68,7 @@
                        <property name="Control Protocol ID">unknown</property>
                        <property name="System Version">unknown</property>
                        <property name="Protocol Version">unknown</property>
-                       <property name="thingTypeVersion">1</property>
+                       <property name="thingTypeVersion">2</property>
                </properties>
 
                <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
@@ -99,7 +99,7 @@
                        <property name="Control Protocol ID">unknown</property>
                        <property name="System Version">unknown</property>
                        <property name="Protocol Version">unknown</property>
-                       <property name="thingTypeVersion">1</property>
+                       <property name="thingTypeVersion">2</property>
                </properties>
 
                <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
                        <property name="Control Protocol ID">unknown</property>
                        <property name="System Version">unknown</property>
                        <property name="Protocol Version">unknown</property>
-                       <property name="thingTypeVersion">1</property>
+                       <property name="thingTypeVersion">2</property>
                </properties>
 
                <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
                        <channel id="title_num" typeId="title_num"/>
                        <channel id="title_length" typeId="title_length"/>
                        <channel id="title_loc" typeId="title_loc"/>
+                       <channel id="endtime" typeId="endtime"/>
                        <channel id="chapter_num" typeId="chapter_num"/>
                        <channel id="chapter_length" typeId="chapter_length"/>
                        <channel id="chapter_loc" typeId="chapter_loc"/>
                        <channel id="title_num" typeId="title_num"/>
                        <channel id="title_length" typeId="title_length"/>
                        <channel id="title_loc" typeId="title_loc"/>
+                       <channel id="endtime" typeId="endtime"/>
                        <channel id="chapter_num" typeId="chapter_num"/>
                        <channel id="chapter_length" typeId="chapter_length"/>
                        <channel id="chapter_loc" typeId="chapter_loc"/>
                        <channel id="title_num" typeId="title_num"/>
                        <channel id="title_length" typeId="title_length"/>
                        <channel id="title_loc" typeId="title_loc"/>
+                       <channel id="endtime" typeId="endtime"/>
                        <channel id="chapter_num" typeId="chapter_num"/>
                        <channel id="chapter_length" typeId="chapter_length"/>
                        <channel id="chapter_loc" typeId="chapter_loc"/>
                        <channel id="track" typeId="track"/>
                        <channel id="artist" typeId="artist"/>
                        <channel id="album" typeId="album"/>
+                       <channel id="title" typeId="music_title"/>
                        <channel id="play_mode" typeId="music_play_mode"/>
                        <channel id="play_speed" typeId="music_play_speed"/>
                        <channel id="track_length" typeId="track_length"/>
                <state readOnly="true" pattern="%d %unit%"/>
        </channel-type>
 
+       <channel-type id="endtime">
+               <item-type>DateTime</item-type>
+               <label>Title End Time</label>
+               <description>The date/time when the currently playing movie will end</description>
+               <category>Time</category>
+               <tags>
+                       <tag>Status</tag>
+                       <tag>Timestamp</tag>
+               </tags>
+               <state readOnly="true"/>
+       </channel-type>
+
        <channel-type id="chapter_num">
                <item-type>Number</item-type>
                <label>Chapter Number</label>
                <state readOnly="true"/>
        </channel-type>
 
+       <channel-type id="music_title" advanced="true">
+               <item-type>String</item-type>
+               <label>Music Title</label>
+               <description>The raw output from the MUSIC_TITLE api response</description>
+               <state readOnly="true"/>
+       </channel-type>
+
        <channel-type id="music_play_mode">
                <item-type>String</item-type>
                <label>Play Mode</label>
index 1a576ce589fb628a9c4d02c3de90c1c009b8ee87..1d04f494dd1f850fd33bd37384791ec09623967b 100644 (file)
                </instruction-set>
        </thing-type>
 
+       <thing-type uid="kaleidescape:player">
+               <instruction-set targetVersion="2">
+                       <add-channel id="endtime" groupIds="ui">
+                               <type>kaleidescape:endtime</type>
+                       </add-channel>
+                       <add-channel id="title" groupIds="music">
+                               <type>kaleidescape:music_title</type>
+                       </add-channel>
+               </instruction-set>
+       </thing-type>
+
+       <thing-type uid="kaleidescape:cinemaone">
+               <instruction-set targetVersion="2">
+                       <add-channel id="endtime" groupIds="c1-alto_ui">
+                               <type>kaleidescape:endtime</type>
+                       </add-channel>
+                       <add-channel id="title" groupIds="music">
+                               <type>kaleidescape:music_title</type>
+                       </add-channel>
+               </instruction-set>
+       </thing-type>
+
+       <thing-type uid="kaleidescape:alto">
+               <instruction-set targetVersion="2">
+                       <add-channel id="endtime" groupIds="c1-alto_ui">
+                               <type>kaleidescape:endtime</type>
+                       </add-channel>
+               </instruction-set>
+       </thing-type>
+
+       <thing-type uid="kaleidescape:strato">
+               <instruction-set targetVersion="2">
+                       <add-channel id="endtime" groupIds="strato_ui">
+                               <type>kaleidescape:endtime</type>
+                       </add-channel>
+               </instruction-set>
+       </thing-type>
+
 </update:update-descriptions>