ESP8266は、Alexaの「相対ボリューム」コマンドをどのように「アドバタイズ」できるのですか。


7

もっと理解したら、この質問を編集します。今のところ、私は何が必要かを推測しています。人々が助けやすくするために、私はあなたにすべての目的を伝えます:

ESP8266をプログラミングして、それがテレビであることと、テレビをオン/オフにできることを宣伝しました。ESP8266は、実際にはIR信号を使用して絶対オン/オフコードをテレビに送信します。同じESP8266デバイスにさらに別のオン/オフ機能の2つ目の「アドバタイズメント」を追加したと思います。

ただし、本当に追加したいのは「相対ボリューム」デバイスです。XMLを使用してこれを行う必要があると思います。つまり、Alexaに送信されたXMLを変更して、オン/オフデバイスだけでなく、相対ボリュームデバイスもアドバタイズする必要があると思います。

相対ボリュームデバイスがAlexaにアドバタイズされる例はどこにありますか?

私の目的を明確にするために、例を追加しましょう:

私が言うなら

「アレクサ、テレビをつけて」

テレビがオンになります。しかし、私が言うなら

「アレクサ、テレビの音量を上げて」

Alexaが応答します

「テレビはそれをサポートしていません」

このgithub.comプロジェクトのコードを使用することから始め、テレビへのIR信号の送信を処理するためのコードを追加しました。このプロジェクトは、ESP8266が何を実行できるかをAlexが要求するのに応じて、このXMLを送信するようです。

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

(Alexaまでの)相対ボリュームコントロールをサポートするために、ボリュームコントロール機能の説明を上記のXMLに追加するだけでよいと思います。しかし、私はそれを行う方法を見つけることができませんでした。


1
あなたが話している広告の仕様を指すと役立つかもしれません
hardillb '09 / 09/28

WeMo uPnP / Soapメッセージを使用して、WeMoスイッチのふりをしていないことを確認しますか?その場合、ボリューム/%の変更はオン/オフのみで行うことはできません
hardillb '28

はい、WeMoの例から始めます。開始するより良い例はありますか?「宣伝」という言葉を使ったのは、それを何と呼ぶか​​本当にわからないからです。WeMoの例では、ESP8266はAlexaの発見に対する回答を送信します。ESP8266が制御できる機能を宣伝しているようです。AmazonのWebページ(現時点では失くしている)には、IoTデバイスで実行できるあらゆる種類の操作の説明があります。オン/オフ、相対ボリューム、絶対ボリュームを含みます。
st2000、2018

私が取り組んでいることの基礎を形成したgithub.comプロジェクトへのリンクを追加しました。XMLも追加しました。正しい行が追加された場合、AlexaがこのESP8266デバイスを使用してテレビの音量を制御できるようになると思います。
st2000、2018

ありがとうございます。これで、この質問が他の人が検索で見つけやすくなります。
Sean Houlihane

回答:


3

ローカル専用のデバイスでこれができるとは思いません。WeMoサポートは、機能が非常に制限されているレガシーアプローチです。

クラウドコンポーネントを必要とするAlexa Smart Home Skillを構築する必要があります(それをトリガーするラムダを使用)。

スキルはデバイスの機能を報告します。(https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html#discovery-messages


「ローカルのみのデバイス」と言うとき、あなたはどういう意味か説明できますか?そして、レガシーによって、このアプローチがもはや使用されていないことをほのめかしていますか?
st2000、2018

ローカルはそれだけを意味し、クラウドは関与しません。そして、レガシーとは、ローカルIPベースのデバイス(ZigBeeではない)を検出するためのサポートが、いつか廃止されるという提案があったことを意味します。あなたが適切なスマートホームのスキルを記述する必要がありますやりたい
hardillb

クラウドから自分のIOTアイテムの制御を保持したいです。私はこれを行うために自分のプロジェクトを慎重に選んだと思います。(つまり、RPIでha-bridgeを使用すると、Alexaの制御が可能になりますが、接続されたIOTデバイスをインターネットから切り離しておく必要があります。)私はあなたの答えを気に入っています。発見中のアレクサ。このAmazonページの「エンターテイメントデバイスの例」のXMLをご覧ください
st2000、2018

Alexaを追加するとすぐに制御を放棄しました。このリンクは、ローカルではなく、クラウドラムダからAlexaへのJSON応答を示しています。ラムダなしでは実現できません。自分で作成し(ノードレッドスマートホームスキルを持っています)、ほとんどを自分でホストするのを止めることはできませんが、ラムダはAWSで生きる必要があります
hardillb

alexaAlexaシステム全体、デバイス、およびクラウドバッキングサービスのことを言っているとき、明確にするために。スキルはデバイスではなく、Alexaクラウドサービスと直接通信します
hardillb

2

この質問はかなりの関心を引き起こしました(この執筆時点で7)。したがって、私はローカルのみのソリューションでフォローアップの回答を投稿しています。

ローカルのみのデバイスを使用してAlexaが相対ボリュームを制御できるようにする方法をまだ見つけていないため、@ hardillbの回答を受け入れました。

ただし、ローカルのみのデバイスを使用して相対的なTVサウンドレベルを制御する方法があります。「テレビの音」のようなデバイス名と「アレクサ、テレビの音を大きくする」のようなフレーズを使用することで、アレクサは、「テレビの音」と呼ばれるデバイスの明るさを上下に回していると思い込ませることができます。このアプローチを受け入れる際には、テレビの相対音量を制御する際に、Alexaの絶対輝度レベルを使用する必要があります。最初に気づくのは、Alexaの明るさの範囲を使い果たす前に、テレビの音を数回しか下げることができないということです(Alexaは各調光コマンドで約25%ジャンプします)。ただし、各コマンドの最後に、デバイスに設定されている明るさをAlexaに通知することもできます。Alexaに明るさを常に50%と伝えると、Alexaに「50%以上の明るさで応答します」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.