From 2d54475d52750f3263cbf785e3a753c57af8820d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Iske?= Date: Thu, 11 Jan 2024 23:43:54 +0100 Subject: [PATCH] Added support for IKEA Symfonisk remote gen2 #1724 --- admin/img/ikea_symfonisk_remote_gen2.png | Bin 0 -> 36979 bytes admin/img/next_track.png | Bin 0 -> 286 bytes admin/img/play_pause.png | Bin 0 -> 313 bytes admin/img/previous_track.png | Bin 0 -> 274 bytes lib/devices.js | 8 + lib/states.js | 196 ++++++++++++++++++++++- 6 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 admin/img/ikea_symfonisk_remote_gen2.png create mode 100644 admin/img/next_track.png create mode 100644 admin/img/play_pause.png create mode 100644 admin/img/previous_track.png diff --git a/admin/img/ikea_symfonisk_remote_gen2.png b/admin/img/ikea_symfonisk_remote_gen2.png new file mode 100644 index 0000000000000000000000000000000000000000..c617c8cd25b77f6ca7aa7c1ffedd75c307f4befa GIT binary patch literal 36979 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 Ef_2v{R{#J2 literal 0 HcmV?d00001 diff --git a/admin/img/next_track.png b/admin/img/next_track.png new file mode 100644 index 0000000000000000000000000000000000000000..91b307dab50252398faad9f6ac9e076bf8f94239 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zG7x6;t5)LxG9*h}BT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq647Dw^%-;uvDl zd-U>IP9{T%mWS+ntF8(CS?R>Rfp`73MAlmk8KzOK3s@^YtIL&zhu`GQv#~H>QG3#= zKl1~7ZsE~oGJOW_|G5wFD#p*Zdis#nyF|GmpeR+M;26`~5Qm4%X&K9zxZWH7WEChl z{zdr0su_mM1a5a!wilk_I63{s56S*G*QkZz=Gn3d8mm7k6m1AdojN;1`M1yOkOQ;j Yp3X^m*(6=02XrQbr>mdKI;Vst0D;eB3jhEB literal 0 HcmV?d00001 diff --git a/admin/img/play_pause.png b/admin/img/play_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..c951ea84123f3ce5ca67106dcbb7cf08a953beb2 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9EAuR)mchE_B$P*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprT`*E{-7E9Q`QI zCVHtO;>Jt7v*15Ey<42;%2uNj#7 zD%LZ5oNq5qC}(7P_UOerhTb^~Hkmkl-XAHt;Sfjro~A|WHM@QoYP)Px#%t=H+R5(wi(?3oEQ4q)R&w`!Qg5dzt!U?3321=u}YR3@>;R4>mSV$!$+ykxv zhd^DDeaX6E`Lp}FH<{me<~MI%q~wVb{Rf`#h2bU40N9~|A5>2OT6n+$>j3yoi9#&P zsmFmSUU7vDZqEVKFvbYi8ESM4u($FO+nS)6V=EVMk9TxV%;O-S9}DNmn?;&=5HP@Z z8Nj}BH?hzzVj;9%YKZB=g`Y9o{Y|n+Z^RRDa(mq*O-T;wxdqWPEm Y2M9(Y5s;rYp8x;=07*qoM6N<$f~DVcZ~y=R literal 0 HcmV?d00001 diff --git a/lib/devices.js b/lib/devices.js index ca323495..5cacf6a8 100644 --- a/lib/devices.js +++ b/lib/devices.js @@ -1516,6 +1516,14 @@ const devices = [ states: [states.button_action_skip_back, states.button_action_skip_forward, states.action_play_pause, states.rotate_left, states.rotate_right, states.rotate_stop, states.battery], }, + { + models: ['E2123'], + icon: 'img/ikea_symfonisk_remote_gen2.png', + states: [states.battery, states.action_play_pause, states.action_track_previous, states.action_track_next, + states.action_volume_up, states.action_volume_down, states.action_volume_up_hold, states.action_volume_down_hold, + states.action_dots_1_initial_press, states.action_dots_2_initial_press, states.action_dots_1_long_press, states.action_dots_2_long_press, states.action_dots_1_short_release, + states.action_dots_2_short_release, states.action_dots_1_long_release, states.action_dots_2_long_release, states.action_dots_1_double_press, states.action_dots_2_double_press], + }, // Hive { models: ['HALIGHTDIMWWE27'], diff --git a/lib/states.js b/lib/states.js index 6e0b9bd4..f4b6eb9f 100644 --- a/lib/states.js +++ b/lib/states.js @@ -1035,8 +1035,8 @@ const states = { action_play_pause: { id: 'button_play_pause', prop: 'action', - name: 'Play/Pause Button', - icon: undefined, + name: 'Play/Pause button', + icon: 'img/play_pause.png', role: 'button', write: false, read: true, @@ -1044,6 +1044,198 @@ const states = { isEvent: true, getter: payload => (payload.action === 'play_pause') ? true : undefined, }, + action_track_previous: { + id: 'button_track_previous', + prop: 'action', + name: 'Previous track button', + icon: 'img/previous_track.png', + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'track_previous') ? true : undefined, + }, + action_track_next: { + id: 'button_track_next', + prop: 'action', + name: 'Next track button', + icon: 'img/next_track.png', + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'track_next') ? true : undefined, + }, + action_volume_up: { + id: 'button_volume_up', + prop: 'action', + name: 'Volume up button', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'volume_up') ? true : undefined, + }, + action_volume_down: { + id: 'button_volume_down', + prop: 'action', + name: 'Volume down button', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'volume_down') ? true : undefined, + }, + action_volume_up_hold: { + id: 'button_volume_up_hold', + prop: 'action', + name: 'Volume up button hold', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'volume_up_hold') ? true : undefined, + }, + action_volume_down_hold: { + id: 'button_volume_down_hold', + prop: 'action', + name: 'Volume down button hold', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'volume_down_hold') ? true : undefined, + }, + action_dots_1_initial_press: { + id: 'button_dots_1_initial_pressd', + prop: 'action', + name: 'Dot1 button press init', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_1_initial_press') ? true : undefined, + }, + action_dots_1_long_press: { + id: 'button_dots_1_long_press', + prop: 'action', + name: 'Dot1 button long press', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: false, + getter: payload => (payload.action === 'dots_1_long_press') ? true : (payload.action === 'dots_1_long_release') ? false : undefined, + }, + action_dots_1_short_release: { + id: 'dots_1_short_release', + prop: 'action', + name: 'Dot1 button short release', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_1_short_release') ? true : undefined, + }, + action_dots_1_long_release: { + id: 'dots_1_long_release', + prop: 'action', + name: 'Dot1 button long release', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_1_long_release') ? true : undefined, + }, + action_dots_1_double_press: { + id: 'dots_1_double_press', + prop: 'action', + name: 'Dot1 button double press', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_1_double_press') ? true : undefined, + }, + action_dots_2_initial_press: { + id: 'button_dots_2_initial_press', + prop: 'action', + name: 'Dot2 button press init', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_2_initial_press') ? true : undefined, + }, + action_dots_2_long_press: { + id: 'button_dots_2_long_press', + prop: 'action', + name: 'Dot2 button long press', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: false, + getter: payload => (payload.action === 'dots_2_long_press') ? true : (payload.action === 'dots_2_long_release') ? false : undefined, + }, + action_dots_2_short_release: { + id: 'dots_2_short_release', + prop: 'action', + name: 'Dot2 button short release', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_2_short_release') ? true : undefined, + }, + action_dots_2_long_release: { + id: 'dots_2_long_release', + prop: 'action', + name: 'Dot2 button long release', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_2_long_release') ? true : undefined, + }, + action_dots_2_double_press: { + id: 'dots_2_double_press', + prop: 'action', + name: 'Dot2 button double press', + icon: undefined, + role: 'button', + write: false, + read: true, + type: 'boolean', + isEvent: true, + getter: payload => (payload.action === 'dots_2_double_press') ? true : undefined, + }, load_power: { id: 'load_power', prop: 'power',