abonneren

Mycroft AI skills installeren en zelf programmeren

Mycroft AI Skills
In een vorige workshop bouwden we onze eigen slimme speaker met behulp van Mycroft AI en een Raspberry Pi 3. In dit tweede artikel kijken we naar het installeren en zelf programmeren van extra Mycroft AI skills.

Voordat we beginnen, gaan we eerst onze locatie instellen. Veel skills zijn daar namelijk op gebaseerd, zoals de juiste tijd en het weerbericht. Je locatie dien je in het configuratiebestand in te stellen. Open dat met het commando:

sudo nano /etc/mycroft/mycroft.conf

Voeg dan aan het begin, vlak na de eerste regel de volgende code toe om je locatie in te stellen, waarbij je uiteraard je eigen locatie en coördinaten invult:

"location": { "city": { "code": "Aarschot", "name": "Aarschot" "state": { "name": "Vlaams-Brabant", "country": { "code": "BE", "name": "Belgium" } } }, "coordinate": { "latitude": 50.985996, "longitude": 4.836522 }, "timezone": { "code": "Europe/Brussels", "name": "Central European Time", "dstOffset": 3600000, "offset": 3600000 } },

Sla dit op met Ctrl+O en sluit de editor nano af met Ctrl+X. Als je Mycroft AI met “Update configuration” vraagt om de configuratie opnieuw in te lezen, krijg je daarna de juiste tijd als je aan Mycroft AI “What time is it?” vraagt.

Weerbericht met OpenWeatherMap

Er zijn nog andere instellingen in het bestand mycroft.conf. Voor het weerbericht maakt Mycroft AI standaard gebruik van een proxyserver van Mycroft, maar die functioneerde bij onze test niet. Je kunt het weerbericht wel werkend krijgen als je in het configuratiebestand een api-sleutel van OpenWeatherMap invoert, waardoor Mycroft AI het weerbericht rechtstreeks van OpenWeatherMap opvraagt via de api. Maak daarom een account aan op OpenWeatherMap en vraag een api-sleutel aan (http://openweathermap.org/appid#get).

Open dan weer het configuratiebestand van Mycroft AI en voeg vlak na de eerste regel het volgende code toe:

WeatherSkill": { "api_key": "APISLEUTEL", "proxy": false, "temperature": "celsius" },

Waar hier APISLEUTEL staat voer je de verkregen api-sleutel in. Bewaar het bestand en sluit nano met Ctrl+O en Ctrl+X. Nadat de configuratie opnieuw geladen is (via de spraakopdracht met “Update configuration”), kun je nu het weerbericht vragen met vragen als “What’s the weather like?” of “When will it rain?”.

Extra skills installeren

De standaardvaardigheden die Mycroft AI heeft, bieden een basiservaring, maar die breid je eenvoudig uit. Op de GitHub-repository van Mycroft staan alle beschikbare skills voor Mycroft AI. Ze zijn niet allemaal getest en sommige zijn nog in ontwikkeling, zodat ze nog niet bruikbaar zijn. Bekijk dus altijd eerst de GitHub-pagina van een skill voor je ze installeert.

Heb je een skill gevonden die je interessant lijkt, dan is de installatie zelf vrij eenvoudig: geef Mycroft AI gewoon de opdracht “Install XXX skill”, waarbij je XXX vervangt door de skill waarin je bent geïnstalleerd. We bekijken hier enkele interessante skills die je zo kunt installeren. Nadien verwijder je een geïnstalleerde skill even eenvoudig met “Uninstall XXX skill”.

De system-skill geeft je Mycroft AI de mogelijkheid om de Pi uit te schakelen of te herstarten. Een eenvoudige opdracht “Reboot” of “Shutdown” werkt dan. Of wat dacht je van de coin-flip-skill. Met de opdracht “Flip a coin” krijg je een rollend muntje te horen en dan “It is heads” of “It is tails” als antwoord.

Er zijn ook heel wat ingewikkeldere skills, en de interessantste integreren je slimme assistent met andere systemen, zoals de domoticasoftware Domoticz, Home Assistant of OpenHAB, de slimme verlichting van Philips Hue, Google Calendar of Gmail etc. Al deze skills zijn wel wat moeilijker te integreren. Zo vereisen ze een uitgebreide configuratie in het configuratiebestand mycroft.conf.

Zelf skills programmeren

Zelf een skill voor Mycroft AI programmeren is niet zo moeilijk, al moet je uiteraard wat Python kennen. Maar door de code van een bestaande skill te bekijken en aan te passen, kom je al een eind. De documentatie van Mycroft AI geeft je ook wat houvast.

We leggen hier uit hoe je een skill maakt waarmee je Mycroft AI kunt vragen hoe lang je Pi al aan staat. Creëer eerst een directorystructuur in /opt/mycroft/skills met het commando:

sudo mkdir -p /opt/mycroft/skills/skill-uptime/{dialog/en-us,vocab/en-us}

Ga dan naar de directory van je skill:

cd /opt/mycroft/skills/skill-uptime

Maak een nieuw dialoogbestand met:

sudo nano dialog/en-us/uptime.dialog

Zet hierin de volgende regels:

My uptime is {{uptime}}. I have been awake for {{uptime}}.

Voor elke zin die je skill zou moeten zeggen, maak je zo’n dialoogbestand. Uit de verschillende regels in dat bestand kiest Mycroft AI dan willekeurig eentje. Het zijn dus eigenlijk zinnen met dezelfde betekenis, om wat meer variatie in het taalgebruik van je spraakopdrachten te brengen. In ons geval hebben we maar één dialoogbestand en heeft de skill twee manieren om de uptime uit te spreken.

Op vergelijkbare manier maak je een vocabulaire bestand voor elk sleutelwoord dat de skill moet herkennen. In zo’n bestand zet je alle synoniemen. Maak voc-het bestand met de opdracht:

sudo nano vocab/en-us/UptimeKeyword.voc

En zet daarin de volgende tekst, bewaar de code (Ctrl+O) en sluit nano daarna af (Ctrl+X):

uptime awake

Python-script

De code zelf komt in een Python-script. Omdat de code iets te lang is om over te tikken, kun je die hier downloaden. Download en open die code in je favoriete editor op de Raspberry Pi. We leggen er hier wat dingen over uit.

Mycroft AI Skills

We importeren in die code eerst enkele Python-klassen en definiëren dan een klasse UptimeSkill die van MycroftSkill overerft. De kern is de functie initialize, die een uptime_intent aanmaakt op basis van het UptimeKeyword dat in het bestand UptimeKeyword.voc staat. We registreren dat intent in Mycroft AI en definiëren dat we hierbij de functie handle_uptime_intent uitvoeren.

De functie get_uptime leest de uptime van Linux uit en zet die om in een door mensen verstaanbaar formaat. En dan hoeft de functie handle_uptime_intent alleen nog maar de juiste dialoog uit te spreken en als parameter uptime het resultaat van de functie get_uptime door te geven.

Als je dit Python-script af hebt (het bestand heet __init__.py), zet je het in de map /opt/mycroft/skills/skill-uptime. Daarna moet je met het volgende commando de gebruikersrechten correct instellen:

sudo chown -R mycroft:mycroft /opt/mycroft/skills/skill-uptime

En daarna laad je de skills opnieuw met:

sudo systemctl restart mycroft-skills.service

Vanaf nu kun je aan je slimme assistent vragen “What’s your uptime?” of “How long have you been awake?”.

Geschreven door: Koen Vervloesem op

Category: Workshop, Audio

Tags: Raspberry Pi, Iot, Speaker, DIY, Mycroft AI