Help with Rotary Encoder II Plugin - Volume

I have an EC11 Type rotary encoder and if I use the seek in title, the rotary encoder works both ways (just for example)

when I use the volume Dial Action, nothing happens. I see the following in journal ctl -f though…

Dec 29 14:57:09 volumio volumio[1390]: info: [ROTARYENCODER2] stdout.data received from rotary: {"pinA":27,"type":"rotary-encoder"} -> Dir: 1
Dec 29 14:57:09 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: 1 with value 1for Rotary: 1
Dec 29 14:57:09 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: VOLUME UP
Dec 29 14:57:09 volumio volumio[1390]: info: VolumeController::SetAlsaVolume+
Dec 29 14:57:09 volumio volumio[1390]: info: CoreStateMachine::pushState
Dec 29 14:57:09 volumio volumio[1390]: info: CorePlayQueue::getTrack 1
Dec 29 14:57:09 volumio volumio[1390]: info: CoreCommandRouter::executeOnPlugin: volumiodiscovery , saveDeviceInfo
Dec 29 14:57:09 volumio volumio[1390]: info: CoreCommandRouter::volumioPushState

Dec 29 14:59:20 volumio volumio[1390]: info: [ROTARYENCODER2] stdout.data received from rotary: {"pinA":27,"type":"rotary-encoder"} -> Dir: -1
Dec 29 14:59:20 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: 1 with value -1for Rotary: 1
Dec 29 14:59:20 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: VOLUME DOWN
Dec 29 14:59:20 volumio volumio[1390]: info: VolumeController::SetAlsaVolume-
Dec 29 14:59:20 volumio volumio[1390]: info: CoreStateMachine::pushState
Dec 29 14:59:20 volumio volumio[1390]: info: CorePlayQueue::getTrack 1
Dec 29 14:59:20 volumio volumio[1390]: info: CoreCommandRouter::executeOnPlugin: volumiodiscovery , saveDeviceInfo
Dec 29 14:59:20 volumio volumio[1390]: info: CoreCommandRouter::volumioPushState
Dec 29 14:59:20 volumio go-librespot[1747]: time="2025-12-29T14:59:20-08:00" level=debug msg="fetched chunk 6/23, size: 524288" uri="spotify:track:4KyghCEewQOSZ4OdvQwFN3"
Dec 29 14:59:24 volumio go-librespot[1747]: time="2025-12-29T14:59:24-08:00" level=trace msg="sent dealer ping"

But the volume doesn’t go up or down. Any ideas? What am I missing here?

Thanks for reading

What I see in your partial log is that that pin27 is always used for both Vol. Up as Down. So this will not work. It might even be that you didn’t connect it correctly.
On Raspberry Pi boards (incl. rPi 5) physical pins 27 & 28 are ID_SD / ID_SC for the HAT EEPROM I²C bus and shouldn’t be used for general GPIO.

I have 2 connected to my rPi5 and they works without issues
Connect the EC11 as follows:

CLK = GPIO 23      | Volume UP  
DT  = GPIO 24      | Volume Down
SW  = GPIO 22      | To be decided
GND = GND
+   = 5V or 3.3V

I changed it to be GPIO 22 with the same effect. So mine is a EC11 Style, so I have 3 pins for the encoder, 2 for the button. The three pins for the encoder go to (a) 23, GND, (b) 24 now. With the same result.

If you look at the output, the same pin is being recorded, but with -1 for volume down and 1 for volume up.

Here are the current logs

Dec 29 15:48:10 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: 1 with value -1for Rotary: 1
Dec 29 15:48:10 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: VOLUME DOWN
Dec 29 15:48:10 volumio volumio[1390]: info: VolumeController::SetAlsaVolume-
Dec 29 15:48:10 volumio volumio[1390]: info: CoreStateMachine::pushState
Dec 29 15:48:10 volumio volumio[1390]: info: CorePlayQueue::getTrack 1
Dec 29 15:48:10 volumio volumio[1390]: info: CoreCommandRouter::executeOnPlugin: volumiodiscovery , saveDeviceInfo
Dec 29 15:48:10 volumio volumio[1390]: info: CoreCommandRouter::volumioPushState
Dec 29 15:48:11 volumio volumio[1390]: info: [ROTARYENCODER2] stdout.data received from rotary: {“pinA”:24,“type”:“rotary-encoder”} → Dir: 1
Dec 29 15:48:11 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: 1 with value 1for Rotary: 1
Dec 29 15:48:11 volumio volumio[1390]: info: [ROTARYENCODER2] emitDialCommand: VOLUME UP
Dec 29 15:48:11 volumio volumio[1390]: info: VolumeController::SetAlsaVolume+
Dec 29 15:48:11 volumio volumio[1390]: info: CoreStateMachine::pushState
Dec 29 15:48:11 volumio volumio[1390]: info: CorePlayQueue::getTrack 1
Dec 29 15:48:11 volumio volumio[1390]: info: CoreCommandRouter::executeOnPlugin: volumiodiscovery , saveDeviceInfo
Dec 29 15:48:11 volumio volumio[1390]: info: CoreCommandRouter::volumioPushState

