Hi,
sorry for my late response! I was quite busy the last weeks again. I looked a bit into your issue and the problem is due to the fact, that both plugins are using device-tree overlays.
For some reason (need to investigate) the IR plugin kills overlays that are installed by my plugin, which causes the error message.
I will try to look into it and catch the error to re-install the overlays. But this may take some time, since I am still quite packed with tasks at the moment.
Greetings, T.
no problem as long as you donāt turn it off it works fine.
Hi all,
driven by the effort of the Volumio Community to release the Bookworm version of Volumio I have taken some time to work on a Bookworm compatible version of the Plugin.
I did some significant improvements to how the plugin is working and fixed some weaknesses. The new version 2.0.0 which is now completely identical for both bookworm and buster is available on the beta channel.
Feel free to test it and let me know, if it does not work on your setups.
I did not address the issue with the IR plugin reported by michel8166 yet, but with the new structure, it should become easier to work on this soon.
Regards!
Hi Michel8166,
I did not yet work on your issue, but with version2.0.0 it might work already, if you activate the IR plugin first and then the rotary plugin, since it now does not remove all overlays anymore but add and removes only its own overlays.
However, if you deactivate the other plugin or activate it after the rotary plugin, things may still breakā¦
Let me know, if I am right.
Thank you for taking the time to update the Rotary Encoder. A few people have reported that the Rotary Encoder fails when using pin 17 (PinA) and pin 27 (PinB). Has this issue been addressed?
Hi @Wheaten,
seems that I missed that. But I would not see, why pin 17 and 27 would be a particular issue, since specification wise they are all the same. On my Bookworm Test-System I use those pins for the first rotary encoder of two without any issues (RPi5).
If you refer to this post that is solved, since onoff is no longer used.
I am not aware of any reliable method to determine, if a GPIO is in use by any other user, so if users are picking GPIOs, which are occupied by other system functions or hardware, it might be that there are issues. Also, as you know, many people do strange things with hardware.
However, on my own systems I found some timing issues, because the child-process installing the device tree overlays can return, before they are actually available (took me some time to figure out, since it did not reliably occur). I fixed that by monitoring the devices and only continue now, after they appear - that improved stability on my system significantly - may also fix other peoples issues.
Iām sorry but I donāt use the rotary encoder anymore.
@T0MR0
Sorry for not replying sooner.
Rotary encoder works without problems including 17/27
Thanks
Hi,
Iām running Rotary on Volumio V4 and it looks like WebSocket actions are no longer working.
I tested with:
Command: callMethod
Data: {"endpoint":"user_interface/randomizer","method":"randomTracks","data":[]}
Nothing happens.
The builtāin FusionDSP toggle also fails in the same way.
Could you check whether WebSocket handling in V4 needs an update, as it looks like the websocket isnāt even triggered. (debug on, but no entries in log)
info: [ROTARYENCODER2] uninstallAllOverlays: end of recursion.
info: [ROTARYENCODER2] removeEventListeners: Remaining listeners STDOUT: 0 STDERR: 0
info: [ROTARYENCODER2]{"_events":{},"_eventsCount":0,"_closesNeeded":3,"_closesGot":0,"connected":false,"signalCode":null,"exitCode":null,"killed":false,"spawnfile":"/bin/cat","_handle":{"pid":5670},"spawnargs":["/bin/cat","/dev/input/by-path/platform-button@16-event"],"pid":5670,"stdin":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdout":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stderr":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdio":[{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null}]}
info: [ROTARYENCODER2] removeEventListeners: successfully killed handler process
info: [ROTARYENCODER2] dtoverlayRemove: {"pinA":22,"type":"gpio-key"}
info: [ROTARYENCODER2] dtoverlayL
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -l
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayL returned: [{"no":1,"type":"rotary-encoder","pinA":5,"pinB":6,"relativeAxis":true,"stepsPerPeriod":1},{"no":2,"type":"gpio-key","pinA":13,"activeLow":false,"gpioPull":"up","keycode":"20"},{"no":3,"type":"rotary-encoder","pinA":17,"pinB":27,"relativeAxis":true,"stepsPerPeriod":1},{"no":4,"type":"gpio-key","pinA":22,"activeLow":false,"gpioPull":"up","keycode":"20"}]
info: [ROTARYENCODER2] dtoverlayRemove: removing: 4
info: [ROTARYENCODER2] {"no":4,"type":"gpio-key","pinA":22,"activeLow":false,"gpioPull":"up","keycode":"20"}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -r 4
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay -r 4
info: [ROTARYENCODER2] uninstallAllOverlays: removed{"pinA":22,"type":"gpio-key"}
info: [ROTARYENCODER2] removeEventListeners: Remaining listeners STDOUT: 0 STDERR: 0
info: [ROTARYENCODER2]{"_events":{},"_eventsCount":0,"_closesNeeded":3,"_closesGot":0,"connected":false,"signalCode":null,"exitCode":null,"killed":false,"spawnfile":"/bin/cat","_handle":{"pid":5660},"spawnargs":["/bin/cat","/dev/input/by-path/platform-rotary@11-event"],"pid":5660,"stdin":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdout":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stderr":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdio":[{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null}]}
info: [ROTARYENCODER2] removeEventListeners: successfully killed handler process
info: [ROTARYENCODER2] dtoverlayRemove: {"pinA":17,"type":"rotary-encoder"}
info: [ROTARYENCODER2] dtoverlayL
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -l
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayL returned: [{"no":1,"type":"rotary-encoder","pinA":5,"pinB":6,"relativeAxis":true,"stepsPerPeriod":1},{"no":2,"type":"gpio-key","pinA":13,"activeLow":false,"gpioPull":"up","keycode":"20"},{"no":3,"type":"rotary-encoder","pinA":17,"pinB":27,"relativeAxis":true,"stepsPerPeriod":1}]
info: [ROTARYENCODER2] dtoverlayRemove: removing: 3
info: [ROTARYENCODER2] {"no":3,"type":"rotary-encoder","pinA":17,"pinB":27,"relativeAxis":true,"stepsPerPeriod":1}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -r 3
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay -r 3
info: [ROTARYENCODER2] uninstallAllOverlays: removed{"pinA":17,"type":"rotary-encoder"}
info: [ROTARYENCODER2] removeEventListeners: Remaining listeners STDOUT: 0 STDERR: 0
info: [ROTARYENCODER2]{"_events":{},"_eventsCount":0,"_closesNeeded":3,"_closesGot":0,"connected":false,"signalCode":null,"exitCode":null,"killed":false,"spawnfile":"/bin/cat","_handle":{"pid":5650},"spawnargs":["/bin/cat","/dev/input/by-path/platform-button@d-event"],"pid":5650,"stdin":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdout":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stderr":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdio":[{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null}]}
info: [ROTARYENCODER2] removeEventListeners: successfully killed handler process
info: [ROTARYENCODER2] dtoverlayRemove: {"pinA":13,"type":"gpio-key"}
info: [ROTARYENCODER2] dtoverlayL
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -l
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayL returned: [{"no":1,"type":"rotary-encoder","pinA":5,"pinB":6,"relativeAxis":true,"stepsPerPeriod":1},{"no":2,"type":"gpio-key","pinA":13,"activeLow":false,"gpioPull":"up","keycode":"20"}]
info: [ROTARYENCODER2] dtoverlayRemove: removing: 2
info: [ROTARYENCODER2] {"no":2,"type":"gpio-key","pinA":13,"activeLow":false,"gpioPull":"up","keycode":"20"}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -r 2
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay -r 2
info: [ROTARYENCODER2] uninstallAllOverlays: removed{"pinA":13,"type":"gpio-key"}
info: [ROTARYENCODER2] removeEventListeners: Remaining listeners STDOUT: 0 STDERR: 0
info: [ROTARYENCODER2]{"_events":{},"_eventsCount":0,"_closesNeeded":3,"_closesGot":0,"connected":false,"signalCode":null,"exitCode":null,"killed":false,"spawnfile":"/bin/cat","_handle":{"pid":5640},"spawnargs":["/bin/cat","/dev/input/by-path/platform-rotary@5-event"],"pid":5640,"stdin":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdout":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":true,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stderr":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},"stdio":[{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":null,"ended":true,"endEmitted":true,"reading":false,"constructed":true,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null,"readable":false},"_events":{},"_eventsCount":1,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":true,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null},{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":[],"flowing":true,"ended":false,"endEmitted":false,"reading":true,"constructed":true,"sync":false,"needReadable":true,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"destroyed":false,"errored":null,"closed":false,"closeEmitted":false,"defaultEncoding":"utf8","awaitDrainWriters":null,"multiAwaitDrain":false,"readingMore":false,"dataEmitted":false,"decoder":null,"encoding":null},"_events":{},"_eventsCount":0,"_writableState":{"objectMode":false,"highWaterMark":16384,"finalCalled":false,"needDrain":false,"ending":false,"ended":false,"finished":false,"destroyed":false,"decodeStrings":false,"defaultEncoding":"utf8","length":0,"writing":false,"corked":0,"sync":true,"bufferProcessing":false,"writecb":null,"writelen":0,"afterWriteTickInfo":null,"buffered":[],"bufferedIndex":0,"allBuffers":true,"allNoop":true,"pendingcb":0,"constructed":true,"prefinished":false,"errorEmitted":false,"emitClose":false,"autoDestroy":true,"errored":null,"closed":false,"closeEmitted":false},"allowHalfOpen":false,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null}]}
info: [ROTARYENCODER2] removeEventListeners: successfully killed handler process
info: [ROTARYENCODER2] dtoverlayRemove: {"pinA":5,"type":"rotary-encoder"}
info: [ROTARYENCODER2] dtoverlayL
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -l
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayL returned: [{"no":1,"type":"rotary-encoder","pinA":5,"pinB":6,"relativeAxis":true,"stepsPerPeriod":1}]
info: [ROTARYENCODER2] dtoverlayRemove: removing: 1
info: [ROTARYENCODER2] {"no":1,"type":"rotary-encoder","pinA":5,"pinB":6,"relativeAxis":true,"stepsPerPeriod":1}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -r 1
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay -r 1
info: [ROTARYENCODER2] uninstallAllOverlays: removed{"pinA":5,"type":"rotary-encoder"}
info: [ROTARYENCODER2] updateEncoder: Changing Encoder 2 Settings to new values
info: [ROTARYENCODER2] installAllOverlays: 4
info: [ROTARYENCODER2] [{"rotaryIdx":0,"type":"rotary-encoder","pinA":5,"pinB":6,"dialAction":2,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1},{"rotaryIdx":0,"type":"gpio-key","pinA":13,"debounce":900,"action":14,"socketCmdPush":"callMethod","socketDataPush":"{\"endpoint\":\"user_interface/randomizer\",\"method\":\"randomTracks\",\"data\":[]}","longPushAction":0,"socketCmdLongPush":"","socketDataLongPush":"","delayLongPush":1500,"doublePushAction":0,"socketCmdDoublePush":"","socketDataDoublePush":"","delayDoublePush":700,"activeLow":true,"gpioPull":"up","keycode":20},{"rotaryIdx":1,"type":"rotary-encoder","pinA":17,"pinB":27,"dialAction":1,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1},{"rotaryIdx":1,"type":"gpio-key","pinA":22,"debounce":900,"action":3,"socketCmdPush":"","socketDataPush":"","longPushAction":0,"socketCmdLongPush":"","socketDataLongPush":"","delayLongPush":1500,"doublePushAction":0,"socketCmdDoublePush":"","socketDataDoublePush":"","delayDoublePush":700,"activeLow":true,"gpioPull":"up","keycode":20}]
info: [ROTARYENCODER2] installAllOverlays: 3
info: [ROTARYENCODER2] [{"rotaryIdx":0,"type":"rotary-encoder","pinA":5,"pinB":6,"dialAction":2,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1},{"rotaryIdx":0,"type":"gpio-key","pinA":13,"debounce":900,"action":14,"socketCmdPush":"callMethod","socketDataPush":"{\"endpoint\":\"user_interface/randomizer\",\"method\":\"randomTracks\",\"data\":[]}","longPushAction":0,"socketCmdLongPush":"","socketDataLongPush":"","delayLongPush":1500,"doublePushAction":0,"socketCmdDoublePush":"","socketDataDoublePush":"","delayDoublePush":700,"activeLow":true,"gpioPull":"up","keycode":20},{"rotaryIdx":1,"type":"rotary-encoder","pinA":17,"pinB":27,"dialAction":1,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1}]
info: [ROTARYENCODER2] installAllOverlays: 2
info: [ROTARYENCODER2] [{"rotaryIdx":0,"type":"rotary-encoder","pinA":5,"pinB":6,"dialAction":2,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1},{"rotaryIdx":0,"type":"gpio-key","pinA":13,"debounce":900,"action":14,"socketCmdPush":"callMethod","socketDataPush":"{\"endpoint\":\"user_interface/randomizer\",\"method\":\"randomTracks\",\"data\":[]}","longPushAction":0,"socketCmdLongPush":"","socketDataLongPush":"","delayLongPush":1500,"doublePushAction":0,"socketCmdDoublePush":"","socketDataDoublePush":"","delayDoublePush":700,"activeLow":true,"gpioPull":"up","keycode":20}]
info: [ROTARYENCODER2] installAllOverlays: 1
info: [ROTARYENCODER2] [{"rotaryIdx":0,"type":"rotary-encoder","pinA":5,"pinB":6,"dialAction":2,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1}]
info: [ROTARYENCODER2] installAllOverlays: 0
info: [ROTARYENCODER2] []
info: [ROTARYENCODER2] installAllOverlays: end of recursion.
info: [ROTARYENCODER2] dtoverlayAdd
info: [ROTARYENCODER2] {"rotaryIdx":0,"type":"rotary-encoder","pinA":5,"pinB":6,"dialAction":2,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay rotary-encoder pin_a=5 pin_b=6 relative_axis=true steps-per-period=1
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
rotary-encoder rotary@5: gray
input: rotary@5 as /devices/platform/rotary@5/input/input66
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay rotary-encoder pin_a=5 pin_b=6 relative_axis=true steps-per-period=1
info: [ROTARYENCODER2] attachEventEmitter: path: /dev/input/by-path/platform-rotary@5-event, type: rotary-encoder
info: [ROTARYENCODER2] addEventListeners for rotary: {"pinA":5,"type":"rotary-encoder"}
info: [ROTARYENCODER2] dtoverlayAdd
info: [ROTARYENCODER2] {"rotaryIdx":0,"type":"gpio-key","pinA":13,"debounce":900,"action":14,"socketCmdPush":"callMethod","socketDataPush":"{\"endpoint\":\"user_interface/randomizer\",\"method\":\"randomTracks\",\"data\":[]}","longPushAction":0,"socketCmdLongPush":"","socketDataLongPush":"","delayLongPush":1500,"doublePushAction":0,"socketCmdDoublePush":"","socketDataDoublePush":"","delayDoublePush":700,"activeLow":true,"gpioPull":"up","keycode":20}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay gpio-key gpio=13 active_low=true gpio_pull=up keycode=20
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
input: button@d as /devices/platform/button@d/input/input67
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay gpio-key gpio=13 active_low=true gpio_pull=up keycode=20
info: [ROTARYENCODER2] attachEventEmitter: path: /dev/input/by-path/platform-button@d-event, type: gpio-key
info: [ROTARYENCODER2] addEventListeners for rotary: {"pinA":13,"type":"gpio-key"}
info: [ROTARYENCODER2] dtoverlayAdd
info: [ROTARYENCODER2] {"rotaryIdx":1,"type":"rotary-encoder","pinA":17,"pinB":27,"dialAction":1,"socketCmdCW":"","socketDataCW":"","socketCmdCCW":"","socketDataCCW":"","relativeAxis":true,"stepsPerPeriod":1}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay rotary-encoder pin_a=17 pin_b=27 relative_axis=true steps-per-period=1
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
rotary-encoder rotary@11: gray
input: rotary@11 as /devices/platform/rotary@11/input/input68
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay rotary-encoder pin_a=17 pin_b=27 relative_axis=true steps-per-period=1
info: [ROTARYENCODER2] attachEventEmitter: path: /dev/input/by-path/platform-rotary@11-event, type: rotary-encoder
info: [ROTARYENCODER2] addEventListeners for rotary: {"pinA":17,"type":"rotary-encoder"}
info: [ROTARYENCODER2] dtoverlayAdd
info: [ROTARYENCODER2] {"rotaryIdx":1,"type":"gpio-key","pinA":22,"debounce":900,"action":3,"socketCmdPush":"","socketDataPush":"","longPushAction":0,"socketCmdLongPush":"","socketDataLongPush":"","delayLongPush":1500,"doublePushAction":0,"socketCmdDoublePush":"","socketDataDoublePush":"","delayDoublePush":700,"activeLow":true,"gpioPull":"up","keycode":20}
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay gpio-key gpio=22 active_low=true gpio_pull=up keycode=20
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
input: button@16 as /devices/platform/button@16/input/input69
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayAdd executed: /usr/bin/sudo /usr/bin/dtoverlay gpio-key gpio=22 active_low=true gpio_pull=up keycode=20
info: [ROTARYENCODER2] attachEventEmitter: path: /dev/input/by-path/platform-button@16-event, type: gpio-key
info: [ROTARYENCODER2] addEventListeners for rotary: {"pinA":22,"type":"gpio-key"}
info: [ROTARYENCODER2] dtoverlayL
volumio : PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay -l
pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
pam_unix(sudo:session): session closed for user root
info: [ROTARYENCODER2] dtoverlayL returned: [{"no":1,"type":"rotary-encoder","pinA":5,"pinB":6,"relativeAxis":true,"stepsPerPeriod":1},{"no":2,"type":"gpio-key","pinA":13,"activeLow":false,"gpioPull":"up","keycode":"20"},{"no":3,"type":"rotary-encoder","pinA":17,"pinB":27,"relativeAxis":true,"stepsPerPeriod":1},{"no":4,"type":"gpio-key","pinA":22,"activeLow":false,"gpioPull":"up","keycode":"20"}]
info: [ROTARYENCODER2] getI18nString("TOAST_SAVE_SUCCESS"):Successfully saved
info: [ROTARYENCODER2] getI18nString("TOAST_MSG_SAVE"):Settings for Encoder
info: [ROTARYENCODER2] updateEncoder: SUCCESS with Toast: Successfully saved Settings for Encoder 2
info: [ROTARYENCODER2] getI18nString("TOAST_SAVE_SUCCESS"):Successfully saved
info: [ROTARYENCODER2] getI18nString("TOAST_MSG_SAVE"):Settings for Encoder
time="2025-12-15T13:02:35+01:00" level=trace msg="sent dealer ping"
time="2025-12-15T13:02:35+01:00" level=trace msg="received dealer pong"
time="2025-12-15T13:03:05+01:00" level=trace msg="sent dealer ping"
Hi @Wheaten,
sorry, only find time to look into it now. Not a lot of time to listen to music recentlyā¦
I just updated my test system to Volumio 4.084 and installed plugin V2.2.0 from Plugin-store. I have the following parameters on 2nd rotary:
GPIO 5:
command: callMethod
data: {"endpoint":"system_hardware/eadog_lcd","method":"up","data":""}
GPIO 6
command: callMethod
data: {"endpoint":"system_hardware/eadog_lcd","method":"down","data":""}
This works and also produces proper logs:
info: CALLMETHOD: system_hardware eadog_lcd down
info: CoreCommandRouter::executeOnPlugin: eadog_lcd , down
info: [ROTARYENCODER2] stdout.data received from rotary: {"pinA":5,"type":"rotary-encoder"} -> Dir: -1
info: [ROTARYENCODER2] emitDialCommand: 4 with value -1for Rotary: 2
info: [ROTARYENCODER2] emit command callMethod with data {"endpoint":"system_hardware/eadog_lcd","method":"up","data":""}
info: CALLMETHOD: system_hardware eadog_lcd up
info: CoreCommandRouter::executeOnPlugin: eadog_lcd , up
info: [ROTARYENCODER2] stdout.data received from rotary: {"pinA":5,"type":"rotary-encoder"} -> Dir: -1
info: [ROTARYENCODER2] emitDialCommand: 4 with value -1for Rotary: 2
info: [ROTARYENCODER2] emit command callMethod with data {"endpoint":"system_hardware/eadog_lcd","method":"up","data":""}
I do not have time to start up a debugger and experiment with other values, but you may want to try replacing the []by "" for the empty data field.
Thanks for your reply. Need to dig into it again.
@nerd found the issue:
For those that want to use Rotary Encode II and emitting a websocket command,
take a moment and read the how-to below: