Close

History of Changes

A project log for Speak To Me: A Button Box

A project to make life easier for my 91 year old father, who has hearing and eyesight loss as well as severe short term memory issues.

don-mitchinsonDon Mitchinson 05/24/2023 at 21:350 Comments

# Speak To Me #
# ***********
# TESTED ON: Python 3.9 on Raspbian Bullseye 64 bit (May 5 2023 release)
#
# Version 1.39 (May 20, 2023)
#   Fix AM/PM reading for times between 4 and 6 PM
#
# Version 1.38 (May 14, 2023)
#   Change bouncetime to 100ms
#   Add 0.1 seconds sleep before checking input
#
# Version 1.37 (May 14, 2023)
#   CHange bouncetime=100
#   Debug statements for initial log file open
#   pause slightly after reading log file close
#   add sys.stdout.flush() after closing log file for read
#   add TIME_PRESSED to check for elapsed time and ignore quick press
#   set default start time to 0
#   add delay after say_phrase before calling subprocess
#
#   ??? use DEVNULL   for stdin does it defaukt to subprocess.PIPE???
#   ??? or use universal_newlines=True if it's a problem with ^M is lines
#   change log file open to log = open(name, "w", 1)  # line-buffered
#   log.flush() in the main processes has no effect on the file buffers in the child processes
#
# Version 1.36 (May 13, 2023)
#   Check for internet connected inside say_phrase(sayAloud...
#   Play a prerecorded phrase when internet is down and don't exit program
#   Pull everything out of function and put into GPIO callback button and it works
#   add in folderName and description variables to GPIO if clause
#
# Version 1.35 (May 12, 2023)
#   Test code using Red button to call playAudioFromFolder("news", "CBC WORLD NEWS")
#   
# Version 1.34 (May 12, 2023)
#   Set home_dir to script path
#   Change name of Client Secret File constant to CALENDAR_OAUTH_FILE
#   Test Green button to see if it will play from last spot stopped
#   Attempted to use SIGKILL to stop sox process when program killed but was not saving Aborted message in log file
#   Use SIGTERM when button pressed to retain ABORTED message in SOX Play log file
#
# Version 1.33 (May 10, 2023)
#   Check test GREEN button using trim parameter with stop/start and different times
#   Set SOX_CMD to full play path
#   Remove PLAYING_AUDIO constant - use SOX_ID instead
#
# Version 1.32 (May 9, 2023)
#   Add process ID to Audio Folder play function
#   Merge today and tomorrow's events into one button
#   Use another button for Audio Folder chapters
#   Add global SOX_ID to Audio Folder function
#
# Version 1.31 (May 9, 2023)
#   Test kill of subprocess when 4th button clicked
#   Stop playback if button press causes Sox process to be killed
#
# Version 1.30 (May 9, 2023) - edited from v 1.27
#   Add cbc news to 4th button
#
# Version 1.27 (April 20, 2023)
#   Get start end dates collection before any announce events call

# Version 1.26 (April 6, 2023)
#   Use shlex.split for popen args
#   add delay after popen
#   use creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP (windows)
#   start_new_session=True
#
# Version 1.25 (April 5, 2023)
#   Use sox -d instead of play
#   Change play command to use -d for sox device and - ta alsa to hide encode error
#   hard code home directory instaed of os.getcwd to work with rc.local
#   Tested use with rc.local and shell script
#   Change say_phrase back to using play command
#
# Version 1.24 (April 3, 2023)
#   Test version with cancelling GPIO inputs while button pressed
#
# Version 1.23 (March 29, 2023)
#   Change kill process  back to SIGTERM
#   Split play command into array for all items separated by white space
#   Change subprocess.Popen call to specify executable parameter
#
# Version 1.22 (March 26, 2023)
#   Try to find out why process can't be killed
#   Split command into arguments and try running Popen with shell = False
#   Make sure to install latest RPi.GPIO (pip install RPi.GPIO==0.7.1)
#   Find way to add to rc.local to start program and exit (using nohup?)
#
# Version 1.20 (March 23, 2023)
#   Use terminate command for SOX_PROCESS instead of SIGTERM signal
#   Remove EXEC command in order to kill subprocess later
#   Add communicate after kill process
#
# Version 1.19 (March 23, 2023)
#   Add back in SUBPROCESS for call/Popen to use for termination
#
# Version 1.18 (March 23, 2023)
#   Use -t alsa to get rid of ALSA warning message
#   Fix subprocess to play mp3 chapters and save to log file with -t alsa
#   Replace Popen with Call and split of arguments for subprocess
#
# Version 1.17 (March 18, 2023)
# Convert to latest Raspbian Bullseye 64 edition Feb 2023
# Use os.getcwd to set home_dir foldername for paths
# Eliminate trying to say phrase when Internet connection not found
#   Change Button1_GPIO to GPIO 4
#
# Version 1.16 (December 17, 2022)
#       Set environment variables to remove fork errors from grpcio
#
# Version 1.15 (December 11, 2022)
#       Assign meal times to blue button
#       Fix syntax error
#       Assign COLOR constants using GPIO constants
#
# Version 1.14 (December 7, 2022)
#       Remove leading zero from time of day hours
#       Remove deleted events (showing up as CANCELLED)
#       Fix detail of time of day for morning, afternoon and evening
#       Add split character to handle spaces in audio play filename
#       Notify aloud if no internet connection to Google
#       Fix button to say today and tomorrow
#
# Version 1.11 (September 4, 2022)
#       Modify buttons 3 and 4 to say TODAY and TOMORROW
#
# Version 1.10 (August 8, 2022)
#       Insert Audio Folder error message before playing
#       Check for no sox log file to restart playing at first file
#
# Version 1.09 (June 26, 2022)
#       Add NOSTART argument  for testing
#       Adjust meal start times
#       Modify AM/PM to morning, afternoon, evening
#       Trim code to use one call back function with code dependent GPIO channel
#
# Version 1.06 (April 16, 2022)
#       Use full path to sox play command
#       Add audio folder description to playing audio phrase
#
# Version 1.05 (April 7, 2022)
#       Add second audio folder to play audio from
#       Replace AUDIO with AUDIO1 and AUDIO2 parameters on startup
#       Modify buttons to group meal and today/tomorrow
#       Modify buttons to play second audio folder
#       Modify Play_audio_from_folder to pass folder name
#       Modify sox log file to use audio folder
#       Remove welcome message from future events
#
# Version 1.04 (March 21, 2022)
#       Swap today/tomorrow with play audio folder buttons
#       Fix am to say A.M.
#
# Version 1.03 (March 17, 2022)
#       Add extra message for playing audio to use button to stop
#       Attach new button GPIOs 
#       Add events for buttons 
#
# Version 1.02 (March 6, 2022)
#       Add GPIO interrupts to test for button pushes
#       Add Internet connection testing
#
# Version 1.01 (March 1, 2022)
#       Add Audio option to play files in order from folder
#
# Version 1.00 (Feb 28, 2022)
#       Google TextToSpeech (TTS),
#       Google Calendar API,
#       sox audio player to play files from folder of mp3s
# ********************************************************

Discussions