Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: GPIO Buttons over USB Encoder #1249

Merged
merged 2 commits into from
Jan 1, 2021
Merged

feat: GPIO Buttons over USB Encoder #1249

merged 2 commits into from
Jan 1, 2021

Conversation

jeripeierSBB
Copy link
Contributor

Adds functionality of buttons which are connected by USB Encoder. #1156

Setup works by choosing an input device and then step by step mapping buttons to phoniebox functions. See README for usage.

Thanks to @Dieter4712 and @s-martin for the code base of this PR.

@s-martin s-martin linked an issue Jan 1, 2021 that may be closed by this pull request
@s-martin s-martin added this to the 2.3 milestone Jan 1, 2021
@s-martin s-martin merged commit ca6a478 into MiczFlor:develop Jan 1, 2021
@s-martin
Copy link
Collaborator

s-martin commented Jan 1, 2021

Thank you!

@jeripeierSBB
Copy link
Contributor Author

Thank you!

And thank you :-)

@jeripeierSBB jeripeierSBB deleted the usb-encoder branch January 1, 2021 12:31
@martinSteidele
Copy link

Hi jeripeierSBB,

first of all: Thank you!

Unfortunately I had a small issue with using the function. I'm probably just too stupid to use it correctly but when i call setup-buttons-usb-encoder.sh I get an error from map_buttons_usb_encoder that the module "components" cannot be found.

I was able to fix the problem by copying the gpio_control folder from the components to the same folder as the .sh file and then removing the "components" in lines 9 and 14 of map_buttons_usb_encoder.py.

This solution seems really ugly to me, but unfortunately I don't know python at all, so I couldn't solve it any other way.

@jeripeierSBB
Copy link
Contributor Author

Hi @martinSteidele

thanks for your comment. You just need to run the setup script from your RPi directory (home/pi/RPi-Jukebox-RFID).

something like:
cd /home/pi/RPi-Jukebox-RFID
sudo ./components/controls/buttons-usb-encoder/setup...sh

a documentation fix is already open as a PR (#1285 )

@martinSteidele
Copy link

Well that explains a lot. Thank you very much!

@daniel-mi
Copy link

Hi @jeripeierSBB I have a same problem while running the script.

Please can you habe a look on the result attached?
Thanks a lot
Daniel

pi@raspberrypi:~/RPi-Jukebox-RFID $ sudo sh ./components/controls/buttons_usb_encoder/setup-buttons-usb-encoder.sh
Please make sure that the Buttons USB Encoder and the buttons are connected before continuing...
Continue (y/n)? y

Choose the Buttons USB Encoder device from the list
0 Logitech K400
1 DragonRise Inc. Generic USB Joystick
Device Number: 1
Traceback (most recent call last):
File "/home/pi/RPi-Jukebox-RFID/components/controls/buttons_usb_encoder/map_buttons_usb_encoder.py", line 6, in
import components.gpio_control.function_calls
ModuleNotFoundError: No module named 'components'

Start phoniebox-buttons-usb-encoder service...
'/home/pi/RPi-Jukebox-RFID/components/controls/buttons_usb_encoder/phoniebox-buttons-usb-encoder.service.sample' -> '/etc/systemd/system/phoniebox-buttons-usb-encoder.service'
Warning: The unit file, source configuration file or drop-ins of phoniebox-buttons-usb-encoder.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Done.
pi@raspberrypi:~/RPi-Jukebox-RFID

jeripeierSBB added a commit to jeripeierSBB/RPi-Jukebox-RFID that referenced this pull request Mar 20, 2021
Script can only be executed if sys.path.append(".") is executed before imports.
This bug (MiczFlor#1249 (comment))
was introduced with change MiczFlor#1332.
@jeripeierSBB
Copy link
Contributor Author

@daniel-mi Thanks for your bug report, I just fixed it. See PR #1346.

@daniel-mi
Copy link

daniel-mi commented Mar 20, 2021

Hey @jeripeierSBB, thanks a lot for the quick response and the fix.

Maybe I found another bug in the file map_buttons_usb_encoder.py at line 16

dir(components.gpio_control.function_calls.phoniebox_function_calls)))

This is not working for my installation, so I changed it to

dir(components.gpio_control.function_calls)))

now I can register the connected buttons.

Please correct me, if I am wrong, I am not familiar with python.

@jeripeierSBB
Copy link
Contributor Author

@daniel-mi Are you using the latest state of the develop branch? I just made tests and dir(components.gpio_control.function_calls.phoniebox_function_calls))) is working correctly to map my buttons. For me it looks like you could have a too old version of components/gpio_control/function_calls.py ?

@daniel-mi
Copy link

Hi @jeripeierSBB, that's a good point. I will check that and get back to you again.

