mirror of
https://github.com/deunix-educ/voice-assistant.git
synced 2026-10-13 00:11:57 +02:00
Assistant vocal local ESP32 : étapes 1 à 15, et 15b écrite
État du projet au premier commit : - firmware ESP32 : micro I2S, lecture anti-gigue, MQTT (état retenu, testament), mains libres, domotique de démonstration, chien de garde, présence du serveur ; - serveur Python : sessions, VAD, faster-whisper, pyannote, identification, droits par profil, domotique, mot de réveil, Piper ; - broker Mosquitto : configuration, comptes et ACL (non activés en développement) ; - étape 15b écrite, en attente d'essai : agent MQTT pour machines Linux. Étapes 1 à 15 validées. 203 tests, pyright sans erreur. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# Droits par topic de l'assistant vocal (étape 15), pour Mosquitto 2.x.
|
||||
#
|
||||
# Tout ce qui n'est pas permis ici est INTERDIT, et Mosquitto refuse en silence :
|
||||
# une publication interdite est jetée sans erreur côté client, un abonnement
|
||||
# interdit ne reçoit simplement rien. Symptôme typique : « tout est connecté,
|
||||
# mais rien ne se passe ».
|
||||
|
||||
# Le serveur vocal, et les outils du Makefile qui prennent ses identifiants
|
||||
# (mqtt-watch, tone-mqtt, play-mqtt...) : tout voice/, la domotique home/ et les
|
||||
# agents Linux agent/ (étape 15b).
|
||||
user voice-server
|
||||
topic readwrite voice/#
|
||||
topic readwrite home/#
|
||||
topic readwrite agent/#
|
||||
|
||||
# Chaque carte : SES topics seulement. %u est remplacé par le nom d'utilisateur
|
||||
# MQTT, qui est donc le DEVICE_ID de la carte (esp32-01). Une carte ne peut ni
|
||||
# écouter le micro d'une autre, ni publier sous son nom.
|
||||
pattern write voice/%u/state
|
||||
pattern write voice/%u/event
|
||||
pattern write voice/%u/audio/in
|
||||
pattern write voice/%u/audio/stream
|
||||
pattern read voice/%u/control
|
||||
pattern read voice/%u/audio/out
|
||||
|
||||
# Chaque agent Linux (étape 15b) : compte = son id (pc-bureau). Il ne reçoit que SES
|
||||
# commandes : sans ces droits, n'importe qui pourrait éteindre toutes les machines.
|
||||
pattern write agent/%u/state
|
||||
pattern write agent/%u/result
|
||||
pattern read agent/%u/command
|
||||
|
||||
# Présence du serveur (« online », ou « offline » publié par son testament) :
|
||||
# toutes les cartes la lisent, pour couper leur micro quand il disparaît.
|
||||
# Au démarrage, Mosquitto prévient « ACL pattern 'voice/server/status' does not
|
||||
# contain '%c' or '%u' » : c'est voulu (le même topic pour tous), et la règle
|
||||
# s'applique bien (vérifié).
|
||||
pattern read voice/server/status
|
||||
@@ -0,0 +1,48 @@
|
||||
# Configuration Mosquitto 2.x de l'assistant vocal.
|
||||
#
|
||||
# Deux façons de l'utiliser :
|
||||
# - service Debian : `make mosquitto-config` (copie vers /etc/mosquitto/conf.d/) ;
|
||||
# - conteneur Docker : monter ce fichier comme /mosquitto/config/mosquitto.conf
|
||||
# (voir docs/MOSQUITTO.md).
|
||||
#
|
||||
# Piège n°1 : sans « listener » explicite, Mosquitto 2.x n'écoute QUE sur
|
||||
# localhost. L'ESP32 ne peut alors pas se connecter, alors que mosquitto_sub
|
||||
# fonctionne très bien sur la machine elle-même.
|
||||
#
|
||||
# Piège n°2 : UN SEUL « listener » par port. Deux lignes « listener 1883 »
|
||||
# font planter le broker au démarrage (« Error: Address in use ») ; dans un
|
||||
# conteneur en « restart: unless-stopped », il redémarre alors en boucle.
|
||||
|
||||
listener 1883 0.0.0.0
|
||||
|
||||
# Étape 15 : plus d'accès anonyme. Chaque client a un compte (make mqtt-user),
|
||||
# et le fichier acl dit qui peut lire ou écrire quel topic : une carte ne lit
|
||||
# que ses commandes, et personne d'autre que le serveur n'entend les micros.
|
||||
# Chemins du conteneur Docker ; « make mosquitto-config » les adapte au service
|
||||
# Debian (/etc/mosquitto/).
|
||||
#
|
||||
# Piège n°4 : TOUS les clients de ce broker ont désormais besoin d'un compte,
|
||||
# y compris ceux d'autres projets qui l'utilisaient sans mot de passe.
|
||||
allow_anonymous false
|
||||
password_file /mosquitto/config/passwd
|
||||
acl_file /mosquitto/config/acl
|
||||
|
||||
# Taille maximale d'un paquet MQTT complet (en-tête et topic compris).
|
||||
# Un chunk audio fait 1600 octets : 8192 laisse une large marge.
|
||||
# (remplace « message_size_limit », obsolète depuis Mosquitto 2.0)
|
||||
max_packet_size 8192
|
||||
|
||||
# Journal sur la sortie standard : visible avec `docker logs` dans un conteneur,
|
||||
# et dans `journalctl -u mosquitto` avec le service Debian.
|
||||
# Piège n°3 : « log_dest syslog » dans un conteneur n'écrit nulle part, et un
|
||||
# plantage au démarrage devient invisible.
|
||||
log_dest stdout
|
||||
log_type error
|
||||
log_type warning
|
||||
log_type notice
|
||||
log_type information
|
||||
connection_messages true
|
||||
|
||||
# Pas de persistance : les messages audio n'ont aucun intérêt après coup, et
|
||||
# l'état « retenu » de l'ESP32 est republié à chaque connexion.
|
||||
persistence false
|
||||
Reference in New Issue
Block a user