Please show a picture of the Rotary encoder and how it’s connected.

What is the output of:

# Check if debugfs is mounted
mount | grep debugfs

# If not mounted:
sudo mount -t debugfs debugfs /sys/kernel/debug

# Show GPIO ownership
sudo cat /sys/kernel/debug/gpio

Here is your output…

volumio@volumio:/home$ mount | grep debugfs
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
volumio@volumio:/home$ sudo mount -t debugfs debugfs /sys/kernel/debug
mount: /sys/kernel/debug: debugfs already mounted on /sys/kernel/debug.
dmesg(1) may have more information after failed mount system call.
volumio@volumio:/home$ sudo cat /sys/kernel/debug/gpio
[sudo] password for volumio:
gpiochip0: GPIOs 512-569, parent: platform/fe200000.gpio, pinctrl-bcm2711:
gpio-512 (ID_SDA )
gpio-513 (ID_SCL )
gpio-514 (GPIO2 )
gpio-515 (GPIO3 )
gpio-516 (GPIO4 |? ) in lo IRQ ACTIVE LOW
gpio-517 (GPIO5 )
gpio-518 (GPIO6 |mute ) out hi ACTIVE LOW
gpio-519 (GPIO7 )
gpio-520 (GPIO8 )
gpio-521 (GPIO9 )
gpio-522 (GPIO10 )
gpio-523 (GPIO11 )
gpio-524 (GPIO12 )
gpio-525 (GPIO13 |KEY_POWER ) in hi IRQ ACTIVE LOW
gpio-526 (GPIO14 )
gpio-527 (GPIO15 )
gpio-528 (GPIO16 )
gpio-529 (GPIO17 )
gpio-530 (GPIO18 )
gpio-531 (GPIO19 )
gpio-532 (GPIO20 )
gpio-533 (GPIO21 )
gpio-534 (GPIO22 )
gpio-535 (GPIO23 |rotary@18 ) in hi IRQ
gpio-536 (GPIO24 |rotary@18 ) in hi IRQ
gpio-537 (GPIO25 |? ) out hi
gpio-538 (GPIO26 )
gpio-539 (GPIO27 )
gpio-540 (RGMII_MDIO )
gpio-541 (RGMIO_MDC )
gpio-542 (CTS0 )
gpio-543 (RTS0 )
gpio-544 (TXD0 )
gpio-545 (RXD0 )
gpio-546 (SD1_CLK )
gpio-547 (SD1_CMD )
gpio-548 (SD1_DATA0 )
gpio-549 (SD1_DATA1 )
gpio-550 (SD1_DATA2 )
gpio-551 (SD1_DATA3 )
gpio-552 (PWM0_MISO )
gpio-553 (PWM1_MOSI )
gpio-554 (STATUS_LED_G_CLK |ACT ) out lo
gpio-555 (SPIFLASH_CE_N )
gpio-556 (SDA0 )
gpio-557 (SCL0 )
gpio-558 (RGMII_RXCLK )
gpio-559 (RGMII_RXCTL )
gpio-560 (RGMII_RXD0 )
gpio-561 (RGMII_RXD1 )
gpio-562 (RGMII_RXD2 )
gpio-563 (RGMII_RXD3 )
gpio-564 (RGMII_TXCLK )
gpio-565 (RGMII_TXCTL )
gpio-566 (RGMII_TXD0 )
gpio-567 (RGMII_TXD1 )
gpio-568 (RGMII_TXD2 )
gpio-569 (RGMII_TXD3 )

gpiochip1: GPIOs 570-577, parent: platform/soc:firmware:gpio, raspberrypi-exp-gpio, can sleep:
gpio-570 (BT_ON |shutdown ) out hi
gpio-571 (WL_ON )
gpio-572 (PWR_LED_OFF |PWR ) out lo ACTIVE LOW
gpio-573 (GLOBAL_RESET )
gpio-574 (VDD_SD_IO_SEL |vdd-sd-io ) out lo
gpio-575 (CAM_GPIO |regulator-cam1 ) out lo
gpio-576 (SD_PWR_ON |regulator-sd-vcc ) out hi
gpio-577 (SD_OC_N )

Here is the wiring, sorry there is a lot going on there. Red goes to GPIO24, Black goes to GND, Blue goes to GPIO23