Erweiterung: Unterstüzung für TV und Media Geräte

Da ich schon lange eine TV Unterstüzung bei Alexa vermisse habe ich mir eben selbst eine gebastellt.

Getestet mit IPS 5.2

Intallation :
Wichtig.

  1. Alexa Modul installieren, falls noch nicht geschehen :slight_smile:
  2. IPS beenden
  3. settings sichern … nur für den fall
  4. die in der ZIP Datei AlexaErweiterung1.zip (18.8 KB) enthaltenen dateien in das entsprechende verzeichnis, in dem alexa installiert ist, kopieren
  5. IPS starten.

Die bestehenden Einstellungen von Alexa werden übernommen und es gibt neue Rubriken

Lautsprecher experte
Equalizer
Equalizer Ony
MediaPlayer
MediaPlayer experte
Fernehgerät
Fernehgerät experte

Wenn du die Änderungen nicht mehr möchtest reicht es einfach die hinzugefügten dateien in verzeichnis zu löschen. Dabei gehen keine anderen einstellungen verloren und die neuen Rubriken sind wieder entfernt.

Beschreibung der Variablen bzw Profilen

Variable: Volume / Lautstärke
Type : Integer
Werte : 0 - 100
Profile : ~Intencity.100

Variable: Mute / Power
Type : Boolean
Werte : true/false
Profile : ~Switch

Variable: Channel / Kanal
Type : Integer
Werte : 1-128 IPS Version < 5 ( 1-32 )
Profile : Associations

value name icon color/farbe
1 Ard
2 ZDF
3 RTL
4 RTL 2
7 Pro 7

Bitte beachten:
Eingehende Namen wie schalte Kanal auf „ProSieben“ oder „RTL zwei“ oder „eins“…„zehn“ werden in
„Pro 7“, „RTL 2“, „1“…„10“ geändert, so dass im entsprechenden Profile auch „Pro 7“ stehen muss und ein ProSieben" nicht gefunden wird.

Wird ein „value/name“ empfangen der nicht im Profil enthalten ist, wird die verknüpfte Aktion nicht ausgeführt und alexa meldet einen Fehler,


Variable: Playstate
Type : Integer
Werte : 1-8
Profile : Associations

value name icon color/farbe
1 FastForward
2 Next
3 Pause
4 Play
5 Previous
6 Rewind
7 StartOver
8 Stop

möglich sind auch
2 Next
3 Pause
4 Play
5 Previous
8 Stop

wobei es wichtig ist das „value“ immer gleich ist.

Das Icon, die Farbe oder der Name kann geändert werden zb. „Next“ in „Weiter“

Wird die ein „value“ empfangen dass nicht im Profil enthalten ist, wird die verknüpfte Aktion nicht ausgeführt und alexa meldet einen Fehler,


Variable: Input
Type : Integer
Werte : User
Profile : Associations

value name icon color/farbe
0 AUX 1
1 DVD
2 HDMI 5
3 CD

der Wert von „value“ ist hier nicht relevant da Alexa nur die nachfolgenden Werte für den Eingang erlaubt.

Der „name“ darf jedoch NICHT verändert werden und muss einem der folgenden entsprechen:

‚AUX 1‘,‚AUX 2‘,‚AUX 3‘,‚AUX 4‘,‚AUX 5‘,‚AUX 6‘,‚AUX 7‘,‚BLURAY‘,‚CABLE‘,‚CD‘,‚COAX 1‘,‚COAX 2‘,‚COMPOSITE 1‘,‚DVD‘,‚GAME‘,‚HD RADIO‘,‚HDMI 1‘,‚HDMI 2‘,‚HDMI 3‘,‚HDMI 4‘,‚HDMI 5‘,‚HDMI 6‘,‚HDMI 7‘,‚HDMI 8‘,‚HDMI 9‘,‚HDMI 10‘,‚HDMI ARC‘,‚INPUT 1‘,‚INPUT 2‘,‚INPUT 3‘,‚INPUT 4‘,‚INPUT 5‘,‚INPUT 6‘,‚INPUT 7‘,‚INPUT 8‘,‚INPUT 9‘,‚INPUT 10‘,‚IPOD‘,‚LINE 1‘,‚LINE 2‘,‚LINE 3‘,‚LINE 4‘,‚LINE 5‘,‚LINE 6‘,‚LINE 7‘,‚MEDIA PLAYER‘,‚OPTICAL 1‘,‚OPTICAL 2‘,‚PHONO‘,‚PLAYSTATION‘,‚PLAYSTATION 3‘,‚PLAYSTATION 4‘,‚SATELLITE‘,‚SMARTCAST‘,‚TUNER‘,‚TV‘,‚USB DAC‘,‚VIDEO 1‘,‚VIDEO 2‘,‚VIDEO 3‘,‚XBOX‘

