Du kannst jedem Intent mehrere Intentslots zuweisen z.B.
im {rooms} {command} {radiostation} wiedergeben
{room} fragt Dir den Raumnamen ab
{command} wäre in dem Fall radio
{radiostation} ist der Sender z.B. ffh
Du würdest in dem Fall also sagen bei einem Invocationname Sonos
Alexa sage Sonos im Wohnzimmer Radio FFH wiedergeben
Die Intentslots wertest Du dann in IPS aus z.B.
<?
use Patami\IPS\System\IPS;
function Execute(Request $request)
{
$room = strtolower($request->slots->rooms);
$radiostation = strtolower($request->slots->radiostation);
$device = strtolower($request->slots->device);
$command = strtolower($request->slots->command);
$volume = strtolower($request->slots->volume);
$time = strtolower($request->slots->time);
$balance = strtolower($request->slots->balance);
if($request->IsLaunchRequest())
{
$text = 'Dies war der Launch Intent von Sonos';
}
if($room != "")
{
// Get the requested information
switch ($room) {
case 'bad':
case 'badezimmer':
$sonosid = 28677 /*[Geräte\Heimkino\Audio\Sonos\Sonos Bad]*/;
if($radiostation != "")
{
$text = SendSonosCommand($sonosid, $command, $radiostation);
}
else
{
$text = SendSonosCommand($sonosid, $command);
}
break;
case 'wohnzimmer':
$sonosid = 20272 /*[Geräte\Heimkino\Audio\Sonos\Sonos Wohnzimmer]*/;
if($radiostation != "")
{
$text = SendSonosCommand($sonosid, $command, $radiostation);
}
else
{
$text = SendSonosCommand($sonosid, $command);
}
break;
case 'schlafzimmer':
$sonosid = 19397 /*[Geräte\Heimkino\Audio\Sonos\Sonos Schlafzimmer]*/;
if($radiostation != "")
{
$text = SendSonosCommand($sonosid, $command, $radiostation);
}
else
{
$text = SendSonosCommand($sonosid, $command);
}
break;
case 'küche':
case 'kueche':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
if($radiostation != "")
{
$text = SendSonosCommand($sonosid, $command, $radiostation);
}
else
{
$text = SendSonosCommand($sonosid, $command);
}
break;
case '':
// The subject slot was not set
// Ask the user for the object type
return AskResponse::CreatePlainText(
'Hallo. Ich kann Deine Sonos Boxen steuern. Für weitere Informationen sage Hilfe. Welchen Raum möchtest Du steuern?'
)->SetRepromptPlainText(
'Wie bitte?'
);
default:
// The subject slot was invalid
// Ask the user for the correct object type
return AskResponse::CreatePlainText(
'Diesen Raum kenne ich nicht. In welchem Raum wolltest Du Musik abspielen?'
)->SetRepromptPlainText(
'Wie bitte?'
);
}
}
elseif($device != "")
{
// Get the requested information
switch ($device) {
case 'sonos':
$sonosid = 28677 /*[Geräte\Heimkino\Audio\Sonos\Sonos Bad]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'connect':
$sonosid = 20272 /*[Geräte\Heimkino\Audio\Sonos\Sonos Wohnzimmer]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'connect amp':
$sonosid = 19397 /*[Geräte\Heimkino\Audio\Sonos\Sonos Schlafzimmer]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'sub':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'soundbar':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'playbar':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'play fuenf':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'play drei':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case 'play eins':
case 'play 1':
$sonosid = 33902 /*[Geräte\Heimkino\Audio\Sonos\Sonos Kueche]*/;
$text = SendSonosCommand($sonosid, $command);
break;
case '':
// The subject slot was not set
// Ask the user for the object type
return AskResponse::CreatePlainText(
'Hallo. Ich kann Deine Sonos Boxen steuern. Für weitere Informationen sage Hilfe. Welchen Raum möchtest Du steuern?'
)->SetRepromptPlainText(
'Wie bitte?'
);
default:
// The subject slot was invalid
// Ask the user for the correct object type
return AskResponse::CreatePlainText(
'Diesen Raum kenne ich nicht. In welchem Raum wolltest Du Musik abspielen?'
)->SetRepromptPlainText(
'Wie bitte?'
);
}
}
// Tell the user the requested number of objects
return TellResponse::CreatePlainText(
$text
)->SetSimpleCard(
'IP-Symcon Informationen',
$text
);
}
function SendSonosCommand($sonosid, $command, $radio = Null, $volume = Null)
{
if ($command == "starten" || $command == "start")
{
SNS_Play($sonosid);
$text = sprintf(' %s wurde gestartet.', IPS_GetName($sonosid));
}
elseif ($command == "stoppen" || $command == "stopp")
{
SNS_Stop($sonosid);
$text = sprintf(' %s wurde gestoppt.', IPS_GetName($sonosid));
}
elseif ($command == "stumm schalten" || $command == "mute on")
{
SNS_SetMute($sonosid, true);
$text = sprintf(' %s wurde stumm geschaltet.', IPS_GetName($sonosid));
}
elseif ($command == "mute off")
{
SNS_SetMute($sonosid, false);
$text = sprintf(' %s der Ton wurde wieder eingeschaltet.', IPS_GetName($sonosid));
}
elseif ($command == "weiter")
{
SNS_Next($sonosid);
$text = sprintf(' Es wurde auf %s zum nächsten Track gesprungen.', IPS_GetName($sonosid));
}
elseif ($command == "zurück")
{
SNS_Previous($sonosid);
$text = sprintf(' Es wurde auf %s zum vorherigen Track gesprungen.', IPS_GetName($sonosid));
}
elseif ($command == "volume" || $command == "lautstärke")
{
SNS_ChangeVolume($sonosid, $volume);
$text = sprintf(' Die Lautstärke aus %s wurde auf %s eingestellt.', IPS_GetName($sonosid), $volume);
}
elseif ($command == "pause")
{
SNS_Pause($sonosid);
$text = sprintf(' %s wurde gestoppt.', IPS_GetName($sonosid));
}
elseif ($command == "radio")
{
SNS_SetRadio($sonosid, $radio);
$text = sprintf(' Auf %s wurde der Radiosender %s gestartet.', IPS_GetName($sonosid), $radio);
}
/*
elseif ($command == "volume" || $command == "lautstärke")
{
SNS_ChangeVolume($sonosid, $volume);
$text = sprintf(' Die Lautstärke aus %s wurde auf '.$volume.' eingestellt.', IPS_GetName($sonosid));
}
*/
elseif ($command == "löschen")
{
//Bricht den Sleeptimer ab.
SNS_DeleteSleepTimer($sonosid);
$text = sprintf(' Der Sleeptimer von %s wurde abgebrochen.', IPS_GetName($sonosid));
}
elseif (($command == "ramp") && ($rampType == 1 || $rampType == "schlafen"))
{
$rampType = "SLEEP_TIMER_RAMP_TYPE";
SNS_RampToVolume($sonosid, $rampType, $volume);
$text = sprintf(' Die Lautstärke aus %s wurde auf '.$volume.' eingestellt.', IPS_GetName($sonosid));
}
elseif (($command == "ramp") && ($rampType == 2 || $rampType == "alarm"))
{
$rampType = "ALARM_RAMP_TYPE";
SNS_RampToVolume($sonosid, $rampType, $volume);
$text = sprintf(' Die Lautstärke aus %s wurde auf '.$volume.' eingestellt.', IPS_GetName($sonosid));
}
elseif (($command == "ramp") && ($rampType == 3 || $rampType == "alarm"))
{
$rampType = "AUTOPLAY_RAMP_TYPE";
SNS_RampToVolume($sonosid, $rampType, $volume);
$text = sprintf(' Die Lautstärke aus %s wurde auf '.$volume.' eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "analog input")
{
SNS_SetAnalogInput($sonosid, $sonosid);
$text = sprintf(' Die analoge Input von %s wurde eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "balance")
{
// Passt die Balance Einstellungen im Equalizer der Sonos Instanz an. Nur Sinnvoll bei Setreopaaren oder AMPS.
// Mögliche Werte liegen zwischen -100 (ganz links) und 100 (ganz rechts).
SNS_SetBalance($sonosid, $balance);
$text = sprintf(' Die Balance wurde von %s wurde auf '.$balance.' eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "bass")
{
//Passt die Bass Einstellungen im Equalizer der Sonos Instanz an.
//Mögliche Werte liegen zwischen -10 und 10.
SNS_SetBass($sonosid, $bass);
$text = sprintf(' Der Bass von %s wurde auf '.$bass.' eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "crossfade ein")
{
//Schaltet den Crossfade Modus für eine Instanz ein oder aus.
//Falls die Instanz Teil einer Gruppe ist, wird das Kommano automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetCrossfade($sonosid, true);
$text = sprintf(' Der Crosfade von %s wurde eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "crossfade aus")
{
//Schaltet den Crossfade Modus für eine Instanz ein oder aus.
//Falls die Instanz Teil einer Gruppe ist, wird das Kommano automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetCrossfade($sonosid, false);
$text = sprintf(' Der Crossfade von %s wurde ausgestellt.', IPS_GetName($sonosid));
}
elseif ($command == "gruppieren")
{
//Fügt die Instanz zu einer Gruppe hinzu oder entfernt es aus einer Gruppe.
//Wenn die InstanzID eines Gruppenkoordinators mitgegeben wird, wird die instanz dieser Gruppe hinzugefügt.
//Wenn 0 mitgegeben wird, wird die Instanz aus allen Gruppen entfernt.
SNS_SetGroup($sonosid, $groupCoordinator);
$text = sprintf(' Die Lautstärke aus %s wurde auf '.$volume.' eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "loudness ausschalten")
{
//Setzt das Loundess Flag an einer Instanz.
SNS_SetLoudness($sonosid, false);
$text = sprintf(' Die Loudness von %s wurde auf ausgeschaltet.', IPS_GetName($sonosid));
}
elseif ($command == "loudness einschalten")
{
//Setzt das Loundess Flag an einer Instanz.
SNS_SetLoudness($sonosid, false);
$text = sprintf(' Die Loudness von %s wurde auf eingeschaltet.', IPS_GetName($sonosid));
}
elseif ($command == "playlist")
{
//Entfernt alle Titel aus einer Queue und fügt alle Titel einer Playliste hinzu.
//Der Name der Playliste muss in Sonos bekannt sein.
//Es wird zunächst nach dem Namen in den gespeicherten Playlisten gesucht. Wird er dort nciht gefunden, wird ebenfalls in den Importierten Playlisten gesucht. Dabei wird ein Unterstrich ("_") such ein Leerzeichen (" ") ersetzt und die Endungen ".m3u" und ".M3U" werden entfernt. Somit kann z.B. die Playliste mit dem Name "3_Doors_Down.m3u" mit dem Befehl SNS_SetPlaylist(12345,"3 Doors Down"); gestartet werden.
SNS_SetPlaylist($sonosid, $name);
$text = sprintf(' Es wurde die Playliste %s zu %s hinzugefügt.', $name, IPS_GetName($sonosid));
}
elseif ($command == "normal")
{
//Setzt den Play Mode einer Sonos Instanz.
//Falls die Instanz Mitglied einer Gruppe ist, wird das Kommando automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetPlaymode($sonosid, 0);
$text = sprintf(' Es wurde der Playmode von %s auf normal eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "alles wiederholen")
{
//Setzt den Play Mode einer Sonos Instanz.
//Falls die Instanz Mitglied einer Gruppe ist, wird das Kommando automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetPlaymode($sonosid, 1);
$text = sprintf(' Es wurde der Playmode von %s auf alles wiederholen eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "einmal wiederholen")
{
//Setzt den Play Mode einer Sonos Instanz.
//Falls die Instanz Mitglied einer Gruppe ist, wird das Kommando automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetPlaymode($sonosid, 2);
$text = sprintf(' Es wurde der Playmode von %s auf einmal wiederholen eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "shuffle keine wiederholung")
{
//Setzt den Play Mode einer Sonos Instanz.
//Falls die Instanz Mitglied einer Gruppe ist, wird das Kommando automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetPlaymode($sonosid, 3);
$text = sprintf(' Es wurde der Playmode von %s auf Shuffle keine Wiederholung eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "shuffle")
{
//Setzt den Play Mode einer Sonos Instanz.
//Falls die Instanz Mitglied einer Gruppe ist, wird das Kommando automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetPlaymode($sonosid, 4);
$text = sprintf(' Es wurde der Playmode von %s auf Shuffle eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "shuffle einmal wiederholen")
{
//Setzt den Play Mode einer Sonos Instanz.
//Falls die Instanz Mitglied einer Gruppe ist, wird das Kommando automatisch an den Gruppenkoordinator weitergeleitet.
SNS_SetPlaymode($sonosid, 5);
$text = sprintf(' Es wurde der Playmode von %s auf Shuffle einmal Wiederholen eingestellt.', IPS_GetName($sonosid));
}
elseif ($command == "sleeptimer")
{
//Setzt den Sleeptimer auf die angegebene Anzahl an Minuten.
//Sollte das Kommando auf einem Gruppenmember ausgeführt werden, wird es automatisch an den zuständigen Koordinator weitergeleitet und gilt somit für die ganze Gruppe.
SNS_SetSleepTimer($sonosid, $minutes);
$text = sprintf(' Es wurde der Sleeptimer von %s auf %s Minuten eingestellt.', IPS_GetName($sonosid), $minutes);
}
elseif ($command == "s. p. dif")
{
//Selektiert den SPDIF Input einer Instanz als Audioquelle.
SNS_SetSpdifInput($sonosid, $sonosid);
$text = sprintf(' Es wurde der SPDIF von %s als Input ausgewählt.', IPS_GetName($sonosid));
}
elseif ($command == "höhen")
{
//Passt die Treble Einstellungen im Equalizer der Sonos Instanz an. Mögliche Werte liegen zwischen -10 und 10.
SNS_SetTreble($sonosid, $treble);
$text = sprintf(' Es wurden die Höhen von %s auf %s eingestellt.', IPS_GetName($sonosid), $treble);
}
return $text;
}
function GetSonosVolume($sonosid)
{
$sonosresponse = SNS_alexaResponse($sonosid);
$volume = $sonosresponse["Volume"];
return $volume;
}
function GetTrackInfo($sonosid)
{
$sonosresponse = SNS_alexaResponse($sonosid);
$Album = $sonosresponse["Album"];
$Title = $sonosresponse["Title"];
$Artist = $sonosresponse["Artist"];
$TrackDuration = $sonosresponse["TrackDuration"];
$Position = $sonosresponse["Position"];
$nowPlaying = $sonosresponse["nowPlaying"];
$trackinfo = $Album."
".$Artist."
".$Title."
".$Position." ".$TrackDuration;
return $trackinfo;
}