Training fail on server/satellites architecture - No wake word works

Hello All,
I have a problem with my server/satellites architecture (server : NUC I5 + home assistant / satellites : RPI3B+ / RPI3B / RPI ZERO WH). When each component is used standalone, training is OK and wake word (when I call the defined word) works.
When I change the parameters to go to a server/satellites architecture, training fails and no wake word works.
Has anybody an idea ? Is it my parameters or an issue ?


File intent_graph.pickle.gz exists

Thank’s in advance.

Can you provide your master configuration (which services are enabled) and idem for a satellite?

Master : home assistant + rhasspy (lastest 2.5.4) (16Go RAM)

!!! ON MASTER TRAINING IS OK

{
    "dialogue": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "hermes"
    },
    "home_assistant": {
        "access_token": "xxxxxxxxxxx",
        "api_password": null,
        "handle_type": "event",
        "url": "http://192.168.xx.yy:8123"
    },
    "intent": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "fsticuffs"
    },
    "microphone": {
        "arecord": {
            "siteId": "rhasspy server"
        },
        "pyaudio": {
            "device": "pulse"
        }
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.xx.yy",
        "password": "zzzz",
        "site_id": "rhasspy server",
        "username": "rrrrrrrr"
    },
    "sounds": {
        "system": "aplay"
    },
    "speech_to_text": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "kaldi"
    },
    "text_to_speech": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "picotts"
    },
    "wake": {
        "pocketsphinx": {
            "keyphrase": "coucou",
            "threshold": 1e-23
        },
        "raven": {
            "probability_threshold": "0.4",
            "udp_audio": "12202"
        },
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine"
    },
    "rhasspy": {
        "listen_on_start": true
    }
}

Satellite RPIxx :slight_smile:

{
    "command": {
        "webrtcvad": {
            "before_sec": "0.5",
            "min_sec": "1",
            "silence_sec": "0.3",
            "speech_sec": "0.3",
            "vad_mode": "3"
        }
    },
    "dialogue": {
        "system": "rhasspy"
    },
    "handle": {
        "system": "hass"
    },
    "home_assistant": {
        "access_token": "yyyyyyyyyyy",
        "handle_type": "event",
        "url": "http://192.168.yy.zz:8123"
    },
    "intent": {
        "system": "hermes"
    },
    "microphone": {
        "arecord": {
            "device": "default:CARD=seeed2micvoicec",
            "siteId": "rhasspy cuisine",
            "udp_audio_port": "12202"
        },
        "pyaudio": {
            "device": "default:CARD=seeed2micvoicec",
            "siteId": "rhasspy server "
        },
        "system": "arecord"
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.yy.zz",
        "password": "rrrrrr",
        "port": "1883",
        "site_id": "rhasspy cuisine",
        "username": "tttttt"
    },
    "sounds": {
        "aplay": {
            "device": "default:CARD=seeed2micvoicec"
        },
        "system": "aplay"
    },
    "speech_to_text": {
        "kaldi": {
            "mix_weight": "0"
        },
        "system": "hermes"
    },
    "text_to_speech": {
        "system": "hermes"
    },
    "wake": {
        "pocketsphinx": {
            "keyphrase": "coucou",
            "threshold": 1e-14,
            "udp_audio": "12202"
        },
        "raven": {
            "udp_audio": "12202"
        },
        "system": "pocketsphinx"
    },
    "rhasspy": {
        "listen_on_start": true
    }
}

I have made some reboot.
For the satellite RPI3B+ , now it is OK for Wakeword but the problem with training exists always.
For RPI ZEROWH, no Wakeword and fail to training

I would completely disable the speech_to_text, dialogue and handle on the satellite.

See: https://rhasspy.readthedocs.io/en/latest/tutorials/#shared-mqtt-broker

Is a PRI ZERO WH powerfull enough ?

I do not think the satellite need the rhasspy-server-hermes and rhasspy-homeassistant-hermes services.

The satellite does not need anything part from the microphone, sound and wake services. The rest will be done on the master.

The Raspberry Pi Zero should be powerful enough to make those 3 services work (the bigger CPU usage will be the wakeword).

@synesthesiam I wonder if a switch master/satellite/custom in the configuration that automatically enable/disable/hide the appropriate services could not simplify the setup. It looks like lots of people have various degrees of difficulty to get the way the services work. Just an idea.

2 Likes

On a satellite Kitchen (cuisine in French) :
- With “Intend recognition” disabled, I have this message ==> NluException: No intent system configured
- With “Intend Handling” disabled, I have no response from Home Assistant (If I say “What is the time” to my satellite “Cuisine”, Home Assistant response would be sent “It is ………”) to my satellite cuisine.