Wird ein „name“ empfangen der nicht im Profil enthalten ist, wird die verknüpfte Aktion nicht ausgeführt und alexa meldet einen Fehler,


Script zum Erstellen und löschen von Demo Variablen zum testen


<?php
const doCreate = true; // wenn true zu false geändert wird dann wird das demo icl der profile entfernt

function createVariable($name, $type, $profile, $parentID, $docreate=doCreate){
	$varID = @IPS_GetObjectIDByName($name, $parentID);
	if(empty($varID) && $docreate){
		$varID = IPS_CreateVariable($type);
		IPS_SetParent($varID, $parentID);
		IPS_SetName($varID, $name);
		IPS_SetVariableCustomProfile($varID, $profile);
	}
	return $varID;
}
function createActionScript($parentID, $docreate=doCreate){
	$actionID = @IPS_GetObjectIDByName('Actionscript', $parentID);
	if(empty($actionID) && $docreate){
		$actionID=IPS_CreateScript(0);
		IPS_SetName($actionID, 'Actionscript');
		IPS_SetParent($actionID, $parentID);
		IPS_SetHidden($actionID,true);
 		IPS_SetScriptContent($actionID, "<?
SetValue(\$_IPS['VARIABLE'], \$_IPS['VALUE']);
?>");
	}
	if($docreate)IPS_SetVariableCustomAction($parentID, $actionID);
	elseif($actionID)IPS_DeleteScript($actionID, true);
	return $actionID;	
}
function createProfile($name, $assosiations, $docreate=doCreate){
	if(!IPS_VariableProfileExists($name) && $docreate){
		IPS_CreateVariableProfile($name, 1);
		foreach($assosiations as $k=>$n){
			IPS_SetVariableProfileAssociation($name, $k, $n, '', -1);		
		}
	}
 else
	if(!$docreate && IPS_VariableProfileExists($name))
		IPS_DeleteVariableProfile($name);
}
$ParentID = @IPS_GetObjectIDByIdent('DEMO_CAT', 0);
if(empty($ParentID) && doCreate){
	$ParentID=IPS_CreateCategory();
	IPS_SetIdent($ParentID, 'DEMO_CAT');
	IPS_SetName($ParentID, 'Alexa TV Demo');
	IPS_SetParent($ParentID, 0);
}
if(!$ParentID && !doCreate){
	return true;
}

$dummyID = @IPS_GetObjectIDByIdent('DEMO_INSTANCE', $ParentID);
if(empty($dummyID) && doCreate){
	$dummyID=IPS_CreateInstance( '{485D0419-BE97-4548-AA9C-C083EB82E61E}');
	IPS_SetIdent($dummyID, 'DEMO_INSTANCE');
	IPS_SetName($dummyID, 'Demo Module');
	IPS_SetParent($dummyID, $ParentID);
}
if(!$dummyID && !doCreate){
	IPS_DeleteCategory($ParentID);
	return true;
}

$powerID = createVariable('Power',0,'~Switch',$dummyID);
createActionScript($powerID);
if($powerID && !doCreate)IPS_DeleteVariable($powerID);

$volumeID = createVariable('Volume',1,'~Intensity.100',$dummyID);
createActionScript($volumeID);
if($volumeID && !doCreate)IPS_DeleteVariable($volumeID);

$muteID = createVariable('Mute',0,'~Switch',$dummyID);
createActionScript($muteID);
if($muteID && !doCreate)IPS_DeleteVariable($muteID);


createProfile('PLAYMODE.DEMO', [1=>'FastForward',2=>'Next',3=>'Pause',4=>'Play',5=>'Previous',6=>'Rewind',7=>'StartOver',	8=>'Stop']);
$playmodeID = createVariable('PlayMode',1,'PLAYMODE.DEMO',$dummyID);
createActionScript($playmodeID);
if($playmodeID && !doCreate)IPS_DeleteVariable($playmodeID);

createProfile('INPUT.DEMO',[0=>'AUX 1','AUX 2','AUX 3','AUX 4','AUX 5','AUX 6','AUX 7','BLURAY','CABLE','CD','COAX 1','COAX 2','COMPOSITE 1','DVD','GAME','HD RADIO','HDMI 1','HDMI 2','HDMI 3','HDMI 4','HDMI 5','HDMI 6','HDMI 7','HDMI 8','HDMI 9','HDMI 10','HDMI ARC','INPUT 1','INPUT 2','INPUT 3','INPUT 4','INPUT 5','INPUT 6','INPUT 7','INPUT 8','INPUT 9','INPUT 10','IPOD','LINE 1','LINE 2','LINE 3','LINE 4','LINE 5','LINE 6','LINE 7','MEDIA PLAYER','OPTICAL 1','OPTICAL 2','PHONO','PLAYSTATION','PLAYSTATION 3','PLAYSTATION 4','SATELLITE','SMARTCAST','TUNER','TV','USB DAC','VIDEO 1','VIDEO 2','VIDEO 3','XBOX']);
$inputID = createVariable('Input select',1,'INPUT.DEMO',$dummyID);
createActionScript($inputID);
if($inputID && !doCreate)IPS_DeleteVariable($inputID);

createProfile('CHANNEL.DEMO',[1=>'ARD',2=>'ZDF',3=>'RTL',4=>'RTL 2',7=>'PRO 7',12=>'Tele 5']);
$channelID = createVariable('Channel select',1,'CHANNEL.DEMO',$dummyID);
createActionScript($channelID);
if($channelID && !doCreate)IPS_DeleteVariable($channelID);

if(!doCreate){
	IPS_DeleteInstance($dummyID);
	IPS_DeleteCategory($ParentID);
}
?>

Befehle :
name = zb. TV

Alexa TV play|stop|pause … oder TV abspielen|anhalten
Alexa schalte TV auf Kanal 1
Alexa schalte TV auf Kanal ARD
Alexa TV stumm
Alexa TV stumm aus
Alexa TV lautstärke 10 prozent

Neu * Erweiterung der Rubriken um ein Equalizer Modul für bass,mitten und höhen Einstellung (Sonos)

Variable: (Bänder) Bass / Mitten / Höhen
Type : Integer
Werte : abhängig von Min/Max im definierten Profil
Profile : ~Intencity.100

Es muss ein Integer Profile (type 1) vorhanden sein
Die Werte von Min und Max müssen im Profil definiert sein.
Mindestens 1 der Bänder Variablen muss zugewiesen sein.
Bei Änderung der werte von Min und Max in einem Profil,
sowie hinzufügen oder löschen einer der Bänder Variablen
ist es ratsam ein neues Discover der Geräte auszulösen
da der Eualizer die Konfiguration der Bänder sowie die
ermittelten Werte von Min/Max, zur bessern Steuerung,
an Alexa meldet.
Discover mit : Alexa, erkenne meine Geräte neu.

Befehle:
Alexa, stelle den Bass bei Gerät auf 5
Alexa, erhöhe den Bass bei Gerät um 2
Alexa, setze den Bass auf Gerät zurück
Alexa, setze den Equalizer auf Gerät zurück

Fix* Fehler behoben, wenn Emulate Status aktiviert ist

hier nochmal die zip datei : AlexaErweiterung1.zip (18.8 KB)

Nun viel Spass

LG Xaver

Bei fehlern bitte PN an mich :wink: da ich nicht immer online bin.

You made my day :D:loveips:.
So jetzt müsste das nur noch einfach IP-Symcon zur 5.3 offiziell mit in das Alexa Modul übernehmen und ich bin noch glücklicher.

Vielen, vielen Dank nochmals, genau das auf was ich seit Ewigkeiten gewartet habe.

Was muss ich denn genau zu Alexa sagen damit sind den Input wechselt? Gibt es also nach Deiner Erfahrung keinerlei Möglichkeit die Ansprache bei Alexa zu ändern? Also das ich auf den Input „Playstation“ wechsel statt z.B. auf „HDMI 3“?

Hast Du eine Möglichkeit gefunden ein Entertainment Devices auch in einer Alexa Routine zu nutzten? Ich finde dort zwar z.B. den TV kann diesen dort aber nur ein/aus schalten nicht aber z.B. innerhalb einer Routine auf einen anderen Sender wechseln.

Hallo Fonzo,

soweit ich es verstanden habe, kennt Alexa nur die aufgeführten Hotwords ‚AUX 1‘,‚AUX 2‘…
somit muss das Hotword genau so im Profil stehen. (Leider)
Das Profil dient hierbei auch als Filter, sprich wenn das Hotword nicht im Profil gefunden wird,
sollte Alexa eine Meldung wie „Das Gerät xxx unterstützt diesen befehl nicht“ ausgeben.

Aussprache zb.:

Alexa , wechsle auf TV den Eingang zu DVD
Alexa , wechsle auf TV den Eingang zu AUX 1

Bisher leider nicht, habe mich damit auch noch nicht Beschäftigt.

Gruß Xaver

Hi,
kann man die „Fernseher“ einzelnen Zimmern zuordnen ähnlich wie das Licht der Hue?

Bei den Eingängen kann man doch auch die normalen IPS Szenen benutzen dann kann man es nennen wie man will. Welchen Vorteil hätte man durch den Fernseher-Experten?

Ralf

hi,
Generell war das Ziel, mein TV ein/aus zu schalten und die Kanäle zu wechseln, alles weitere hat sich daraus ergeben. :slight_smile:

Nur indem du die Namen benutzt. Zum Beispiel statt TV … Wohnzimmer TV, Sony TV, ect…

hier musst du noch zwei weitere variablen für Eingang und Wiedergabe angeben.
im Gegensatz zum normalen Fernseher werden hier auch die Befehle Play , Pause ect. sowie das schalten des Eingangs unterstützt.
Beim normalen Fernseher wird zb. der Befehl : Alexa, TV Stop oder TV pause nicht unterstützt.

Xaver

Bisher nicht, aber Du kannst einen Lautsprecher einem Zimmer zuordnen, das ist das was Amazon momentan zur Verfügung stellt.
Dementsprechend muss jeder Fernseher einen anderen Gerätenamen haben, aber zumindest lassen sich so mehrere Fernseher ansprechen, nicht nur einer wie beim Logitech Skill.

Ist glaube ich nur die Art der Ansprache, Alexa schalte TV auf Kanal ARD hört sich zumindest einigermaßen normal an. Was sagst Du denn zur Zeit wenn du eine Szene aufrufst?

Danke für die Erweiterung :slight_smile: Schick uns doch ggf. mal einen Pull Request gegen unser Alexa Repository: GitHub - symcon/Alexa: Alexa for IP-Symcon 5.0

Dann schaut sich Niels das bestimmt an, hat ggf. ein paar Änderungswünsche und vielleicht würden wir es dann bei uns mergen.

paresy

Moin Fonzo,

konnte ich bisher mit den Szenen auch schon. Was mir aber aufgefallen ist nachdem ich mal wieder in meinem „Kino“ saß hatte ich in Alexa ein neues Gerät Fernseher drin. Ich vermute das Fire TV das hinzugefügt hat.

Ist glaube ich nur die Art der Ansprache, Alexa schalte TV auf Kanal ARD hört sich zumindest einigermaßen normal an. Was sagst Du denn zur Zeit wenn du eine Szene aufrufst?

Ich sage einfach „Alexa Erstes an“, „Alexa Zweites an“ oder „Alexa Kabel Eins an“.

Dank 5 Bewegungsmeldern weiß IPS wo ich mich aufhalte mein Script schaltet das entsprechende Gerät bzw. alle Sat-Receiver die gerade an sind:

Ralf

Voraussetzung ist das vorher der TV in IPS eingebunden wurde?
Wie macht man das bei einem LG 2019?

lg

Hi,
man braucht ein Modul für den Fernseher oder in meinem Fall für die Harmony Fernbedienung mit Hub bzw. Sat-Receiver mit passendem Modul.

Ralf

Hi,
hast Du die LG App installiert, funktioniert Die mit 2019 Geräten?
Gruß Helmut

Nein, aus Mangel an Zeit und weil ich nur am Wochenende zuhause bin noch nicht.
Habe aber heute auf der Alexa HP nur negative Zensuren gelesen…

lg

Man(n) kann, soviel ich weiß, nur mit dieser App die „paaring ID“ herausfinden.

Mit dieser PaaringID und den Scripten kann ich auf Netflix oder auch Prime gehen.

Also alles ohne Alexa , das müßte dann per „normalem Alexamodul von IP-Symcon“ verkapselt werden.

Nur die Filmauswahl per Script, äh das ist schwierig :wink:

Wie Alexa TV funktioniert weiß ich nicht, dann müßte der Fernseher Alexa fähig sein, so wie ich das einschätze. Oder?
Gruß Helmut

Danke Helmut, das werd ich mir nächstes Wochenende ansehen…
und sicher ein paar Fragen haben :slight_smile:

lg

Cool! Wie paresy schon sagte, habe ich Entertainment-Geräte ja sowieso noch auf dem Zettel und wollte die noch einbauen. Ein Pull Request würde mir also wahnsinnig helfen! Ansonsten schaue ich mir auch gerne einfach mal deine Zip-Datei an, der Pull Request ist nur deutlich komfortabler für mich :slight_smile:

Wenn dein Code so passt, dürfte ich ihn oder zumindest Teile davon ins offizielle Modul mit aufnehmen?

Danke :slight_smile: Ich habe mich leider noch nicht mit dem „Pull Request“ beschäftigt … muß mir mal anschauen wie das genau geht :banghead:

Gerne, ich habe noch ein paar fehler endeckt, die ich am WE ändern werde. Tritt aber dann ein wenn man Status emulieren angelickt hat :o
Bin die tage leider etwas im Stress :frowning:

Klar, überhaupt kein problem :smiley:

Equalizer Modul für bass,mitten und höhen Einstellung (Sonos)

Variable: (Bänder) Bass / Mitten / Höhen
Type : Integer
Werte : abhängig von Min/Max im definierten Profil
Profile : ~Intencity.100

Es muss ein Integer Profile (type 1) vorhanden sein
Die Werte von Min und Max müssen im Profil definiert sein.
Mindestens 1 der Bänder Variablen muss zugewiesen sein.
Bei Änderung der werte von Min und Max in einem Profil,
sowie hinzufügen oder löschen einer der Bänder Variablen
ist es ratsam ein neues Discover der Geräte auszulösen
da der Eualizer die Konfiguration der Bänder sowie die
ermittelten Werte von Min/Max, zur bessern Steuerung,
an Alexa meldet.
Discover mit : Alexa, erkenne meine Geräte neu.

Befehle:
Alexa, stelle den Bass bei Gerät auf 5
Alexa, erhöhe den Bass bei Gerät um 2
Alexa, setze den Bass auf Gerät zurück
Alexa, setze den Equalizer auf Gerät zurück

Die Datei mit den Erweiterungen und Anleitung ist auf Seite 1 oder hier AlexaErweiterung1.zip (18.8 KB)

Xaver

Hallo Tierfreund,

heute habe ich mich mal an die Installation Deiner tollen Erweiterung gemacht!

Wirklich eine tolle Sache, Danke!

Ich glaube ich habe einen kleinen Fehler im helper/channelDevice.php gefunden!

In der function skipChannels muss folgende Zeile:


               if($step<0){
                        $index-=$step;
                        if($index < 0){
                                $index = 0;
                        }
                }

in


               if($step<0){
                        $index+=$step;
                        if($index < 0){
                                $index = 0;
                        }
                }

geändert werden, also das Minus in „$index-=$step;“ in Plus „$index+=$step;“ ändern.

Dann funktioniert der Befehl: Alexa, einen Kanal zurück (auf Gerät) korrekt!

Gruß Heiko

Von mir auch noch einmal einen herzlichen Dank für deine Arbeit! Ich habe die Erweiterung jetzt in die aktuelle Beta mit reingezogen. Ich habe ein paar Änderungen gemacht, die Vorarbeit war aber super und hat mir die Aufgabe sehr erleichtert! Erst einmal gibt es „nur“ die Geräte Lautsprecher mit Stummschaltung und Fernseher. Der Mediaplayer kommt mit Symcon 5.4, da kommt dann auch ein Profil, das extra für Playback gedacht ist. Der Equalizer ist nicht reingekommen, da er noch nicht auf deutsch von Alexa unterstützt wird.

Doku folgt noch, der Rollladen ebenfalls. Ich freue mich auf euer Feedback!