Nhận trạng thái từ thiết bị WeMo bằng Alexa


7

Tôi đang sử dụng một chiếc ESP8266 để mô phỏng thiết bị WeMo với mã arduino wemos và FauxmoESP được tìm thấy trên internet. Bây giờ tôi đã hiểu sự tương tác cơ bản của các lệnh bật và tắt, tôi muốn thêm phản hồi trạng thái cho trạng thái của một số chân trên thiết bị. Dường như "bật" và "tắt" là những kỹ năng cơ bản của Alexa và những công việc đó. Nhưng không có lệnh bằng lời nói "trạng thái" hoặc "trạng thái".

Tôi đã tìm thấy các vị trí trong mã xử lý eventserviceXML chẳng hạn: <binarystate>1</binarystate>để bật nó, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về việc nhận trạng thái hoặc <getdevicestate>. Ví dụ về việc sử dụng: Nếu tôi không thể thấy đèn sáng ở đâu đó, tôi muốn truy vấn thiết bị để xem nó bật hay tắt.

Do thiết bị mô phỏng công tắc bật / tắt belkin, nên gói setup.xml chỉ có:

<service>
    <serviceType>urn:Belkin:service:basicevent:1</serviceType>
    <serviceId>urn:Belkin:serviceId:basicevent1</serviceId>
    <controlURL>/upnp/control/basicevent1</controlURL>
    <eventSubURL>/upnp/event/basicevent1</eventSubURL>
    <SCPDURL>/eventservice.xml</SCPDURL>
</service>

và sự kiện cơ bản là không đủ để có được trạng thái hoặc khả năng hơn nữa.

Tất cả điều này được thực hiện mà không cần viết một kỹ năng AWS và được xử lý bằng hộp thoại trực tiếp trên mạng LAN cục bộ giữa máy chủ web ESP8266 và FauxmoESP đến và từ Echo Dot. Tôi có thể xem các gói bằng cách đánh hơi mạng LAN (không dây) và tin rằng sẽ đơn giản hơn để thêm nhiều khả năng hơn nếu tôi có thể tìm thấy tài liệu về các gói XML nhắn tin điều khiển.

Tôi có thể tìm thấy các mẫu hộp thoại XML điều khiển này ở đâu và hy vọng các ví dụ về cách sử dụng chúng? Tôi có cảm giác rằng điều này chỉ có thể được thực hiện bằng cách sử dụng một kỹ năng AWS nhưng có vẻ như không cần thiết. Ai đó có thể cho tôi một số hướng dẫn ở đây?

Ngoài ra, cách để Alexa kiểm tra trạng thái của thiết bị là gì? Có thể là không có cách phát âm nào cho việc này và tôi sẽ cần phải viết một kỹ năng AWS (điều mà tôi không muốn làm nếu có thể.)


Bạn có ý định có các bài phát biểu trong XML không? Ban đầu tôi đã chỉnh sửa chúng, nhưng bạn đặt chúng trở lại thì tôi có thiếu thứ gì không?
Aurora0001

Câu trả lời:


6

Có lẽ bộ tính năng phần mềm đã thay đổi nhưng tôi thấy rằng các công việc sau đây. Đây là từ mã DIY của tôi cho mô-đun gật đầu / D1 mini ESP8266 sử dụng máy chủ web Esp8266 để nghe các chương trình phát sóng UDP cục bộ. Tôi nhận thấy trong các cuộc gọi Alexa tới /upnp.control/basicevent1 rằng các yêu cầu đang thay đổi một cách tinh tế. Tất cả đều sôi sục với cùng một sự kiện, nhưng xml của yêu cầu có một trong hai<SetBinaryState> or <GetBinaryState>

Chừng nào bạn còn giữ trạng thái trong bản phác thảo của mình, một cái gì đó như thế này sẽ hoạt động ...

 void Switch::handleUpnpControl(){

  Serial.println("########## Responding to  /upnp/control/basicevent1 ... ##########");      

  String request = server->arg(0);      
  Serial.print("request:");
  Serial.println(request);

  if (request.indexOf("<u:SetBinaryState") > 0) {
    Serial.print("Got setState update...");
    if(request.indexOf("<BinaryState>1</BinaryState>") > 0) {
        Serial.println("Got Turn on request");
    state = 1;
    onCallback();
    }
    if(request.indexOf("<BinaryState>0</BinaryState>") > 0) {
        Serial.println("Got Turn off request");
        state = 0;
        offCallback();
    }
    server->send(200, "text/plain", "");
  }

  if (request.indexOf("<u:GetBinaryState") > 0) {
    Serial.println("Got inquiry for current state:");
     String statusResponse = 
     "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"     s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
        "<s:Body>"
          "<u:GetBinaryStateResponse xmlns:u=\"urn:Belkin:service:basicevent:1\">"
            "<BinaryState>" + String(state) + "</BinaryState>"
          "</u:GetBinaryStateResponse>"
        "</s:Body>"
      "</s:Envelope>\r\n"
      "\r\n";
      Serial.print("Sending status response: ");
      Serial.println(statusResponse);
      server->send(200, "text/plain", statusResponse);
  }
}

Điều này thực sự đã làm việc - Cảm ơn bạn! Ban đầu tôi đã sử dụng Belkin XML cho getBinaryState nhưng không thể kiểm tra xem yêu cầu là get hay set. Tôi đã không thử mã gốc của mình sau khi thử nghiệm getBinaryState sau khi thấy mã này hoạt động. Bây giờ tôi chỉ cần tìm ra cách nói lệnh thay vì sử dụng Ứng dụng Alexa. Cảm ơn một lần nữa.
bob

4

Hiện tại trạng thái của ánh sáng không phải là một phần của API kỹ năng nhà thông minh mà Wemo sử dụng cho các thiết bị nhà thông minh. Có chỉ thị khám phá, kiểm soát và truy vấn theo tài liệu tham khảo của họ .

Truy vấn các thiết bị được kết nối cho trạng thái hiện tại của họ Alexa.ConnectedHome.Query

  • GetLockStateRequest
  • GetLockStateResponse
  • GetTargetTem Nhiệt độRequest
  • GetTargetTem Nhiệt độResponse
  • GetTem Nhiệt độReadRequest
  • GetTem Nhiệt độReadResponse

Thật không may, không ai trong số họ giúp bạn với ánh sáng của bạn. Có lẽ bạn có thể giả là một khóa cửa. Nhưng nó rất khó có thể hoạt động với kỹ năng Wemo.

Do đó, hiện tại, có vẻ như bạn sẽ cần phải viết kỹ năng của riêng mình để có được trạng thái ánh sáng.


1
Cảm ơn Helmar. Vì ESP8266 về cơ bản điều khiển các chân để chuyển tiếp, nên sẽ rất tốt nếu có trạng thái của các chân để tôi có thể sử dụng chúng làm đầu vào. Vì vậy, thật tuyệt khi thấy yêu cầu thực sự đối với "khóa" trông như thế nào khi nó xuất hiện trên mạng LAN / WiFi cục bộ để tôi có thể trả lời với gói XML có chứa trạng thái. Tôi thực sự đang tìm kiếm nội dung gói XML cấp thấp đó. Rõ ràng Alexa sẽ không biết rằng nó có kỹ năng "khóa" nên tôi đang cố gắng giả mạo nó mà không có AWS Skill từ đám mây.
bob
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.