Over artikels die ik elders schreef (oude berichten, pagina 2)

Stembesturing zonder luistervinken met Rhasspy

Met slimme assistenten zoals Google Assistant, Amazon Alexa en Apple Siri geef je opdrachten met je stem. Leuk, maar je stemopnames worden wel naar de cloud gestuurd voor verwerking. Met een Raspberry Pi en de opensourcesoftware Rhasspy kun je stembesturing volledig lokaal realiseren, zelfs zonder internet. Je stemopdrachten koppel je dan aan Node-RED of een domoticasysteem zoals Home Assistant, en dat zonder dat Google, Amazon of Apple de hele tijd meeluistert. Zelfs in het Nederlands.

Rhasspy is geen afgewerkte spraakassistent zoals voorgaande voorbeelden. Het is eigenlijk een toolkit waarmee je zelf je eigen spraakassistent ontwikkelt. Meer voor de doe-het-zelvers dus, maar als je al een eigen domoticasysteem zoals Home Assistant hebt draaien, zal dit je zeker niet afschrikken. Na de configuratie heb je een systeem dat audio omzet in gestructureerde JSON-gegevens:

/images/rhasspy-audio-to-json.svg

Je bedoeling herkennen

Rhasspy herkent niet zomaar alles wat je zegt. Je dient zelf te definiëren welke zinnen Rhasspy moet verstaan en welke bedoeling (intent) hij daaraan geeft. Omdat deze herkenning specifiek op maat van jouw vereisten gebeurt, vereist dit geen clouddienst met grote verwerkingskracht, maar kun je Rhasspy perfect op een Raspberry Pi draaien.

Zo definieer je bijvoorbeeld een intent LightState die een toestand kent: aan of uit. Je vult dan zinnen in die deze intent weergeven, zoals "doe het licht aan". Als je dan die zin uitspreekt, komt de hele machinerie van Rhasspy in gang en krijg je als resultaat het JSON-fragment dat de herkende bedoeling op een gestructureerde manier weergeeft.

Daarop kun je dan Home Assistant, Node-RED of je eigen software laten reageren en bijvoorbeeld je apparaten via je stem laten aansturen. Rhasspy maakt gebruik van MQTT (Message Queuing Telemetry Transport) om boodschappen op je netwerk rond te sturen wanneer je hem geactiveerd hebt, wanneer hij een zin heeft herkend, wanneer een sessie voorbij is enzovoort. Je kunt dus in gelijk welke programmeertaal of gelijk welk domoticasysteem op die MQTT-boodschappen reageren en zelf MQTT-boodschappen sturen om functionaliteit van Rhasspy aan te spreken.

Aan de slag met Rhasspy

Wil je ook met Rhasspy aan de slag? Op de website van Computer!Totaal leg ik in het artikel Zo krijg je stembesturing op de Raspberry Pi uit hoe je met Rhasspy begint op een Raspberry Pi met luidspreker en microfoon. Op het einde van het artikel kun je spraakopdrachten in het Nederlands geven aan Rhasspy en kun je Node-RED daarop laten reageren (zie ook mijn artikel Node-RED: apparaten en diensten koppelen zonder code). Loop je tegen problemen aan? Bezoek dan zeker Rhasspy's forum eens, waar talloze behulpzame communityleden actief zijn (waaronder ikzelf).

Heeft de mogelijkheid om zonder clouddienst aan stembesturing te doen je geprikkeld? Lees dan zeker mijn boek Control Your Home with Raspberry Pi: Secure, Modular, Open-Source and Self-Sufficient. Zoals de ondertitel al zegt, is het zelfvoorzienende aspect een belangrijk principe van mijn aanpak in dit boek. Ik vind dat een domoticasysteem niet mag afhangen van externe diensten van bedrijven die er van de ene op de andere dag de brui aan kunnen geven, of die continu kunnen zien wat ik thuis doe. Voor stembesturing geldt dat nog meer: je wilt niet dat Google of een ander bedrijf meeluistert met wat er in je huis gebeurt, ook al is het per ongeluk.

Het hele hoofdstuk over stembesturing in mijn boek gaat dan ook over Rhasspy. Het gaat iets dieper in op enkele aspecten die in het artikel in Computer!Totaal minder of niet aan bod kwamen. Zo leg ik er uit hoe je één Raspberry Pi als basis opzet en één of meerdere als satellieten, zodat je op meerdere plaatsen in huis met Rhasspy kunt spreken. Ook andere manieren dan Node-RED om de opdrachten die je geeft te verwerken komen aan bod, zoals met Python (onder andere via AppDaemon). Het boek is in het Engels en de voorbeelden dus ook, maar dezelfde aanpak werkt ook perfect in het Nederlands.