Làm thế nào để một ESP8266 quảng cáo trực tuyến, nó có thể xử lý các lệnh khối lượng tương đối của Alexa


7

Khi tôi hiểu thêm tôi sẽ chỉnh sửa câu hỏi này. Hiện tại, tôi đang đoán những gì tôi cần. Để giúp mọi người giúp đỡ dễ dàng hơn, tôi sẽ nói với bạn về tất cả các mục đích:

Tôi đã lập trình một chiếc ESP8266 để quảng cáo nó là TV và nó có thể bật / tắt TV. ESP8266 thực sự truyền mã bật / tắt tuyệt đối đến TV bằng tín hiệu IR. Tôi tin rằng tôi đã thêm một "quảng cáo" thứ hai cho một tính năng bật / tắt khác cho cùng một thiết bị ESP8266.

Tuy nhiên, thứ tôi thực sự muốn thêm là một thiết bị "âm lượng tương đối". Tôi tin rằng tôi cần phải làm điều này bằng cách sử dụng XML. Đó là, tôi tin rằng tôi cần sửa đổi XML được truyền tới Alexa để không chỉ quảng cáo thiết bị bật / tắt mà còn quảng cáo một thiết bị có khối lượng tương đối.

Tôi có thể tìm thấy các ví dụ nơi thiết bị âm lượng tương đối được quảng cáo cho Alexa ở đâu?

Để làm rõ mục tiêu của tôi, hãy để tôi thêm một ví dụ:

Nếu tôi nói

"Alexa, bật TV lên"

TV sẽ bật. Nhưng, nếu tôi nói

"Alexa, tăng âm lượng trên TV"

Alexa sẽ trả lời

"TV không hỗ trợ điều đó"

Tôi đã bắt đầu bằng cách sử dụng mã ở đây trong dự án github.com này và thêm mã bổ sung để xử lý việc truyền tín hiệu IR đến TV. Dự án này dường như truyền tải XML này để đáp lại một Alex yêu cầu ESP8266 có khả năng làm gì:

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

Tôi giả sử, để hỗ trợ (cung cấp tối đa Alexa) điều khiển âm lượng tương đối, tất cả những gì cần làm là thêm một mô tả về tính năng điều khiển âm lượng cho XML ở trên. Tuy nhiên, tôi đã không thể tìm ra cách để làm điều đó.


1
Nó có thể giúp chỉ ra thông số kỹ thuật cho các quảng cáo bạn đang nói đến
hardillb

Bạn có chắc chắn rằng bạn không sử dụng tin nhắn WeMo uPnP / Soap để giả vờ là một công tắc WeMo? Nếu vậy, bạn không thể thực hiện thay đổi Âm lượng /% chỉ bật / tắt
hardillb

Vâng, tôi đang bắt đầu với một ví dụ WeMo. Có một ví dụ tốt hơn để bắt đầu? Tôi đã sử dụng từ "quảng cáo" vì tôi thực sự không biết nên gọi nó là gì. Trong ví dụ WeMo, ESP8266 truyền câu trả lời cho một khám phá của Alexa. Nó xuất hiện để quảng cáo những gì mà ESP8266 có khả năng kiểm soát. Trên một trang web Amazon (bị mất cho tôi vào lúc này) có một mô tả về tất cả các loại mà một thiết bị IoT có thể làm. Bao gồm bật / tắt, âm lượng tương đối và âm lượng tuyệt đối.
st2000

Đã thêm liên kết đến dự án github.com hình thành nên cơ sở của những gì tôi đang làm. Cũng đã thêm XML vào đó, tôi tin rằng, nếu các dòng chính xác được thêm vào, sẽ cho phép Alexa kiểm soát âm lượng TV của tôi bằng thiết bị ESP8266 này.
st2000

Cảm ơn - điều đó sẽ làm cho câu hỏi này dễ dàng hơn cho những người khác tìm thấy với một tìm kiếm.
Sean Houlihane

Câu trả lời:


3

Tôi không tin rằng bạn có thể làm điều này với một thiết bị duy nhất tại địa phương. Hỗ trợ WeMo là một cách tiếp cận kế thừa có khả năng rất hạn chế.

