Lancer Rhasspy au démarrage du raspberry

installation venv

Dans le cadre d’une installation dans un environnement virtuel python, nous allons créer un service qui sera lancé au démarrage. Simple et efficace.

problème avec supervisord.conf

<MISE A JOUR>

On oublie ce que j’avais écris avant, une petite astuce fonctionnelle a été postée sur le ticket de bug github.

Création du service

On crée donc notre nouveau service Rhasspy :

sudo nano /etc/systemd/system/rhasspy.service

puis on colle ceci à l’intérieur

[Unit]
Description=Rhasspy
After=syslog.target network.target

[Service]
Type=simple
WorkingDirectory=/home/pi/rhasspy
ExecStart=/bin/bash -c './rhasspy.sh --profile fr  --user-profiles /home/pi/.config/rhasspy/profiles 2>&1 | cat'
User=pi
RestartSec=1
Restart=on-failure

StandardOutput=syslog
StandardError=syslog

SyslogIdentifier=rhasspy

[Install]
WantedBy=multi-user.target

CTRL+O et CTRL+V pour enregistrer et quitter.

On demande à systemctl de lire notre nouveau service Rhasspy

sudo systemctl daemon-reload

On active Rhasspy à chaque démarrage de notre raspberry

sudo systemctl enable rhasspy

Et on le démarre pour vérifier que tout fonctionne

sudo systemctl start rhasspy

Pour s’assurer que tout fonctionne, on attend une dizaine de secondes et on va regarder dans syslog si tout est OK

sudo cat /var/log/syslog

Et on doit trouver ces 2 lignes

rhasspyserver_hermes: Starting web server at http://0.0.0.0:12101
Running on 0.0.0.0:12101 over http (CTRL + C to quit)

Il n’y a plus qu’à redémarrer notre raspberry et s’assurer que là encore, notre Rhasspy démarre correctement.

