Projekt: Alexa Custom Skill - beliebige Antworten

Mit ** gekennzeichne Links auf dieser Seite sind Affiliatelinks.

Den großen Vorteil vom Custom Skill spiel FHEM zusammen mit Perl-Funktionen aus. Denn hier kann man sich beliebige Antworten zusammenbauen, sodass hier praktisch jede Fragestellung möglich wird. In den Fragen können Platzhalter genutzt werden, welche dann als Parameter in die Funktionen gereicht werden können. So kann man mit einem Skill ganz verschiedene Dinge ausführen und die Möglichkeiten werden nahezu unbegrenzt. Die Antworten baut man sich dann einfach im Return-Wert zusammen. So kann ich nun beispielsweise die Benzinpreise in der Umgebung abfragen, das Fernsehprogramm umschalten oder eben auch verschiedene Stati von Geräten abfragen. Mehr dazu natürlich im Video.

Was wird benötigt?

  • Eine FHEM-Installation inkl. Custom Skill

Video

Arduino-Kurs

Befehle

gutenMorgen=guten morgen
guteNacht=gute nacht
{alexaCustom("benzin")}=was kostet der Sprit
{alexaFernsehprogramm($programm)}=Fernseher auf {programm:AMAZON.NUMBER}
{alexaMuell($type)}=wann wird der {type:Müll;Biomüll;Papiermüll;Restmüll;Wertstoffmüll} abgeholt
{alexaCustom("firetv")}=ich will fernsehen
{alexaCustom("saugen")}=mach sauber
{alexaYouTube($auswahl)}=wieviele YouTube {auswahl:Abonnenten;Videos;Aufrufe} habe ich
sub alexaCustom($) {
    my ($type) = @_;

    if ($type eq "benzin") {
        return 'Bei Aral ' . ReadingsVal('OUT_Tankstelle_Aral', 'SuperE5', '0') . ' €, bei Raiffeisen ' . ReadingsVal('OUT_Tankstelle_Raiffeisen', 'SuperE5', '0') . ' € und bei der Westfalen Tankstelle ' . ReadingsVal('OUT_Tankstelle_Westfalen', 'SuperE5', '0') . ' €';
    } elsif ($type eq "saugen") {
        fhem("set WHG_Staubsauger start");
        return 'Ok, ich mache jetzt schön sauber für Dich';
    } elsif ($type eq "firetv") {
        fhem("set Harmony activity Watch.Fire.TV");
        return 'Ok, aber guck nicht so lange Fernsehen';
    }

    return 'wie bitte?';
}

sub alexaFernsehprogramm($) {
    my ($programm) = @_;
    Log3('alexa', 2, 'Fernsehprogramm: ' . $programm);

    fhem('set Harmony command 42258099 Number' . $programm);

    return 'Ich habe den Fernseher auf ' . $programm . ' gestellt';
}

sub alexaMuell($) {
    my ($type) = @_;

    Log3('alexa', 4, 'Müll: ' . $type);

    my $days = -1;
    my $what;

    if ($type eq "müll") {
        $days = ReadingsNum('OUT_Abfall', 'next_days', -1);
        $what = join(
            ' und ',
            split(
                / \/ /,
                ReadingsVal('OUT_Abfall', 'next_text', 'irgendetwas')
            )
        );

    } elsif ($type =~ /bio/) {
        $days = ReadingsNum('OUT_Abfall', 'OUT_Muellkalender_Biotonne_days', -1);
        $what = 'der Biomüll';
    } elsif ($type =~ /papier/) {
        $days = ReadingsNum('OUT_Abfall', 'OUT_Muellkalender_Papiertonne_days', -1);
        $what = 'der Papiermüll';
    } elsif ($type =~ /rest/) {
        $days = ReadingsNum('OUT_Abfall', 'OUT_Muellkalender_Restabfalltonne_days', -1);
        $what = 'der Restmüll';
    } elsif ($type =~ /wertstoff/) {
        $days = ReadingsNum('OUT_Abfall', 'OUT_Muellkalender_Wertstofftonne_days', -1);
        $what = 'die gelbe Tonne';
    }

    if ($days == -1) {
        return 'Irgendetwas stimmt mit dem Abfallkalender nicht.';
    } elsif ($days > -1 && $what) {
        if ($days == 0) {
            return 'Heute wird ' . $what . ' abgeholt';
        } elsif ($days == 1) {
            return 'Morgen wird ' . $what . ' abgeholt';
        }

        return 'In ' . $days . ' Tagen wird ' . $what . ' abgeholt';
    }

    return 'Ich habe leider nur Müll verstanden.';
}

sub alexaYouTube($) {
    my ($auswahl) = @_;

    if ($auswahl eq "aufrufe") {
        return 'Du hast bereits ' . ReadingsVal('YouTubeData', 'views', 0) . ' Aufrufe auf YouTube';
    } elsif ($auswahl eq "abonnenten") {
        return 'Du hast bereits ' . ReadingsVal('YouTubeData', 'subscribers', 0) . ' Abonnenten auf YouTube';
    } elsif ($auswahl eq "videos") {
        return 'Du hast bereits ' . ReadingsVal('YouTubeData', 'videos', 0) . ' Videos auf YouTube hochgeladen';
    }

    return 'wie bitte?';
}

Newsletter

Trage Dich jetzt in den Newsletter ein und genieße dadurch viele Vorteile:

  • 5€-Gutschein als Dankeschön
  • Zugang zu exklusiven Inhalten
  • Rabattaktionen für Kurse
  • Angebote für Produkte

* Durch Angabe meiner E-Mail-Adresse erkläre ich mich damit einverstanden, dass mir regelmäßig Informationen und Produktempfehlungen aus dem Fachgebiet Smart Home zugesendet werden. Mit dem Eintrag akzeptieren Sie unsere Datenschutzbestimmungen. Meine Einwilligung kann ich jederzeit widerrufen.

Matthias Kleine

Matthias Kleine

Großer Fan und Anhänger von OpenSource-Projekten und erweiterbaren Haus-Automatisierungskomponenten. Je offener und flexibler das System, desto besser. Ich lege mich nicht auf einzelne Protokolle oder Standards fest, sondern probiere aus allen Welten das Beste zu verheiraten. Unterwegs als Softwareentwickler, Trainer und Blogger im Bereich Smart Home.

Auf YouTube und hier im Blog gibt es bereits unzählige kostenlose Videos, Informationen und Tutorials. Wenn Dir das noch nicht reicht, ist ein Training genau das richtige für Dich! Die folgenden Trainings haben den Vorteil, dass immer von Anfang an gestartet wird und Du ohne Vorwissen teilnehmen kannst.