This projects allows to use a nabaztag:tag as a voice assistant for Home Assistant using the original hardware (only by changing the default server in its configuration).
The Nabaztag:tag is a “smart rabbit” from 2006, one of the earliest IoT devices. It was manufactured by a french company named “Violet.” but was left for dead when the company went out of business and that the servers were taken down.
Since then, opensource server implementations were made to keep these devices alive, the most well known being OpenJabNab. This project is a brand new server which goal is to provide a simple and unified API for the 3 different versions of the nabaztag (the original, the tag:tag and the karotz).
It’s still in a very early stage of developemnt but I successfully managed to turn my nabaztag:tag into a voice assistant. Here is a little demo:
For the technical details:
The nabaztag and tag:tag works by downloading a bytecode from the a server (specified in its configuration, which can be overwritten) as soon as it starts and by executing this bytecode on a virtual machine. This bytecode is the one responsible for managing all the features: leds, ears, rfid, player, microphone …
When the company closed, they released the full source code for the server, but also for the bootcode and for the firmware of the rabbits.
So, we have now access to the compiler to make a new bytecode and thus add new features to the device. Knowing that, I decided to rewrite a new server but also a new bytecode for the nabaztag:tag, which allowed me to add microphone audio streaming over udp.
The API exposed by the server is based on a pub/sub model (like MQTT).
To integrate this with Assist, I used wyoming-satellite and wrote a few terrible python scripts.
The data from/to the server is handled by the python scripts that read/write it to pipes which are then used by wyoming-satellite in the mic and snd commands (I also enabled mic noise supression using the cli flags, which gives a much more reliable detection).
This is just a proof of concept, the long term goal being to create a full home-assistant integration.
I tested with the following setup:
- Language: french
- Conversation agent: Home Assistant
- Speech to Text: faster-whisper
- Text to Speech: piper (fr_FR, upmc medium)
- Wake Word: porcupine1 (perroquet - fr)
Here is a quick setup guide if you want to try it out: GitHub - droso-hass/openab at 0.0.1