Bạn cần xây dựng Kỹ năng nhà thông minh Alexa yêu cầu thành phần đám mây (Với lambda để kích hoạt nó).

Các kỹ năng báo cáo các khả năng của thiết bị. ( https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html#discovery-messages )


Khi bạn nói "thiết bị chỉ cục bộ", bạn có thể giải thích ý của bạn không? Và theo di sản, bạn có gợi ý cách tiếp cận này không còn được sử dụng?
st2000

Địa phương chỉ có nghĩa là, không có sự tham gia của đám mây. Và theo di sản, tôi có nghĩa là đã có một gợi ý rằng hỗ trợ cho việc khám phá các thiết bị dựa trên IP cục bộ (không phải ZigBee) sẽ bị loại bỏ tại một số điểm. Để làm những gì bạn muốn, bạn sẽ cần phải viết một Kỹ năng nhà thông minh phù hợp
hardillb

Tôi rất muốn giữ quyền kiểm soát các mục IOT của mình khỏi đám mây. Tôi tin rằng tôi đã chọn các dự án của tôi một cách cẩn thận để làm điều này. (tức là sử dụng ha-Bridge trên RPI cho phép điều khiển Alexa nhưng nên giữ các thiết bị IOT được kết nối khỏi internet.) Tôi thích câu trả lời của bạn - nhưng tôi tìm thấy gợi ý rằng tôi có thể kiểm soát âm lượng nếu chỉ tôi biết "quảng cáo" gì Alexa trong một khám phá. Xem XML "ví dụ cho thiết bị giải trí" trên trang Amazon này .
st2000

Bạn đã từ bỏ quyền kiểm soát ngay khi bạn thêm Alexa. Liên kết đó hiển thị phản hồi JSON từ lambda đám mây đến Alexa, không phải là thứ gì đó cục bộ. Không thể thực hiện được nếu không có lambda, không có gì ngăn cản bạn tự viết (tôi có kỹ năng nhà thông minh màu đỏ nút) và tự mình lưu trữ hầu hết, nhưng lambda cần phải sống trên AWS
hardillb

Chỉ cần làm rõ khi tôi nói alexatôi có nghĩa là toàn bộ hệ thống Alexa, thiết bị và đó là dịch vụ sao lưu đám mây. Kỹ năng nói chuyện với dịch vụ đám mây Alexa chứ không phải thiết bị trực tiếp
hardillb

2

Câu hỏi này tạo ra sự quan tâm đáng kể (7 khi viết bài này). Vì vậy, tôi đang đăng một câu trả lời tiếp theo với một giải pháp duy nhất tại địa phương.

Tôi đã chấp nhận câu trả lời @hardillb vì tôi vẫn chưa tìm thấy phương pháp nào cho phép Alexa kiểm soát Âm lượng tương đối bằng thiết bị chỉ cục bộ.

Tuy nhiên, có một cách để kiểm soát mức âm thanh TV tương đối bằng thiết bị chỉ cục bộ. Bằng cách sử dụng tên thiết bị như "Âm thanh TV" và các cụm từ như "Alexa, bật âm thanh TV", Alexa có thể bị dỗ dành khi nghĩ rằng nó đang tăng và giảm độ sáng của thiết bị gọi là "Âm thanh TV". Khi chấp nhận phương pháp này, chúng tôi buộc phải sử dụng mức độ sáng tuyệt đối của Alexa trong khi cố gắng điều khiển TV mức âm thanh tương đối. Điều đầu tiên chúng tôi nhận thấy là chúng tôi chỉ có thể tắt âm thanh TV một vài lần trước khi chúng tôi cạn kiệt phạm vi độ sáng của Alexa (Alexa nhảy khoảng 25% cho mỗi lệnh mờ). Nhưng chúng ta cũng có thể nói với Alexa độ sáng mà thiết bị của chúng ta được đặt ở cuối mỗi lệnh. Nếu chúng ta nói với Alexa độ sáng luôn là 50% thì Alexa sẽ luôn trả lời với hơn 50% khi chúng ta nói với Alexa "

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.