Snips is an AI-powered voice assistant - Alexa alternative

Build a voice assistant simply by giving it a few examples

Use the Snips web console to create custom intents, and mix them together to build a full-fledged voice assistant that will run on your device, and not in the cloud.

Snips already understands English, French, Spanish, German, Korean, with more coming soon!

This is less of a feature request… (though it definitely is!) and more of a heads up :slight_smile:

https://snips.ai/

Seems to be a locally hosted Alexa alternative. There’s a Hacker News discussion on Snips with the founders/developers responding with detail not on their site.

The skinny… runs on a Raspberry Pi, custom wake words, machine learning, MQTT, FREE for maker, docker, etc. etc.

More links for the lazy Snips Labs and how to: “How to Build a Voice-Controlled Speaker that Protects Your Privacy”.

It’s worth noting to any early experimenters that a co-founder says a new version of snips will be pushed later today sometime.

noone tried it?

This sounds quite awesome, I guess I’ll try it out in the near future

It asks to use mqtt at port 9898 … but how to do with whom is using mqtt already (at port 1883)?

Looks like they beat us to it!

https://medium.com/snips-ai/integrating-snips-with-home-assistant-314723645c77

1 Like

Yeah this is a bit confusing, would like to know as well how to do it.

There’s some detail on their Reddit comment thread about the article I mentioned:

Seems they don’t currently support using an existing MQTT broker, but it looks like it’s on the horizon.

or do a bridge with 2 mqtt, but is way too technical for me unless a clear walkthrough is provided

Any news if there is a possibility of using an existing MQTT broker? I’m using lots of topics on an existing Mosquitto broker at the moment.

Awaiting too

Would be awesome, really keen to give this a go but need my Mosquitto server! Any way of referencing two MQTT servers in HASS?

Thankfully you can bridge two mqtt services. Probably about 30 minutes work for you until Snips can reference an external mqtt service.
Google is your friend, I’m on mobile and it’s kids bed time :sunglasses:

Check out this thread for the bridge with a normal installation, or this thread for Hass.io.

Thanks. Is there anyway to bridge locally rather than using Cloud? I try to keep everything on-prem for reliability and latency reasons.

Yes… swap out any mention of CloudMQTT names, hostnames, IP’s, ports for Snip’ own IP, MQTT port, etc etc.

1 Like

How is the raspberry pi “build” “packaged”, is it in form of compiled binaries? Do you guys think the raspberry pi files would work also on other armv7 cpu’s (Orange PI).

https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi

I dislike the way the forum has turned my pretty specific link to what you want to know, into a generic looking, “here’s the documentation fool” kind of insult… sheesh! That was supposed to just be a subtle undertone!

https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi

There we go, specifically:

https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi#step-3-install-the-snips-platform

Mentions this bash script…

https://install.snips.ai

Which mentions this Docker container:

snipsdocker/platform

Which lives here:

https://hub.docker.com/r/snipsdocker/platform/

Having a peak in tags reveals more than just arm support, there’s an x86 version tucked away there too.

I imagine it’ll work on the OrangePi if it’s armv7 as the install script checks for that on line #48. Just follow the install script for RaspberryPi and see how you get along. YMMV but keep us updated :slight_smile:

snips:
  intents:
    ActivateLightColor:
      action:
        - service: light.turn_on
          data_template:
            entity_id: light.{{ objectLocation | replace(" ","_") }}
            color_name: {{ objectColor }}

2017-07-15 14:56:51 ERROR (Thread-1) [homeassistant.util.yaml] invalid key: “OrderedDict([(‘objectColor’, None)])”
in “/home/homeassistant/.homeassistant/configuration.yaml”, line 317, column 0
2017-07-15 14:56:51 ERROR (MainThread) [homeassistant.bootstrap] Error loading /home/homeassistant/.homeassistant/configuration.yaml: invalid key: “OrderedDict([(‘objectColor’, None)])”
in “/home/homeassistant/.homeassistant/configuration.yaml”, line 317, column 0

1 Like

receive also errors in LOG

