Projekt: Alexa Custom Skill - beliebige Antworten

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

Projekt: Alexa Custom Skill - beliebige Antworten
Projekt: Alexa Custom Skill - beliebige Antworten
  • Matthias Kleine
  • 18.05.2018
  • Alexa

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

Hausbau-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?';
}
Ich will mehr

Smart-Home-Training von A-Z

Steig noch tiefer in die Themen ein und meistere Deine Projekte!

ioBroker-Master-Kurs

ioBroker-Master-Kurs

Mehr Infos
Hausbau-Kurs

Hausbau mit KNX

Mehr Infos
Lox-Kurs

Lox-Kurs

Mehr Infos
NodeRed-Kurs

NodeRed-Kurs

Mehr Infos