Home » Smart hjem » Guide: Opret din egen digitale assistent
Guide: Opret din egen digitale assistent

Guide: Opret din egen digitale assistent

Share
3 Sociale medier

Du vil måske gerne lade dit system tjekke dine sociale medie-konti på internettet. Der findes adskillige Python-moduler, som kan klare det. Lad os antage, at du vil kunne tjekke din Facebook-konto. Installer det følgende Python-modul:

sudo apt-get install python-facebook

>> Du kan bruge import facebook til at få adgang til Facebooks API. Hvis du er Twitter-bruger, kan du installere Debians python-twitter-pakke og få adgang til Twitter-API’et. E-mail er nemmere, forudsat at din e-mailudbyder leverer IMAP- eller POP-adgang. Du kan importere e-mails og få stemmestyring til at læse ulæste e-mails op for dig. Til Google-fans har Google et Python-modul, der giver adgang til API’erne til stort set alting: Du kan arbejde med din kalender, e-mail eller med fitnessdata.

>> Nu burde du have en streng, der indeholder den tekst, som blev udtalt til din Raspberry Pi. Men du skal finde ud af, hvilken kommando det fører til. En metode består i at søge efter nøgleord. Hvis du har adgang til en liste over nøgleord, kan du køre igennem dem og søge efter hovedstrengen for at se, om nogen af disse nøgleord eksisterer i den som en understreng. Så kan du eksekvere den tilknyttede opgave med dette nøgleord. Denne metode finder imidlertid kun det første match. Hvad sker der, hvis din bruger kommer til at inddrage et nøgleord i sin talte kommando før det egentlige kommando-ord? Det er den auditive ækvivalent til at have tykke fingre og skrive en fejl i en kommando på tastaturet. Der foregår til stadighed et forskningsarbejde med henblik på at håndtere disse fejl på en fornuftig måde. Det kan være, at du kan lave en ny algoritme til at håndtere den slags situationer. Giv os et praj, hvis du finder på noget.

>> Lad os sige, at du har en række Python-scripts, der indeholder de forskellige opgaver, du vil have dit system til at klare. Du skal bruge en metode til at få disse scripts til at køre, når du beder om det. Den mest direkte måde at køre et script på består i at bruge execfile . Vi antager, at du har et script ved navn “do_task.py”, der indeholder Pythonkode, og som du gerne vil have kørt, når der bliver givet en kommando. Det kan du køre med
execfile(“do_task.py”)

Se også:  Guide: Lav robotter med Raspberry Pi

>> Med denne form kan du tilføje kommandolinjefunktioner til den streng, der bliver indlæst. Den leder i den aktuelle mappe efter det script, der svarer til et filnavn, og kører det i dit hovedprograms aktuelle eksekveringskontekst. Hvis du har brug for at køre denne kode flere gange, skal du kalde execfile hver gang. Hvis du ikke ønsker, at scriptet kører i den samme kontekst, skal du bruge Subprocess-modulet. Det kan du importere med:
import subprocess

>> Derefter kan du eksekvere scriptet således:
subprocess.call(“do_task.py”)

>> Dette aktiverer en underproces af den centrale Python-oversætter og kører dit script der. Hvis dit script skal interagere med hovedprogrammet, er dette nok ikke den rette metode. Det er ikke enkelt at samle output fra et kald til “do_task.py” med Subprocess, og en bedre måde at opnå det samme på består i at bruge import -statementet. Det kører også koden i dit script på det punkt, hvor import -statementet bliver kaldt. Hvis dit script kun indeholder eksekverbare Python-statements, bliver de kørt under importen. Når du vil genkøre denne kode, skal du bruge kommandoen reload . Kommandoen reload eksisterer ikke i version tre af Python – hvis du bruger netop den Python-version, er det bedre at indkapsle den kode, der er indeholdt i scriptet i en funktion. Så kan du importere scriptet ved begyndelsen af dit hovedprogram og simpelthen kalde den relevante funktion på det rigtige tidspunkt. Det er en langt mere Python-agtig metode at bruge. Hvis du har det følgende indhold for

do_task.py…
def do_func():
do_task1()
do_task2()

… kan du bruge det med den følgende kode i dit hovedprogram:

