Hub and Satellites Help

Two questions:

  • Is there a way to get only 1 satellite/site to activate? I have seen something about not letting the hub run STT within seconds of each other, but not sure how to implement. Open to alternatives
  • Is there a good guide on MQTT and Rhasspy with multiple SiteID? I am having trouble sending commands to adjust the volume of the system to everything. Seems simple, but I am stumped.

My setup:

  • (1) Raspberry Pi 4 w/dockers for HASS, rhasspy, MQTT
  • (2 for now, 3rd to come online soon) Raspberry Pi Zero w/Adafruit Voice Bonnet and speakers in a 3D printed case running Rhasspy
  • Everything up to date to release
  • Porcupine for wake
  • Same wake word on both Zeros (will get to this)

Zero/Satellite

{
    "dialogue": {
        "volume": "1"
    },
    "intent": {
        "remote": {
            "url": "http://192.168.1.104:12101/api/text-to-intent"
        },
        "satellite_site_ids": "living",
        "system": "hermes"
    },
    "microphone": {
        "pyaudio": {
            "device": "0",
            "udp_audio_port": "12202"
        },
        "system": "pyaudio"
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.1.104",
        "site_id": "living"
    },
    "sounds": {
        "aplay": {
            "device": "sysdefault:CARD=seeed2micvoicec",
            "volume": "0.6"
        },
        "system": "aplay"
    },
    "speech_to_text": {
        "remote": {
            "url": "http://192.168.1.104:12101/api/speech-to-text"
        },
        "satellite_site_ids": "living",
        "system": "hermes"
    },
    "text_to_speech": {
        "remote": {
            "url": "http://192.168.1.104:12101/api/text-to-speech"
        },
        "satellite_site_ids": "living",
        "system": "hermes"
    },
    "wake": {
        "porcupine": {
            "keyword_path": "hey google_raspberry-pi.ppn",
            "sensitivity": "0.85",
            "udp_audio": "12202"
        },
        "satellite_site_ids": "living",
        "system": "porcupine"
    }
}

Pi 4 / brains / hub

{
    "command": {
        "webrtcvad": {
            "before_sec": "2",
            "max_current_energy_ratio_threshold": "2",
            "silence_sec": "0.5",
            "speech_sec": "0",
            "vad_mode": "2"
        }
    },
    "dialogue": {
        "satellite_site_ids": "living,bed",
        "system": "rhasspy"
    },
    "handle": {
        "remote": {
            "url": "192.168.1.104"
        },
        "satellite_site_ids": "living,bed",
        "system": "hass"
    },
    "home_assistant": {
        "access_token": "passwd",
        "handle_type": "event",
        "url": "http://172.17.0.1:8123"
    },
    "intent": {
        "satellite_site_ids": "living,bed",
        "system": "fsticuffs"
    },
    "microphone": {
        "arecord": {
            "device": "default:CARD=Device"
        },
        "pyaudio": {
            "device": "1"
        }
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.1.104",
        "site_id": "master"
    },
    "sounds": {
        "aplay": {
            "volume": "5"
        }
    },
    "speech_to_text": {
        "deepspeech": {
            "min_confidence": "0.5"
        },
        "kaldi": {
            "min_confidence": ".85"
        },
        "satellite_site_ids": "living,bed",
        "system": "kaldi"
    },
    "text_to_speech": {
        "larynx": {
            "default_voice": "cmu_lnh",
            "vocoder": "vctk_small"
        },
        "satellite_site_ids": "living,bed",
        "system": "nanotts"
    },
    "wake": {
        "porcupine": {
            "keyword_path": "jarvis_raspberry-pi.ppn",
            "sensitivity": ".7"
        },
        "snowboy": {
            "model": "jarvis.umdl"
        }
    }
}

Hey atclaus,

for your first question, is your situation that sometimes you will say your wake word and multiple satellites hear it and wake up? So you are trying to figure out a way to only wake up one, when multiple satellites are triggered?

For your second question. I have a hub with 3 satellites and I have volume adjust set up for each of them basically by running a terminal command on them using paramiko. So my python file gets my change volume intent and the siteID it came from. then adjusts the volume for that device with the cmd through paramiko.

Now unfortunately that command is different for each one of my satellites. But im sure you could create an intent that will run the cmd on each device that adjust the volume on that device specifically effectively adjusting all of them.

Hope this helps!

Hi atclaus, sorry for not commenting earlier.

In the past year I have now 3 satellites (Pi zero, 3A and a 3B with different reSpeakers), and find my living room 3A beeps, and a moment later the kitchen Pi Zero also listens and respond - too often with different results ! I recall your first question having been discussed on this forum earlier, but that was before I had multiple satellites, so didn’t pay attention at the time.

While all the relevant info is available in different places, it took me a while to get my own multi-satellite Rhasspy and MQTT configuration working. I tried documenting it, aimed at non-technical people - but when I got to 30 pages I started to think maybe I had got carried away :wink:

I haven’t experienced volume as an issue, since I’m only using the satellites for voice commands.

As a more general point, I have found that the Rhasspy configs retain old no-longer-used settings - which I find can be confusing - and it looks as though yours can be trimmed down.

At the time of Snips, Laurent Chervet (psychokiller), the author of Hermes Led Control and projectalice, to name only these 2 projects, had found a solution for multidetection on several satellites at the same time. Here is the link to the explanation of his programmatic solution:

If it can give any ideas…