¿Cómo puede un ESP8266 “anunciarlo” manejar los comandos de “volumen relativo” de Alexa?

7

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.

st2000
fuente
1
Podría ser útil señalar la especificación de los anuncios de los que está hablando
hardillb
¿Está seguro de que no está utilizando los mensajes WeMo uPnP / Soap para pretender ser un conmutador WeMo? Si es así, no puede hacer cambios de Volumen /% solo encendido / apagado
hardillb
Sí, estoy comenzando con un ejemplo de WeMo. ¿Hay un mejor ejemplo para empezar? Usé la palabra "publicidad" porque realmente no sé cómo llamarla. En el ejemplo de WeMo, el ESP8266 transmite una respuesta a un descubrimiento de Alexa. Parece anunciar lo que el ESP8266 es capaz de controlar. En una página web de Amazon (perdida para mí en este momento) hay una descripción de todo tipo de cosas que puede hacer un dispositivo IoT. Incluyendo encendido / apagado, volumen relativo y volumen absoluto.
st2000
Se agregó un enlace al proyecto github.com que formó las bases de lo que estoy trabajando. También agregó el XML donde, creo, si se agregaran las líneas correctas, permitiría que Alexa controlara el volumen de mi TV usando este dispositivo ESP8266.
st2000
Gracias, eso debería hacer que esta pregunta sea más fácil de encontrar para otras personas con una búsqueda.
Sean Houlihane

Respuestas:

3

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 )

hardillb
fuente
Cuando dices un "dispositivo solo local", ¿puedes explicar a qué te refieres? Y por herencia, ¿estás insinuando que este enfoque ya no se usa?
st2000
Local solo significa eso, sin participación en la nube. Y por legado quiero decir que ha habido una sugerencia de que el soporte para descubrir dispositivos locales basados ​​en IP (no ZigBee) se suspenderá en algún momento. Para hacer lo que quiera, necesitará escribir una habilidad adecuada para el hogar inteligente
hardillb
Tengo muchas ganas de mantener el control de mis artículos IOT fuera de la nube. Creo que he elegido cuidadosamente mis proyectos para hacer esto. (es decir, el uso de ha-bridge en un RPI permite el control de Alexa, pero debería mantener los dispositivos IOT conectados fuera de Internet). Me gusta su respuesta, pero encuentro indicios de que puedo controlar el volumen si supiera qué "publicitar". Alexa durante un descubrimiento. Consulte el XML "ejemplo para un dispositivo de entretenimiento" en esta página de Amazon .
st2000
Renunció al control tan pronto como agregó Alexa. Ese enlace muestra la respuesta JSON de la nube lambda a Alexa, no algo local. No se puede hacer sin una lambda, no hay nada que te impida escribir la tuya (tengo la habilidad de hogar inteligente de nodo rojo) y alojar la mayor parte tú mismo, pero la lambda necesita vivir en AWS
hardillb
Solo para aclarar cuando digo que alexame 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 directamente
hardillb
2

Esta 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 "

st2000
fuente