Mausberry Shutdown Script Doesn't Save Metadata
-
@meleu that was in the original script from mauseberry. never had any issues. interesting that their code just constantly checks the gpio.
-
@lostless do they have a github repo or something?
-
@meleu they don't. just the download and install instructions on their website. But heres the script you download and install.
echo '#!/bin/bash #this is the GPIO pin connected to the lead on switch labeled OUT GPIOpin1=23 #this is the GPIO pin connected to the lead on switch labeled IN GPIOpin2=24 echo "$GPIOpin1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction echo "$GPIOpin2" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction echo "1" > /sys/class/gpio/gpio$GPIOpin2/value while [ 1 = 1 ]; do power=$(cat /sys/class/gpio/gpio$GPIOpin1/value) if [ $power = 0 ]; then sleep 1 else sudo poweroff fi done
-
@lostless said in Mausberry Shutdown Script Doesn't Save Metadata:
@meleu killed all switch functionality. As in it no longer functions as a shutdown switch.
is it killing the emulator/ES?
-
@meleu its not doing anything.
-
@lostless did you install
inotify-tools
? -
@meleu yes
-
@lostless OK, let's try with that expensive infinite loop just to check if the
inotifywait
part is bugging the script. Hold on a little... -
@meleu I'm trying my own Frankenste in script (taking the parts that i see may work)
-
@lostless please, try this one:
#!/bin/bash #this is the GPIO pin connected to the lead on switch labeled OUT GPIOpin1=23 #this is the GPIO pin connected to the lead on switch labeled IN GPIOpin2=24 echo "$GPIOpin1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction echo "$GPIOpin2" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction echo "1" > /sys/class/gpio/gpio$GPIOpin2/value file="/sys/class/gpio/gpio$GPIOpin1/value" while true; do power="$(cat "$file")" if [[ "$power" == 0 ]]; sleep 1 else emu_command="$(sed -n 4p /dev/shm/runcommand.info)" [[ -n "$emu_command" ]] && pkill -f "${emu_command%% *}" && sleep 5 espid=$(pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)") if [[ "$espid" ]]; then touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown kill "$espid" fi sudo poweroff fi done
-
@meleu your new script is still doing nothing and mine worked just like the 1.2.
-
@lostless helping with this blind coding is very hard. I'm giving up...
-
@meleu sounds good man. it was fun. the 1.2 works fine, a lot better then always losing meta data all the time.
-
@lostless where is this script placed? what directory?
-
@meleu location is /etc/switch.sh
-
@meleu My frankenstein script is working. Thank you so much for giving me insight. I know i didnt contribute anything to the code, but I feel like a kid in the 80/90s, discovering computers before they were made easy to use.
i found you need to give time for retroarch to quit and emulation station to reload before you try quit emulation station. i gave it 12 seconds. 5 was not enough, by the time the emulator quit, emulation station was not fully loaded back in.here is what i came up with
#!/bin/bash #this is the GPIO pin connected to the lead on switch labeled OUT GPIOpin1=23 #this is the GPIO pin connected to the lead on switch labeled IN GPIOpin2=24 echo "$GPIOpin1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction echo "$GPIOpin2" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction echo "1" > /sys/class/gpio/gpio$GPIOpin2/value while [ 1 = 1 ]; do power=$(cat /sys/class/gpio/gpio$GPIOpin1/value) if [ $power = 0 ]; then sleep 1 else # End Emulationstation if condition of running binary is true # v1.0 07/21/17 by cyperghost - Inital run # v1.1 07/22/17 - Added chown command to set right user permission for creating es-shutdown # v1.2 07/23/17 - Some small improvments, easier to maintain, removed echo, removed else branch # v1.works 7/27/17 (are we even trying to number this) @lostless figured it out. More time to quit emulator and reload emulation station before shutdown. @cyperghost thank you for initial run. @meleu thank you for your insight emu_command="$(sed -n 4p /dev/shm/runcommand.info)" [[ -n "$emu_command" ]] && pkill -f "${emu_command%% *}" && sleep 12 espid=$( pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)" ) # detect PID of ES binary only if [ "$espid" ]; then touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown kill $espid exit fi # End Emulationstation if condition of running binary is true sudo poweroff fi done
@cyperghost Thank you for the first script up to 1.2.
@hansolo77 give this a try. its working for me quite well. -
@lostless can you try this one:
#!/bin/bash #this is the GPIO pin connected to the lead on switch labeled OUT GPIOpin1=23 #this is the GPIO pin connected to the lead on switch labeled IN GPIOpin2=24 echo "$GPIOpin1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction echo "$GPIOpin2" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction echo "1" > /sys/class/gpio/gpio$GPIOpin2/value while [ 1 = 1 ]; do power=$(cat /sys/class/gpio/gpio$GPIOpin1/value) if [ $power = 0 ]; then sleep 1 else emu_command="$(sed -n 4p /dev/shm/runcommand.info)" [[ -n "$emu_command" ]] && pkill -f "${emu_command%% *}" && sleep 12 espid=$( pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)" ) if [ "$espid" ]; then touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown kill $espid exit fi sudo poweroff fi done
It's exactly the same script as your Frankenstein, but with a nice indentation. If it works I will try one step further...
I really would like to avoid that loop every single second! -
@hansolo77 said in Mausberry Shutdown Script Doesn't Save Metadata:
Testing v1.5 from here now....
Take away - Looks like the script is properly closing out of the game I'm playing and returning to ES for a shutdown, but it's not saving the metadata when it shuts that down. I wonder if it's getting hung up in the
if
functions, not finding a validtrue
and going to the bottom of the script to the original poweroff without exiting ES first...You are 100% right.... made a small mistake - I forget to add exit command to break loop! Thank you
So quick question... anybody know how to make a profile in Putty so it can automatically log in (username/password) so I don't have to keep typing it every time I try one of these tests? :)
@lostless - version 1.5 should work now!
Sorry... I forget to exit the loop thanks to @hansolo77 he helped me to detect the bug.Please mates try again with v1.5 of exit script (with working exit command now)
I give you 100% working guarantee on this ;) You maybe have to extend timer.
I would prefer this to @meleu solution because the sleep timer isn't used if there is no emulator running and the PID is detected and stored asThis script can be extended to play and/or control backgroundmusic for ex. because it extracts PID$espid
and$emupid
@meleu Do you think you can break the endless 1 second loop?
-
@cyperghost said in Mausberry Shutdown Script Doesn't Save Metadata:
@meleu Do you think you can break the endless 1 second loop?
yes.
I googled about how this device works and I think I found a solution. This is my last atempt...
Some notes about what I found:
-
this script is called at boot (/etc/rc.local)
-
After changing the script the user needs to reboot to check if it will work.
Some notes about the script below, v1.6 (OK, let's put a version to avoid confusion):
-
I think that at the time of calling the file we are monitoring doesn't exist (that's why I'm putting a
sleep
before monitoring the file. -
I'm not getting why the f&$%k that
exit
after killing ES is needed. It makes the script stop at theexit
, and then thesudo poweroff
won't be executed. The strange thing is that theexit
is present on v1.2 and @lostless says that it's working... -
before this script needs the
inotify-tools
installed.
#!/bin/bash # Before using this script you need to install inotify-tools: # # sudo apt-get install inotify-tools # # I'm just trying to help with the script logic here. # I DON'T HAVE A MAUSEBERRY AND DIDN'T TEST THE GPIO STUFF HERE! # ######################################################### # U S E I T A T Y O U R O W N R I S K ! ! ! # ######################################################### # # meleu - July/2017 # kudos for @cyperghost , who is very persistent in help you guys! :-) #this is the GPIO pin connected to the lead on switch labeled OUT GPIOpin1=23 #this is the GPIO pin connected to the lead on switch labeled IN GPIOpin2=24 echo "$GPIOpin1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction echo "$GPIOpin2" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$GPIOpin2/direction echo "1" > /sys/class/gpio/gpio$GPIOpin2/value file="/sys/class/gpio/gpio$GPIOpin1/value" # up to here this code is executed at booting (/etc/rc.local) # let's wait for the creation of the "/sys/class/gpio/gpio$GPIOpin1/value" sleep 30 # not sure if 30 seconds is a good value... while inotifywait -qq -e modify "$file" ; do power="$(cat "$file")" [[ "$power" == 0 ]] && continue emu_command="$(sed -n 4p /dev/shm/runcommand.info)" [[ -n "$emu_command" ]] && pkill -f "${emu_command%% *}" && sleep 12 # the value of 12 was suggested by @lostless espid=$(pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)") if [[ "$espid" ]]; then touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown kill "$espid" # I'm not getting why the heck this exit is necessary, it makes # the "sudo poweroff" not be executed if the logic reaches this point exit fi sudo poweroff done
-
-
@meleu That's easy....
The exit is needed becasue it ends the mausberry GPIO script and gives control toemulationstation.sh
for proper exitCan you please exchange your lines
emu_command="$(sed -n 4p /dev/shm/runcommand.info)" [[ -n "$emu_command" ]] && pkill -f "${emu_command%% *}" && sleep 12 # the value of 12 was suggested by @lostless
with this one?
emupid="$(sed -n 4p /dev/shm/runcommand.info)" #v1.5 @meleu readout 4th line command.info emupid="$(pgrep -f "${emupid%% *}")" #v1.5 optain PID emucall by runcommand.sh if [ "$emupid" ]; then #v1.5 check correct PID > avoid sleeptimer if shutdown from ES kill $emupid && sleep 10 fi
It is really the better way. Because you check value of command.info ... this value will also be active if you are back in ES so your[[ -n "$emu_command" ]]
is always true and the sleep timer will used in every situation. Even if an emulator is not active. So this would be the last version called 1.6 release :)This is my last atempt...
Haha ... we will see my friend :)
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.