Ankündigung

Einklappen
Keine Ankündigung bisher.

Umfrage: Amazon Echo

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #76
    Ne keine Differenzen, wenn ich es richtig gesehen habe. Ich hatte ja schonmal eine Funktion am laufen aus dem Edomi Forum und die hat folgendes als Response geliefert:

    Code:
    { 
        "header": 
        { 
            "namespace": "Alexa.ConnectedHome.Discovery", 
            "name": "DiscoverAppliancesResponse", 
            "payloadVersion": "2" 
        }, 
        "payload": { 
            "discoveredAppliances": [ 
            { 
                "applianceId": "Wohnzimmer-Ofen", 
                "manufacturerName": "Patrick", 
                "modelName": "Model LichtDimmer", 
                "version": "VER01", 
                "friendlyName": "Wohnzimmer Ofen", 
                "isReachable": true, 
                "friendlyDescription": "Licht/Dimmer im Wohnzimmer Ofen (Wohnzimmer-Ofen)", 
                "actions": [ 
                    "turnOn", 
                    "turnOff", 
                    "setPercentage", 
                    "incrementPercentage", 
                    "decrementPercentage" 
                ] 
            }
    ....
    Also hier ist die Reihenfolge so wie im API Reference Example. Und die Funktion hatte schon funktioniert, wenn auch unter Verwendung des Network Plugins.

    Kommentar


      #77
      Zum Vergleich ist hier nochmal die aws Funktion:

      Code:
      const PORT=8080;
      const HOST='virtual.heneronline.de';
      
      
      // namespaces
      const NAMESPACE_CONTROL = "Alexa.ConnectedHome.Control";
      const NAMESPACE_DISCOVERY = "Alexa.ConnectedHome.Discovery";
      
      // errors
      const ERROR_TARGET_OFFLINE = "TargetOfflineError";
      const ERROR_UNSUPPORTED_OPERATION = "UnsupportedOperationError";
      const ERROR_UNEXPECTED_INFO = "UnexpectedInformationReceivedError";
      
      
      // entry
      exports.handler = function (event, context, callback) {
      
          log("Received Directive", JSON.stringify(event));
      
          var postData = JSON.stringify(event);
          fs =    require('fs');
          var options = {
              hostname: HOST,
              port: PORT,
              //family: 6,
              rejectUnauthorized: false,
              path: '/alexa.php',
              method: 'POST',
              //ca: fs.readFileSync('client.crt'),
      
              key:   fs.readFileSync('client.key'),  // Secret client key
              cert:  fs.readFileSync('client.crt'),  // Public client key
      
              headers: {
                  'Content-Type': 'application/json',
                  'Content-Length': Buffer.byteLength(postData)
              }
          };
      
          var http = require('https');
          var req = http.request(options, (res) => {
              console.log(`STATUS: ${res.statusCode}`);
              console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
              res.setEncoding('utf8');
              var rawData = '';
              res.on('data', (chunk) => rawData += chunk);
              res.on('end', () => {
                  console.log('No more data in response.');
                  if (rawData.length>0) {
                      log('Response: ', rawData);
                      Data = JSON.parse(rawData);
                      log('json output', JSON.stringify(Data));
      //                callback(null, Data);
                      callback(null, Data);
                  } else {
                      callback(null, createError(ERROR_TARGET_OFFLINE) );
                  }
                  return;
              });
          });
      
          req.on('error', (e) => {
              console.log(`problem with request: ${e.message}`);
              callback(null, createError(ERROR_TARGET_OFFLINE) );
              return;
          });
      
          // write data to request body
          req.write(postData);
          req.end();
          return;
      
      }// exports.handler
      
      
      var handleUnsupportedOperation = function() {
          var header = createHeader(NAMESPACE_CONTROL,ERROR_UNSUPPORTED_OPERATION);
          var payload = {};
          return createDirective(header,payload);
      }// handleUnsupportedOperation
      
      
      var handleUnexpectedInfo = function(fault) {
          var header = createHeader(NAMESPACE_CONTROL,ERROR_UNEXPECTED_INFO);
          var payload = {
              "faultingParameter" : fault
          };
          return createDirective(header,payload);
      }// handleUnexpectedInfo
      
      
      // support functions
      var createMessageId = function() {
          var d = new Date().getTime();
          var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
              var r = (d + Math.random()*16)%16 | 0;
              d = Math.floor(d/16);
              return (c=='x' ? r : (r&0x3|0x8)).toString(16);
          });
          return uuid;
      }// createMessageId
      
      
      var createHeader = function(namespace, name) {
          return {
              "messageId": createMessageId(),
              "namespace": namespace,
              "name": name,
              "payloadVersion": "2"
          };
      }// createHeader
      
      function log(title, msg) {
          console.log(title + ': ' + msg);
      }

      Kommentar


        #78
        dreck ist das, ich finde keinen fehler, kann aber auch nicht live testen.
        sicher, dass du bei der lambda actions/publish new version gemacht hast?
        sonst fällt mir derzeit nicht wirklich was ein

        Kommentar


          #79
          Zitat von hotzen Beitrag anzeigen
          sicher, dass du bei der lambda actions/publish new version gemacht hast?
          Erklär mal näher was du meinst. Musst sowas noch nie machen und hab schon zwei funktionierende Skills implementiert.

          Kommentar


            #80
            Ich habe mir jetzt die Mühe gemacht und habe alles nochmal gelöscht und neu angelegt. Das heißt OAuth Profil bei Amazon, Lambda Funktion, Alexa Skill in der developer Konsole. Also alles einmal weg und alles nochmal neu. Gleiches Ergebnis. Die Funktion findet Devices, Alexa allerdings nicht.

            Ich würde das Rückgabeformat ins Auge fassen. Das ist das einzige, was sich unterscheidet von der funktionierenden Funktion.

            Kommentar


              #81
              Hab noch ein Bug. Wenn ich also eine alexa_description wähle wie in der README angegeben, dann hat der Service ein Problem:

              Code:
              2016-11-30  15:07:06 INFO     Main         Alexa: item EG.Wohnzimmer.SpotsOfen.Schalten supports actions ['turnOn', 'turnOff'] as device wohnzimmer-ofen
              2016-11-30  15:07:06 ERROR    Main         Item EG.Wohnzimmer.SpotsOfen.Schalten: problem creating: 'AlexaDevice' object has no attribute 'set_description'
              Traceback (most recent call last):
                File "/usr/local/smarthome/lib/item.py", line 219, in __init__
                  child = Item(smarthome, self, child_path, value)
                File "/usr/local/smarthome/lib/item.py", line 276, in __init__
                  update = plugin.parse_item(self)
                File "/usr/local/smarthome/plugins/alexa/__init__.py", line 98, in parse_item
                  device.set_description( item.conf['alexa_description'].strip() )
              AttributeError: 'AlexaDevice' object has no attribute 'set_description'
              Und Außerdem wird die friendly description auch nicht angezeigt in der JSON Response. Scheint also auch ein Bug zu sein.
              Da passt irgendwas noch nicht ganz..

              Kommentar


                #82
                friendly description ist gefixt & gepushed.
                ansonsten warte ich darauf irgendwie an einen echo dot zu kommen und das bei mir echt testen zu können.
                wenn du wild aufs testen bist, können wir auch mal ein statisches, definitiv korrektes JSON bei discovery zurückgeben um reihenfolgen-probleme auszuschließen

                Kommentar


                  #83
                  Ja machen wir das doch mal. Gib mal nen code Schnipsel.

                  Kommentar


                    #84
                    HALT! Kommando zurück. Seit dem letzten pull funktioniert alles. Alexa findet und schaltet geräte. Passt alles. Daumen Hoch

                    Kommentar


                      #85
                      Aber Dimmen und Percentage setzen ergeben Fehler. Muss noch n Bug drin sein.

                      AWS meldet
                      Code:
                       
                       {   "payload": {},   "header": {     "payloadVersion": "2",     "name": "UnexpectedInformationReceivedError",     "namespace": "Alexa.ConnectedHome.Control",     "messageId": "0af4e081c4a941c2b36279f026c293e6"   } }
                      smarthome.log sagt
                      Code:
                       2016-11-30  19:23:11 DEBUG    CP Server Thread-12 Alexa: control-directive 'SetPercentageRequest' received 2016-11-30  19:23:11 ERROR    CP Server Thread-12 Alexa: execution of control-directive 'SetPercentageRequest' failed: cannot switch from automatic field numbering to manual field specification 2016-11-30  19:24:32 DEBUG    CP Server Thread-15 Alexa: control-directive ' SetPercentageRequest' received 2016-11-30  19:24:32 ERROR    CP Server Thread-15 Alexa: no action implemented for directive ' SetPercentageRequest' 2016-11-30  19:24:32 INFO     CP Server Thread-15 192.168.1.1 - - [30/Nov/2016:19:24:32] "POST / HTTP/1.1" 200 189 "" "" 2016-11-30  19:26:03 DEBUG    CP Server Thread-16 Alexa: control-directive ' DecrementPercentageRequest' received 2016-11-30  19:26:03 ERROR    CP Server Thread-16 Alexa: no action implemented for directive ' DecrementPercentageRequest' 2016-11-30  19:26:03 INFO     CP Server Thread-16 192.168.1.1 - - [30/Nov/2016:19:26:03] "POST / HTTP/1.1" 200 189 "" ""

                      Kommentar


                        #86
                        gefixt & gepushed

                        Kommentar


                          #87
                          Okay set percentage geht aber nicht decrement und increment

                          Code:
                          2016-11-30  19:52:53 DEBUG    CP Server Thread-18 Alexa: control-directive 'DecrementPercentageRequest' received
                          2016-11-30  19:52:53 ERROR    CP Server Thread-18 Alexa: execution of control-directive 'DecrementPercentageRequest' failed: 'module' object has no attribute 'min'
                          2016-11-30  19:53:27 DEBUG    CP Server Thread-12 Alexa: control-directive 'IncrementPercentageRequest' received
                          2016-11-30  19:53:27 INFO     CP Server Thread-11 192.168.1.1 - - [30/Nov/2016:19:53:27] "POST / HTTP/1.1" 200 174 "" ""
                          2016-11-30  19:53:27 ERROR    CP Server Thread-12 Alexa: execution of control-directive 'IncrementPercentageRequest' failed: 'module' object has no attribute 'min'

                          Kommentar


                            #88
                            gefixt & gepushed

                            Kommentar


                              #89
                              Ja decrement funktioniert nun auch nur increment meldet noch:

                              Code:
                              2016-11-30  20:24:40 DEBUG    CP Server Thread-10 Alexa: control-directive 'IncrementPercentageRequest' received
                              2016-11-30  20:24:40 ERROR    CP Server Thread-10 Alexa: execution of control-directive 'IncrementPercentageRequest' failed: name 'percentage_new_clamped' is not defined
                              Wir sind auf dem richtigen Weg!

                              Kommentar


                                #90
                                gefixt & gepushed

                                Kommentar

                                Lädt...
                                X