8 Comments

  1. Bonjour cedcox,
    Je vais essayer de faire court… j’ai pu faire fonctionner Rhasspy[docker] sans problème. j’ai donc pour des raisons de dev modifier mon Raspberry pi 4 en déplacant le systeme sur un petit SSD. Il fonctionne à merveille .
    J’ai donc décider de passer sur un environnement virtuel . j’ai finalement une erreur lors du lancement avec un “supervisor non trouvé”
    voici le syslog :
    ***************************************************
    Dec 21 14:29:47 raspberrypi systemd[1]: Started Rhasspy.
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: Starting up…
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: Using virtual environment at /home/pi/rhasspy/.venv
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Namespace(debug=True, docker_compose=”, local_mqtt_port=12183, profile=’fr’, supervisord_conf=’supervisord.conf’, system_profiles=None, user_profiles=PosixPath(‘/home/pi/.config/rhasspy/profiles’))
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Loading profile fr (user=/home/pi/.config/rhasspy/profiles, system=None)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspyprofile.profile:Loading /home/pi/rhasspy/rhasspy-profile/rhasspyprofile/profiles/fr/profile.json
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspyprofile.profile:Loading /home/pi/.config/rhasspy/profiles/fr/profile.json
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Generating supervisord conf
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Microphone disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Speakers disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Wake word disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Speech to text disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Intent recognition disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Intent handling disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Text to speech disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Dialogue disabled (system=dummy)
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: DEBUG:rhasspysupervisor:Wrote /home/pi/.config/rhasspy/profiles/fr/supervisord.conf
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: Starting services…
    Dec 21 14:29:48 raspberrypi rhasspy[1329]: Using virtual environment at /home/pi/rhasspy/.venv
    Dec 21 14:29:49 raspberrypi rhasspy[1329]: Using virtual environment at /home/pi/rhasspy/.venv
    Dec 21 14:29:49 raspberrypi rhasspy[1329]: /home/pi/rhasspy/bin/voltron-run: ligne 48 : exec: supervisord : non trouvé
    Dec 21 14:29:49 raspberrypi systemd[1]: rhasspy.service: Succeeded.
    ***********************************
    Une idée ?
    bien cordialement,
    et un grand merci pour tes aides
    Pascal

    • Bonjour,

      Alors comme ça je dirai qu’effectivement supervisord n’est pas installé. Etrange…
      Essaye de l’installer via cette ligne :
      sudo apt install supervisor

      Cédric

  2. Bonjour Ced,
    Je passe par ce topic pour le script de la mise à jour de Rhasspy.
    Question : si l’on lance une demande de mise à jour alors qu’on dispose de la dernière version le script renvoi une erreur comme quoi on possède déjà la dernière version d’où l’impossibilité d’exécuter l’opération ou efface t-il quand même le conteneur et le recrée automatiquement comme s’il s’agissait d’une mise à jour.

    Merci.

    • Bonjour Hervé,

      Effectivement, j’avais oublié d’activer les commentaires sur l’article des mises à jour. C’est corrigé 🙂
      Voici ce que ça donne lorsque je relance un pull alors que je suis toujours à jour :
      pi@rasp-test:~ $ docker pull rhasspy/rhasspy
      Using default tag: latest
      latest: Pulling from rhasspy/rhasspy
      Digest: sha256:885580155f24e4e91e9eca43e32e1c4223486278e45284911fd57fe4478b9a83
      Status: Image is up to date for rhasspy/rhasspy:latest
      docker.io/rhasspy/rhasspy:latest
      pi@rasp-test:~ $

      Donc, il ne re-télécharge rien et ne recrée pas ton conteneur lorsque l’image est à jour.
      Par contre, si il met à jour l’image, alors il te faudra redémarrer ton conteneur pour qu’il le mette à jour.

      Ced

  3. Bonsoir Ced,
    J’ai surement loupé quelque chose.
    Cette procédure concerne uniquement un environnement virtuel ou aussi Docker.
    Pour mon installation Docker je suis parti de la création de service et au reboot Rhasspy ne se lance pas. Je suis toujours obligé de lancer mon conteneur en ligne de commande.

    Hervé

    • Bonjour Hervé

      Si tu as une image Docker, seule la page 2 du tutoriel est nécessaire. La page 3 n’est que pour ceux qui ont installé Rhasspy dans un environnement python virtuel (via les commandes git).

      Je t’ai répondu directement et plus longuement par mail 🙂

      Ced

  4. Bonjour Cédric,
    Heureux de voir que tes travaux semblent toucher à leur fin vu ton retour avec 3 nouveau articles en 2 jours.
    Du coup j’ai essayé de les mettre en pratique.
    Lancement automatique de Rhasspy au démarrage et du script de maj (je travail avec une installation Docker) et j’ai comme erreur pour les 2 comme quoi la liaison ne pouvait être effectuée car le port était déjà occupé.
    ” docker: Error response from daemon: driver failed programming external connectivity on endpoint keen_leavitt (e1e23c048575ddb222811e19b4eb9cf68098ec3afebd13d6cee6f8d23e10653d): Bind for 0.0.0.0:12101 failed: port is already allocated.
    ERRO[0003] error waiting for container: context canceled

    Donc me revoila avec mes soucis lol.
    Hervé

    • Bonjour Hervé,

      Cette erreur signifie que tu as déjà le port 12101 d’utilisé donc qu’il y a déjà certainement une instance de Rhasspy déjà lancée.
      Dans un premier temps, liste les conteneurs Rhasspy en cours d’exécution :
      docker container ls

      Il devrait te renvoyer une ligne comme ceci :
      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      5c79353b0837 rhasspy/rhasspy "bash /usr/lib/rhass…" 5 minutes ago Up 36 seconds 0.0.0.0:12101->12101/tcp affectionate_wilson

      Maintenant qu’on a le nom du conteneur (affectionate_wilson), on va arrêter cette instance :
      docker stop affectionate_wilson

      On vérifie qu’il n y a plus d’instance avec la première commande plus haut, et tu peux exécuter celle dans cet article (avec -d –restart unless-stopped \).

      En espérant que ça résoudra le soucis !

      Ced

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.