ioBroker.zigbee
ioBroker.zigbee copied to clipboard
SYMFONISK sound remote gen2
Hi,
I have some issues connecting/using the SYMFONISK gen2. Paring is fine but no objects for actions are created. The device is supported by Z2M - do I have to update the z2m "core", if so how it can be done?
Thank you in advance and BR
This is what I have for now
Same Problem here. I think it`s not already implementet yet. This model is really new so i think the devs had no time to implement.
also wit the new GIT verion ?
Yes, but is actually almost solved for me - will post a PR updating devices.js and states.js
Yes, but is actually almost solved for me - will post a PR updating devices.js and states.js
Did you already post that files?
No, but what we need is in devices.js
{
models: ['E2123'],
icon: 'img/ikea_SYMFONISK_Sound_Controller.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],
},
(yes the icon is the wrong one...)
and in states.js:
action_play_pause: {
id: 'button_play_pause',
prop: 'action',
name: 'Play/Pause Button',
icon: undefined,
role: 'button',
write: false,
read: true,
type: 'boolean',
isEvent: true,
getter: payload => (payload.action === 'play_pause') ? true : undefined,
},
action_track_previous: {
id: 'button_track_previous',
prop: 'action',
name: 'Track Previous Button',
icon: undefined,
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: 'Track Next Button',
icon: undefined,
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: 'dot_1 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: 'dot_1 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: 'dot_1 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: 'dot_1 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: 'dot_1 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_pressd',
prop: 'action',
name: 'dot_2 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: 'dot_2 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: 'dot_2 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: 'dot_2 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: 'dot_2 double press',
icon: undefined,
role: 'button',
write: false,
read: true,
type: 'boolean',
isEvent: true,
getter: payload => (payload.action === 'dots_2_double_press') ? true : undefined,
},
Update to current firmware is highly recommendated (as this enables the hold actions on dot buttons)
That didn`t work for me. Did you mean the devices.js in /opt/iobroker/node_modules/iobroker.zigbee/lib ? Only there i can found an devices.js an a states.js
Yes, but you need also the latest ikea.js file from zigbee2mqtt (sorry forgot to mention this point)
And of course after updating the files a restart of the instance and a reconnect of the device is needed
Thanks.....but where can i find it at zigbee2mqtt? Haven´t found there.
Herdmansconverter not Z2M shame on me... https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/devices/ikea.js
I just can't get it to connect the "SYMFONISK sound remote gen2" :( I'v deleted the existing remote from paired devices. I have replaced the files @Paalap posted in the folder /opt/iobroker/node_modules/iobroker.zigbee/lib
Additionally, I had replaced only the ikea.js in the /opt/iobroker/node_modules/zigbee-herdsman-converters/devices
But this led to errors when starting the zigbee adapter. So I deleted the whole folder "zigbee-herdsman-converters". Downloaded it from the current git-repo in version 15.36.0 and run npm-install in this directory. After this the iobroker zigbee adapter startet without problems.
Then I tried to pair the remote. But the behavior remains the same, I only see what @Paalap describes in the initial post. I have installed the adapter "iobroker.zigbee" in version 1.8.10.
Can someone help me please? Thanks a lot.
check new GIT version
Thanks for the tip. With the current version of GIT, I can get the remote to pair. However, the battery level and - most annoying - the toggle button do not work. All other buttons work (even the hold and double press actions of the dot buttons), but the toggle button does not change the object value and the battery value remains at (null) %.
When I press the toggle button on the remote, the value of "msg_from_zigbee" changes as follows:
{"type":"commandToggle","data":{},"linkquality":255,"groupID":null,"cluster":"genOnOff","meta":{"zclTransactionSequenceNumber":73,"manufacturerCode":null,"frameControl":{"frameType":1,"manufacturerSpecific":false,"direction":0,"disableDefaultResponse":true,"reservedBits":0}},"endpoint_id":1}
It seems that the value is transferred but not mapped properly to the associated object.
Using the command npm ls --depth=0
in the /opt/iobroker/node_modules/
directory, I was able to read the following versions:
+-- [email protected] (git+ssh://[email protected]/ioBroker/ioBroker.zigbee.git#f6b8a7524b615dfd889315ca16c38a46052094c2)
`-- [email protected]
I didn't add the additions to the devices.js / states.js files that @Paalap mentioned above, though. Do I still need to do this? Maybe this is also the reason why the play button of the remote does not work. There the state is also called "action_play_pause".
plz take this https://github.com/ioBroker/ioBroker.zigbee/wiki/debug-messages-with-zigbee.0.info.debugmessages
and press the button..i need the LOG
Here are the debug messages after pressing the toggle (play/pause) button on the remote control
zigbee.0 2023-07-20 10:48:31.771 debug Publish '{"action":"play_pause"}' devId '94deb8fffe9b40bc'
zigbee.0 2023-07-20 10:48:31.756 debug Type commandToggle device {"type":"device","device":{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":6,"_type":"EndDevice","_ieeeAddr":"0x94deb8fffe9b40bc","_networkAddress":25827,"_manufacturerID":4476,"_endpoints":[{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":1,"profileID":260,"deviceID":6,"inputClusters":[0,1,3,32,4096,64599],"outputClusters":[3,4,6,8,25,4096,64639],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{"genPowerCfg":{"attributes":{"batteryVoltage":31}}},"_binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1},{"cluster":8,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1},{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[{"cluster":1,"attrId":32,"minRepIntval":3600,"maxRepIntval":62000,"repChange":0}],"meta":{},"pendingRequests":{},"sendInProgress":false},{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":2,"inputClusters":[],"outputClusters":[],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{},"_binds":[{"cluster":64640,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[],"meta":{},"pendingRequests":{},"sendInProgress":false},{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":3,"inputClusters":[],"outputClusters":[],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{},"_binds":[{"cluster":64640,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[],"meta":{},"pendingRequests":{},"sendInProgress":false}],"_manufacturerName":"IKEA of Sweden","_powerSource":"Battery","_modelID":"SYMFONISK sound remote gen2","_applicationVersion":16,"_stackVersion":103,"_zclVersion":3,"_hardwareVersion":1,"_dateCode":"20230308","_softwareBuildID":"1.0.35","_interviewCompleted":false,"_interviewing":false,"_skipDefaultResponse":false,"_skipTimeResponse":false,"meta":{"configured":1847116505},"_lastSeen":1689842911754,"_defaultSendRequestWhen":"active","_checkinInterval":43200,"_pendingRequestTimeout":43200000,"_linkquality":255},"mapped":{"zigbeeModel":["SYMFONISK sound remote gen2"],"model":"E2123","vendor":"IKEA","description":"SYMFONISK sound remote gen2","fromZigbee":[{"cluster":"genPowerCfg","type":["attributeReport","readResponse"]},{"cluster":"genOnOff","type":"commandToggle","options":[{"type":"binary","name":"legacy","property":"legacy","access":2,"value_on":true,"value_off":false,"description":"Set to false to disable the legacy integration (highly recommended), will change structure of the published payload (default true)."}]},{"cluster":"genLevelCtrl","type":"commandStep"},{"cluster":"genLevelCtrl","type":"commandMoveWithOnOff"},{"cluster":"genLevelCtrl","type":"commandMove"},{"cluster":64639,"type":"raw"},{"cluster":"heimanSpecificScenes","type":"raw"}],"exposes":[{"type":"numeric","name":"battery","property":"battery","access":5,"unit":"%","description":"Remaining battery in %, can take up to 24 hours before reported.","value_min":0,"value_max":100},{"type":"enum","name":"action","property":"action","access":1,"values":["toggle","track_previous","track_next","volume_up","volume_down","volume_up_hold","volume_down_hold","dots_1_initial_press","dots_2_initial_press","dots_1_long_press","dots_2_long_press","dots_1_short_release","dots_2_short_release","dots_1_long_release","dots_2_long_release","dots_1_double_press","dots_2_double_press"],"description":"Triggered action (e.g. a button click)"},{"type":"numeric","name":"linkquality","property":"linkquality","access":1,"unit":"lqi","description":"Link quality (signal strength)","value_min":0,"value_max":255}],"toZigbee":[{"key":["battery"]},{"key":["scene_store"]},{"key":["scene_recall"]},{"key":["scene_add"]},{"key":["scene_remove"]},{"key":["scene_remove_all"]},{"key":["read"]},{"key":["write"]},{"key":["command"]},{"key":["reset"]}],"ota":{},"options":["[Circular]"]},"name":"0x94deb8fffe9b40bc"} incoming event: {"type":"commandToggle","device":{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":6,"_type":"EndDevice","_ieeeAddr":"0x94deb8fffe9b40bc","_networkAddress":25827,"_manufacturerID":4476,"_endpoints":[{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":1,"profileID":260,"deviceID":6,"inputClusters":[0,1,3,32,4096,64599],"outputClusters":[3,4,6,8,25,4096,64639],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{"genPowerCfg":{"attributes":{"batteryVoltage":31}}},"_binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1},{"cluster":8,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1},{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[{"cluster":1,"attrId":32,"minRepIntval":3600,"maxRepIntval":62000,"repChange":0}],"meta":{},"pendingRequests":{},"sendInProgress":false},{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":2,"inputClusters":[],"outputClusters":[],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{},"_binds":[{"cluster":64640,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[],"meta":{},"pendingRequests":{},"sendInProgress":false},{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":3,"inputClusters":[],"outputClusters":[],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{},"_binds":[{"cluster":64640,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[],"meta":{},"pendingRequests":{},"sendInProgress":false}],"_manufacturerName":"IKEA of Sweden","_powerSource":"Battery","_modelID":"SYMFONISK sound remote gen2","_applicationVersion":16,"_stackVersion":103,"_zclVersion":3,"_hardwareVersion":1,"_dateCode":"20230308","_softwareBuildID":"1.0.35","_interviewCompleted":false,"_interviewing":false,"_skipDefaultResponse":false,"_skipTimeResponse":false,"meta":{"configured":1847116505},"_lastSeen":1689842911754,"_defaultSendRequestWhen":"active","_checkinInterval":43200,"_pendingRequestTimeout":43200000,"_linkquality":255},"endpoint":"[Circular]","data":{},"linkquality":255,"groupID":null,"cluster":"genOnOff","meta":{"zclTransactionSequenceNumber":117,"manufacturerCode":null,"frameControl":{"frameType":1,"manufacturerSpecific":false,"direction":0,"disableDefaultResponse":true,"reservedBits":0}}}
zigbee.0 2023-07-20 10:48:31.756 debug Received Zigbee message from '0x94deb8fffe9b40bc', type 'commandToggle', cluster 'genOnOff', data '{}' from endpoint 1 with groupID null
zigbee.0 2023-07-20 10:48:31.755 debug handleMessage. {"type":"commandToggle","device":{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":6,"_type":"EndDevice","_ieeeAddr":"0x94deb8fffe9b40bc","_networkAddress":25827,"_manufacturerID":4476,"_endpoints":[{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":1,"profileID":260,"deviceID":6,"inputClusters":[0,1,3,32,4096,64599],"outputClusters":[3,4,6,8,25,4096,64639],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{"genPowerCfg":{"attributes":{"batteryVoltage":31}}},"_binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1},{"cluster":8,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1},{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[{"cluster":1,"attrId":32,"minRepIntval":3600,"maxRepIntval":62000,"repChange":0}],"meta":{},"pendingRequests":{},"sendInProgress":false},{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":2,"inputClusters":[],"outputClusters":[],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{},"_binds":[{"cluster":64640,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[],"meta":{},"pendingRequests":{},"sendInProgress":false},{"_events":{},"_eventsCount":0,"_maxListeners":100,"ID":3,"inputClusters":[],"outputClusters":[],"deviceNetworkAddress":25827,"deviceIeeeAddress":"0x94deb8fffe9b40bc","clusters":{},"_binds":[{"cluster":64640,"type":"endpoint","deviceIeeeAddress":"0x00212effff080f09","endpointID":1}],"_configuredReportings":[],"meta":{},"pendingRequests":{},"sendInProgress":false}],"_manufacturerName":"IKEA of Sweden","_powerSource":"Battery","_modelID":"SYMFONISK sound remote gen2","_applicationVersion":16,"_stackVersion":103,"_zclVersion":3,"_hardwareVersion":1,"_dateCode":"20230308","_softwareBuildID":"1.0.35","_interviewCompleted":false,"_interviewing":false,"_skipDefaultResponse":false,"_skipTimeResponse":false,"meta":{"configured":1847116505},"_lastSeen":1689842911754,"_defaultSendRequestWhen":"active","_checkinInterval":43200,"_pendingRequestTimeout":43200000,"_linkquality":255},"endpoint":"[Circular]","data":{},"linkquality":255,"groupID":null,"cluster":"genOnOff","meta":{"zclTransactionSequenceNumber":117,"manufacturerCode":null,"frameControl":{"frameType":1,"manufacturerSpecific":false,"direction":0,"disableDefaultResponse":true,"reservedBits":0}}}
As mentioned before, I did not modify the states.js / devices.js files any further. What I also noticed, since I updated the firmware of the remote to the latest version via OTA, double pressing the DOT button triggers both "dots_1_initial_press" and "dots_1_double_press". I think that the states "action_dots_1_short_release" are also needed, so that you can bind meaningful actions to the keys and do not have to wait whether after "initial_press" also "double_press" is triggered. The behavior was different with the old firmware of the remote.
For me (without my old adjustment) the volume hold is not released - there was a solution also in states.js in my old post
I am following here, just paired device without any problems, but I also have the Toggle button not working and Volume_HOLD staying on TRUE without jumping back to FALSE.
For me, it also only worked correctly with the changes @Paalap mentioned above. I have inserted these manually, deleted the device and paired again. We should put @Paalap changes in a PR.
@Paalap Could you please create a PR from your changes when you get a chance?
@Paalap Is this already implemented?
@Paalap Is this already implemented?
No, I'm not using iobroker anymore...
Thanks for the update. Is it possible to reopen the issue again for maybe @arteck to take a look at?
@Paalap Please reopen this issue because for the rest of us, this is still an existing problem. I will try to bring in a PR with the changes @Paalap proposed in the next days.
@ulimanaio I have added Paalap's change and created the PR as a draft. Could you please test the state that is in my repository fork? I can't find my SYMFONISK remote control at the moment. :D The state of my repository is the current master status of this repo + the changes discussed here
check version 1.10.0
Installierte Version: 1.10.1 Hi @arteck, muss ich etwas spezielles machen? Habe geupdated, das Gerät gelöscht und neu hinzugefügt. Leider klappt der Toggle nicht.
Ich hatte auch immer Probleme (siehe hier) mit dem Toggle Button ohne die Änderungen, die Paalap hier vorgeschlagen hat (also nur über direkt exposes). @ulimanaio könntest du mal bitte meine Version bei dir testen? Wenn bei dir damit alles klappt (was eigentlich so sein sollte, da das der Stand ist, der bei mir läuft und funktioniert), dann können wir den PR auf master bringen.
I also always had problems (see here) with the toggle button without the changes that Paalap suggested here ( so only via direct exposes). @ulimanaio could you please test my version on your system? If everything works for you (which should be the case, as this is the version that runs and works for me), then we can bring the PR to master.
@a-i-ks Vielen Dank. Mit deiner Repo klappt es wunderbar! :)
Auch die _hold states kann man meiner Meinung nach einfacher nutzen. Von mir aus sehr gerne in den Master bringen
@arteck The PR is ready for review and merge.
Edit: PR is now merged and this should be included in the next release version
Thank you for updating this remote! When can we expect the release?
Hi! I´m also looking forward to the new release including this bugfix. I`m really excited about the remote and the only thing that is missing is the toggle button. Thank you!