[PLUGIN] RotaryEncoder II

Thomas, below the log (if that is the log you wanted…) since Dec 14.th when I reinstalled the plugin…
a lot and it is in German…shall I switch the language to english?

*volumio@waldis-volumio:~$ journalctl | grep -i encoder*
*Dec 14 19:21:00 waldis-volumio volumio[825]: info: Loading plugin "rotaryencoder2"...*
*Dec 14 19:21:02 waldis-volumio sudo[990]:  volumio : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay rotary-encoder pin_a=22 pin_b=17 relative_axis=true steps-per-period=1*
*Dec 14 19:21:02 waldis-volumio kernel: rotary-encoder rotary@16: gray*
*Dec 15 18:25:59 waldis-volumio volumio[825]: info: CALLMETHOD: user_interface rotaryencoder2 updateDebugSettings [object Object]*
*Dec 15 18:25:59 waldis-volumio volumio[825]: info: CoreCommandRouter::executeOnPlugin: rotaryencoder2 , updateDebugSettings*
*Dec 15 18:25:59 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_SAVE_SUCCESS"):Speichern erfolgreich*
*Dec 15 18:25:59 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_DEBUG_SAVE"):Einstellungen für Fehlersuche*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: CALLMETHOD: user_interface rotaryencoder2 updateEncoder [object Object]*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: CoreCommandRouter::executeOnPlugin: rotaryencoder2 , updateEncoder*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] updateEncoder: Rotary1 with:{"enabled0":true,"rotaryType0":{"value":1,"label":"1/1"},"pinA0":22,"pinB0":17,"dialAction0":{"value":2,"label":"Titel vor/zurück"},"socketCmdCCW0":"volume","socketDataCCW0":"-","socketCmdCW0":"volume","socketDataCW0":"+","pinPush0":27,"pinPushDebounce0":0,"pushState0":true,"pushAction0":{"value":3,"label":"Pause an/aus"},"socketCmdPush0":"","socketDataPush0":"","longPushAction0":{"value":11,"label":"System herunterfahren"},"socketCmdLongPush0":"","socketDataLongPush0":""}*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] sanityCheckSettings: Rotary1 for:{"enabled0":true,"rotaryType0":{"value":1,"label":"1/1"},"pinA0":22,"pinB0":17,"dialAction0":{"value":2,"label":"Titel vor/zurück"},"socketCmdCCW0":"volume","socketDataCCW0":"-","socketCmdCW0":"volume","socketDataCW0":"+","pinPush0":27,"pinPushDebounce0":0,"pushState0":true,"pushAction0":{"value":3,"label":"Pause an/aus"},"socketCmdPush0":"","socketDataPush0":"","longPushAction0":{"value":11,"label":"System herunterfahren"},"socketCmdLongPush0":"","socketDataLongPush0":""}*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: 1,2,3*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: 2,3*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: 3*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries:*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: end of recursion.*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] detachListener: [object Object]*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] detachListener: successfully killed handler process*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] checkOverlayExists: Checking for existing overlays for Rotary: 1*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] checkOverlayExists: check pinA=22pinB=17 in Overlays (in load order):*
*Dec 15 18:26:20 waldis-volumio volumio[825]: 0:  rotary-encoder  pin_a=22 pin_b=17 relative_axis=true steps-per-period=1*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] checkOverlayExists: rotary 1uses overlay 0*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] removeOverlay: 0*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle: Stream from rotary encoder ended.*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle: child process exited with code null*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] removeOverlay: 0 returned:*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] removeOverlay: "overlay -l" returned: No overlays loaded*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: deactivated rotary1*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateButtons: 1,2,3*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateButtons: 2,3*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateButtons: 3*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateButtons:*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateButtons: end of recursion.*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateButtons: button 1 is disabled.*
*Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] updateEncoder: Changing Encoder 1 Settings to new values*
*Dec 15 18:26:21 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateRotaries: 1,2,3*
*Dec 15 18:26:21 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateRotaries: 1,2*
*Dec 15 18:26:21 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateRotaries: 1*
*Dec 15 18:26:21 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateRotaries:*
*Dec 15 18:26:21 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateRotaries: end of recursion.*
*Dec 15 18:26:21 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addOverlay: 22 17 1*
*Dec 15 18:26:21 waldis-volumio sudo[2683]:  volumio : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay rotary-encoder pin_a=22 pin_b=17 relative_axis=true steps-per-period=1*
*Dec 15 18:26:21 waldis-volumio kernel: rotary-encoder rotary@16: gray*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] attachListener: /dev/input/by-path/platform-rotary@16-event*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle for rotary: 1*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateButtons: 1,2,3*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateButtons: 1,2*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateButtons: 1*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateButtons:*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateButtons: end of recursion.*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] activateButtons: Now assign push button: 1*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] Push Button 1 now resolving.*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_SAVE_SUCCESS"):Speichern erfolgreich*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_MSG_SAVE"):Einstellungen für Drehgeber*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] updateEncoder: SUCCESS with Toast: Speichern erfolgreich Einstellungen für Drehgeber 1*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_SAVE_SUCCESS"):Speichern erfolgreich*
*Dec 15 18:26:22 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_MSG_SAVE"):Einstellungen für Drehgeber*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:02 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:03 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:04 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: 1*
*Dec 15 18:27:05 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value 1for Rotary: 1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle received from rotary: 1 -> Dir: -1*
*Dec 15 18:27:06 waldis-volumio volumio[825]: info: [ROTARYENCODER2] emitDialCommand: 2 with value -1for Rotary: 1*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getUIConfig: starting:*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getUIConfig: i18nStrings{"ROTARYENCODER2":{"CONFIG":"Rotary Encoder II Plugin Konfiguration","SAVE":"Speichern","ENCODER0":"Drehgeber 1","D_ENCODER0":"Einstellungen für den ersten Drehgeber.","ENCODER1":"Drehgeber 2","D_ENCODER1":"Einstellungen für den zweiten Drehgeber.","ENCODER2":"Drehgeber 3","D_ENCODER2":"Einstellungen für den dritten Drehgeber.","ROTARYTYPE":"Perioden pro Schritt","D_ROTARYTYPE":"Perioden pro Schritt (Voll: A und B ganze Periode, Halb: A und B halbe Periode, Viertel: A oder B halbe Periode","FULL":"Volle Perioden Typ","HALF":"Halbe Perioden Typ","QUARTER":"Viertel Perioden Typ","PINA":"Anschluss A GPIO","D_PINA":"GPIO Ein-/Ausgang der mit dem ersten Anschluss des Drehgebers verbunden ist.","PINB":"Anschluss B GPIO","D_PINB":"GPIO Ein-/Ausgang der mit dem zweiten Anschluss des Drehgebers verbunden ist.","DIALACTION":"Drehfunktion","D_DIALACTION":"Funktion, die durch Drehen des Drehgebers ausgelöst wird. Die Funktion 'Websocket Nachricht senden' kann z.B. verwendet werden, um Websock Kommandos an andere Plugins zu senden. (Siehe https://volumio.github.io/docs/API/WebSocket_APIs.html Abschnitt 'CallMethod on Plugin' für weitere Informationen.)","DOTS":"...","VOLUME":"Lautstärke","SKIP":"Titel vor/zurück","SEEK":"Suche im Titel","SCROLL":"Scrollen","EMIT":"Websocket Nachricht senden","SOCKCMDCCW":"Kommando GUZS","SOCKDATACCW":"Daten GUZS","SOCKCMDCW":"Kommando UZS","SOCKDATACW":"Daten UZS","SOCKCMD":"Kommando","SOCKDATA":"Daten","D_SOCKCMD":"Kommandos, die via Websocket gesendet werden sollen.","D_SOCKDATA":"Daten, die zusammen mit dem Websocket Kommando gesendet werden.","PINPUSH":"Taster GPIO","D_PINPUSH":"GPIO Ein-/Ausgang der mit dem Taster des Drehgebers verbunden ist. 0 oder leer zum deaktivieren.","PUSHACTION":"Funktion Tastendruck","D_PUSHACTION":"Funktion, die durch das Drücken des Tasters ausgelöst wird.","LONGPUSHACTION":"Funktion langer Tastendruck","D_LONGPUSHACTION":"Funktion, die durch das lange Drücken des Tasters ausgelöst wird.","PINPUSHDEBOUNCE":"Entprell-Zeit (ms)","D_PINPUSHDEBOUNCE":"Entprell-Zeit für den Taster. Falls der Taster Hardware-entprellt ist, 0 setzen.","PUSHSTATE":"Taster-Logikpegel low-aktiv","D_PUSHSTATE":"Aktivieren, wenn der Logikpegel am GPIO bei gedrücktem Taster 'low' ist.","SET_DEBUG":"Fehlerdiagnose Einstellungen","D_SET_DEBUG":"Einstellungen zur Unterstützung der Fehlersuche.","PLAY":"Wiedergabe starten","PAUSE":"Pause","PLAYPAUSE":"Pause an/aus","STOP":"Stop","REPEAT":"Wiederholen","RANDOM":"Zufällige Wiedergabe","CLEARQUEUE":"Wiedergabeliste löschen","MUTE":"Stumm","UNMUTE":"Stumm aufheben","TOGGLEMUTE":"Stumm an/aus","SHUTDOWN":"System herunterfahren","REBOOT":"System neu starten","RESTARTAPP":"Applikation neu starten","DUMPLOG":"Log Datei abspeichern","LOGGING":"Log","D_LOGGING":"Aktiviert das Schreiben von Log-Nachrichten. Fehlermeldungen werden immer geschrieben.","TOAST_START_SUCCESS":"Plugin erfolgreich gestartet.","TOAST_STOP_SUCCESS":"Plugin erfolgreich angehalten.","TOAST_START_FAIL":"Start des Plugins fehlgeschlagen.","TOAST_STOP_FAIL":"Anhalten des Plugins fehlgeschlagen.","TOAST_GPIO_BLOCKED":"GPIO Pin nicht frei","TOAST_MSG_OVERLAY_BLOCKING":"Blockiert durch weiteres Overlay.","TOAST_SAVE_SUCCESS":"Speichern erfolgreich","TOAST_MSG_SAVE":"Einstellungen für Drehgeber ","TOAST_DEBUG_SAVE":"Einstellungen für Fehlersuche","TOAST_SAVE_FAIL":"Speichern gescheitert","TOAST_WRONG_PARAMETER":"Fehler in Einstellungen","TOAST_NEEDS_INTEGER":"GPIO Pins müssen Ganzzahlen sein.","TOAST_PINS_DIFFERENT":"GPIO Pins für Anschlüsse A/B/Taster müssen verschieden sein.","TOAST_PINS_BLOCKED":"Pins werden in einem der anderen Drehgeber verwendet","TOAST_NO_TYPE":"Bitte 'Periode pro Schritt' angeben!"}}*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getUIConfig: i18nStringsDefaults{"ROTARYENCODER2":{"CONFIG":"Rotary Encoder II Plugin Configuration","SAVE":"Save","ENCODER0":"Rotary Encoder 1","D_ENCODER0":"Settings for the first rotary encoder.","ENCODER1":"Rotary Encoder 2","D_ENCODER1":"Settings for the second rotary encoder.","ENCODER2":"Rotary Encoder 3","D_ENCODER2":"Settings for the third rotary encoder.","ROTARYTYPE":"Periods per tick","D_ROTARYTYPE":"Periods per tick (Full: A and B full period, half: A and B half period, quarter: A or B half period","FULL":"Full-period mode","HALF":"Half-period mode","QUARTER":"Quarter-period mode","PINA":"Pin A GPIO","D_PINA":"GPIO pin that is connected to the first pin of the rotary.","PINB":"Pin B GPIO","D_PINB":"GPIO pin that is connected to the second pin of the rotary.","DIALACTION":"Dial Action","D_DIALACTION":"Action to be triggered by turning the rotary encocer. Option 'Emit Websocket Message' can be used to control other plugins using the Volumio Websock calls between Plugins. (see https://volumio.github.io/docs/API/WebSocket_APIs.html section 'CallMethod on Plugin' for details)","DOTS":"...","VOLUME":"Volume","SKIP":"Prev/Next title","SEEK":"Seek in title","SCROLL":"Scroll","EMIT":"Emit Websocket Message","SOCKCMDCCW":"Command CCW","SOCKDATACCW":"Data CCW","SOCKCMDCW":"Command CW","SOCKDATACW":"Data CW","SOCKCMD":"Command","SOCKDATA":"Data","D_SOCKCMD":"Command to send via Websocket","D_SOCKDATA":"Data to include with the Websocket Command","PINPUSH":"Pushbutton GPIO","D_PINPUSH":"GPIO pin that is connected to the pushbutton pin of the rotary. 0 or empty to disable.","PINPUSHDEBOUNCE":"Debounce-time (ms)","D_PINPUSHDEBOUNCE":"Debounce time for the button. If the button has hardware-debouncing, set to 0.","PUSHSTATE":"Button logic-level active low","D_PUSHSTATE":"Activate this, if pressing the button pulls the logic level on the GPIO low.","PUSHACTION":"Short Press Action","D_PUSHACTION":"Action that gets triggered, when pushbutton is pressed briefly.","LONGPUSHACTION":"Long Press Action","D_LONGPUSHACTION":"Action that gets triggered, when pushbutton is pressed longer.","SET_DEBUG":"Debug Settings","D_SET_DEBUG":"Settings for functional debugging.","PLAY":"Play","PAUSE":"Pause","PLAYPAUSE":"Play/Pause toggle","STOP":"Stop","REPEAT":"Repeat","RANDOM":"Random","CLEARQUEUE":"Clear Queue","MUTE":"Mute","UNMUTE":"Unmute","TOGGLEMUTE":"Toggle Mute","SHUTDOWN":"System Shutdown","REBOOT":"System Reboot","RESTARTAPP":"Restart Application","DUMPLOG":"Dump logfile","LOGGING":"Logging","D_LOGGING":"Switch the output of log messages on or off. Error messages are always logged.","TOAST_START_SUCCESS":"Plugin successfully started.","TOAST_STOP_SUCCESS":"Plugin successfully stopped.","TOAST_START_FAIL":"Plugin failed to start.","TOAST_STOP_FAIL":"Plugin failed to stop.","TOAST_GPIO_BLOCKED":"GPIO Pin unavailable","TOAST_MSG_OVERLAY_BLOCKING":"Blocked by another overlay.","TOAST_SAVE_SUCCESS":"Successfully saved","TOAST_MSG_SAVE":"Settings for Encoder ","TOAST_DEBUG_SAVE":"Debug Settings","TOAST_SAVE_FAIL":"Save failed","TOAST_WRONG_PARAMETER":"Error in parameters","TOAST_NEEDS_INTEGER":"GPIO Pins must be Integers.","TOAST_PINS_DIFFERENT":"GPIO Pins for A/B/Button must be different.","TOAST_PINS_BLOCKED":"Pins already used in another Encoder.","TOAST_NO_TYPE":"Please select 'Periods per tick'!"}}*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getUIConfig: language code: de dir: /data/plugins/user_interface/rotaryencoder2*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("SKIP"):Titel vor/zurück*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("PLAYPAUSE"):Pause an/aus*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("SHUTDOWN"):System herunterfahren*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("DOTS"):...*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("DOTS"):...*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("DOTS"):...*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("DOTS"):...*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("DOTS"):...*
*Dec 15 18:27:32 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("DOTS"):...*
*volumio@waldis-volumio:~$ Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent*
*-bash: Volumio: command not found*
*volumio@waldis-volumio:~$ permitted by applicable law.*
*-bash: permitted: command not found*
*volumio@waldis-volumio:~$ Welcome to Volumio for Raspberry Pi (5.4.83-v7l+ armv7l)*
*-bash: syntax error near unexpected token `('*
*volumio@waldis-volumio:~$ volumio@waldis-volumio:~$ journalctl | grep -i encoder*
*-bash: volumio@waldis-volumio:~$: command not found*
*volumio@waldis-volumio:~$ Dec 14 19:21:00 waldis-volumio volumio[825]: info: Loading plugin "rotaryencoder2"...*
*-bash: Dec: command not found*
*volumio@waldis-volumio:~$ Dec 14 19:21:02 waldis-volumio sudo[990]:  volumio : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/dtoverlay rotary-encoder pin_a=22 pin_b=17 relative_axis=true steps-per-period=1*
*-bash: Dec: command not found*
*-bash: rotary-encoder: command not found*
*volumio@waldis-volumio:/$ Dec 14 19:21:02 waldis-volumio kernel: rotary-encoder rotary@16: gray*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:25:59 waldis-volumio volumio[825]: info: CALLMETHOD: user_interface rotaryencoder2 updateDebugSettings [object Object]*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:25:59 waldis-volumio volumio[825]: info: CoreCommandRouter::executeOnPlugin: rotaryencoder2 , updateDebugSettings*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:25:59 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_SAVE_SUCCESS"):Speichern erfolgreich*
*-bash: syntax error near unexpected token `('*
*volumio@waldis-volumio:/$ Dec 15 18:25:59 waldis-volumio volumio[825]: info: [ROTARYENCODER2] getI18nString("TOAST_DEBUG_SAVE"):Einstellungen für Fehlersuche*
*-bash: syntax error near unexpected token `('*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: CALLMETHOD: user_interface rotaryencoder2 updateEncoder [object Object]*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: CoreCommandRouter::executeOnPlugin: rotaryencoder2 , updateEncoder*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] updateEncoder: Rotary1 with:{"enabled0":true,"rotaryType0":{"value":1,"label":"1/1"},"pinA0":22,"pinB0":17,"dialAction0":{"value":2,"label":"Titel vor/zurück"},"socketCmdCCW0":"volume","socketDataCCW0":"-","socketCmdCW0":"volume","socketDataCW0":"+","pinPush0":27,"ppinPushDebounce0":0,"pushState0":true,"pushAction0":{"value":3,"label":"Pause an/aus"},"socketCmdPush0":"","socketDataPush0":"","longPushAction0":{"value":11,"label":"System herunterfahren"},"socketCmdLongPush0":"","socketDataLongPush0":""}*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] sanityCheckSettings: Rotary1 for:{"enabled0":true,"rotaryType0":{"value":1,"label":"1/1"},"pinA0":22,"pinB0":17,"dialAction0":{"value":2,"label":"Titel vor/zurück"},"socketCmdCCW0":"volume","socketDataCCW0":"-","socketCmdCW0":"volume","socketDataCW0":"+","pinPush0"::27,"pinPushDebounce0":0,"pushState0":true,"pushAction0":{"value":3,"label":"Pause an/aus"},"socketCmdPush0":"","socketDataPush0":"","longPushAction0":{"value":11,"label":"System herunterfahren"},"socketCmdLongPush0":"","socketDataLongPush0":""}*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: 1,2,3*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: 2,3*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: 3*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries:*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] deactivateRotaries: end of recursion.*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] detachListener: [object Object]*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] detachListener: successfully killed handler process*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] checkOverlayExists: Checking for existing overlays for Rotary: 1*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] checkOverlayExists: check pinA=22pinB=17 in Overlays (in load order):*
*-bash: syntax error near unexpected token `('*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: 0:  rotary-encoder  pin_a=22 pin_b=17 relative_axis=true steps-per-period=1*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] checkOverlayExists: rotary 1uses overlay 0*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] removeOverlay: 0*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$ Dec 15 18:26:20 waldis-volumio volumio[825]: info: [ROTARYENCODER2] addEventHandle: Stream from rotary encoder ended.*
*-bash: Dec: command not found*
*volumio@waldis-volumio:/$*

Hi Christoph,

Deutsch ist OK, kein Problem. Ich antworte aber weiter auf Englisch, dann hilft’s allen…

Looks all ok at first sight. I think, that something went wrong with logging - at the End of the log, every second line is Dec: command not found, which looks like you somehow pasted the log into the shell, which tries to interpret it, thinking that the Dec in the date is a command. But the rest is fine. However, the moment when the audio fails is probably not yet included, since you only start the logging at the beginning of the log and the next thing is, that you save the settings to “Skip Title fwd/back”, which in your original post is your work-around to make it working again.

I read your original post again and my interpretation is the following: You use the rotary to control volume and that works, but when you restart volumio, it starts to play music but then the sound disappears and you have to change settings, to make it work again. Can you confirm, if I get it correctly?

Now to my findings and some additional requests for debugging:

  1. I see that there are settings in the "socketCmdCW0", "socketCmdCCW0", "socketDataCW0" and "socketDataCCW0" parameters which are empty by default. Are you using those, to control the volume? If yes, can you try, to use the “Volume” setting from the “Dial action”-dropdown in the settings instead of the “Emit WebSocket Message” setting? I did not test “Emit WebSocket” with Volumio 3 yet, so it might be, that it is not fully working and the purpose of this was not volume control (I just used Volume control as an example in the help pages)
  2. On my system, the playback normally does not start automatically, are U using another plugin to automatically start playback? It could be an interference with the other plugin. In case this is the case, can you disable the other plugin and test again?
  3. The log you posted does not contain the actual startup, where your problem seems to happen. What I would ask you to provide would be the boot-log following the below steps:
    a. make sure that logging is enabled in the plugin settings
    b. restart Volumio
    c. Wait for the sound to disappear and then go to the settings and change the setting + save as you described
    d. Log into Volumio via SSH and write the boot-log to a file by issuing
    journalctl -b > mylog.txt
    (This prints the system log and pipes it into a text-file)

Please do not paste the full log-file here, better upload it as attachment or send it to me via personal message. I do not need to see the full log, only the part starting from Volumio System Startup section is important. You can remove any personal data from the log, if there is any (e.g. if you connect to servers or services and it contains any user data).

Beste Grüße,
Thomas

Hi Thomas

First, the strange thing is if I now change the settings from Volume (actually Volume and not WebSocket) to FWD/Back I cannot fix the issue…
I don know what i have done but i cannot reproduce it anymore…
So now the behavior is the following (regardless of the Rotary settings…) After startup i hear the sound form paradise radio until it is fully started up and the ui is visible on my display… Then the sound disappears but I hear the startup melody of Volumio after a short time. From this time on i can hear no sound anymore…
here you can find the log:mylog.txt (102.7 KB)
…and sorry for posting the large log, I couldn’t find the upload button…
Regards & Thanks Christoph

Hi Christoph,

I had little time, to go deep, but at first sight, I can already spot a few strange things in the log.
Here is what we can see:

  • The plugin starts-up just fine (line 227 to 356 (with some other things happening in-between))
  • The streaming Daemon starts around line 450
  • Almost immediately after that, there is line 458 saying: info: [ROTARYENCODER2] Push Button 1 released after NaNms.
  • This is strange, because the entry means, that the push-button of the rotary connected to GPIO 27 was released. But there was no entry, that it was ever pressed. :roll_eyes:
  • This has several reasons, probably:
    • the lazy programmer (me) has not properly initialized his variables, since it says after NaNms, because it cannot calculate the time - the calculationg is “current time - time when button pressed”. Since button was never pressed, calculation failed. I will fix this later this week
    • However, normally this situation should not occur, because the button has to be pressed, before it can be released. So there may be some things to check on your end:
      • Please check, if your setting for “Button Logic Level active low” is correct. If this setting is inverted, the plugin thinks, that the button is pressed all the time and when you actually press it, it thinks the button was released. I do not know your background, so in case the terms “logic level” and “active low” sound like Klingon to you (no offense to any Klingons reading this), you can find some background here
      • In case the setting is correct, it might be also a bouncy button, that is causing the issue. So you might want to try to set the “Debounce Time (ms)” to something like 10ms or up to 50ms (I promise, you will not notice)
  • After the generation of the wrong signal, music starts to play - on line 460 we issue a volumioPlay
  • Line 482 shows, that radioparadise is your choice (15:36:41) - and nice, we listen to Nine Inch Nails :slight_smile: (line 583)
  • Line 845 shows info: BOOT COMPLETED at 15:36:57 and that is, where on my system roughly the startup sound is played. So according to the log there should be about 16 seconds between the start of radio paradise and the startup sound
  • there are no further messages from the plugin
  • Sometimes, the easy things can also help: did you try to press your button again? Or maybe press and hold it? Or press Play on the web-interface? From the log it looks, like the startup process just stopped playback and it could actually be resumed

This is what I can see so far - there are also a lot of error messages I cannot interpret, but I think a lot of them are from other components in the Beta System and not related to your issue.
Actually, it looks like a bit timing related - the button is coming early, before Volumio has finished startup.
I’ll fix my bug with the uninitialized variable, but this cannot be the only issue. Please check your settings as proposed and let me know, if it helps.

Best regards,
Thomas

Hi Thomas

Thank you for your comprehensive post which was really fun to read (I am sure even for Klingons…)
Yesterday I made some investigations and yes, it is related to the pushbutton. I made a little hardware (which is my background) with a small seeeduino and a color LED ring.The seeeduino actually reads in the rotary, mirrors the state to certain outputs and handles the power of the raspberry and the display to achieve a low standby current. As it seems something in my software debouncing goes wrong (It’s always critical if hardies doing software…) and because of that it really might be that it gives out some pulses during the startup of the raspberry.
At the end of my debug session yesterday I managed to start up Volumio with sound, with the downside that the shutdown is not working anymore…

long story short, the problem lays on my own hardware / software no changes from your side are needet. I am sure that I can solve it now…Thanks to your inputs.

Ill let you know once it is working completely…

Best regards Christoph

If the problem is with debouncing. You are probably better off with hardware debouncing.
100nf capacitor between signal and ground.on each of pin a, pin b, and the switch.

Just want to say thank you for the plugin! I just installed a rotary encoder and everything is working as expected. Makes listening much more comfortable for me!

Just one quick suggestion: It would be nice if the long press action immediately happens after the trigger time (2s?), even when the button is still pressed. Also it would be cool to be able to adjust the trigger time.

1 Like

With that it would be impossible to add another feature i would prefer to have in a future version of the plugin, where it may be possible to add different actions by for example:

Pressing the button short (<2s.) = Mute / unmute
Pressing the button long (>2s.) = Pause / Play
Pressing the button extra long (~5s.) = Shutdown the PI

…my suggestion :slight_smile:

1 Like

Different usecases :-). But I think it would be possible without a problem. The only thing is, that you would have a 3 Second Pause/Play switch before shutdown in your example…and here I would prefer more something like a double-click instead of two different long clicks…but I guess we can not have everything. It will get too complicated at some point…

Hi Thomas

I just wanted to let you know that I could change my firmware in such a way that everything is working now, thanks to your input i found out that the seeeduino toggled the pushbutton during the Volumio startup and due to the settings it tried to play in an early phase. Debouncing was actually done well (@M1ck: of course in addition to software in harware as well:grin:.).

Thanks again for your help
Christoph

Hohoho :santa: Santa’s got a :gift:

I implemented more config for the buttons:

  • additional possibility to configure a double press
  • long press now already triggering when the configured time is reached, not waiting for release of button anymore
  • the delay for the double press to occur and the long press are now configurable

I included the new function in version 1.0.10 with the open pull request. Works for me, let me know if it works for you, too. The code is on my repo.
I did not like to have three different durations for a button click - so I went with the double-click proposal.

3 Likes

Edit: 2nd try to install it worked. Everything looks good, thank you so much!

1 Like

I did some test with the latest version 1.0.10, it works well for me!

@volumio @chsims1 @gkkpch I propose to accept the pull-request and add this plugin to the store, several users reported it’s working fine

1 Like

the point is that the correct category might be ‘system hardware’ instead of ‘user_interface’.

1 Like

yes, the category should be changed

@T0MR0 could you please take care of that?

Hi,

sorry, I did not read all the new docs - so did not realized the category definitions were made more precise.
Changed it to “system_hardware” in 1.0.10 and pushed to my repo. It is now in the open PR.

2 Likes

Once more thank you for the plugin! Gives me a lot more usability for my Volumio setup.

One more “wish” for a future update:

Maybe you could add options for single GPIO buttons without rotary encoder. At the moment I have enabled a second Rotary Encoder in the Plugin and needed to assign unused GPIO pins to Pin A and B just to be able to assign an action to an additional button for shutdown on the wake up button. Works as expected, but would be cleaner otherwise. And I guess it would be easy to implement.

I know about the GPIO buttons plugin but it does not seem to be already ported to Volumio3. And somehow it would be nice to habe GPIO input in a single plugin.

1 Like

I‘ll consider it. Probably easy to implement, as long as you are Ok with three devices in total (any combination of Rotary or Rotary+Button or Button only).
But currently not my highest Priority, so please be patient.

Thank you. And yes: it is not priority, the functionality is already there.

Hi!
I was able to install the RotaryEncoder2 Plugin to my Volumio3 on a RPi by following the instructions from Darmur:

sudo apt -y install build-essential
cd ~
wget http://plugins.volumio.org/plugins/volumio/armhf/user_interface/rotaryencoder2/rotaryencoder2.zip
mkdir ./rotaryencoder2
miniunzip rotaryencoder2.zip -d ./rotaryencoder2
cd rotaryencoder2/
volumio plugin install
cd /data/plugins/user_interface/rotaryencoder2/
npm install --save onoff@6.0.0

This installs version 1.0.7. Is there a way (for a linux dummy) to update to version 1.0.10?