Seeing all the marketing for voice assistants - e.g., Amazon Echo, Google whatever it is - made me feel apprehensive that I was missing out on something - but what, really? (besides having a blatant corporate spy sitting in my house -- I know probably our phones are already listening and watching everything, but at least I can pretend that they aren't)
I already have a smart phone "app" for my home automation/security system that works pretty well (it's really a web page that has special tags that facilitate it looking and acting like an app on android and ios, including being accessible via its own icon).
The app uses client certificates for authentication and it loads up all the available devices and camera feeds, then creates pages based on each "area" of the house that expose the associated devices and camera feeds and let you get status and send commands by swiping or context menus. It's so site-specific that it doens't makes sense for me to post the code, but if anyone wants, I can drill down on the architecture.
Beyond that, we have some computers sitting around to do web searches on, etc., and in our exercise room, I have an iPad that integrates with the elliptical machine and can play music on some bluetooth speakers in the room. We don't have a "whole house" audio system, but then again, the voice assistants don't give you that automatically - maybe Homepod does.
Anwyay. I found out about a voice assistant called "mycroft" that is based on open source software and "open source hardware" - the "mk i" unit I have includes both an arduino (definitely open source) and a raspberry pi (mostly open source - but it has wifi and I'm not sure that part is). The company operates via kickstarter drives. I didn't have to read much before I ordered a mark i unit (which I received within a few days) and signed up for 3 mk ii units through the active kickstarter - those won't be around for at least a year, I guess.
The mycroft lets you write your own "skills" - key - and makes it very easy to do so. You can just ssh in and make a copy of an existing simple one, and start changing it. They strongly encourage you to use their git repository for your skills in order to increase the library of available skills for the community - of course that's laudable, and I'm totally going to do it once I start writing stuff that would work in any place other than right here.
The mycroft skills api (and everything else) is written in python - which I don't know, but is pretty easy to pick up. Since my home system uses Zero MQ transported json messages to do everything, it was very easy to write a skill for - zmq has great python support (better/easier than perl, truth be told), and json is pretty much core to python - it was really just a matter of plugging into the local messaging environment and loading up the names of all the house devices and commands - only took a couple of hours to get working, and that includes several false starts that would not have occurred if I had known what I was doing.
I ran into my first "natural language processing" (NLP) quirks almost immediately. In my system, I name each device with something descriptive, and eliminate spaces - so for instance the "living room light" would be called "livingroomlight" - I don't have a great reason why I eliminate the spaces, other than habits dating back to the 90s. Anyway, "livingroomlight" isn't a word, but "living room light" is three words. So when I tell the myrcoft to "turn on livingroomlight", the NLP function hears that as "turn on living room light" - and if I have merely loaded up the list of names from the ZMQ environment, there's no match, and mycroft doesn't know what to do.
So for now I have a locally stored list of device names where I went in and added spaces, then, after it matches a voice command to a device name, my "skill" removes the spaces in the device name before sending the command through the ZMQ layer so that my system will know what it's talking about. This works fine, but it's a maintenance problem because if I add or change a device name, I'll have to remember to update the mycroft's local list. I have no such issue with the rest of the system - the app and all the other stuff in the house pick up changes automatically. When there are several mycrofts in the house, this maintenance issue will be a pain.
I either need to just add spaces to the names (probably best) or add new fields to the configuration for the devices to include space delimited aliases for the mycroft to use. Or -- I could somehow add the compound-word device names to the NLP lexicon so that they would get interpreted properly by the processor, but that strikes me as a fool's errand, because it seems like I would be undertaking to maintain my own lexicon and would have a lot of trouble with device updates.
Anwyay - at the moment I'm viewing voice assistants as just another new user interface. A good one, to be sure, and I love not having to be holding a phone or sitting at a computer to do stuff. The mk i mycroft is a prototype, though, and the microphone is not great, so you pretty much have to have your face right in front of it for it to hear you. Also, my 11 year old daughter has to use a really low voice - like she's mocking a man voice - to activate the wake word, funny. But I suspect that these things will be better with the mk ii units and with config tweaking.
The mycroft *is* vendor-connected by my definition, but apparently doesn't need to be - certain configuration parameters can be set up on their website and zapped into your unit (which you associate with your account by typing in a code that the unit displays on initial start up -- total vendor connection). I'll be looking into ways to break that connection, but: 1) it doesn't seem at all nefarious, and it's focused solely on configuration, and 2) I can see how it would be basically necessary for someone who doesn't want to SSH in order to configure the device.