From 858ff4b2441debe7f6286a92728ca805644747f7 Mon Sep 17 00:00:00 2001 From: Mark Hilbush Date: Wed, 11 Jan 2023 07:56:40 -0500 Subject: [PATCH] [squeezebox] Add new channels for additional tags (#14201) * New channels for additional tags Signed-off-by: Mark Hilbush --- .../org.openhab.binding.squeezebox/README.md | 5 +++ .../internal/SqueezeBoxBindingConstants.java | 5 +++ .../SqueezeBoxPlayerDiscoveryParticipant.java | 20 +++++++++++ .../SqueezeBoxNotificationListener.java | 20 +++++++++++ .../SqueezeBoxPlayerEventListener.java | 10 ++++++ .../handler/SqueezeBoxPlayerHandler.java | 25 +++++++++++++ .../handler/SqueezeBoxServerHandler.java | 35 +++++++++++++++++-- .../resources/OH-INF/thing/thing-types.xml | 35 +++++++++++++++++++ 8 files changed, 153 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.squeezebox/README.md b/bundles/org.openhab.binding.squeezebox/README.md index 6f147252b..0d374bd4e 100644 --- a/bundles/org.openhab.binding.squeezebox/README.md +++ b/bundles/org.openhab.binding.squeezebox/README.md @@ -115,6 +115,11 @@ All devices support some of the following channels: | artist | String | Artist name of the current song | | year | String | Release year of the current song | | genre | String | Genre name of the current song | +| albumArtist | String | Main artist of the entire album | +| trackArtist | String | Main artist of the track | +| band | String | Band/orchestra that performed the work | +| composer | String | Original composer of the work | +| conductor | String | Person who conducted the performance | | coverartdata | Image | Image data of cover art of the current song | | ircode | String | Received IR code | | numberPlaylistTracks | Number | Number of playlist tracks | 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 da8b51447..f1b5e6bdd 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 @@ -59,6 +59,11 @@ public class SqueezeBoxBindingConstants { public static final String CHANNEL_ARTIST = "artist"; public static final String CHANNEL_YEAR = "year"; public static final String CHANNEL_GENRE = "genre"; + public static final String CHANNEL_ALBUM_ARTIST = "albumArtist"; + public static final String CHANNEL_TRACK_ARTIST = "trackArtist"; + public static final String CHANNEL_BAND = "band"; + public static final String CHANNEL_COMPOSER = "composer"; + public static final String CHANNEL_CONDUCTOR = "conductor"; public static final String CHANNEL_COVERART_DATA = "coverartdata"; public static final String CHANNEL_IRCODE = "ircode"; public static final String CHANNEL_IP = "ip"; diff --git a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/discovery/SqueezeBoxPlayerDiscoveryParticipant.java b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/discovery/SqueezeBoxPlayerDiscoveryParticipant.java index 1e095cad4..c831fe256 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/discovery/SqueezeBoxPlayerDiscoveryParticipant.java +++ b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/discovery/SqueezeBoxPlayerDiscoveryParticipant.java @@ -191,6 +191,26 @@ public class SqueezeBoxPlayerDiscoveryParticipant extends AbstractDiscoveryServi public void genreChangeEvent(String mac, String genre) { } + @Override + public void albumArtistChangeEvent(String mac, String albumArtist) { + } + + @Override + public void trackArtistChangeEvent(String mac, String trackArtist) { + } + + @Override + public void bandChangeEvent(String mac, String band) { + } + + @Override + public void composerChangeEvent(String mac, String composer) { + } + + @Override + public void conductorChangeEvent(String mac, String conductor) { + } + @Override public void remoteTitleChangeEvent(String mac, String title) { } diff --git a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxNotificationListener.java b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxNotificationListener.java index da9d356bf..d75bca01e 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxNotificationListener.java +++ b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxNotificationListener.java @@ -201,6 +201,26 @@ public final class SqueezeBoxNotificationListener implements SqueezeBoxPlayerEve public void genreChangeEvent(String mac, String genre) { } + @Override + public void albumArtistChangeEvent(String mac, String albumArtist) { + } + + @Override + public void trackArtistChangeEvent(String mac, String trackArtist) { + } + + @Override + public void bandChangeEvent(String mac, String band) { + } + + @Override + public void composerChangeEvent(String mac, String composer) { + } + + @Override + public void conductorChangeEvent(String mac, String conductor) { + } + @Override public void remoteTitleChangeEvent(String mac, String title) { } diff --git a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerEventListener.java b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerEventListener.java index 50735f6b9..4e9044331 100644 --- a/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerEventListener.java +++ b/bundles/org.openhab.binding.squeezebox/src/main/java/org/openhab/binding/squeezebox/internal/handler/SqueezeBoxPlayerEventListener.java @@ -73,6 +73,16 @@ public interface SqueezeBoxPlayerEventListener { void genreChangeEvent(String mac, String genre); + void albumArtistChangeEvent(String mac, String albumArtist); + + void trackArtistChangeEvent(String mac, String trackArtist); + + void bandChangeEvent(String mac, String band); + + void composerChangeEvent(String mac, String composer); + + void conductorChangeEvent(String mac, String conductor); + void remoteTitleChangeEvent(String mac, String title); void irCodeChangeEvent(String mac, String ircode); 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 9e5e25115..217544e3a 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 @@ -436,6 +436,31 @@ public class SqueezeBoxPlayerHandler extends BaseThingHandler implements Squeeze updateChannel(mac, CHANNEL_ARTIST, new StringType(artist)); } + @Override + public void albumArtistChangeEvent(String mac, String albumArtist) { + updateChannel(mac, CHANNEL_ALBUM_ARTIST, new StringType(albumArtist)); + } + + @Override + public void trackArtistChangeEvent(String mac, String trackArtist) { + updateChannel(mac, CHANNEL_TRACK_ARTIST, new StringType(trackArtist)); + } + + @Override + public void bandChangeEvent(String mac, String band) { + updateChannel(mac, CHANNEL_BAND, new StringType(band)); + } + + @Override + public void composerChangeEvent(String mac, String composer) { + updateChannel(mac, CHANNEL_COMPOSER, new StringType(composer)); + } + + @Override + public void conductorChangeEvent(String mac, String conductor) { + updateChannel(mac, CHANNEL_CONDUCTOR, new StringType(conductor)); + } + @Override public void coverArtChangeEvent(String mac, String coverArtUrl) { updateChannel(mac, CHANNEL_COVERART_DATA, createImage(downloadImage(mac, coverArtUrl))); 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 ae2aa2896..3fc0ac895 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 @@ -576,7 +576,7 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler { players.put(macAddress, player); updatePlayer(listener -> listener.playerAdded(player)); // tell the server we want to subscribe to player updates - sendCommand(player.macAddress + " status - 1 subscribe:10 tags:yagJlNKjc"); + sendCommand(player.macAddress + " status - 1 subscribe:10 tags:yagJlNKjcA"); } } for (final SqueezeBoxPlayer player : players.values()) { @@ -674,7 +674,8 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler { } private void handleStatusMessage(final String mac, String[] messageParts) { - String remoteTitle = "", artist = "", album = "", genre = "", year = ""; + String remoteTitle = "", artist = "", album = "", genre = "", year = "", albumArtist = "", trackArtist = "", + band = "", composer = "", conductor = ""; boolean coverart = false; String coverid = null; String artworkUrl = null; @@ -745,6 +746,26 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler { else if ("genre".equals(entry.key)) { genre = entry.value; } + // Parameter Album Artist + else if ("albumartist".equals(entry.key)) { + albumArtist = entry.value; + } + // Parameter Track Artist + else if ("trackartist".equals(entry.key)) { + trackArtist = entry.value; + } + // Parameter Band + else if ("band".equals(entry.key)) { + band = entry.value; + } + // Parameter Composer + else if ("composer".equals(entry.key)) { + composer = entry.value; + } + // Parameter Conductor + else if ("conductor".equals(entry.key)) { + conductor = entry.value; + } // Parameter Year else if ("year".equals(entry.key)) { year = entry.value; @@ -776,6 +797,11 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler { final String finalAlbum = album; final String finalGenre = genre; final String finalYear = year; + final String finalAlbumArtist = albumArtist; + final String finalTrackArtist = trackArtist; + final String finalBand = band; + final String finalComposer = composer; + final String finalConductor = conductor; updatePlayer(listener -> { listener.coverArtChangeEvent(mac, finalUrl); @@ -784,6 +810,11 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler { listener.albumChangeEvent(mac, finalAlbum); listener.genreChangeEvent(mac, finalGenre); listener.yearChangeEvent(mac, finalYear); + listener.albumArtistChangeEvent(mac, finalAlbumArtist); + listener.trackArtistChangeEvent(mac, finalTrackArtist); + listener.bandChangeEvent(mac, finalBand); + listener.composerChangeEvent(mac, finalComposer); + listener.conductorChangeEvent(mac, finalConductor); }); } 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 ea22fe691..b381f5138 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 @@ -79,6 +79,11 @@ + + + + + @@ -282,6 +287,36 @@ Genre name of the current song + + String + + Main artist for the album + + + + String + + Main artist for the track + + + + String + + Band/orchestra performing the work + + + + String + + Original composer of the work + + + + String + + Conductor + + Image