From e28769eb45354f01ff80e2e66416c9e2b1eb30ff Mon Sep 17 00:00:00 2001 From: Thomas Lauterbach Date: Sun, 5 Jan 2025 14:58:01 +0100 Subject: [PATCH] add channels for sounds to bridge Signed-off-by: Thomas Lauterbach --- .../internal/AwtrixLightBindingConstants.java | 5 +- .../internal/action/AwtrixActions.java | 18 +++++ .../handler/AwtrixLightBridgeHandler.java | 77 ++++--------------- .../resources/OH-INF/thing/thing-types.xml | 23 ++++++ .../OH-INF/update/bridge-updates.xml | 17 ++++ 5 files changed, 76 insertions(+), 64 deletions(-) create mode 100644 bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/update/bridge-updates.xml diff --git a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/AwtrixLightBindingConstants.java b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/AwtrixLightBindingConstants.java index 5a3b69713ac4f..3fe091f7ed585 100644 --- a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/AwtrixLightBindingConstants.java +++ b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/AwtrixLightBindingConstants.java @@ -65,6 +65,7 @@ public class AwtrixLightBindingConstants { public static final String TOPIC_NOTIFY = "/notify"; public static final String TOPIC_POWER = "/power"; public static final String TOPIC_REBOOT = "/reboot"; + public static final String TOPIC_RTTTL = "/rtttl"; public static final String TOPIC_SCREEN = "/screen"; public static final String TOPIC_SEND_SCREEN = "/sendscreen"; public static final String TOPIC_SETTINGS = "/settings"; @@ -106,8 +107,6 @@ public class AwtrixLightBindingConstants { public static final String FIELD_BRIDGE_SET_BLOCK_KEYS = "BLOCKN"; public static final String FIELD_BRIDGE_SET_BRIGHTNESS = "BRI"; public static final String FIELD_BRIDGE_SET_DISPLAY = "MATP"; - - // TODO: Validate that it really mutes public static final String FIELD_BRIDGE_SET_MUTE = "SOUND"; public static final String FIELD_BRIDGE_SET_SCROLL_SPEED = "SSPEED"; public static final String FIELD_BRIDGE_SET_TEXT_COLOR = "TCOL"; @@ -136,7 +135,9 @@ public class AwtrixLightBindingConstants { public static final String CHANNEL_LOW_BATTERY = "low-battery"; public static final String CHANNEL_LUX = "lux"; public static final String CHANNEL_RSSI = "rssi"; + public static final String CHANNEL_RTTTL = "rtttl"; public static final String CHANNEL_SCREEN = "screen"; + public static final String CHANNEL_SOUND = "sound"; public static final String CHANNEL_TEMPERATURE = "temperature"; // App Channels diff --git a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/action/AwtrixActions.java b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/action/AwtrixActions.java index 415ae32630d29..4b17fdb904aa8 100644 --- a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/action/AwtrixActions.java +++ b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/action/AwtrixActions.java @@ -175,6 +175,24 @@ public static void playSound(@Nullable ThingActions actions, @Nullable String me } } + @RuleAction(label = "Play RTTTL", description = "Plays the melody provided in RTTTL format") + public void playRtttl(String rtttl) { + AwtrixLightBridgeHandler localHandler = this.handler; + if (localHandler != null) { + localHandler.playRtttl(rtttl); + } + } + + public static void playRtttl(@Nullable ThingActions actions, @Nullable String rtttl) { + if (actions instanceof AwtrixActions) { + if (rtttl != null) { + ((AwtrixActions) actions).playRtttl(rtttl); + } + } else { + throw new IllegalArgumentException("Instance is not an AwtrixActions class."); + } + } + @RuleAction(label = "Show Notification", description = "Shows a default notification with an icon") public void showNotification(String message, String icon) { AwtrixLightBridgeHandler localHandler = this.handler; diff --git a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/handler/AwtrixLightBridgeHandler.java b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/handler/AwtrixLightBridgeHandler.java index ddeee4b566113..4b25c66e8159f 100644 --- a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/handler/AwtrixLightBridgeHandler.java +++ b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/java/org/openhab/binding/mqtt/awtrixlight/internal/handler/AwtrixLightBridgeHandler.java @@ -13,68 +13,7 @@ package org.openhab.binding.mqtt.awtrixlight.internal.handler; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_APP; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_AUTO_BRIGHTNESS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_BATTERY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_BRIGHTNESS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_BUTLEFT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_BUTRIGHT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_BUTSELECT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_DISPLAY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_HUMIDITY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_INDICATOR1; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_INDICATOR2; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_INDICATOR3; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_LOW_BATTERY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_LUX; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_RSSI; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_SCREEN; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.CHANNEL_TEMPERATURE; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.DEFAULT_APPS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_APP; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_BATTERY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_BATTERY_RAW; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_BRIGHTNESS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_FIRMWARE; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_HUMIDITY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_INDICATOR1; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_INDICATOR2; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_INDICATOR3; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_LDR_RAW; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_LUX; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_MATRIX; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_MESSAGES; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_RAM; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_SET_AUTO_BRIGHTNESS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_SET_AUTO_TRANSITION; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_SET_BLOCK_KEYS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_SET_BRIGHTNESS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_TEMPERATURE; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_TYPE; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_UID; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_UPTIME; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.FIELD_BRIDGE_WIFI_SIGNAL; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.PROP_FIRMWARE; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.PROP_UNIQUEID; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.PROP_VENDOR; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.THING_TYPE_BRIDGE; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_BUTLEFT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_BUTRIGHT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_BUTSELECT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_INDICATOR1; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_INDICATOR2; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_INDICATOR3; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_NOTIFY; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_POWER; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_REBOOT; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_SCREEN; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_SEND_SCREEN; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_SETTINGS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_SLEEP; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_SOUND; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_STATS; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_STATS_CURRENT_APP; -import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.TOPIC_UPGRADE; +import static org.openhab.binding.mqtt.awtrixlight.internal.AwtrixLightBindingConstants.*; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; @@ -214,6 +153,16 @@ public void handleCommand(ChannelUID channelUID, Command command) { } } break; + case CHANNEL_SOUND: + if (command instanceof StringType) { + playSound(command.toString()); + } + break; + case CHANNEL_RTTTL: + if (command instanceof StringType) { + playRtttl(command.toString()); + } + break; } } @@ -368,6 +317,10 @@ public void playSound(String melodyName) { this.sendMQTT(this.basetopic + TOPIC_SOUND, "{\"sound\":\"" + melodyName + "\"}", false); } + public void playRtttl(String rtttl) { + this.sendMQTT(this.basetopic + TOPIC_RTTTL, rtttl, false); + } + public void upgrade() { this.sendMQTT(this.basetopic + TOPIC_UPGRADE, "", false); } diff --git a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/thing/thing-types.xml index 89f49a22ef6d2..270e6a34499a8 100644 --- a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/thing/thing-types.xml @@ -31,11 +31,14 @@ + + + 1 uniqueId @@ -547,4 +550,24 @@ + + String + + Name of the melody file in the clocks MELODIES folder + text + + Point + + + + + String + + Ring Tone Text Transfer Language (RTTTL) compliant sound string + text + + Point + + + diff --git a/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/update/bridge-updates.xml b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/update/bridge-updates.xml new file mode 100644 index 0000000000000..4f861ea025e8c --- /dev/null +++ b/bundles/org.openhab.binding.mqtt.awtrixlight/src/main/resources/OH-INF/update/bridge-updates.xml @@ -0,0 +1,17 @@ + + + + + + + mqtt:sound + + + mqtt:rtttl + + + + +