s-martin pushed a commit that referenced this pull request Mar 22, 2021
Script can only be executed if sys.path.append(".") is executed before imports.
This bug (#1249 (comment))
was introduced with change #1332.
s-martin added a commit that referenced this pull request Aug 11, 2021
* implemented shutdownwithreducingvolume

* implemented shutdownwithreducingvolume

* fixed type

* activation of shutdown button class in gpio_control

* update to next version number

* fixed date for 2.2 release

* go back for commit to master

* update to next release

* Minor changes

* Add version number to startup script

* Improve reading artist (#1166)

* Improve reading artist

Implement #1164

* Fix syntax

* Fix syntax

* More idiomatic check

* Feature/gpio debugging (#1165)

* change logging

* functionCall in case of invalid read of btn

* adjust behavior to fix strange behavior in case of button press is not stead
y

* Set Own Repo

* Fix volume of startup sound (#1169)

Fixes #1167

* missing savepos-command in "playerstopafter"

As there is a savepos-command in "playerstop" this should also be included in "playerstopafter".

* Update buster-install-default.sh (#1181)

Added spacing

* Revert "Set Own Repo"

This reverts commit 6d504e5.

* Add base functionality for Bluetooth headphone integration

* Add Discussions link to Readme

* Update Mopidy Iris to 3.54.2 (#1161)

* Integrate bluetooth headphone toggle into Web Interface

* Fix bugs and default configuration after testing

* (maint) Minor typos, whitespace issues (#1214)

* Add GPIO function call for bluetooth audio toggle

* Create codeql-analysis.yml

* Update codeql-analysis.yml

* Change path to gpio_settings.ini

* Add mopidy extensions versions to script

* Fixes bug in folder tree, related to special chars

Resolving #469 by simplifying collapse IDs in folder tree.
Make use of integers for collapse IDs rather than folder names to avoid
problem with any kind of non-allowed characters as ID value.

Simplifies corresponding code as no character replacement is required
for collapse IDs anymore.

* 2021 calendar

* 2021 calendar

* Added stop on removal functionality example (#1209)

See #1049

* feat: GPIO Buttons over USB Encoder (#1249)

* feat: Buttons USB Encoder

Closes #1156

* change usb to uppercase USB

* added support for pc/sc readers

* Web App settings for swipe or place rifd (#1130)

* web app settings for #1122

* web app settings for #1122

* Include @Toqqi's review comments

Co-authored-by: s-martin <[email protected]>

* fix: let function_calls.py work with python 3.5 (#1253)

* Shortcuts volume commands of playout control (#1235)

* Shortcuts volume commands of playout control

* Moves debug control out of shorcutted block

* Fixes indentation

* Ensure ALSA is installed (#1255)

* Ensure ALSA is installed

* Fixed typo

* Added alsa to tests also

* Update README.md

* Preparing new file structure

* Increase functional robustness and adapt file locations

* Add Readme

* Improve performance in player.php by avoiding system calls

* removed old code

* Added chapter exts and minduration to global conf

* Removed the old variables from .sh script

* Fixed Socket Read for long content

* Improved Error-Handling with folders that have wrong permission.

* shutdownreducingvolume webUI

* Updated settings.php

* configured lang.php-files

* Update inc.setShutdownReduceVolume.php

* Updated inc.setShutdownReduceVolume.php

* Renamed to ShutdownVolumeReduction

* Changed at queue name to "r"

* shutdown also in at queue "r"

* enabled debug.log

* separate at queue for the shutdown

* Fixed: disabling the planned shutdown

* fix2 for disabling shutdown

* fix3: disabling "at" for the scheduled volume change

* added 4 controls for RFID

* updated description

* Add Readme

* Fix some formatting issues in Readme

* Change default to be w/o LED

* Spotify url conversion (http to mopidy format) (#1203)

* Added spotify url conversion

* Improved and translated error message

* Fix typos

* Fix typo

* Revert missing lines in htdocs/lang-*

* Re-enable start-up sound

* feat: keep USB Button Encoder settings during update

* Fix tabbed indentation to whitespace

* fix: handle list of keycodes in buttons usb encoder (#1285)

* fix: handle keycode lists in buttons usb encoder

* fix: sort key before joining to guarantee order

* Add documentation Complete Install Guide

* Correct typos in Complete Install Guide

* FF and Rewind added to GPIO_SETTINGS.ini (#1291)

* FF and Rewind added to GPIO_SETTINGS.ini

* Update gpio_settings.ini

* updating install information

* -Added addtional output formats matching the printed Card Numbers for the RDM6300 Reader
-Added XOR Checksum for the RDM6300 Output format (Wiegand26)
-Tried to Address the dependencie Topic of #1105 (untested)

* refactoring gpio-control to class

* Webplayer: Time Played Interpolation, Improvements (#1200)

* add mission date of 2.2 release (#1160)

* update to next version number

* fixed date for 2.2 release

* go back for commit to master

* Set Own Repo

* Revert "Set Own Repo"

This reverts commit 6d504e5.

* Interpolate played time to improve UX feeling (something is happening/playing)

* Solved problems of parallel put and get request of player.php

Co-authored-by: s-martin <[email protected]>

* implementing stop on removal for RC522 (see #1097); implementation proposed by @Toqqi in 786ecf4: (#1122)

Description from @Toqqi:
I used the signal python library to detect when a RC522 RFID reader stops reading in a card ID for one second.
This then triggers the playerpauseforce action in playout_controls.sh.

I then configured the second swipe action to be "resume playback" to achieve the play/pause effect when moving an RFID card to/from the reader.

* - Fixed unecessary code line
- improved comment

* fixed logging

* Update gpio_control.py (#1310)

BugFix functionCallTwoBtns

* Added read-for-card status LED GPIO control

Adds a status LED GPIO control that lights up the LED if the phoniebox
is ready (finished startup scripts, checked via systemctl). Type called
`StartupScriptsStatusLED`.

Comparison to MPDStatusLED:
MPDStatusLED lights up the LED if MPD is started which is (on a RPi
zero seconds) before the phoniebox is actually ready for its first card.
Therefore, another status LED indicating whether startup completely
finished appears useful.

* Added example/test config for status LED

Add an example config for the startup script status LED using GPIO 14
(UART TX). This combines a side effect of flashing once when RPi is
powered on and staying one once startup script finished.
Same config added to the gpio test config.

* Fix missing import (#1312)

* Added switchable audio iFaces

Adds a feature to switch between two audio iFaces (e.g.
speaker/headphone). Audio iFaces to swap are stored in files
`settings/Audio_iFace_Name_[01]` and need to be set manually, if feature
should be activated. The correlating volumes are stored in files
`Audio_Volume_Level_[01]`. Currently active iFace "ID" (0 or 1) is
stored in file `settings/Audio_iFace_Active` (default 0).

Scenario: You have equipped your Pi with a sound card that provides a
separate output (and volume control) for speaker and headphone, like the
WM8960 Hi-Fi HAT. This feature enables you to switch between the two
output. It can be triggered by RFID card or (not implemented) via GPIO
(button or switched jack). Compare discussion in #786.

Many room for extension of features:
- setting audio iFaces via WebUI
- display current audio iFace in WebUI + trigger for switch
- trigger switch via GPIO (not needed in my case :-))
- generalisation for more than two audio iFaces (simple to implement if
needed)
- multi volume control in WebUI and via RFID (not sure if handy)

* Drops MPDStatusLED in favour of general StatusLED

For backward compatibility `gpio_control.generate_device` accepts both
`device_type` "StatusLED" as well as "MPDStatusLED".
To be reduced to only "StatusLED" at some point.

* Fix unit test and remove Python 3.5 check (#1319)

* Update test_gpio_control.py

* Update test_gpio_control.py

* Remove Python 3.5 in Actions

* Remove stretch

See #1163

* (bugfix) stop on removal, incorporate switch (#1324)

The merge of #1122 missed @Toqqi comment
#1122 (comment)
which provided an update
(Toqqi@4e1a6fc) that incorporates the global switch, merged with #1130.

Now, "stop on removal" is an option and no must.

* Bugfix #1320  of arne123/RPi-Jukebox-RFID/tree/gpio-control_to_class (#1323)

* Bugfix of arne123/RPi-Jukebox-RFID/tree/gpio-control_to_class

This update form @arne123 fixes #1320 .
There was still a Bug in the Import of the class function. and here is my commit.

* Bugfix #1328  i2c_lcd.py

Removed string function to remove newline. Type error because trake_time contains binary.

Therefore using subprocess.check_output setting to remove newline with  universal_newlines

This fixes issue  #1328

* fix flake8 warnings (#1332)

* Align folder naming scheme (#1340)

* Use gpio_settings.ini for LED configuration (#1342)

* fix: move path append command back up (#1346)

Script can only be executed if sys.path.append(".") is executed before imports.
This bug (#1249 (comment))
was introduced with change #1332.

* Fix for Issue 1347: fix regexp (#1354)

* Update README.md

* Update README.md

* Ignore settings/PhonieboxInstall.conf (#1360)

* organizeFiles: I added a small script for conveniently organizing audio folders, linking them to RFID cards, finding audio folders that are currently not bound to any RFID card, and fixing broken links.

* organizeFiles script: advanced features regarding linking folders to RFID cards

* cli-player.py: script to play audio folders from command line

* organizeFiles.py: small fix

* minor

* Extended commands (e.g. for special Cards) to play random (surprise!) cards/folders or tracks.

* Fix spelling error in en-UK (#1367)

* added documentation as requested.

* Delete SPOTIFY-INTEGRATION.md (#1366)

* Delete SPOTIFY-INTEGRATION.md

#1238

* Updated Links to Spotify FAQ

* Fix typos (#1370)

* Update README.md (#1375)

Due to sloppy reading and not realizing where this documentation was located it took me a while to figure out what this folder was referring to. I thought I would clarify.

* move helper scripts

* README for helper scripts

* Update phoniebox-rfid-reader.service.stretch-default.sample (#1388)

* Update phoniebox-rfid-reader.service.stretch-default.sample

reducing cpu-load

* Update phoniebox-rfid-reader.service.stretch-default.sample

* Update documentation (#1386)

* Add headless install to complete installation guide as an option

* Reorganize structure

* Fix anchor link

* Correcting a few more issues

* Remove instructions to install Phoniebox with Desktop

* Clean-up and partial repair of the GPIO component (#1397)

* Edit GPIO sanmple configs: Removed misleading attribute hold_time for all ("Simple-")Buttons that do not have hold_repeat configured at all (today, hold_time will be ignored if hold_repeat is unset).
I kept the hold_time where hold_repeat was explicitely set to False so it could be re-enabled when needed.

* Fixed ShutdownButton: shutdown_button.py needs additional config parameters time_pressed, iteration_time and led_pin which gpio_control.py did not read and pass (has been added).
Instead, it read hold_repeat and hold_time which is not used by ShutdownButton (has been removed).

* Deprecated config options replaced: Button and ShutdownButton do not evaluate pull_up any more, instead they use pull_up_down today.

* Tested and repaired shutdown_button class:
- fixed import of SimpleButton (as in shutdown_button.py and two_button_control.py) since it threw an error under python 3.
- removed input params hold_repeat and hold_time since they are not used by any instance of ShutdownButton.
- configure LED GPIO port on init (LED flah function threw an error since GPIO was still uninitalized)
- renamed "status" to "cancelled" for better understanding
- enforce final LED switch off if action was cancelled early (might have stayed on if button was released during flashing)

* Create future1.md

* Workflows for Future3

* Bringing back prior (and new) button long-press actions (+extended documentation) (#1406)

* Added an optional countermeasure against button bouncing effects
(can be switched on via the config);
Enhanced verbosity of Button status on console output.

* Updated ShutdownButton:
- Optimized control logic (iteration_time was formerly forced to 200ms ignoring the config value)
- Renamed time_pressed to hold_time to match the corresponding name in SimpleButton base class
- Pass-through of antibounce feature
- Enhanced verbosity of ShutdownButton status on console output.

* Introduced support for different modes on button hold:
Changed hold_repeat flag (True/False) to hold_mode (textual). "hold_repeat = True" is "hold_mode = Repeat" now.
Added new hold_mode "Postpone" (as possible in earlier PhonieBox versions)

* Added new hold_mode "SecondFunc" for a different action after hold_time (as possible in earlier PhonieBox versions)

* Added new hold_mode "SecondFuncRepeated" for repeated executions of a different action after hold_time

* Updated TwoButtonControl:
- Pass-through of all relevant SimpleButton base parameters
- Enhanced verbosity of TwoButtonControl status on console output
- Updated VolumeControl.py (though this file is completely superfluous / redundant IMHO)

* Added more detailed GPIO component documentation to README.MD
Fixed several typos and issues in several ini files

* Added more functions that can be called by GPIO controls like buttons.
Extended documentation, e.g. more example configurations.

* Added auto-conversion of old/deprecated syntax within gpiocontrol.ini entries.
Removed special (and redundant) handling for controls if (and only if) the corresponding config sections is named "VolumeControl"

* Added the __init__.py I just forgot...

* Align path of requirements.txt

* Fix in future3 github workflow

* Update README.md (#1452)

I struggled with this for the 4th time on new phoniebox installations and most pinout graphs for these card leave the cable for IRQ out and although you can read a card on python phoniebox does not read anything. With the cable in place on that pin it works like a charm from the beginning.

* Add lsof (#1457)

* Update buster-install-default.sh

* Add lsof and other missing packages

* fix-alsa on buster-lite (#1467)

* Update buster-install-default.sh

* update test for alsa-utils

* omit inapropriate version evdev==0.7.0 (#1468)

see https://pypi.org/project/evdev/

* Adding a boot volume settings to be set in startup script after reboot (#1177)

* Adding boot volume value to config and startup script #1169

* Adding boot volume value to config and startup script #1169

* startup changing to boot volume

* comment in web app changed to boot

* Prepare Readme for 2.3

* facilitate transition to bullseye (#1469)

* facilitate transition to bullseye

in order to easily support the debian upgrade path (replace `buster` with `bullseye` in `/etc/apt/sources.list` and `/etc/apt/sources.list.d/*`)
this change helps transition from `php7.3` on buster to `php7.4` on bullseye
and use python3 for python which is valid on bullseye

* Update buster-install-default.sh

* Update buster-install-default.sh

* small changes: head -n and file prefix (#1423)

* replace head -1 by head -n 1 since this notation is depricated

* replace head -1 by head -n 1 since this notation is depricated

* playout_controls: my mopidy version need "file://" prefix

* Update README.md

* Update README.md

* Update README.md

* Update version-number

Co-authored-by: manajoe <[email protected]>
Co-authored-by: Felix Bachmair <[email protected]>
Co-authored-by: veloxidSchweiz <[email protected]>
Co-authored-by: Schneelocke <[email protected]>
Co-authored-by: Micz Flor <[email protected]>
Co-authored-by: StefanMinke <[email protected]>
Co-authored-by: jrn <[email protected]>
Co-authored-by: Schneelocke <[email protected]>
Co-authored-by: ChrisSoc <[email protected]>
Co-authored-by: ChrisSoc <pi@exaberry>
Co-authored-by: miohna <[email protected]>
Co-authored-by: miohna <[email protected]>
Co-authored-by: jeripeierSBB <[email protected]>
Co-authored-by: Dominik Ach <[email protected]>
Co-authored-by: Florian Bachmann <[email protected]>
Co-authored-by: ChisSoc <[email protected]>
Co-authored-by: Patrick Beer <[email protected]>
Co-authored-by: Stefan Caliandro <[email protected]>
Co-authored-by: arne123 <[email protected]>
Co-authored-by: damaev <[email protected]>
Co-authored-by: DCH <[email protected]>
Co-authored-by: Varac <[email protected]>
Co-authored-by: [email protected] <[email protected]>
Co-authored-by: T0bi79 <[email protected]>
Co-authored-by: Tobias L. Maier <[email protected]>
Co-authored-by: Kiriakos Antoniadis <[email protected]>
Co-authored-by: Michael Weinrich <[email protected]>
Co-authored-by: bart1 <[email protected]>
Co-authored-by: Patrick Beer <[email protected]>
Co-authored-by: T0bi79 <[email protected]>
Co-authored-by: sebrep <[email protected]>
Co-authored-by: t0b3 <[email protected]>
Co-authored-by: TRO <[email protected]>
@arvidortwig
Copy link

Hi Folks,

don't know if its the right place to ask but i would like to use one of the buttons on my usb encoder (e.g. the start/pause-button) as shutdown button if i hold it for 2 seconds. the Script from "/home/pi/RPi-Jukebox-RFID/components/control/buttons-USB-Encoder/buttons-USB-Encoder.sh" shows the possibility to set a separate shutdown button but thats "to risky" if it works immediately. Any ideas ?

Thanks,
Arvid

@jeripeierSBB
Copy link
Contributor Author

Hi @arvidortwig

For myself a chose a similar solution: Pressing 10 times the pause button lets shutdown the phoniebox. Maybe this is a solution for you or inspires you to implement your idea.
I modified the buttons_usb_encoder.py as following:

#!/usr/bin/env python3

import sys
from threading import Timer

sys.path.append(".") # This command should be before imports of components

import logging
from evdev import categorize, ecodes, KeyEvent
from io_buttons_usb_encoder import button_map, current_device
from components.gpio_control.function_calls import phoniebox_function_calls


logger = logging.getLogger(__name__)
count = 0


def counterDecrease():
    global count
    count = count - 1


try:
    button_map = button_map()
    function_calls = phoniebox_function_calls()
    for event in current_device().read_loop():
        if event.type == ecodes.EV_KEY:
            keyevent = categorize(event)
            if keyevent.keystate == KeyEvent.key_down:
                button_string = keyevent.keycode
                if type(button_string) is list:
                    button_string = '-'.join(sorted(button_string))
                try:
                    function_name = button_map[button_string]
                    try:
                        getattr(function_calls, function_name)()
                        if function_name == 'functionCallPlayerPause':
                            count = count + 1
                            r = Timer(4.0, counterDecrease)
                            r.start()
                            if count >= 10:
                                function_calls.functionCallShutdown()
                        else:
                            count = 0
                    except:
                        logger.warning(
                            "Function " + function_name + " not found in function_calls.py (mapped from button: " + button_string + ")")
                except KeyError:
                    logger.warning("Button " + button_string + " not mapped to any function.")
except:
    logger.error("An error with Buttons USB Encoder occurred.")

@arvidortwig
Copy link

Hi @jeripeierSBB: Thank you very much for your script alteration. works like a charm ;)
Just had to rerun the setup script from the home directory because it was throwing me the components-missing error:

cd /home/pi/RPi-Jukebox-RFID
sudo ./components/controls/buttons-usb-encoder/setup...sh

@pampel2
Copy link

pampel2 commented Oct 8, 2021

Hi folks, thank you first of all for the great work! I am not sure, if that is the right place, but the documentation of the setup is a bit short and I am wondering, why the script is not working for me at all. I connected the "EG STARTS Nullverzögerung USB Encoder" with the USB port on the Raspberry Pi and connected six buttons with the first six K push button terminals. I made a fresh install of Raspian, installed the Phoniebox with GPIO Buttons, rebooted and run the setup script from the RPi-Jukebox-RFID-folder as root. When I pushed the buttons during the script, the response was correct and the script said, that the function is correctly mapped to the button. But after a restart into the phoniebox, the buttons do not work at all. Does anybody has any idea? I couldn't fight anything here or on the relevant forums. Thank you very much!

@jeripeierSBB
Copy link
Contributor Author

@pampel2 it sounds like your service is not running after configuration. Did you check with systemctl if the buttons usb encoder service is running? If so, please check if your installation directory is as following: /home/pi/RPi-Jukebox-RFID

@pampel2
Copy link

pampel2 commented Oct 9, 2021

@jeripeierSBB thank you very much for your quick reply. It looks like the service is not running, There are the services phoniebox-gpio, -rfid and -startup, but nothing with usb or encoder. Regarding the directory I am not sure how to see that. I run the script from the RPi... folder, but there is no file in this folder with usb or encoder in it (just in the relevant subfolder). How can I find out and how can I actually start the service manually? Thanks again!

@pampel2
Copy link

pampel2 commented Oct 11, 2021

I was able to solve the problem by running the script through a ssh. The rpoblem probably was, that I run the script while a usb keyboard, a mouse and a hdmi monitor were connected. When I disconnected these and run the script via ssh everything is working well. So thanks again for your quick help! But by the way one more question: is there a way to use the Joystick as input device for the phoniebox? When I connect it to the board, moves of the Joystick are not recognized by the script. But that could be a very interesting way to skip and adjust volume....

@arvidortwig
Copy link

@pampel2 @jeripeierSBB one more question to the use of buttons: is there any chance to set buttons from the usb-encoder to start a audio stream (e.g. webradio) instead of using the rfid-reader ? one button matches one folder or stream ?
It would be great to build your own "squeezebox" and have 4-6 buttons every one starting a different webradiostation.

Cheers,
Arvid

@jeripeierSBB
Copy link
Contributor Author

I was able to solve the problem by running the script through a ssh. The rpoblem probably was, that I run the script while a usb keyboard, a mouse and a hdmi monitor were connected. When I disconnected these and run the script via ssh everything is working well. So thanks again for your quick help! But by the way one more question: is there a way to use the Joystick as input device for the phoniebox? When I connect it to the board, moves of the Joystick are not recognized by the script. But that could be a very interesting way to skip and adjust volume....

Happy to hear that :-). I‘ve never experimented with the joystick, so I just don‘t know. But feel free to experiment with the script code, also PRs are welcome :-)

@jeripeierSBB
Copy link
Contributor Author

jeripeierSBB commented Oct 11, 2021

@pampel2 @jeripeierSBB one more question to the use of buttons: is there any chance to set buttons from the usb-encoder to start a audio stream (e.g. webradio) instead of using the rfid-reader ? one button matches one folder or stream ? It would be great to build your own "squeezebox" and have 4-6 buttons every one starting a different webradiostation.

Cheers, Arvid

Hi @arvidortwig . I think it should not be a technical problem, but you would need to implement this kind of configuration. PRs are always welcome :)

s-martin added a commit that referenced this pull request Dec 18, 2022
* Feature/gpio debugging (#1165)

* change logging

* functionCall in case of invalid read of btn

* adjust behavior to fix strange behavior in case of button press is not stead
y

* Set Own Repo

* Fix volume of startup sound (#1169)

Fixes #1167

* missing savepos-command in "playerstopafter"

As there is a savepos-command in "playerstop" this should also be included in "playerstopafter".

* Update buster-install-default.sh (#1181)

Added spacing

* Revert "Set Own Repo"

This reverts commit 6d504e5.

* Add base functionality for Bluetooth headphone integration

* Add Discussions link to Readme

* Update Mopidy Iris to 3.54.2 (#1161)

* Integrate bluetooth headphone toggle into Web Interface

* Fix bugs and default configuration after testing

* (maint) Minor typos, whitespace issues (#1214)

* Add GPIO function call for bluetooth audio toggle

* Create codeql-analysis.yml

* Update codeql-analysis.yml

* Change path to gpio_settings.ini

* Add mopidy extensions versions to script

* Fixes bug in folder tree, related to special chars

Resolving #469 by simplifying collapse IDs in folder tree.
Make use of integers for collapse IDs rather than folder names to avoid
problem with any kind of non-allowed characters as ID value.

Simplifies corresponding code as no character replacement is required
for collapse IDs anymore.

* 2021 calendar

* 2021 calendar

* Added stop on removal functionality example (#1209)

See #1049

* feat: GPIO Buttons over USB Encoder (#1249)

* feat: Buttons USB Encoder

Closes #1156

* change usb to uppercase USB

* added support for pc/sc readers

* Web App settings for swipe or place rifd (#1130)

* web app settings for #1122

* web app settings for #1122

* Include @Toqqi's review comments

Co-authored-by: s-martin <[email protected]>

* fix: let function_calls.py work with python 3.5 (#1253)

* Shortcuts volume commands of playout control (#1235)

* Shortcuts volume commands of playout control

* Moves debug control out of shorcutted block

* Fixes indentation

* Ensure ALSA is installed (#1255)

* Ensure ALSA is installed

* Fixed typo

* Added alsa to tests also

* Update README.md

* Preparing new file structure

* Increase functional robustness and adapt file locations

* Add Readme

* Improve performance in player.php by avoiding system calls

* removed old code

* Added chapter exts and minduration to global conf

* Removed the old variables from .sh script

* Fixed Socket Read for long content

* Improved Error-Handling with folders that have wrong permission.

* shutdownreducingvolume webUI

* Updated settings.php

* configured lang.php-files

* Update inc.setShutdownReduceVolume.php

* Updated inc.setShutdownReduceVolume.php

* Renamed to ShutdownVolumeReduction

* Changed at queue name to "r"

* shutdown also in at queue "r"

* enabled debug.log

* separate at queue for the shutdown

* Fixed: disabling the planned shutdown

* fix2 for disabling shutdown

* fix3: disabling "at" for the scheduled volume change

* added 4 controls for RFID

* updated description

* Add Readme

* Fix some formatting issues in Readme

* Change default to be w/o LED

* Spotify url conversion (http to mopidy format) (#1203)

* Added spotify url conversion

* Improved and translated error message

* Fix typos

* Fix typo

* Revert missing lines in htdocs/lang-*

* Re-enable start-up sound

* feat: keep USB Button Encoder settings during update

* Fix tabbed indentation to whitespace

* fix: handle list of keycodes in buttons usb encoder (#1285)

* fix: handle keycode lists in buttons usb encoder

* fix: sort key before joining to guarantee order

* Add documentation Complete Install Guide

* Correct typos in Complete Install Guide

* FF and Rewind added to GPIO_SETTINGS.ini (#1291)

* FF and Rewind added to GPIO_SETTINGS.ini

* Update gpio_settings.ini

* updating install information

* -Added addtional output formats matching the printed Card Numbers for the RDM6300 Reader
-Added XOR Checksum for the RDM6300 Output format (Wiegand26)
-Tried to Address the dependencie Topic of #1105 (untested)

* refactoring gpio-control to class

* Webplayer: Time Played Interpolation, Improvements (#1200)

* add mission date of 2.2 release (#1160)

* update to next version number

* fixed date for 2.2 release

* go back for commit to master

* Set Own Repo

* Revert "Set Own Repo"

This reverts commit 6d504e5.

* Interpolate played time to improve UX feeling (something is happening/playing)

* Solved problems of parallel put and get request of player.php

Co-authored-by: s-martin <[email protected]>

* implementing stop on removal for RC522 (see #1097); implementation proposed by @Toqqi in 786ecf4: (#1122)

Description from @Toqqi:
I used the signal python library to detect when a RC522 RFID reader stops reading in a card ID for one second.
This then triggers the playerpauseforce action in playout_controls.sh.

I then configured the second swipe action to be "resume playback" to achieve the play/pause effect when moving an RFID card to/from the reader.

* - Fixed unecessary code line
- improved comment

* fixed logging

* Update gpio_control.py (#1310)

BugFix functionCallTwoBtns

* Added read-for-card status LED GPIO control

Adds a status LED GPIO control that lights up the LED if the phoniebox
is ready (finished startup scripts, checked via systemctl). Type called
`StartupScriptsStatusLED`.

Comparison to MPDStatusLED:
MPDStatusLED lights up the LED if MPD is started which is (on a RPi
zero seconds) before the phoniebox is actually ready for its first card.
Therefore, another status LED indicating whether startup completely
finished appears useful.

* Added example/test config for status LED

Add an example config for the startup script status LED using GPIO 14
(UART TX). This combines a side effect of flashing once when RPi is
powered on and staying one once startup script finished.
Same config added to the gpio test config.

* Fix missing import (#1312)

* Added switchable audio iFaces

Adds a feature to switch between two audio iFaces (e.g.
speaker/headphone). Audio iFaces to swap are stored in files
`settings/Audio_iFace_Name_[01]` and need to be set manually, if feature
should be activated. The correlating volumes are stored in files
`Audio_Volume_Level_[01]`. Currently active iFace "ID" (0 or 1) is
stored in file `settings/Audio_iFace_Active` (default 0).

Scenario: You have equipped your Pi with a sound card that provides a
separate output (and volume control) for speaker and headphone, like the
WM8960 Hi-Fi HAT. This feature enables you to switch between the two
output. It can be triggered by RFID card or (not implemented) via GPIO
(button or switched jack). Compare discussion in #786.

Many room for extension of features:
- setting audio iFaces via WebUI
- display current audio iFace in WebUI + trigger for switch
- trigger switch via GPIO (not needed in my case :-))
- generalisation for more than two audio iFaces (simple to implement if
needed)
- multi volume control in WebUI and via RFID (not sure if handy)

* Drops MPDStatusLED in favour of general StatusLED

For backward compatibility `gpio_control.generate_device` accepts both
`device_type` "StatusLED" as well as "MPDStatusLED".
To be reduced to only "StatusLED" at some point.

* Fix unit test and remove Python 3.5 check (#1319)

* Update test_gpio_control.py

* Update test_gpio_control.py

* Remove Python 3.5 in Actions

* Remove stretch

See #1163

* (bugfix) stop on removal, incorporate switch (#1324)

The merge of #1122 missed @Toqqi comment
#1122 (comment)
which provided an update
(Toqqi@4e1a6fc) that incorporates the global switch, merged with #1130.

Now, "stop on removal" is an option and no must.

* Bugfix #1320  of arne123/RPi-Jukebox-RFID/tree/gpio-control_to_class (#1323)

* Bugfix of arne123/RPi-Jukebox-RFID/tree/gpio-control_to_class

This update form @arne123 fixes #1320 .
There was still a Bug in the Import of the class function. and here is my commit.

* Bugfix #1328  i2c_lcd.py

Removed string function to remove newline. Type error because trake_time contains binary.

Therefore using subprocess.check_output setting to remove newline with  universal_newlines

This fixes issue  #1328

* fix flake8 warnings (#1332)

* Align folder naming scheme (#1340)

* Use gpio_settings.ini for LED configuration (#1342)

* fix: move path append command back up (#1346)

Script can only be executed if sys.path.append(".") is executed before imports.
This bug (#1249 (comment))
was introduced with change #1332.

* Fix for Issue 1347: fix regexp (#1354)

* Update README.md

* Update README.md

* Ignore settings/PhonieboxInstall.conf (#1360)

* organizeFiles: I added a small script for conveniently organizing audio folders, linking them to RFID cards, finding audio folders that are currently not bound to any RFID card, and fixing broken links.

* organizeFiles script: advanced features regarding linking folders to RFID cards

* cli-player.py: script to play audio folders from command line

* organizeFiles.py: small fix

* minor

* Extended commands (e.g. for special Cards) to play random (surprise!) cards/folders or tracks.

* Fix spelling error in en-UK (#1367)

* added documentation as requested.

* Delete SPOTIFY-INTEGRATION.md (#1366)

* Delete SPOTIFY-INTEGRATION.md

#1238

* Updated Links to Spotify FAQ

* Fix typos (#1370)

* Update README.md (#1375)

Due to sloppy reading and not realizing where this documentation was located it took me a while to figure out what this folder was referring to. I thought I would clarify.

* move helper scripts

* README for helper scripts

* Update phoniebox-rfid-reader.service.stretch-default.sample (#1388)

* Update phoniebox-rfid-reader.service.stretch-default.sample

reducing cpu-load

* Update phoniebox-rfid-reader.service.stretch-default.sample

* Update documentation (#1386)

* Add headless install to complete installation guide as an option

* Reorganize structure

* Fix anchor link

* Correcting a few more issues

* Remove instructions to install Phoniebox with Desktop

* Clean-up and partial repair of the GPIO component (#1397)

* Edit GPIO sanmple configs: Removed misleading attribute hold_time for all ("Simple-")Buttons that do not have hold_repeat configured at all (today, hold_time will be ignored if hold_repeat is unset).
I kept the hold_time where hold_repeat was explicitely set to False so it could be re-enabled when needed.

* Fixed ShutdownButton: shutdown_button.py needs additional config parameters time_pressed, iteration_time and led_pin which gpio_control.py did not read and pass (has been added).
Instead, it read hold_repeat and hold_time which is not used by ShutdownButton (has been removed).

* Deprecated config options replaced: Button and ShutdownButton do not evaluate pull_up any more, instead they use pull_up_down today.

* Tested and repaired shutdown_button class:
- fixed import of SimpleButton (as in shutdown_button.py and two_button_control.py) since it threw an error under python 3.
- removed input params hold_repeat and hold_time since they are not used by any instance of ShutdownButton.
- configure LED GPIO port on init (LED flah function threw an error since GPIO was still uninitalized)
- renamed "status" to "cancelled" for better understanding
- enforce final LED switch off if action was cancelled early (might have stayed on if button was released during flashing)

* Create future1.md

* Workflows for Future3

* Bringing back prior (and new) button long-press actions (+extended documentation) (#1406)

* Added an optional countermeasure against button bouncing effects
(can be switched on via the config);
Enhanced verbosity of Button status on console output.

* Updated ShutdownButton:
- Optimized control logic (iteration_time was formerly forced to 200ms ignoring the config value)
- Renamed time_pressed to hold_time to match the corresponding name in SimpleButton base class
- Pass-through of antibounce feature
- Enhanced verbosity of ShutdownButton status on console output.

* Introduced support for different modes on button hold:
Changed hold_repeat flag (True/False) to hold_mode (textual). "hold_repeat = True" is "hold_mode = Repeat" now.
Added new hold_mode "Postpone" (as possible in earlier PhonieBox versions)

* Added new hold_mode "SecondFunc" for a different action after hold_time (as possible in earlier PhonieBox versions)

* Added new hold_mode "SecondFuncRepeated" for repeated executions of a different action after hold_time

* Updated TwoButtonControl:
- Pass-through of all relevant SimpleButton base parameters
- Enhanced verbosity of TwoButtonControl status on console output
- Updated VolumeControl.py (though this file is completely superfluous / redundant IMHO)

* Added more detailed GPIO component documentation to README.MD
Fixed several typos and issues in several ini files

* Added more functions that can be called by GPIO controls like buttons.
Extended documentation, e.g. more example configurations.

* Added auto-conversion of old/deprecated syntax within gpiocontrol.ini entries.
Removed special (and redundant) handling for controls if (and only if) the corresponding config sections is named "VolumeControl"

* Added the __init__.py I just forgot...

* Align path of requirements.txt

* Fix in future3 github workflow

* Update README.md (#1452)

I struggled with this for the 4th time on new phoniebox installations and most pinout graphs for these card leave the cable for IRQ out and although you can read a card on python phoniebox does not read anything. With the cable in place on that pin it works like a charm from the beginning.

* Add lsof (#1457)

* Update buster-install-default.sh

* Add lsof and other missing packages

* fix-alsa on buster-lite (#1467)

* Update buster-install-default.sh

* update test for alsa-utils

* omit inapropriate version evdev==0.7.0 (#1468)

see https://pypi.org/project/evdev/

* Adding a boot volume settings to be set in startup script after reboot (#1177)

* Adding boot volume value to config and startup script #1169

* Adding boot volume value to config and startup script #1169

* startup changing to boot volume

* comment in web app changed to boot

* Prepare Readme for 2.3

* facilitate transition to bullseye (#1469)

* facilitate transition to bullseye

in order to easily support the debian upgrade path (replace `buster` with `bullseye` in `/etc/apt/sources.list` and `/etc/apt/sources.list.d/*`)
this change helps transition from `php7.3` on buster to `php7.4` on bullseye
and use python3 for python which is valid on bullseye

* Update buster-install-default.sh

* Update buster-install-default.sh

* small changes: head -n and file prefix (#1423)

* replace head -1 by head -n 1 since this notation is depricated

* replace head -1 by head -n 1 since this notation is depricated

* playout_controls: my mopidy version need "file://" prefix

* Update README.md

* Update README.md

* Update README.md

* Update version-number

* Release 2.3 (#1476) (#1477)

* Fix Link in README.md

Fixes the installaion guide link in the README.md

* send mqtt data on swiped card event

actively watch for changes to Latest_RFID file and send out MQTT data

* Update README.md

* Update daemon_mqtt_client.py

* Update README.md

* Create requirements.txt

* Update README.md

* quickfix idle-watchdog with amixer

#1497

* Update gpio_settings.ini.sample

* Update gpio_settings.ini.sample

* Added sustainability notes in README

* adjust playerpauseforce

adjust playerpauseforce to only pauses when currently playing
see bug #1520

* Removed hard coded homedir from install script

* Enhanced automated tests

* Fixing permissions in docker image altuser

* Update future3.md

* Announce future3 Aplha 1 on develop branch Readme (#1547)

* Announce future3 Aplha 1

* Update version naming

* Increase server-side github flow checks for future3 branches

* Fix workflow file

* Indentation fix

* Dependency fix

* Add dependencies in future3 python + doc workflow

* Syntax fix in future3 python + doc workflow

* Path fix in future3 python + doc workflow

* Update readme: future3 is under active development and not stable yet

* [future3] Announce Alpha 2 Release

* Update README.md

The current README takes a long time to read until you understand that you should not use Version 3 in production yet. Which is why I added this link at the top - and left the version 3 part unchanged. Because it is the future and deserves presence, contributors, applause, testers and looooove

* move config settings to a dict

For more intuitive management of configuration settings, these reside in a global dict now. dict allows to comment out unused settings (like e.g. mqttCA, mqttCert, mqttKey) rather than having to set them to "".

* add "shutdownvolumereduction"

* calendar 2022

* calendar 2022

* #1309, #1451, #1691 Add user-agent to avoid 400-bad-requests from open.spotify.com.

* Readme update for future3 3.2 Beta release

* Fixed issue with reading podcasts xml including line breaks in the enclosure tag

* Fixed Comment

* Update broken 2.3 installation guide link

* fix after merge with dev

* fix(install): updates the URL and adds missing key (#1789)

* Split the line read from the deviceName.txt at ';'. (#1702)

The code snippet was copied over from Reader.py.experimental.Multi.

* Update README.md (#1626)

Fixed wrong path for 2.3 installation guide

Co-authored-by: Micz Flor <[email protected]>

* GPIO-Documentation in /docs is deprecated (#1525)

Article in the wiki has been updated, this one is deprecated -> maybe remove entirely?

* Fix git protocol for pip (#1791)

* Fix #1721

* Fix also spi installation

* Add french language to our favorite jukebox (#1793)

* fix(install): mopidy for spotify install (#1792)

* fix(install): mopidy for spotify install

* applying mopidy install fix here as well

* Create dependabot.yml

* Update dependabot.yml

* Bump actions/setup-python from 1 to 3 (#1821)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 1 to 3.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v1...v3)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/checkout from 2 to 3 (#1822)

Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump github/codeql-action from 1 to 2 (#1820)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix reported duration attribute via mqtt (#1787)

* fix reportet duration via mqtt

this adjusts the regex to get  the duration attribute from the status object.

* feat: use for duration the fallback time attribute

In some cases mpd does not report the duration of a track in
the mpd status response but usually a rounded value in the time
attribute. So lets use this as fallback value.

* Update README.md

* Update README.md

* Bump actions/setup-python from 3 to 4 (#1856)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 4.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* flexible php version in variable php_ini (#1849)

Follow-up for commit "facilitate transition to bullseye".
Bug: Since bullseye uses php7.4, php.ini will not be replaced by the sample
Solution: Read folder name in /etc/php and use it in variable php_ini, keeping compatibility with buster

* Run CI also on PRs (#1845)

* Update dockerimage.yml

* Update pythonpackage.yml

* Linting markdown and Python  (#1830)

* fix flake8 warnings

* fix markdownlint

* Fix code scanning alert (#1802)

Fixes https://github.com/MiczFlor/RPi-Jukebox-RFID/security/code-scanning/1

* Update version to 2.4

* Fix Command Injection and XSS vulnerabilities in trackEdit.php (#1862)

Signed-off-by: AL-KASSAR <[email protected]>

* feature: add repeat mode attribute to mqtt (#1807)

* feat: add repeat mode to mqtt attributes

* refactor: removes duplicated function

* docs: adds repeat_mode attribute to README

* refactor: extract method outside of main function

* chore: remove more duplicated code

* Bump php-mock/php-mock-phpunit from 2.5.0 to 2.6.1 (#1891)

Bumps [php-mock/php-mock-phpunit](https://github.com/php-mock/php-mock-phpunit) from 2.5.0 to 2.6.1.
- [Release notes](https://github.com/php-mock/php-mock-phpunit/releases)
- [Commits](php-mock/php-mock-phpunit@2.5.0...2.6.1)

---
updated-dependencies:
- dependency-name: php-mock/php-mock-phpunit
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump phpunit/phpunit from 8.5.30 to 9.5.25 (#1899)

Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 8.5.30 to 9.5.25.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/main/ChangeLog-8.5.md)
- [Commits](sebastianbergmann/phpunit@8.5.30...9.5.25)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix missing ps package

* Fix badges

* fix markdown warnings (#1902)

* fix flake8 warnings

* fix markdownlint

* fix markdown lint warnings

* Bump phpunit/phpunit from 9.5.25 to 9.5.26 (#1905)

Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.25 to 9.5.26.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/main/ChangeLog-9.5.md)
- [Commits](sebastianbergmann/phpunit@9.5.25...9.5.26)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update README.md for 2.4 (#1904)

* fix flake8 warnings

* fix markdownlint

* fix markdown lint warnings

* merge recent updates in install script buster-install-default-with-autohotspot.sh

* fix flake8 warnings

* prepare README.md for 2.4 release and little cleanup

* update buster-install-default-with-autohotspot.sh to recent changes (#1903)

* fix flake8 warnings

* fix markdownlint

* fix markdown lint warnings

* merge recent updates in install script buster-install-default-with-autohotspot.sh

* fix flake8 warnings

* dont use pytest-pythonpath anymore (obsolete)

* revert last commit

* Update README.md

Signed-off-by: AL-KASSAR <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: veloxidSchweiz <[email protected]>
Co-authored-by: Schneelocke <[email protected]>
Co-authored-by: Micz Flor <[email protected]>
Co-authored-by: StefanMinke <[email protected]>
Co-authored-by: jrn <[email protected]>
Co-authored-by: Schneelocke <[email protected]>
Co-authored-by: ChrisSoc <[email protected]>
Co-authored-by: ChrisSoc <pi@exaberry>
Co-authored-by: miohna <[email protected]>
Co-authored-by: miohna <[email protected]>
Co-authored-by: jeripeierSBB <[email protected]>
Co-authored-by: Dominik Ach <[email protected]>
Co-authored-by: Florian Bachmann <[email protected]>
Co-authored-by: manajoe <[email protected]>
Co-authored-by: ChisSoc <[email protected]>
Co-authored-by: Patrick Beer <[email protected]>
Co-authored-by: Stefan Caliandro <[email protected]>
Co-authored-by: arne123 <[email protected]>
Co-authored-by: damaev <[email protected]>
Co-authored-by: DCH <[email protected]>
Co-authored-by: Varac <[email protected]>
Co-authored-by: [email protected] <[email protected]>
Co-authored-by: T0bi79 <[email protected]>
Co-authored-by: Tobias L. Maier <[email protected]>
Co-authored-by: Kiriakos Antoniadis <[email protected]>
Co-authored-by: Michael Weinrich <[email protected]>
Co-authored-by: bart1 <[email protected]>
Co-authored-by: Patrick Beer <[email protected]>
Co-authored-by: T0bi79 <[email protected]>
Co-authored-by: sebrep <[email protected]>
Co-authored-by: t0b3 <[email protected]>
Co-authored-by: TRO <[email protected]>
Co-authored-by: robinjoerke <[email protected]>
Co-authored-by: Andreas Brett <[email protected]>
Co-authored-by: Philipp <[email protected]>
Co-authored-by: tobiasb <tobiasb@tobias-pc>
Co-authored-by: lenlennart <[email protected]>
Co-authored-by: Groovylein <[email protected]>
Co-authored-by: Groovylein <[email protected]>
Co-authored-by: pabera <[email protected]>
Co-authored-by: Andreas Brett <[email protected]>
Co-authored-by: u230412 <[email protected]>
Co-authored-by: Stephan Kessler <[email protected]>
Co-authored-by: Charles Vestal <[email protected]>
Co-authored-by: Peter Grauvogel <[email protected]>
Co-authored-by: climbit <[email protected]>
Co-authored-by: Christian Erhardt <[email protected]>
Co-authored-by: guidjome <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David K <[email protected]>
Co-authored-by: notapirate <[email protected]>
Co-authored-by: Feras Al-Kassar <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

🚀 | GPIO Buttons over USB Encoder
6 participants