vendredi 31 janvier 2020

Retrogaming: quelques scripts RecalBox basiques et comment je les utilises

En fait, dans cet article (...court ;-) je mets juste quelques scripts super simple pour vous montrer ce que cela peut apporter à Recalbox de faire des scripts python ou shell... et cela peut aussi vous donner des idées pour vous par la suite...

1) Un script pour refaire ma collection :

En fait quand je modifie les règles du script "gamelistpower" comme présenté ici, je dois changer d'abord en SSH le contenu du fichier rules_gensh.xml donc j'ai fait un script que je peux lancer juste après et qui me relance EmulationStation, parce que je ne veux pas le faire à partir du menu collections, je trouve cela risqué si on fait une fausse manip ;-(.

Donc le voici:

#!/bin/sh
#authorize read/write
mount -o remount,rw /
#go to gamelistpower
cd /recalbox/scripts/gamelistpower
#launch to recreate collection (if neww roms or if you have new rules from rules_gensh.xml) 
python gamelistpower.py generate_sh info
#restart emulationstation (it's enough, no need to reboot in this case ;-)
curl -H "Content-Type: application/json" -X POST "http://recalbox/post?action=reboot-es"

Dans mon cas, je ne reboot pas, pas besoin, je relance EmulationStation via le manager de Recalbox en appelant l'API.

2) J'ai aussi un script encore plus simple pour sauvegarder dans le cloud manuellement avant d'attendre la fin d'un reboot ou d'une extinction du raspberry pi :

edit 23-02-2020: j'ai amélioré le script pour mieux gérer si pas de connexion internet (j'essai 3 fois ;-)


#!/bin/bash
# check that is online to run the first sync command
COUNTER=0
while [ $COUNTER -lt 3 ]
do
        #echo "loop counter is equal to: $COUNTER"
        if [[ "$(ping -c 1 8.8.8.8 | grep ' 0% packet loss' )" == "" ]]; then
                echo "Internet isn't present"
        else
                echo "Internet is present"
                # Run the command that will execute only once at the start
                /usr/bin/rclone copy /recalbox/share/saves/ remote:saves &
                wait $!
                break
        fi
        COUNTER=$[$COUNTER+1]
done

J'ai fait ces script pour les appeler avec Alexa via  ma domotique Jeedom à terme. Ainsi je peux les utiliser avec jeedom et en utilisant le plugin SSH :




Donc voilà, je l'avais dis, c'est simple mais avec de simple script piloté via un plug-in SSH, on peut faire pleins de chose et même le piloter à la voix avec Alexa par exemple.

Il faudra un jour que je vous explique comment je fais cela mais cela sera dans un autre article, désolé :-(

3) Un script python de "test" maintenant pour savoir le nombre de joueur max pour un jeu lancé ;-)... vous verrez plus tard que c'est bien utile pour mon projet de panel arcade 4 joueurs...

A mettre dans le repertoire /recalbox/scripts/gamelistpower pour bénéficier de cette librairie de script ;-) :


#!/usr/bin/env python

#IMPORT STD---------------------------------------------------------------------

import os.path

import sys

import time

import shutil

import argparse

from os.path import basename, splitext

from threading import Thread



#IMPORT NORDICPOWER------------------------------------------------------------                           

from glplib import *



#CONSTANTS---------------------------------------------------------------------                           

VERSION='0.0.1 BETA 26/01/2020'

SOURCE_NAME='BozoTheGeek'



#------------------------------------------------------------------------------                           

#---------------------------------------- MAIN --------------------------------                           

#------------------------------------------------------------------------------

def main():

  #Init Log

  logger=Logger.logr

  #if args.log==ARG_LOG_DEBUG:

  Logger.setLevel(logging.DEBUG)

  #elif args.log==ARG_LOG_INFO:

  #       Logger.setLevel(logging.INFO)

  #elif args.log==ARG_LOG_ERROR:

  #       Logger.setLevel(logging.ERROR)

  Logger.add_handler_console()
 

  #Chargement XML avec MiniDom :-<

  #test 1 OK

  #System = 'mame'

  #FullRomLocation = '/recalbox/share/roms/mame/outrun.zip'

  #test 2 OK

  #System = 'n64'

  #FullRomLocation = '/recalbox/share/roms/n64/Legend\ of\ Zelda,\ The\ -\ Majora\'s\ Mask.z64'

  #test 3 OK

  #System = 'megadrive'

  #FullRomLocation = '/recalbox/share/roms/megadrive/Sonic\ \&\ Knuckles\ \(World\).zip'

  #test 4 OK

  #System = 'snes'

  #FullRomLocation = '/recalbox/share/roms/snes/Tiny\ Toon\ Adventures\ -\ Wild\ \&\ Wacky\ Sports\ \(Europe\)\ \(Beta\).zip'

  #test 5 OK

  #System = 'neogeo'

  #FullRomLocation = '/recalbox/share/roms/neogeo/mslug3b6.zip'   

  RomsDirectory = FullRomLocation.split(System)[0]

  Rom = FullRomLocation.split(System)[1]

  #to remove \ if necessary

  Rom = Rom.replace("\\","")

  gamesList = GamesList()


  gamesList.import_xml_file(RomsDirectory + System + os.sep + NOM_GAMELIST_XML,True)

  logger.info('OK, file imported:' + RomsDirectory + System + os.sep + NOM_GAMELIST_XML)

  logger.info('Rom to find : ' + Rom)

  game = gamesList.search_game_by_path ('.' + Rom)

  logger.info('file found, the game name is :' + game.name)

  logger.info('the max number of player is : ' + game.players[-1])


  sys.exit(0)



#---------------------------------------------------------------------------------------------------

if __name__ == '__main__':

  main()

Et voilà, c'est tout pour ce soir, mais bientôt je vais vous expliquer quoi faire de ce script qui compte les joueurs ... (teaser ;-)

Enjoy !

Aucun commentaire :

Enregistrer un commentaire