pi@raspberrypi:~ $ docker run -t --rm --name snips --log-driver none -v /home/pi /.asoundrc:/root/.asoundrc -v /opt/snips/config:/opt/snips/config --privileged - v /dev/snd:/dev/snd snipsdocker/platform --mqtt 192.168.1.25:1883
google-asr is disabled
Spawning /usr/bin/snips-asr /usr/share/snips/asr --acoustic_scale=0.83 --endpoin ting=false,4.0,inf,0.0:true,0.5,2.0,0.0:true,1.0,8.0,0.0:true,2.0,inf,0.0:false, 0.0,inf,10.0 --beam_size=8 mqtt
Spawning /usr/bin/snips-audio-server mqtt --frame=256
Spawning /root/go/bin/tts --cs=/root/resources
Spawning /usr/bin/snips-hotword /usr/share/snips/hotword/ mqtt --threshold 0.25 --wait 40
Spawning /usr/bin/snips-queries -c /root/resources/snips.ini -p /opt/snips/confi g
Spawning /usr/bin/snips-dialogue mqtt --assistant /opt/snips/config/assistant/as sistant.json --config /usr/share/snips/dialogue --timeout 20
Spawning /usr/bin/snips-analytics -c /root/resources/snips.ini -p /opt/snips/con fig
snips-debug is disabled
2017-07-15 13:09:28,885 CRIT Supervisor running as root (no user in config file)
2017-07-15 13:09:28,901 INFO supervisord started with pid 38
2017-07-15 13:09:29,910 INFO spawned: ‘snips-tts’ with pid 41
2017-07-15 13:09:29,921 INFO spawned: ‘snips-dialogue’ with pid 42
2017-07-15 13:09:29,934 INFO spawned: ‘snips-asr’ with pid 43
2017-07-15 13:09:29,944 INFO spawned: ‘snips-analytics’ with pid 44
2017-07-15 13:09:29,955 INFO spawned: ‘snips-hotword’ with pid 45
2017-07-15 13:09:29,965 INFO spawned: ‘snips-audio-server’ with pid 46
2017-07-15 13:09:29,972 INFO spawned: ‘snips-queries’ with pid 47
2017/07/15 13:09:30 user ini.Load: open /opt/snips/config/user.ini: no such file or directory
2017/07/15 13:09:30 Mic settings file not detected, setting default sensitivity 0.5 & gain 1
2017/07/15 13:09:30 Connection to broker tcp://192.168.1.25:1883 succeded
[13:09:31.074364] INFO :snips_dialogue: Loading the configuration file
2017-07-15 13:09:31,075 INFO success: snips-tts entered RUNNING state, process h as stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:31,076 INFO success: snips-dialogue entered RUNNING state, proc ess has stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:31,076 INFO success: snips-asr entered RUNNING state, process h as stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:31,076 INFO success: snips-analytics entered RUNNING state, pro cess has stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:31,077 INFO success: snips-hotword entered RUNNING state, proce ss has stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:31,077 INFO success: snips-audio-server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:31,077 INFO success: snips-queries entered RUNNING state, proce ss has stayed up for > than 1 seconds (startsecs)
[13:09:31.217482] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
[13:09:31.217822] INFO :snips_analytics: Will connect to 192.168.1.25:1883
2017-07-15 13:09:31,264 INFO exited: snips-dialogue (exit status 1; not expected )
[13:09:31.302953] INFO :rumqtt::connection: $$$ Connected to broker
2017-07-15 13:09:31,308 INFO spawned: ‘snips-dialogue’ with pid 56
[13:09:31.333678] INFO :snips_dialogue: Loading the configuration file
[13:09:31.318493] INFO :rumqtt::connection: $$$ Connected to broker
[13:09:31.386150] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:31,389 INFO exited: snips-dialogue (exit status 1; not expected )
[13:09:31.488664] INFO :snips_analytics : Idle
[13:09:32.243824] INFO :reqwest::client: Request: Put https://atomic.snips.ai/v1 /billing
2017-07-15 13:09:33,252 INFO spawned: ‘snips-dialogue’ with pid 60
[13:09:33.534590] INFO :snips_dialogue: Loading the configuration file
[13:09:33.584253] ERROR:snips_hotword: HotwordError(AudioClient(AudioClientError (Io(Error { repr: Os { code: 99, message: “Cannot assign requested address” } }) , State { next_error: None })), State { next_error: None })
[13:09:33.591445] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:33,593 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:33,615 INFO exited: snips-hotword (exit status 1; not expected)
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
2017-07-15 13:09:33,646 INFO spawned: ‘snips-hotword’ with pid 61
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection r efused

ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection r efused

[13:09:33.772541] INFO :audio_server::audio: Use input device: “default”
[13:09:34.313549] INFO :rumqtt::connection: $$$ Connected to broker
snips_stt --use-energy=false --num-mel-bins=40 --num-ceps=40 --low-freq=20 --hig h-freq=-400 --sample-frequency=16000
[13:09:34.560997] INFO :snips_asr: Loaded model from /usr/share/snips/asr
[13:09:34.565454] INFO :rumqtt::connection: $$$ Connected to broker
[13:09:34.568498] INFO :snips_asr : Idle
2017-07-15 13:09:35,571 INFO success: snips-hotword entered RUNNING state, proce ss has stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:36,583 INFO spawned: ‘snips-dialogue’ with pid 86
[13:09:36.612904] INFO :snips_dialogue: Loading the configuration file
[13:09:36.665460] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:36,668 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:39,694 INFO spawned: ‘snips-dialogue’ with pid 87
[13:09:39.718831] INFO :snips_dialogue: Loading the configuration file
[13:09:39.771854] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:40,780 INFO success: snips-dialogue entered RUNNING state, proc ess has stayed up for > than 1 seconds (startsecs)
2017-07-15 13:09:40,781 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:41,793 INFO spawned: ‘snips-dialogue’ with pid 88
[13:09:41.836956] INFO :snips_dialogue: Loading the configuration file
[13:09:41.898408] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:41,900 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:42,915 INFO spawned: ‘snips-dialogue’ with pid 89
[13:09:42.950602] INFO :snips_dialogue: Loading the configuration file
[13:09:43.008094] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:43,011 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:45,019 INFO spawned: ‘snips-dialogue’ with pid 90
[13:09:45.047290] INFO :snips_dialogue: Loading the configuration file
[13:09:45.107289] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:45,112 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:48,122 INFO spawned: ‘snips-dialogue’ with pid 91
[13:09:48.152341] INFO :snips_dialogue: Loading the configuration file
[13:09:48.205760] ERROR:snips_dialogue: DialogueError(Serde(ErrorImpl { code: Me ssage("missing field name"), line: 1073, column: 9 }), State { next_error: Non e })
2017-07-15 13:09:48,211 INFO exited: snips-dialogue (exit status 1; not expected )
2017-07-15 13:09:49,214 INFO gave up: snips-dialogue entered FATAL state, too ma ny start retries too quickly
[13:09:54.821112] INFO :snips_hotword : Hotword detected
[13:10:19.661230] INFO :rumqtt::connection: $$$ Connected to broker
[13:10:19.664231] INFO :snips_queries : Idle