Como entiendo más, editaré esta pregunta. Por ahora, adivino lo que necesito. Para facilitar la ayuda de las personas, le diré todo sobre el propósito:
He programado un ESP8266 para anunciar que es el televisor y que puede encenderlo o apagarlo. El ESP8266 realmente transmite los códigos absolutos de encendido / apagado al televisor mediante señales IR. Creo que he agregado un segundo "anuncio" para otra función de encendido / apagado al mismo dispositivo ESP8266.
Sin embargo, lo que realmente quiero agregar es un dispositivo de "volumen relativo". Creo que necesito hacer esto usando XML. Es decir, creo que necesito modificar el XML transmitido a Alexa para no solo anunciar el dispositivo de encendido / apagado sino también para anunciar un dispositivo de volumen relativo.
¿Dónde puedo encontrar ejemplos donde un dispositivo de volumen relativo se anuncia a Alexa?
Para aclarar mi objetivo, permítanme agregar un ejemplo:
Si yo digo
"Alexa, enciende la TV"
El televisor se encenderá. Pero si digo
"Alexa, sube el volumen del televisor"
Alexa responderá
"La televisión no es compatible con eso"
Comencé usando el código aquí en este proyecto de github.com y agregué código adicional para manejar la transmisión de las señales IR al televisor. Este proyecto parece transmitir este XML en respuesta a un Alex que pregunta qué es capaz de hacer el ESP8266:
HTTP.on("/eventservice.xml", HTTP_GET, [](){
Serial.println(" ########## Responding to eventservice.xml ... ########\n");
String eventservice_xml = "<scpd xmlns=\"urn:Belkin:service-1-0\">"
"<actionList>"
"<action>"
"<name>SetBinaryState</name>"
"<argumentList>"
"<argument>"
"<retval/>"
"<name>BinaryState</name>"
"<relatedStateVariable>BinaryState</relatedStateVariable>"
"<direction>in</direction>"
"</argument>"
"</argumentList>"
"</action>"
"<action>"
"<name>GetBinaryState</name>"
"<argumentList>"
"<argument>"
"<retval/>"
"<name>BinaryState</name>"
"<relatedStateVariable>BinaryState</relatedStateVariable>"
"<direction>out</direction>"
"</argument>"
"</argumentList>"
"</action>"
"</actionList>"
"<serviceStateTable>"
"<stateVariable sendEvents=\"yes\">"
"<name>BinaryState</name>"
"<dataType>Boolean</dataType>"
"<defaultValue>0</defaultValue>"
"</stateVariable>"
"<stateVariable sendEvents=\"yes\">"
"<name>level</name>"
"<dataType>string</dataType>"
"<defaultValue>0</defaultValue>"
"</stateVariable>"
"</serviceStateTable>"
"</scpd>\r\n"
"\r\n";
HTTP.send(200, "text/plain", eventservice_xml.c_str());
});
Supongo que, para admitir (ofrecer hasta Alexa) el control de volumen relativo, todo lo que debe hacerse es agregar una descripción de la función de control de volumen al XML anterior. Sin embargo, no he podido averiguar cómo hacerlo.
Respuestas:
No creo que pueda hacer esto con un dispositivo solo local. El soporte de WeMo es un enfoque heredado que tiene capacidades muy limitadas.
Debe crear una habilidad de Smart Home de Alexa que requiera un componente en la nube (con un lambda para activarlo).
La habilidad informa las capacidades del dispositivo. ( https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html#discovery-messages )
fuente
alexa
me refiero a todo el sistema Alexa, el dispositivo y su servicio de respaldo en la nube. La habilidad habla con el servicio en la nube de Alexa, no con el dispositivo directamenteEsta pregunta generó un considerable interés (7 al momento de escribir esto). Así que estoy publicando una respuesta de seguimiento con una solución única local.
Acepté la respuesta de @hardillb porque todavía tengo que encontrar un método que permita a Alexa controlar el volumen relativo utilizando un dispositivo solo local.
Sin embargo, hay una forma de controlar los niveles de sonido relativos de la TV usando un dispositivo local solamente. Al usar un nombre de dispositivo como "Sonido de TV" y frases como "Alexa, sube el sonido de la TV", Alexa puede ser inducida a pensar que está subiendo y bajando el brillo de un dispositivo llamado "Sonido de TV". Al aceptar este enfoque, nos vemos obligados a usar los niveles de brillo absolutos de Alexa al intentar controlar un nivel relativo de sonido de TV. Lo primero que notamos es que solo podemos bajar el sonido de la TV unas pocas veces antes de agotar el rango de brillo de Alexa (Alexa salta aproximadamente un 25% por cada comando de atenuación). Pero también podemos decirle a Alexa el brillo con el que está configurado nuestro dispositivo al final de cada comando. Si le decimos a Alexa que el brillo siempre es del 50%, Alexa siempre responderá con más del 50% cuando le digamos a Alexa que "
fuente