# Reference * [Supported Languages](#supported-languages) * [HTTP API](#http-api) * [Websocket API](#websocket-api) * [MQTT API](#mqtt-api) * [Command Line](#command-line) * [Profile Settings](#profile-settings) ## Supported Languages The table below lists which components and compatible with Rhasspy's supported languages. | Category | Name | Offline? | en | de | es | fr | it | nl | ru | el | hi | zh | vi | pt | sv | ca | | -------- | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | | **Wake Word** | [pocketsphinx](wake-word.md#pocketsphinx) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | [porcupine](wake-word.md#porcupine) | ✓ | ✓ | | | | | | | | | | | | | | | | [snowboy](wake-word.md#snowboy) | *requires account* | ✓ | • | • | • | • | • | • | • | • | • | • | • | • | • | | | [precise](wake-word.md#mycroft-precise) | ✓ | ✓ | • | • | • | • | • | • | • | • | • | • | • | • | • | | **Speech to Text** | [pocketsphinx](speech-to-text.md#pocketsphinx) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | | ✓ | | | [kaldi](speech-to-text.md#kaldi) | ✓ | ✓ | ✓ | | ✓ | | ✓ | | | | | ✓ | | ✓ | | | **Intent Recognition** | [fsticuffs](intent-recognition.md#fsticuffs) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | [fuzzywuzzy](intent-recognition.md#fuzzywuzzy) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | [adapt](intent-recognition.md#mycroft-adapt) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | [flair](intent-recognition.md#flair) | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | | | | | | ✓ | | ✓ | | | [rasaNLU](intent-recognition.md#rasanlu) | *needs extra software* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | **Text to Speech** | [espeak](text-to-speech.md#espeak) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | [flite](text-to-speech.md#flite) | ✓ | ✓ | | | | | | | | ✓ | | | | | | | | [picotts](text-to-speech.md#picotts) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | | | [marytts](text-to-speech.md#marytts) | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | | | | | | | | | | [wavenet](text-to-speech.md#google-wavenet) | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | ✓ | | • - yes, but requires training/customization ## HTTP API Rhasspy's HTTP endpoints are documented below. You can also visit `/api/` in your Rhasspy server (note the final slash) to try out each endpoint. Application authors may want to use the [rhasspy-client](https://pypi.org/project/rhasspy-client/), which provides a high-level interface to a remote Rhasspy server. ### Endpoints * `/api/custom-words` * GET custom word dictionary as plain text, or POST to overwrite it * See `custom_words.txt` in your profile directory * `/api/download-profile` * Force Rhasspy to re-download profile * `?delete=true` - clear download cache * `/api/listen-for-command` * POST to wake Rhasspy up and start listening for a voice command * Returns intent JSON when command is finished * `?nohass=true` - stop Rhasspy from handling the intent * `?timeout=` - override default command timeout * `?entity=&value=` - set custom entity/value in recognized intent * `/api/listen-for-wake-word` * POST to wake Rhasspy up and return immediately * `/api/lookup` * POST word as plain text to look up or guess pronunciation * `?n=` - return at most `n` guessed pronunciations * `/api/microphones` * GET list of available microphones * `/api/phonemes` * GET example phonemes from speech recognizer for your profile * See `phoneme_examples.txt` in your profile directory * `/api/play-wav` * POST to play WAV data * `/api/profile` * GET the JSON for your profile, or POST to overwrite it * `?layers=profile` to only see settings different from `defaults.json` * See `profile.json` in your profile directory * `/api/restart` * Restart Rhasspy server * `/api/sentences` * GET voice command templates or POST to overwrite * Set `Accept: application/json` to GET JSON with all sentence files * Set `Content-Type: application/json` to POST JSON with sentences for multiple files * See `sentences.ini` and `intents` directory in your profile * `/api/slots` * GET slot values as JSON or POST to add to/overwrite them * `?overwrite_all=true` to clear slots in JSON before writing * `/api/speakers` * GET list of available audio output devices * `/api/speech-to-intent` * POST a WAV file and have Rhasspy process it as a voice command * Returns intent JSON when command is finished * `?nohass=true` - stop Rhasspy from handling the intent * `/api/speech-to-text` * POST a WAV file and have Rhasspy return the text transcription * Set `Accept: application/json` to receive JSON with more details * `?noheader=true` - send raw 16-bit 16Khz mono audio without a WAV header * `/api/start-recording` * POST to have Rhasspy start recording a voice command * `/api/stop-recording` * POST to have Rhasspy stop recording and process recorded data as a voice command * Returns intent JSON when command has been processed * `?nohass=true` - stop Rhasspy from handling the intent * `/api/test-microphones` * GET list of available microphones and if they're working * `/api/text-to-intent` * POST text and have Rhasspy process it as command * Returns intent JSON when command has been processed * `?nohass=true` - stop Rhasspy from handling the intent * `/api/text-to-speech` * POST text and have Rhasspy speak it * `?play=false` - get WAV data instead of having Rhasspy speak * `?voice=` - override default TTS voice * `?language=` - override default TTS language or locale * `?repeat=true` - have Rhasspy repeat the last sentence it spoke * `/api/train` * POST to re-train your profile * `?nocache=true` - re-train profile from scratch * `/api/unknown-words` * GET words that Rhasspy doesn't know in your sentences * See `unknown_words.txt` in your profile directory ## Websocket API * `/api/events/intent` * Listen for recognized intents published as JSON * `/api/events/log` * Listen for log messages published as plain text ## MQTT API Rhasspy implements part of the [Hermes](https://docs.snips.ai/reference/hermes) protocol. Various services of Rhasspy can be configured to pass along MQTT messages or to react to MQTT messages following the Hermes protocol. * `hermes/audioServer//playBytes/` * Rhasspy publishes audio in WAV format to this topic. By default it is 16 kHz, 16-bit mono for compatibility reasons, but other types are possible too. * `SITE_ID` is set in Rhasspy's `mqtt` configuration. * `REQUEST_ID` is generated using `uuid.uuid4` each time a sound is played. * `hermes/audioServer//audioFrame` * Rhasspy listens to this topic for WAV data. Audio is automatically converted to 16 kHz, 16-bit mono audio and played. * `SITE_ID` is set in Rhasspy's `mqtt` configuration. * `hermes/asr/startListening` * Rhasspy wakes up and starts recording on receiving this topic. * The payload is a JSON object with a `siteId` key that holds Rhasspy's site ID. * `hermes/asr/stopListening` * Rhasspy stops recording and processes the voice command on receiving this topic. * The payload is a JSON object with a `siteId` key that holds Rhasspy's site ID. * `hermes/intent/` * Rhasspy publishes a message to this topic on recognition of an intent. * The payload is a JSON object with the recognized intent, entities and text. * `hermes/nlu/intentNotRecognized` * Rhasspy publishes a message to this topic when it doesn't recognize an intent. * `hermes/asr/textCaptured` * Rhasspy publishes a transcription to this topic each time a voice command is recognized. * `hermes/hotword//detected` * Rhasspy wakes up when a message is received on this topic. ## Command Line Rhasspy provides a powerful [command-line interface](usage.md#command-line) called `rhasspy-cli`. For `rhasspy-cli --profile `, `` can be: * `info` * Print profile JSON to standard out * Add `--defaults` to only print settings from `defaults.json` * `wav2text` * Convert WAV file(s) to text * `wav2intent` * Convert WAV file(s) to intent JSON * Add `--handle` to have Rhasspy send events to Home Assistant * `text2intent` * Convert text command(s) to intent JSON * Add `--handle` to have Rhasspy send events to Home Assistant * `train` * Re-train your profile * `mic2wav` * Listen for a voice command and output WAV data * Add `--timeout ` to stop recording after some number of seconds * `mic2text` * Listen for a voice command and convert it to text * Add `--timeout ` to stop recording after some number of seconds * `mic2intent` * Listen for a voice command output intent JSON * Add `--handle` to have Rhasspy send events to Home Assistant * Add `--timeout ` to stop recording after some number of seconds * `word2phonemes` * Print the CMU phonemes for a word (possibly unknown) * Add `-n ` to control the maximum number of guessed pronunciations * `word2wav` * Pronounce a word (possibly unknown) and output WAV data * `text2speech` * Speaks one or more sentences using Rhasspy's text to speech system * `text2wav` * Converts a single sentence to WAV using Rhasspy's text to speech system * `sleep` * Run Rhasspy and wait until wake word is spoken * `download` * Download necessary profile files from the internet ### Profile Operations Print the complete JSON for the English profile with: rhasspy-cli --profile en info You can combine this with other commands, such as `jq` to get at specific pieces: rhasspy-cli info --profile en | jq .wake.pocketsphinx.keyphrase Output (JSON): "okay rhasspy" ### Training Retrain your the English profile with: rhasspy-cli --profile en train Add `--debug` before `train` for more information. ### Speech to Text/Intent Convert a WAV file to text from stdin: rhasspy-cli --profile en wav2text < what-time-is-it.wav Output (text): what time is it Convert multiple WAV files: rhasspy-cli --profile en wav2text what-time-is-it.wav turn-on-the-living-room-lamp.wav Output (JSON) ```json { "what-time-is-it.wav": "what time is it", "turn-on-the-living-room-lamp.wav": "turn on the living room lamp" } ``` Convert multiple WAV file(s) to intents **and** handle them: rhasspy-cli --profile en wav2intent --handle what-time-is-it.wav turn-on-the-living-room-lamp.wav Output (JSON): ```json { "what_time_is_it.wav": { "text": "what time is it", "intent": { "name": "GetTime", "confidence": 1.0 }, "entities": [] }, "turn_on_living_room_lamp.wav": { "text": "turn on the living room lamp", "intent": { "name": "ChangeLightState", "confidence": 1.0 }, "entities": [ { "entity": "state", "value": "on" }, { "entity": "name", "value": "living room lamp" } ] } } ``` ### Text to Intent Handle a command as if it was spoken: rhasspy-cli --profile en text2intent --handle "turn off the living room lamp" Output (JSON): ```json { "turn off the living room lamp": { "text": "turn off the living room lamp", "intent": { "name": "ChangeLightState", "confidence": 1.0 }, "entities": [ { "entity": "state", "value": "off" }, { "entity": "name", "value": "living room lamp" } ] } } ``` ### Record Your Voice Save a voice command to a WAV: rhasspy-cli --profile en mic2wav > my-voice-command.wav You can listen to it with: aplay my-voice-command.wav ### Test Your Wake Word Start Rhasspy and wait for wake word: rhasspy-cli --profile en sleep Should exit and print the wake word when its spoken. ### Text to Speech Have Rhasspy speak one or more sentences: rhasspy-cli --profile en text2speech "We ride at dawn!" Use a different text to speech system and voice: rhasspy-cli --profile en \ --set 'text_to_speech.system' 'flite' \ --set 'text_to_speech.flite.voice' 'slt' \ text2speech "We ride at dawn!" ### Pronounce Words Speak words Rhasspy doesn't know! rhasspy-cli --profile en word2wav raxacoricofallapatorius | aplay ### Text to Speech to Text to Intent Use the miracle of Unix pipes to have Rhasspy interpret voice commands from itself: rhasspy-cli --profile en \ --set 'text_to_speech.system' 'picotts' \ text2wav "turn on the living room lamp" | \ rhasspy-cli --profile en wav2text | \ rhasspy-cli --profile en text2intent Output (JSON): ```json { "turn on the living room lamp": { "text": "turn on the living room lamp", "intent": { "name": "ChangeLightState", "confidence": 1.0 }, "entities": [ { "entity": "state", "value": "on" }, { "entity": "name", "value": "living room lamp" } ], "speech_confidence": 1, "slots": { "state": "on", "name": "living room lamp" } } } ``` ## Profile Settings All available profile sections and settings are listed below: * `rhasspy` - configuration for Rhasspy assistant * `preload_profile` - true if speech/intent recognizers should be loaded immediately for default profile (default: `true`) * `listen_on_start` - true if Rhasspy should listen for wake word at startup (default: `true`) * `load_timeout_sec` - number of seconds to wait for internal actors before proceeding with start up * `home_assistant` - how to communicate with Home Assistant/Hass.io * `url` - Base URL of Home Assistant server (no `/api`) * `access_token` - long-lived access token for Home Assistant (Hass.io token is used automatically) * `api_password` - Password, if you have that enabled (deprecated) * `pem_file` - Full path to your CA_BUNDLE file or a directory with certificates of trusted CAs * `event_type_format` - Python format string used to create event type from intent type (`{0}`) * `speech_to_text` - transcribing [voice commands to text](speech-to-text.md) * `system` - name of speech to text system (`pocketsphinx`, `kaldi`, `remote`, `command`, or `dummy`) * `pocketsphinx` - configuration for [Pocketsphinx](speech-to-text.md#pocketsphinx) * `compatible` - true if profile can use pocketsphinx for speech recognition * `acoustic_model` - directory with CMU 16 kHz acoustic model * `base_dictionary` - large text file with word pronunciations (read only) * `custom_words` - small text file with words/pronunciations added by user * `dictionary` - text file with all words/pronunciations needed for example sentences * `unknown_words` - small text file with guessed word pronunciations (from phonetisaurus) * `language_model` - text file with trigram [ARPA language model](https://cmusphinx.github.io/wiki/arpaformat/) built from example sentences * `open_transcription` - true if general language model should be used (custom voices commands ignored) * `base_language_model` - large general language model (read only) * `mllr_matrix` - MLLR matrix from [acoustic model tuning](https://cmusphinx.github.io/wiki/tutorialtuning/) * `mix_weight` - how much of the base language model to [mix in during training](training.md#language-model-mixing) (0-1) * `mix_fst` - path to save mixed ngram FST model * `kaldi` - configuration for [Kaldi](speech-to-text.md#kaldi) * `compatible` - true if profile can use Kaldi for speech recognition * `kaldi_dir` - absolute path to Kaldi root directory * `model_dir` - directory where Kaldi model is stored (relative to profile directory) * `graph` - directory where HCLG.fst is located (relative to `model_dir`) * `base_graph` - directory where large general HCLG.fst is located (relative to `model_dir`) * `base_dictionary` - large text file with word pronunciations (read only) * `custom_words` - small text file with words/pronunciations added by user * `dictionary` - text file with all words/pronunciations needed for example sentences * `open_transcription` - true if general language model should be used (custom voices commands ignored) * `unknown_words` - small text file with guessed word pronunciations (from phonetisaurus) * `mix_weight` - how much of the base language model to [mix in during training](training.md#language-model-mixing) (0-1) * `mix_fst` - path to save mixed ngram FST model * `remote` - configuration for [remote Rhasspy server](speech-to-text.md#remote-http-server) * `url` - URL to POST WAV data for transcription (e.g., `http://your-rhasspy-server:12101/api/speech-to-text`) * `command` - configuration for [external speech-to-text program](speech-to-text.md#command) * `program` - path to executable * `arguments` - list of arguments to pass to program * `sentences_ini` - Ini file with example [sentences/JSGF templates](training.md#sentencesini) grouped by intent * `sentences_dir` - Directory with additional sentence templates (default: `intents`) * `g2p_model` - finite-state transducer for phonetisaurus to guess word pronunciations * `g2p_casing` - casing to force for g2p model (`upper`, `lower`, or blank) * `dictionary_casing` - casing to force for dictionary words (`upper`, `lower`, or blank) * `slots_dir` - directory to look for [slots lists](training.md#slots-lists) (default: `slots`) * `slot_programs` - directory to look for [slot programs](training.md#slot-programs) (default `slot_programs`) * `fsts_dir` - directory to write generated finite state transducers from JSGF grammars * `intent` - transforming text commands to intents * `system` - intent recognition system (`fsticuffs`, `fuzzywuzzy`, `rasa`, `remote`, `adapt`, `command`, or `dummy`) * `fsticuffs` - configuration for [OpenFST-based](https://www.openfst.org) intent recognizer * `intent_fst` - path to generated finite state transducer with all intents combined * `converters_dir` - directory to look for [converter](training.md#converters) programs (default: `converters`) * `ignore_unknown_words` - true if words not in the FST symbol table should be ignored * `fuzzy` - true if text is matching in a fuzzy manner, skipping words in `stop_words.txt` * `fuzzywuzzy` - configuration for simplistic [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) based intent recognizer * `examples_json` - JSON file with intents/example sentences * `min_confidence` - minimum confidence required for intent to be converted to a JSON event (0-1) * `remote` - configuration for remote Rhasspy server * `url` - URL to POST text to for intent recognition (e.g., `http://your-rhasspy-server:12101/api/text-to-intent`) * `rasa` - configuration for [Rasa NLU](https://rasa.com/) based intent recognizer * `url` - URL of remote Rasa NLU server (e.g., `http://localhost:5005/`) * `examples_markdown` - Markdown file to generate with intents/example sentences * `project_name` - name of project to generate during training * `adapt` - configuration for [Mycroft Adapt](https://github.com/MycroftAI/adapt) based intent recognizer * `stop_words` - text file with words to ignore in training sentences * `command` - configuration for external speech-to-text program * `program` - path to executable * `arguments` - list of arguments to pass to program * `replace_numbers` if true, automatically replace number ranges (`N..M`) or numbers (`N`) with words * `text_to_speech` - pronouncing words * `system` - text to speech system (`espeak`, `flite`, `picotts`, `marytts`, `command`, or `dummy`) * `espeak` - configuration for [eSpeak](http://espeak.sourceforge.net) * `phoneme_map` - text file mapping CMU phonemes to eSpeak phonemes * `flite` - configuration for [flite](http://www.festvox.org/flite) * `voice` - name of voice to use (e.g., `kal16`, `rms`, `awb`) * `picotts` - configuration for [PicoTTS](https://en.wikipedia.org/wiki/SVOX) * `language` - language to use (default if not present) * `marytts` - configuration for [MaryTTS](http://mary.dfki.de) * `url` - address:port of MaryTTS server (port is usually 59125) * `voice` - name of voice to use (e.g., `cmu-slt`). Default if not present. * `locale` - name of locale to use (e.g., `en-US`). Default if not present. * `wavenet` - configuration for Google's [WaveNet](https://cloud.google.com/text-to-speech/docs/wavenet) * `cache_dir` - path to directory in your profile where WAV files are cached * `credentials_json` - path to the JSON credentials file (generated online) * `gender` - gender of speaker (`MALE` `FEMALE`) * `language_code` - language/locale e.g. `en-US`, * `sample_rate` - WAV sample rate (default: 22050) * `url` - URL of WaveNet endpoint * `voice` - voice to use (e.g., `Wavenet-C`) * `fallback_tts` - text to speech system to use when offline or error occurs (e.g., `espeak`) * `phoneme_examples` - text file with examples for each CMU phoneme * `training` - training speech/intent recognizers * `dictionary_number_duplicates` - true if duplicate words in dictionary should be suffixed by `(2)`, `(3)`, etc. * `tokenizer` - system used to break sentences into words (`regex` only for now) * `regex` - configuration for regex tokenizer * `replace` - list of dictionaries with patterns/replacements used on each example sentence * `split` - pattern used to break sentences into words * `unknown_words` - configuration for dealing with words not in base/custom dictionaries * `fail_when_present` - true if Rhasspy should halt training when unknown words are found * `guess_pronunciations` - true if [Phonetisaurus](https://github.com/AdolfVonKleist/Phonetisaurus) should be used to guess how an unknown word is pronounced * `speech_to_text` - training for speech decoder * `system` - speech to text training system (`auto`, `pocketsphinx`, `kaldi`, `command`, or `dummy`) * `command` - configuration for external speech-to-text training program * `program` - path to executable * `arguments` - list of arguments to pass to program * `intent` - training for intent recognizer * `system` - intent recognizer training system (`auto`, `fsticuffs`, `fuzzywuzzy`, `rasa`, `adapt`, `command`, or `dummy`) * `command` - configuration for external intent recognizer training program * `program` - path to executable * `arguments` - list of arguments to pass to program * `wake` - waking Rhasspy up for speech input * `system` - wake word recognition system (`pocketsphinx`, `snowboy`, `precise`, `porcupine`, `command`, or `dummy`) * `pocketsphinx` - configuration for Pocketsphinx wake word recognizer * `keyphrase` - phrase to wake up on (3-4 syllables recommended) * `threshold` - sensitivity of detection (recommended range 1e-50 to 1e-5) * `chunk_size` - number of bytes per chunk to feed to Pocketsphinx (default 960) * `snowboy` - configuration for [snowboy](https://snowboy.kitt.ai) * `model` - path to model file(s), separated by commas (in profile directory) * `sensitivity` - model sensitivity (0-1, default 0.5) * `audio_gain` - audio gain (default 1) * `apply_frontend` - true if ApplyFrontend should be set * `chunk_size` - number of bytes per chunk to feed to snowboy (default 960) * `model_settings` - settings for each snowboy model path (e.g., `snowboy/snowboy.umdl`) * `` * `sensitivity` - model sensitivity * `audio_gain` - audio gain * `apply_frontend` - true if ApplyFrontend should be set * `precise` - configuration for [Mycroft Precise](https://github.com/MycroftAI/mycroft-precise) * `engine_path` - path to the precise-engine binary * `model` - path to model file (in profile directory) * `sensitivity` - model sensitivity (0-1, default 0.5) * `trigger_level` - number of events to trigger activation (default 3) * `chunk_size` - number of bytes per chunk to feed to Precise (default 2048) * `porcupine` - configuration for [PicoVoice's Porcupine](https://github.com/Picovoice/Porcupine) * `library_path` - path to `libpv_porcupine.so` for your platform/architecture * `model_path` - path to the `porcupine_params.pv` (lib/common) * `keyword_path` - path to the `.ppn` keyword file * `sensitivity` - model sensitivity (0-1, default 0.5) * `command` - configuration for external speech-to-text program * `program` - path to executable * `arguments` - list of arguments to pass to program * `microphone` - configuration for audio recording * `system` - audio recording system (`pyaudio`, `arecord`, `hermes`, `gstreamer`, `http`, or `dummy`) * `pyaudio` - configuration for [PyAudio](https://people.csail.mit.edu/hubert/pyaudio/) microphone * `device` - index of device to use or empty for default device * `frames_per_buffer` - number of frames to read at a time (default 480) * `arecord` - configuration for ALSA microphone * `device` - name of ALSA device (see `arecord -L`) to use or empty for default device * `chunk_size` - number of bytes to read at a time (default 960) * `http` - configuration for HTTP audio stream * `host` - hostname or IP address of HTTP audio server (default 127.0.0.1) * `port` - port to receive audio stream on (default 12333) * `stop_after` - one of "never", "text", or "intent" ([see documentation](audio-input.md#http-stream)) * `gstreamer` - configuration for GStreamer audio recorder * `pipeline` - GStreamer pipeline (e.g., `FILTER ! FILTER ! ...`) without sink * `hermes` - configuration for MQTT "microphone" ([Hermes protocol](https://docs.snips.ai/reference/hermes)) * Subscribes to WAV data from `hermes/audioServer//audioFrame` * Requires MQTT to be enabled * `sounds` - configuration for feedback sounds from Rhasspy * `system` - which sound output system to use (`aplay`, `hermes`, or `dummy`) * `wake` - path to WAV file to play when Rhasspy wakes up * `recorded` - path to WAV file to play when a command finishes recording * `aplay` - configuration for ALSA speakers * `device` - name of ALSA device (see `aplay -L`) to use or empty for default device * `hermes` - configuration for MQTT "speakers" ([Hermes protocol](https://docs.snips.ai/reference/hermes)) * WAV data published to `hermes/audioServer//playBytes/` * Requires MQTT to be enabled * `command` * `system` - which voice command listener system to use (`webrtcvad`, `oneshot`, `hermes`, or `dummy`) * `webrtcvad` - configuration for [webrtcvad](https://github.com/wiseman/py-webrtcvad) system * `sample_rate` - sample rate of input audio * `chunk_size` - bytes per buffer (must be 10,20,30 ms) * `vad_mode` - sensitivity of `webrtcvad` (0-3) * `min_sec` - minimum number of seconds in a command * `silence_sec` - number of seconds of silences after voice command before stopping * `timeout_sec` - maximum number of seconds before stopping * `throwaway_buffers` - number of buffers to drop when recording starts * `speech_buffers` - number of buffers with speech before command starts * `oneshot` - configuration for voice command system that takes first audio frame as entire command * `timeout_sec` - maximum number of seconds before stopping * `command` - configuration for external voice command program * `program` - path to executable * `arguments` - list of arguments to pass to program * `hermes` - configuration for MQTT-based voice command system that listens betweens `startListening` and `stopListening` commands ([Hermes protocol](https://docs.snips.ai/reference/hermes)) * `timeout_sec` - maximum number of seconds before stopping * `handle` * `system` - which intent handling system to use (`hass`, `command`, or `dummy`) * `forward_to_hass` - true if intents are always forwarded to Home Assistant (even if `system` is `command` or `remote`) * `command` - configuration for external speech-to-text program * `program` - path to executable * `arguments` - list of arguments to pass to program * `remote` - configuration for remote HTTP intent handler * `url` - URL to POST intent JSON to and receive response JSON from * `mqtt` - configuration for MQTT ([Hermes protocol](https://docs.snips.ai/reference/hermes)) * `enabled` - true if MQTT client should be started * `host` - MQTT host * `port` - MQTT port * `username` - MQTT username (blank for anonymous) * `password` - MQTT password * `reconnect_sec` - number of seconds before client will reconnect * `site_id` - ID of site ([Hermes protocol](https://docs.snips.ai/reference/hermes)) * `publish_intents` - true if intents are published to MQTT * `download` - configuration for profile file downloading * `cache_dir` - directory in your profile where downloaded files are cached * `conditions` - profile settings that will trigger file downloads * keys are profile setting paths (e.g., `wake.system`) * values are dictionaries whose keys are profile settings values (e.g., `snowboy`) * settings may have the form `<=N` or `!X` to mean "less than or equal to N" or "not X" * leaf nodes are dictionaries whose keys are destination file paths and whose values reference the `files` dictionary * `files` - locations, etc. of files to download * keys are names of files * values are dictionaries with: * `url` - URL of file to download * `cache` - `false` if file should be downloaded directly into profile (skipping cache)