Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Smarthome Skill (Payload Version 3)

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

    Hallo Rainer,

    ich denke ich habe zumindest das Problem gefunden. Scheinbar habe ich vom Provider keine öffentliche ip sondern eine private IP (100.xxx.xxx.xxx) in der Fritzbox, die dann abgelehnt wird. Aber schonmal vielen Dank für deine Hilfe. Vieleicht finde ich ja noch etwas raus.

    Andreas

    Kommentar


      Ich bräuchte doch auch nochmal Hilfe von euch Experten...
      Soweit habe ich die Einbindung gut hin bekommen, allerdings funktionieren die Befehle rauf/runter öffnen/schließen für die Rolläden immer noch nicht so wie sie sollen.
      Habe schon die Änderungen aus Beitrag #839 probiert aber das ändert irgendwie nichts.

      Bei mir funktioniert öffnen/schließen richtig, rauf/runter ist aber verdreht ("Alexa, fahre Rolladen Arbeitszimmer runter" -> Rolladen fährt rauf)
      Bei mir ist aber auch 100% (oder 255) = unten.
      Alexa schickt bei "runter" aber eine 0, also fährt die Rollade nach oben...

      Wenn ich die Werte im lbs lt. Beitrag #839 ändere, muss ich doch nur den lbs erneut in Edomi einlesen, oder?
      Die Datei "edomi-smarthome-skill-PLv3.php" hat doch damit nichts zu tun, oder?

      Habe schon alle Kombinationen im lbs 19001200 unter Range.Controller durch. Aktuell steht folgendes drin.

      PHP-Code:
      } elseif ($interface == 'Alexa.RangeController') {
      if (
      $capability['RangeControllerType'] == 'blind') {
      $json['instance'] = 'Blind.Lift';
      $json['properties'] = array();
      $json['properties']['supported'] = array();
      $json['properties']['proactivelyReported'] = ($device['proactive'] ? true false);
      $json['properties']['retrievable'] = ($device['retrievable'] ? true false);
      foreach (
      $capability['properties'] as $property)
      $json['properties']['supported'][] = array(
      'name' => $property
      );
      $json['capabilityResources'] = [];
      $json['capabilityResources']['friendlyNames'] = array(
      array(
      '@type' => 'asset',
      'value' => array(
      'assetId' => 'Alexa.Setting.Opening'
      )
      )
      );
      $json['configuration'] = array(
      'supportedRange' => array(
      'minimumValue' => 0,
      'maximumValue' => 100,
      'precision' => 1
      ),
      'unitOfMeasure' => 'Alexa.Unit.Percent'
      );
      $json['semantics'] = array(
      'actionMappings' => array(
      array(
      '@type' => 'ActionsToDirective',
      'actions' => array(
      'Alexa.Actions.Open'
      ),
      'directive' => array(
      'name' => 'SetRangeValue',
      'payload' => array(
      'rangeValue' => 0
      )
      )
      ),
      array(
      '@type' => 'ActionsToDirective',
      'actions' => array(
      'Alexa.Actions.Close'
      ),
      'directive' => array(
      'name' => 'SetRangeValue',
      'payload' => array(
      'rangeValue' => 100
      )
      )
      ),
      array(
      '@type' => 'ActionsToDirective',
      'actions' => array(
      'Alexa.Actions.Raise'
      ),
      'directive' => array(
      'name' => 'AdjustRangeValue',
      'payload' => array(
      'rangeValueDelta' => - 1,
      'rangeValueDeltaDefault' => false
      )
      )
      ),
      array(
      '@type' => 'ActionsToDirective',
      'actions' => array(
      'Alexa.Actions.Lower'
      ),
      'directive' => array(
      'name' => 'AdjustRangeValue',
      'payload' => array(
      'rangeValueDelta' => 1,
      'rangeValueDeltaDefault' => false
      )
      )
      )
      ),
      'stateMappings' => array(
      array(
      '@type' => 'StatesToValue',
      'states' => array(
      'Alexa.States.Closed'
      ),
      'value' => 100
      ),
      array(
      '@type' => 'StatesToRange',
      'states' => array(
      'Alexa.States.Open'
      ),
      'range' => array(
      'minimumValue' => 0,
      'maximumValue' => 99
      )
      )
      )
      );
      logging($id'RangeController-JSON:'json_encode($json));
      }
      } else { 


      Habe ich was übersehen???

      Ändern diese Werte im Range.Controller denn beide Befehle? Für öffnen/schließen und rauf/runter?

      Gibt es noch eine andere Schraube an der ich drehen kann/muss?

      Dank und Gruß

      Rainer

      Kommentar


        LBS neu einlesen + Projekt neu aktivieren

        Kommentar


          Ja natürlich.
          Habe ich nicht mit aufgeschrieben, mache ich aber immer.

          Könnte ich die Werte eigentlich auch "online" im LBS unter /usr/local/edomi/www/admin/lbs über z.B. WinSCP ändern?
          Werden die LBS beim Durchlauf der Logik immer neu aufgerufen, oder werden die bei EDOMI Start eingelesen und Änderungen hier bringen im laufenden Betrieb nichts?

          Wenn man die online ändern konnte, könnte ich da in meinem Fall "schneller mal die Werte ändern".

          Kommentar


            Bei Open muss 0 stehen und bei Close 100.

            Nach Änderung der Werte im LBS Code musst du die LBS neu einlesen und das Projekt neu aktivieren.
            Zur Laufzeit kannst/solltest du keine Änderungen vornehmen. Wenn es Daemon LBS sind, werden sie ohnehin bei Aktivierung des Projekts gestartet und die Änderung bringt nichts und auch sonst würde eine Änderung im live Verzeichnis von EDOMI bei der nächsten Aktivierung wieder überschrieben werden.
            Wenn du die Werte wie oben geändert hast, dann sind auch keine Änderungen mehr notwendig, denn so ist es richtig.

            Außerdem musst du die Devices neu discovern: "Alexa, finde meine smarten Geräte", denn du hast ja im Code der "Discovery Response" Einstellungen geändert.
            Danach sollte es dann auch korrekt funktionieren. Ggf. musst du die relevanten Devices vorher in der Alexa App löschen, ich weiss gerade nicht aus dem Kopf, ob er diese Änderungen automatisch updated. Die Wahrscheinlichkeit ist aber hoch, dass eine einfach Devicesuche ausreicht.

            Kommentar


              Hallo Jonofe,
              Danke für die Antwort und den hilfreichen Hinweis das die Geräte in der Alexa App nochmal gesucht werden müssen. Das erklärt warum sich manchmal nach einer Änderung was geändert hat und manchmal nicht. Wahrscheinlich habe ich aus Zufall manchmal neue Geräte gesucht und dann hat sich was geändert...

              Leider funktioniert es aber immer noch nicht.
              - Habe die augenscheinlich richtigen Eintragung im lbs (Open=0 und Close=100),
              - LBS erneut in Edomi geladen
              - Projekt aktiviert
              - Gerät in Alexa gelöscht
              - neue Geräte gesucht

              Trotzdem funktioniert öffnen/schließen richtig und rauf/runter ist verkehrt rum.

              "Alexa, schließe Jalousien Arbeitszimmer" liefert an E1 des Smarthome Device:

              PHP-Code:
              {"directive":{"header":{"namespace":"Alexa.RangeController","name":"SetRangeValue","payloadVersion":"3","instance":"Blind.Lift","messageId":"e4123ad6-9871-473f-94f2-XXXXX"},"endpointId":"IP_1XX_1XX_1XX_XX-ID_1308","cookie":[]},"payload":{"rangeValue":100}},"type":"smarthome","queue":41603445
              Am A24 des SmartHome Device kommt dann eine 100, somit fährt der Rolladen runter:
              Die Response an A31 sieht so aus:

              PHP-Code:
              {"context":{"properties":[{"namespace":"Alexa.RangeController","instance":"Blind.Lift","name":"rangeValue","value":100,"timeOfSample":"2021-01-09T19:45:15Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"e48c3f91-5a4d-47b3-b28d-XXXX"},"endpointId":"IP_1XX_1XX_1XX_XX-ID_1308"},"payload":{}}} 

              "Alexa, fahre Jalousien Arbeitszimmer runter" liefert an E1 des SmartHome Device

              PHP-Code:
              {"directive":{"header":{"namespace":"Alexa.RangeController","name":"AdjustRangeValue","payloadVersion":"3","instance":"Blind.Lift","messageId":"fe870421-472d-4567-a67e-XXXXX"},"endpointId":"IP_192_1XX_1XX_XX-ID_1308","cookie":[]},"payload":{"rangeValueDelta":1,"rangeValueDeltaDefault":false}},"type":"smarthome","queue":693458410
              Am A24 des SmartHome Device kommt dann eine 0, somit fährt der Rolladen hoch:
              Die Response an A31 sieht so aus:

              PHP-Code:
              {"context":{"properties":[{"namespace":"Alexa.RangeController","instance":"Blind.Lift","name":"rangeValue","value":0,"timeOfSample":"2021-01-09T19:36:07Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"8ffa6be7-d814-4d9f-81f4-..XXXXXX"},"endpointId":"IP_192_XXX_XXX_XXX-ID_1308"},"payload":{}}} 

              Es sieht also so aus, das der Fall "runter" nicht im LBS in den "SetRangeValue" läuft, sondern in den "AdjustRangeValue"... Ist das richtig?
              Aber wenn nein, wie ändere ich das???

              Hab auch nochmal ein Bild der Logik angehängt. Vielleicht habe ich ja nur irgendwo einen falschen Eintrag...
              Rollade Arbeitszimmer.JPG
              Vielen Dank für eure Bemühungen!

              Rainer

              Kommentar


                Wie heisst denn das Device?
                Verwende mal die Anweisung wie in der Hilfe des 1201 beschrieben:

                <Device Name> öffnen.
                <Device Name> schließen.

                Bsp:

                Rangecontroller Device mit Name "Jalousien im Arbeitszimmer"

                => Alexa, Jalousien im Arbeitszimmer öffnen.
                => Alexa, Jalousien im Arbeitszimmer schließen.

                Es funktioniert i.d.R. nicht neue Kombinationen durch Umstellung von Worten und Aktivitäten zu bilden, da man keine Kontrolle über Utterances bei einem Smarthome Skill hat. AdjustRangeValue bedeutet, dass er den Befehl als Anpassung um einen Prozentwert verstanden hat, in deinem Fall um +1%. Ändern lässt sich das nur, indem man die richtigen Sprachbefehle verwendet. Ggf. gibt es auch noch weitere Sprachbefehle, die man aber durch Try&Error rausfinden muss.

                Kommentar


                  Device Name ist "Jalousien Arbeitszimmer"

                  "Alexa, öffne Jalousien Arbeitszimmer" -> geht.
                  "Alexa, Jalousien im Arbeitszimmer öffnen" -> geht auch.

                  Da es hier unter Beitrag #838 diskutiert wurde, dachte ich "Alexa, fahre Jalousie Arbeitszimmer hoch (oder rauf)" würde auch funktionieren. Fände ich auch ganz nett, wenn beides ginge.
                  @philipp900 hat das nicht bei dir so funktioniert?

                  Hatte diese Beispiele auch in der offiziellen Alexa Hilfe gefunden:
                  Alexa befehle.JPG
                  Quelle:

                  Anscheinend funktionieren die semantics dann bei mir nicht richtig...

                  Ich glaube ich mache für heute erstmal Schluss. Sehe nur noch Alexa Befehle
                  Danke schon mal für die Unterstützung!
                  Rainer

                  Kommentar


                    Bei den verschiedenen Semantics können schon unterschiedliche Device Namen zu unterschiedlichen Ergebnissen führen. Da ist der Alexa Smarthome Skill recht sensibel. Wenn du also an E1 ein AdjustRangeValue siehst, aber ein SetRangeValue erwartest, dann liegt das daran, dass Alexa den Befehl nicht so versteht, wie du ihn verstehst, da kann man dann auch wenig dran machen. Die Änderung 0/100 war ja nur die Änderung dessen, was der Skill bei einem SetRangeValue senden soll, darauf hat man Einfluss, aber nicht auf die Interpretation der Sprache in den entsprechenden Befehl.

                    Kommentar


                      Zitat von deRainer Beitrag anzeigen
                      Da es hier unter Beitrag #838 diskutiert wurde, dachte ich "Alexa, fahre Jalousie Arbeitszimmer hoch (oder rauf)" würde auch funktionieren. Fände ich auch ganz nett, wenn beides ginge.
                      @philipp900 hat das nicht bei dir so funktioniert?
                      Ich habe das ehrlich gesagt dann nicht mehr weiter verfolgt, da mir der Skill über die Amazon Server zu viel Zeitverzögerung hat.

                      Darauf habe ich mir einen LBS der ein HUE device simuliert und direkt im lokalen Netzwerk funktioniert programmiert.
                      Damit kann man schalten, dimmen, Farbtemperatur und Prozentwerte direkt setzen.
                      Wenn Interesse besteht werde ich den mal hochladen, sobald ich Zeit für die Doku habe.

                      Kommentar


                        Zitat von Guidokoeller Beitrag anzeigen
                        Hallo
                        Ich hatte das gleiche Problem. Durch eine koplett neue Installation von Edomi auf Basis Cent OS 7 und das Importieren der Logikbausteine hat sich das Problem
                        erledigt. Ich habe vorher auch alles versucht. Leider ohne Erfolg.
                        Ich mag eigentlich nicht auf Centos 7 updaten, gibts denn wirklich keine andere Möglichkeit?

                        Kommentar


                          Zitat von HeMichael Beitrag anzeigen
                          Ich mag eigentlich nicht auf Centos 7 updaten
                          Das muss am Ende jeder für sich entscheiden, ob man auf einem EOL OS bleibt und dann bei vielen LBS selbst experimentieren muss, um es dann zum Laufen zu bekommen, oder ob man das Upgrade macht und nach entsprechenden erprobten Installationsanleitungen vorgehen kann.

                          Meine Entscheidung ist da relativ klar, ich baue/update LBS nur noch für CentOS7 mit PHP7 und supporte auch nur noch diese Kombination, insbesondere seit einige Repos für CentOS 6.5 gar nicht mehr zur Verfügung stehen. Entscheidend ist dann am Ende, wie wichtig einem ein LBS ist und wieviel Aufwand man selber in Experimente oder Workarounds reinstecken will.

                          Was sind denn eigentlich die Gründe nicht auf CentOS7 zu upgraden?

                          Kommentar


                            hmm vielleicht eher der Gedanke: Never change a running System

                            hab irgendwie Angst dass alte LBS nicht mehr Richtig funktionieren. Vielleicht ist das aber auch völlig unbegründet

                            Kommentar


                              Zitat von HeMichael Beitrag anzeigen
                              hab irgendwie Angst dass alte LBS nicht mehr Richtig funktionieren
                              Naja, so kannst du sicher sein, dass viele neue LBS oder Updates der alten LBS nicht funktionieren.
                              Du musst die alte Installation ja nicht direkt löschen, sondern kannst erst mal in einer VM oder mit dem Docker Image testen, ob es funktioniert.
                              Oder aber einfach eine kleine SSD (128GB) für 20€ kaufen und DUAL Boot einrichten und so Schritt für Schritt auf CentOS7 umstellen.

                              CentOS 6.5 ist aus meiner Sicht eine Sackgasse, denn ansonsten bist wirklich bei never-change-a-running-system, weil die Changes eben nicht mehr mit CentOS6.5 laufen.

                              Kommentar


                                hmm der Gedanke mit der kleinen SSD ist vielleicht net mal der schlechteste, hab da sogar noch paar rumliegen die ich mal ausm server ausgebaut habt.

                                Wald und Bäume und so

                                Danke für den Zaunpfahl

                                Kommentar

                                Lädt...
                                X