Patami Alexa Skill Framework

Hallo,

ich habe das gleiche Problem, ist dies mittlerweile gelöst?.

Ich habe wie im Beispiel von Patami und in der Doku beschrieben das Framework und das Beispiel angelegt. Die Verbindung funktioniert generell, USER-ID und Application-ID werden erkannt, dann scheitert jedoch die Validation der Decive-ID. Im Debug-Modus von Symcon steht, Device ID is invalid und im Test-Center von Alexa wird „Der angeforderte Skill konnte nicht ausgeführt werden weil eine ungültige Device ID übergeben wurde.“ zurückgegeben und alles weitere abgebrochen. Ich habe mich schon durch alles mögliche Im Internet „gewälzt“ finde aber keine Lösung. Kann mir jemand helfen? Kann ich die Device-ID-Validation irgendwie deaktivieren? Ich wüsste nämlich auch nicht, dass ich sie bewusst aktiviert habe.
Ich nutze IP-Symcon 4.4 und das Patami-Skript 3.4. Custom Skill und Intent sind so angelegt wie hier beschrieben: System Information Custom Skill - Patami IP Symcon Framework - Braintower Docs
Ich scheitere dann am Testen unter der Alexa Developer Console.

Vielen Dank und Grüße

Lars

ich beziehe mich auf diesen Post, als Ergänzung

Lars

Hallo,

nur zur Info für diejenigen, die auch das Problem haben. Man kann es umgehen indem man im request.php im Verzeichnis C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Services\Alexa\Skills\Custom die Zeilen:

$this->Debug(‚Device ID Validation‘, ‚Device ID is invalid‘);
throw new InvalidDeviceIdException();

mittels // deaktiviert, also so:

//$this->Debug(‚Device ID Validation‘, ‚Device ID is invalid‘);
//throw new InvalidDeviceIdException();
vielleicht kann mir trotzdem einer sagen, was das schief läuft, bzw. ich anpassen muss. Erstmal läuft alles.

Grüße

Lars

Anscheinend hat sich die Länge der Device ID geändert und preg_match greift nicht mehr


preg_match('/^amzn1\.ask\.device\.[0-9A-Z]{156}$/', $id)

hier wird von einer Länge von 156 ausgegangen bei mir hat die Device ID aber eine Länge von 181 daher wirft hier preg_match 0 und das führt zur Debug Meldung.

Schreib doch mal ein Issue das die Länge der Device ID nicht stimmt dann kann das patami ausbessern wenn er denn Zeit findet, ansonsten kannst Du mal probieren einfach die 156 durch 181 auszutauschen, ob das eine Besserung bringt. Kann aber auch sein das die Länge nicht fest ist dann müsste der Ausdruck dann nochmals anders lauten.

EDIT:
Das ist sehr merkwürdig, ich konnte jetzt feststellen das die device ID unterschiedlich lang ist wenn man über den Emulator geht hat diese bei mir eine Länge von 181 während die von einem Alexa Device nur 156 hat. Ist also blöd das das nicht einheitlich ist. Vielleicht hat ja jemand eine Idee wie man das dann sauber prüft.

Ich habe den Code jetzt folgendermaßen geändert - immer noch ein Workaround (vermutlich kann man das in dem regulären Ausdruck auch besser implementieren):

  if (! preg_match('/^amzn1\.ask\.device\.[0-9A-Z]{181}$/', $id) && ! preg_match('/^amzn1\.ask\.device\.[0-9A-Z]{156}$/', $id)) {
        $this->Debug('Device ID Validation', 'Device ID is invalid');
        throw new InvalidDeviceIdException();
  }

Gruß
Peter

Hallo zusammen,

wenn ich den Framework über die Module installiere installiert sich eine weitere Kern-Instanz bei mir nicht automatisch.
Wenn ich dann versuche die Framework-Instanz manuell hinzuzufügen hängt sich das IPS auf. Kein Zugriff mehr - nur über PC-Neustart zu beheben.
Neben dem neuen Modul habe ich das IQL4Symcon-Modul installiert, welches problemlos schon länger läuft.
Was kann ich noch tun, um den Framework ans laufen zu bekommen?
Virenscanner/Firewall hatte ich auch mal komplett deaktiviert -ohne Erfolg.
Nach dem Neustart ist der Framwork dann als ungültiges Objekt installiert.

Was für eine IP-Symcon Version hast Du denn installiert? Stehen denn irgendwelche Meldungen im Meldungsfenster nachdem Du IP-Symcon neu gestartet hast?

im Messagefenster kommt erst mal nichts…
mein IP-Symcon ist die 4.4 (vom 19.02.2018) auf einem Windows x64 (IntelATOM)

folgende Meldungen finden sich dann nach dem Neustart im Script:

01.06.2018 11:23:34 | 10042 | MESSAGE | PatamiFramework | Erstelle…
01.06.2018 11:23:34 | 00000 | DEBUG | ScriptEngine | Skriptausführung (Text) - Länge: 164 ~ Absender: RunScript
01.06.2018 11:23:34 | 00000 | DEBUG | ScriptEngine | Executed Text (Length: 0) ~ Sender: RunScript ~ Duration: 261 ms
01.06.2018 11:23:34 | 10042 | MESSAGE | PatamiFramework | Entferne…
01.06.2018 11:23:34 | 10042 | ERROR | InstanceManager | Could not create instance interface: <br />
<b>Fatal error</b>: Uncaught exception ‚Patami\IPS\Libraries\Exceptions\ModuleControlNotFoundException‘ in C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Libraries.php:62
Stack trace:
#0 C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Libraries.php(78): Patami\IPS\Libraries\Libraries::GetModuleControlInstanceId()
#1 C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Libraries.php(90): Patami\IPS\Libraries\Libraries::GetLibraries()
#2 C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Library.php(112): Patami\IPS\Libraries\Libraries::IsLibraryLoaded(‚ipspatami‘)
#3 C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Library.php(75): Patami\IPS\Libraries\Library->IsLoaded()
#4 C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Library.php(94): Patami\IPS\Libraries\Library->__construct(‚ipspatami‘)
#5 C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Modules\Module.php(94): Patami\IPS\Libraries\Library::Create(‚ipspatami‘)
#6 -(4): Patami\IPS\Modules\Module->__construct(10042)
#7 {main}
thro in <b>C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Libraries.php</b> on line <b>62</b><br />

keine Ideen?

Ich habe das hier in den Nachrichten gelesen. Amazon now lets you share your custom skills made with Alexa Blueprints – TechCrunch

Hilft das evtl dass man schneller so einen Custom Skill teilen kann, ohne die Zertifizierung zu durchlaufen?

paresy

Nachdem das Thema Alexa Custom Skill für mich gerade wieder aktuell wird, möchte ich a) den Thread wieder nach oben bringen und b) meine Idee zum Thema der Slotvalue ID, was Burkhard

gefragt hatte, zum Besten geben.

Ich habe einen rudimentären Ansatz gefunden, um die Antwort des Skills besser auszuwerten. Dazu sind in der Alexa Dev Console die IDs der Slotvalues selbst eindeutig festlegen (z.B. „ID_SUBJ_WETTER“), dann kann ich diese im jeweiligen Intent-Modul-Skript sicher identifizieren (anstatt alle möglichen Synonyme in einem Case-Zweig aufzulisten, wie es in Patamis Demo-Skill gemacht wird.)

Hier mein Ansatz, ohne die Klassen zu verändern (ich habe keine richtige Ahnung, was das für Auswirkungen hätte). Meine Idee ist es, einfach den Wert des jeweiligen Slotvalues (=String) um meine eindeutige Slotvalue-ID zu erweitern.

Man muss nur in Patamis IntentSlots.php die Zeilen ändern:

            $slotValue = @$slot['value'];
			// slot id for first match
			$slotValueDetails = @$slot['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['id'];
			// IPS_LogMessage($_IPS['SELF'], "Alexa Custom Skill slotValueDetails: " . var_export($slotValueDetails, true));
            if ( isset($slotValue) and is_string($slotValueDetails)) {
				$this->data[$slotName] = $slotValue . ':' . $slotValueDetails;
            } else {
				$this->data[$slotName] = $slotValue;
			}

Siehst sicher nicht schön aus, insbesondere der fixe Arrayzugriff, aber es funktioniert. Der Wert des Slots wird einfach erweitert um die ID, die ich dann in meinem Skript in der Modul-Funktion Execute() herausfiltern kann, etwa so:

	$subject = strtolower($request->slots->mySubject);
	$subject = explode(":", $subject)[1]; // Slot-ID steht nach Teiler

Vielleicht hilft es ja jemanden… Und falls einer das besser implementieren kann - ich freue mich auf jede Verbesserung.

Viele Grüße, Carsten

[Fonzo schläft nie]
Guten Morgen,

kurze Frage, die die sicher aus der Hüfte schießt. Ich hatte vor bei einem aktiven Alexa Custum Skill, einen weiteren hinzuzufügen. Zweck:
Ich sage für die Steuerung im Haus: „Alexa, sage Haus…Rolläden schließen“
Jetzt möchte ich für einen Bereich das ganze abgrenzen: „Alexa, sage Heimkino…Licht ausschalten“
Problem:
wenn ich einen 2. Skill in der Devoloper Console anlege, in IPS alles konfiguriere, mein Alexa auf einen Testbefehl: tut ihr leid, kann sie nicht ausführen, weil die ApplikationsID nicht zulässig ist

Geht das überhaupt mit einem zweiten Skill?

Gruß oekomat

Hallo,

gibt es hierzu aktuelle Weiterentwicklungen?
Ich kann leider die Dateien nicht runterladen, da https://docs.braintower.de ein Login fordert.

Mein Ziel ist es, das hier von Home Assistant (ALEXA ACTIONABLE NOTIFICATIONS (Home Assistant + Alexa Skill) - YouTube) in IPS nachzubauen.

Momentan hänge an der Authentifizierung und dem Token fest, und ich hab Hoffnung dass es vielleicht im Patami Frameworks da ein Hinweis gibt wie man löst.

VG Thorsten

falls es mal jemand braucht, ich hatte es lange gesucht…
Dateien von PATAMI
https://bitbucket.org/patami/ipspatami/src/master/

Ich glaube hier kommt seitens Alexa Console etwas ins stocken. Seit fast Jahren funktioniert bei mir „Außenbeleuchtung ausschalten“ als custom Intent. Seit vorgestern versteht Alexa den Befehl nicht mehr. Merkwürdig.

Danke für den aktuellen Link.
Die Information wie grundsätzlich ein Custom Skill einzurichten ist finde ich dort jedoch nicht,
ist diese noch irgendwo zu finden?
Danke