import do_task
….
….
do_task.do_func()
….

>> En endnu mere Python-agtig metode består i at bruge klasser og objekter. Man kan skrive et script, som definerer en klasse, der indeholder metoder, som du kan kalde, når du har brug for det.

>> Hvad er dine muligheder, hvis du vil gøre noget, som man ikke kan opnå med et Python-script? I disse tilfælde skal du kunne køre arbitrære programmer på værtssystemet. Værtssystemet er i dette tilfælde din Raspberry Pi. Vi kan for eksempel sige, at du har brug for at downloade nogle e-mails ved hjælp af programmet Fetchmail. Det kan du gøre på et par forskellige måder. Den ældste metode består i at bruge kommandoen os.system() , når du indlæser en streng. I vores eksempel vil det se mere eller mindre sådan ud:
os.system(“/usr/bin/fetchmail”)

Se også:  Google Home + Google Home Mini [TEST]: Den nemme vej til et stemmestyret hjem

>> Du skal eksplicit bruge os.wait() for at få at vide, nøjagtig hvornår opgaven er afsluttet. Denne metode bliver nu erstattet af det nyere Subprocess-modul. Det giver dig mere kontrol over, hvordan opgaven bliver kørt, og hvordan du kan interagere med den. En simpel ækvivalent til den ovenstående kommando ville se sådan ud:
subprocess.call(“/usr/bin/fetchmail”)

>> Den venter, indtil det kaldte program er færdigt, og vender så tilbage til din centrale Python-proces. Men hvad hvis dit eksterne program skal indlæse resultater til dit hovedprogram? I så fald kan du bruge kommandoen

subprocess.check_output() . Det er i princippet det samme som subprocess.call() , bortset fra at når det slutter, bliver alt det, der er skrevet ud af det eksterne program til stdout, håndteret som et streng-object. Hvis du også ønsker information skrevet ud på stderr, kan du tilføje parameteren stderr=subprocess.STDOUT til dit kald til subprocess.check_output .

>> Nu burde du været så velorienteret i det grundlæggende, at du kan bygge din egen version af J.A.R.V.I.S.-systemet. Du kan finjustere den og få den til at gøre stort set alt, hvad du beder den om. Klø på, og sæt dine maskiner i gang. Få dem til faktisk at høre på, hvad du siger – for en gangs skyld.

Sociale medier: kompletkodeoversigt

do_task.py
———-
def do_func():
print “Hello World”

main_program.py
—————

# Du kan lade dit eget modul udføre opgaver
import do_task

# Så kan du køre inkluderede funktioner
do_task.do_func()

# Du kan køre systemprogrammer direkte
import os

# Exitkoden fra dit program er i den variable returkode
returncode = os.system(“/usr/bin/fetchmail”)

# Subproces-modulet er et bedre valg
import subprocess

# Du kan duplikere ovenstående med
returncode = subprocess.call(“/usr/bin/fetchmail”)

# Hvis du også vil have outputtet, kan du bruge
returned_data = subprocess.check_output(“/usr/bin/
fetchmail”)

TAGS
digital assistent
gør det selv
Raspberry Pi

DEL DENNE
Share

Seneste Tech test
Seneste konkurrencer

Mest populære
Populære
Nyeste
Tags

Find os på de sociale medier

Modtag dagligt IT-nyhedsbrev

Få gratis tech-nyheder i din mail-indbakke alle hverdage. Læs mere om IT-UPDATE her

Find os på FaceBook

Alt om DATA

Lautrupsgade 7,
DK-2100 København Ø
Telefon: 33 91 28 33
redaktion@altomdata.dk

Datatid TechLife

Lautrupsgade 7,
DK-2100 København Ø
Telefon: 33 91 28 33
redaktion@datatid.dk

Audio Media A/S

CVR nr. 16315648,
Lautrupsgade 7,
DK-2100 København Ø
Telefon: 33 91 28 33
info@audio.dk
Annoncesalg / Prislister:
Lars Bo Jensen: lbj@audio.dk Telefon: 33 74 71 16
Annoncer: Medieinformation


Alt om DATA, Datatid TechLife  © 2019
Privatlivspolitik og cookie information - Audio Media A/S