In fact, it seems that the master sends the satellite request to home assistant which send back a response to the master. The master would send the Home Assistant response to satellite … which is not done. That is why Intent Handling is required in my configuration.

You need to disable both intent recognition and intent handling on the satellite. These tasks will be done by the master.

Any thoughts on how specifically this should work? I could see having some common “Roles” defined, like all-in-one, base (master), satellite. But there are really two flavors of base/satellite: HTTP and MQTT. It gets complicated quickly…

I’m thinking one day or another, a choice will have to be made between MQTT and HTTP for the main underlying communication system of Rhasspy services (I’m leaning toward MQTT…). A separated rhasspy-http service could allow HTTP to MQTT communication if necessary for some users.

For the setup, maybe:

  • a checkbox: This is a base / I want this box to be the main brain of the system (displaying the centralized services: dialogue, asr, nlu, tts, handler)

  • a checkbox This is a satellite / I want to speak to this box (displaying the audio In, wakeword and audioOut services)

1 Like

Here is my config for master :

{
    "dialogue": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "hermes"
    },
    "handle": {
        "system": "hass"
    },
    "home_assistant": {
        "access_token": "XYZ",
        "api_password": null,
        "handle_type": "event",
        "url": "http://192.168.zz.tt:8123"
    },
    "intent": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "fsticuffs"
    },
    "microphone": {
        "arecord": {
            "siteId": "rhasspy server"
        },
        "system": "arecord"
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.zz.tt",
        "password": "abcd",
        "site_id": "rhasspy server",
        "username": "efgh"
    },
    "sounds": {
        "system": "aplay"
    },
    "speech_to_text": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "kaldi"
    },
    "text_to_speech": {
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "picotts"
    },
    "wake": {
        "pocketsphinx": {
            "keyphrase": "coucou",
            "threshold": 1e-23
        },
        "raven": {
            "probability_threshold": "0.4",
            "udp_audio": "12202"
        },
        "satellite_site_ids": "rhasspy salon,rhasspy chambre des parents,rhasspy chambre disabelle,rhasspy grande salle_de_bain,rhasspy cuisine",
        "system": "pocketsphinx"
    },
    "rhasspy": {
        "listen_on_start": true
    }
}

Here is my configuration for a satellite (rhasspy chambre disabelle)

{
    "command": {
        "webrtcvad": {
            "before_sec": "0.5",
            "min_sec": "1",
            "silence_sec": "0.3",
            "speech_sec": "0.3",
            "vad_mode": "3"
        }
    },
    "handle": {
        "system": "hass"
    },
    "home_assistant": {
        "access_token": "aaaa",
        "api_password": null,
        "handle_type": "event",
        "url": "http://192.168.zz.tt:8123"
    },
    "microphone": {
        "arecord": {
            "device": "default:CARD=seeed2micvoicec",
            "siteId": "rhasspy chambre disabelle",
            "udp_audio_host": "",
            "udp_audio_port": "12202"
        },
        "system": "arecord"
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.zz.tt",
        "password": "zzzz",
        "port": "1883",
        "site_id": "rhasspy chambre disabelle",
        "username": "aaaa"
    },
    "sounds": {
        "aplay": {
            "device": "default:CARD=seeed2micvoicec"
        },
        "system": "aplay"
    },
    "wake": {
        "pocketsphinx": {
            "keyphrase": "bird",
            "threshold": 3.162277660168379e-19,
            "udp_audio": "12202"
        },
        "system": "pocketsphinx"
    },
    "rhasspy": {
        "listen_on_start": true
    }
}

The result for a request

I don’t understand where is the problem

Oh… I think I get it now! Do you use the satellite GUI for testing?

Can you try to use Hermes MQTT for speech-to-text, intent-recognition, text-to-speech instead of disabling them (disabling these services prevent the GUI from using them locally, using Hermes MQTT will forward the messages to the master)?

Your master configuration looks correct to me.

The “handle” checkbox of the satellite test GUI seems to only work locally. This might be a bug (@synesthesiam what do you think?).

Clicking the “Wake up” button and speaking the intent should work as expected though (this will be correctly handled by the master’s dialogue manager).

Hi @cakp59

Try setting “Hermes MQTT” on the satellite for the services you want it to use on the base/master. In general, any time you have a satellite site id listed for some service on the base, you should have the corresponding satellite service set to “Hermes MQTT”.

It seems odd that you have a wake word service enabled on the base. This should probably only be enabled on the satellite. What’s important is that the base dialogue system is aware of the satellite site id so it will be activated when a hotword is detected on the satellite.

1 Like