Como um ESP8266 "anuncia" ele pode manipular comandos de "volume relativo" do Alexa

7

Pelo que entendi mais, editarei esta pergunta. Por enquanto, estou adivinhando o que preciso. Para facilitar a ajuda das pessoas, eu lhe direi o objetivo geral:

Programei um ESP8266 para anunciar que é a TV e que pode ligar / desligar a TV. O ESP8266 na verdade transmite os códigos absolutos de ligado / desligado para a TV usando sinais IR. Acredito que adicionei um segundo "anúncio" para mais um recurso de ativação / desativação no mesmo dispositivo ESP8266.

No entanto, o que realmente quero adicionar é um dispositivo de "volume relativo". Acredito que preciso fazer isso usando XML. Ou seja, acredito que preciso modificar o XML transmitido ao Alexa para não apenas anunciar o dispositivo on / off, mas também para anunciar um dispositivo de volume relativo.

Onde posso encontrar exemplos em que um dispositivo de volume relativo é anunciado para o Alexa?

Para esclarecer meu objetivo, deixe-me adicionar um exemplo:

Se eu disser

"Alexa, ligue a TV"

a TV liga. Mas se eu disser

"Alexa, aumente o volume na TV"

Alexa responderá

"A TV não suporta isso"

Comecei usando o código aqui neste projeto do github.com e adicionei um código adicional para lidar com a transmissão dos sinais de infravermelho para a TV. Este projeto parece transmitir esse XML em resposta a um Alex solicitando o que o ESP8266 é capaz de fazer:

     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());
});

Suponho que, para oferecer suporte ao controle de volume relativo (ofereça até Alexa), tudo o que precisa ser feito é adicionar uma descrição do recurso de controle de volume ao XML acima. No entanto, não consegui descobrir como fazer isso.

st2000
fonte
11
Pode ajudar a ponto com a especificação para os anúncios que você está falando
hardillb
Você tem certeza de que não está usando as mensagens WeMo uPnP / Soap para fingir ser um comutador WeMo? Em caso afirmativo, você não pode fazer alterações de volume /% apenas on / off
hardillb
Sim, estou começando com um exemplo do WeMo. Existe um exemplo melhor para começar? Eu usei a palavra "anúncio", pois realmente não sei como chamá-lo. No exemplo WeMo, o ESP8266 transmite uma resposta para uma descoberta do Alexa. Parece anunciar o que o ESP8266 é capaz de controlar. Em uma página da Amazon na Web (perdida para mim no momento), há uma descrição de todos os tipos de coisas que um dispositivo IoT pode fazer. Incluindo on / off, volume relativo e volume absoluto.
precisa saber é
Adicionado link ao projeto github.com que formou as bases do que estou trabalhando. Também adicionei o XML, onde, acredito, se as linhas corretas fossem adicionadas, permitiria ao Alexa controlar o volume da minha TV usando este dispositivo ESP8266.
ST2000
Obrigado - isso deve facilitar a busca de outras pessoas com uma pesquisa.
Sean Houlihane

Respostas:

3

Não acredito que você possa fazer isso com um único dispositivo local. O suporte do WeMo é uma abordagem herdada que possui recursos muito limitados.

Você precisa criar um Alexa Smart Home Skill que exija um componente de nuvem (com um lambda para acioná-lo).

A habilidade relata os recursos do dispositivo. ( https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html#discovery-messages )

hardillb
fonte
Quando você diz um "único dispositivo local", pode explicar o que quer dizer? E, por legado, você está sugerindo que essa abordagem não é mais usada?
ST2000
Local significa apenas isso, sem envolvimento na nuvem. E, por legado, quero dizer que houve uma sugestão de que o suporte à descoberta de dispositivos locais baseados em IP (e não ZigBee) será descartado em algum momento. Para fazer o que você quiser, terá de escrever uma adequada Smart Home Habilidade
hardillb
Eu quero muito manter o controle dos meus itens de IOT fora da nuvem. Acredito que escolhi meus projetos com cuidado para fazer isso. (ou seja, o uso do ha-bridge em um RPI permite o controle do Alexa, mas deve manter os dispositivos IOT conectados fora da Internet.) Gosto da sua resposta - mas estou encontrando dicas de que posso controlar o volume se soubesse o que "anunciar" Alexa durante uma descoberta. Veja o XML "exemplo para um dispositivo de entretenimento" nesta página da Amazon .
ST2000
Você desistiu do controle assim que adicionou o Alexa. Esse link mostra a resposta JSON da nuvem lambda para o Alexa, não algo local. Isso não pode ser feito sem um lambda, não há nada para impedi-lo de escrever o seu próprio (eu tenho a habilidade de casa inteligente com nó vermelho) e hospedar a maior parte você mesmo, mas o lambda precisa viver na AWS
hardillb
Só para esclarecer quando digo alexaque quero dizer todo o sistema Alexa, o dispositivo e seu serviço de backup em nuvem. As negociações habilidade para o serviço Alexa nuvem não o dispositivo diretamente
hardillb
2

Essa questão gerou considerável interesse (7 até o momento em que este artigo foi escrito). Então, eu estou postando uma resposta de acompanhamento com uma solução apenas local.

Aceitei a resposta @hardillb porque ainda não encontrei um método que permita ao Alexa controlar o volume relativo usando um dispositivo apenas local.

No entanto, existe uma maneira de controlar os níveis relativos de som da TV usando um dispositivo somente local. Ao usar um nome de dispositivo como "som da TV" e frases como "Alexa, aumentar o som da TV", o Alexa pode ser convencido a pensar que está aumentando e diminuindo o brilho de um dispositivo chamado "som da TV". Ao aceitar essa abordagem, somos forçados a usar os níveis absolutos de brilho do Alexa enquanto tentamos controlar uma TV com nível de som relativo. A primeira coisa que notamos é que só podemos desligar o som da TV algumas vezes antes de esgotar o alcance do brilho do Alexa (o Alexa salta cerca de 25% para cada comando de escurecimento). Mas também podemos dizer ao Alexa o brilho que nosso dispositivo está definido no final de cada comando. Se dissermos ao Alexa que o brilho é sempre 50%, o Alexa sempre responderá com mais de 50% quando dizemos ao Alexa "

st2000
fonte