Patami Alexa Skill Framework

aua…das ist auch nach dem 2. oder 3. Blick so…jetzt läuft es…peinlich…

einmal, wenn man seine geschweiften Klammern im griff hat :frowning:

Hallo zusammen,

mein Dartautomat nimmt Formen an, vielleicht war es gestern schon zu spät,
aber ich habe den Demo Skill erfolgreich ans laufen gebracht.

Als Test habe ich folgende Slots dem Demo Skill hinzugefügt.

„zwanzig“, „doppel zwanzig“, „nächster spieler“… funktioniert alles einwandfrei !! Sehr sehr Cool !!! :eek:

dabei ist mir aufgefallen… Alexa versteht nur klein Buchstaben und keine Zahlen ?

also statt „20“ muss ich „zwanzig“ als Slot angeben und „nächster spieler“ statt „Nächster Spieler“?

So, erste Hürde ist schon mal erledigt…

Kann mir vielleicht jemand sagen, was ich ändern muss, damit Alexa sich nicht nach einer Anfrage abschalter
und man den Skill erneut aufrufen muss?

Ich möchte natürlich nicht immer sagen
„Alexa, starte Dartautomat“ => „zwanzig“,
„Alexa, starte Dartautomat“ => „neunzehn“,
„Alexa, starte Dartautomat“ => „doppel achtzehn“,
„Alexa, starte Dartautomat“ => „nächster spieler“

Sondern „Alexa, starte Dartautomat“ => „zwanzig“ => „neunzehn“ => „doppel achtzehn“ => „nächster spieler“

und am liebsten zum beenden statt „stop“ „beende dartautomat“.

Eine weitere Frage die mich beschäftigt… gibt es eine Slot-Begrenzung (Mengenmäßig) oder geht es evtl. irgendwann auf die Geschwindigkeit?

Vielen Dank und viele Grüße

Markus

Nein Du must überhaupt kein Slottype anlegen, für so was gibt es vordefinierte Slottypes, diese sollten benutzt werden dann ist die Spracherkennung auch besser. Wenn Du also so was wie Zahlen, Städtenamen und ähnliches brauchst, nutze einen AMAZON Slot siehe auch
Slot Types

Der passende Slot Type für Zahlen ist AMAZON:Number

Du must Ask statt Tell verwenden, dann wartet Alexa für 8 Sekunden auf eine Antwort von Dir ohne das Du erneut den Invocation Name sagen musst.


return AskResponse::CreatePlainText(
                'Hallo. Was kann ich für Dich tun?'
            )->SetRepromptPlainText(
                'Wie bitte?'
            );

nach 8 Sekunden wird die Session aber dennoch geschlossen. Ein dauerhaftes zuhören ist nicht möglich. Das wäre auch ziemlich schlecht, Alexa hat sowieso schon der Ruf einer Wanze, was aber nicht stimmt, denn der Nutzer muss immer das Aktivierungswort sagen damit Alexa dann auch aktiv wird. Ansonsten hast Du als Skill eben nur Zeit die 8 Sekunden auf Antwort zu warten.

Stop nimmt der Stop Intent entgegen der geht immer und bricht den Skill ab. Ansonsten musst Du Dir halt einen Dialog bauen mit Ask

Zu beginn kannst Du auch mit einem Dialog arbeiten. Während des Spiels wird das schwierig weil dann hätte jeder Spieler nur 8 Sekunden Zeit zu werfen und das Ergebnis Alexa mitzuteilen. Daher wird Dir nichts anderes übrig bleiben als z.B.

Alexa notiere 20 mit Dartautomat

zu sagen. Damit dein Dartautomat auch richtig funktionieren kann solltest Du zu Beginn eines Spiels die Spielrrzahl abfragen. Dann kannst sich Alexa nämlich auch merken welcher Spieler an der Reihe ist und den richtigen Wert aufaddieren.

Das kommt drauf an von welchen Mengen Du redest ich habe da bisher keinerlei Unterschied feststellen können und eine Begrenzung wäre mir nicht bekannt.

Moin Moin,
jetzt muss ich hier auch mal …
Ich habe mich an die Installation des CustomSkill „gewagt“ - mit der Anleitung war das wirklich gut machbar.
Wenn ich das mal nicht von meinem „Spieltrieb“ her sehe … ich würde nur äußerst ungerne mit den amazon-Anmeldedaten eines Kunden in (s)einer developer-Konsole ‚rumhacken‘. Verkaufen kann man das also eigentlich nicht … vielleicht wird es besser, wenn ich noch etwas mehr begriffen habe.

Von daher: ich bekomme eine(die) Antwort von Alexa, die ich im help-intent vergebe - was ja schon mal grundlegend eine Kommunikation/Funktion vorraussetzt.
Nur: andere Intents bekomme ich nicht angesprochen - Alexa behauptet immer, da wäre nichts entsprechendes vorhanden.
In den Anleitungen finde ich meinen Fehler nicht - vielleicht kann mir ja hier mal jemand die Scheuklappen öffnen und einen passenden Baum in den Wald pflanzen. Irgendwo zwischen Intents, Utterances und Slots fehlt mir das „aha“ :o

Danke und LG, Uwe

Das Vorgehen ist im Endeffekt für ambitionierte Anwender wenn Du das an einen Endkunden anbieten willst musst Du selber einen Skill erstellen. Dann wird Account Linking benutzt, der Endnutzer hat dann also weder was mit der Developer Konsole zu tun noch mit der Einrichtung. Das ist im Endeffekt dann das gleiche Vorgehen wie beim SmartHomeSkill.

Da must Du mal ein Beispiel geben was Du vorhast dann kann man da auch eher einen Hinweis geben.

Ich habe ja ‚nur‘ eine elektrische Ausbildung. Das reicht gut zum parametrieren von Gebäudeleittechnik. Beim programmieren irgendwelcher Software hört es auf, auch wenn ich mit den Jahren einiges an Code lesen und verstehen kann.
Ich glaube, da müssen wir uns dann einfach mal zusammensetzen, wenn ich mal wieder im Büro in Rödermark sitze. So weit ist das ja von Hattersheim nicht entfernt :wink:

Na ja - als „Spielkind“ erst mal einfach nur ein Licht schalten. Wenn ich dabei noch erkennen kann von welchem Dot das Kommando kommt …
Wenn ich dann auch noch mal eine Variable auf Anfrage angesagt bekomme (z.B. Temperatur) kann ich den Rest wahrscheinlich auch selbst umsetzen/vervielfältigen.
Ich möchte also ‚einfach nur‘ ein paar Dinge probieren, die der SmartHomeSkill nicht kann.

Grüße, Uwe

Hallo,

ich habt Probleme das Patami Framework in die Kern Instanz einzubinden.

In Modules konnt eich den Link ohne Probleme hinzufügen.

Sobald ich dann aber in der Kern Instanz Patami Framework aus der Liste aus wahle und hinzufüge, stürzt IP Symcon ab.

Erst ein Neustart des Rechners hilfe da weiter.

Jedoch sieht es dann so aus:

Hallo Tiam,

ich habe das gleich Problem. Hatte es heute gerade noch einmal probiert unter Kern-Instanzen eine neue Instantz „Patami Framework“ hinzufügen und das gesamte IPS stürzt ab, nichts läuft mehr. Nach einem Neustart habe ich auch Unnamed Objekt.

Das Log zeigt als letzten Eintrag folgendes:

IPSymcon-Err-PHP            2017-09-12 10:23:58.724  Error: 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(57845)  #7 {main}    thro     Error in Script C:\IP-Symcon\modules\ipspatami\libs\Patami\IPS\Libraries\Libraries.php on Line 62    134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)     33 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)    121 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler)        in IPSLogger_PhpFatalErrorHandler 

Ich hoffe uns kann da jemand helfen.

Kann uns denn hier keiner weiterhelfen?

Welche Version von IP-Symcon läuft denn?

Hier ist eure Lösung:
Patami Alexa Skill Framework - Seite 11

-> Ihr habt ein zweites Modul Control unter Kern Instanzen !

Michael

Ja, Du hast Recht.
Ich hatte mich schon gewundert warum bei mir zwei Modul-Control Instanzen existieren.
Bisher habe ich mich nicht getraut eine zu löschen. :banghead: Nun habe ich eine entfernt und es funktioniert.
:):slight_smile:
Vielen Dank

Wow, vielen Dank, das war auch mein Problem!

Hi liebe Alexa Benutzer, Hi habe das letzte mal schon mal ein Problem mit Script Fehlern angesprochen das ich aufgrund von Zeitmangel nicht weiter verfolgen konnte… jetzt habe ich jedoch Urlaub und möchte bei diesem tollen Wetter das ganze wieder in den Griff bekommen.

Ich habe das Gefühl das mich meine Alexa immer schlechter versteht und das fast jeder Befehl in einem Script Fehler endet. Die meisten Scripts benutze ich seit der ersten Patami Version und sind nur leicht verändert worden.
Die richtigen Intents kommen laut Debug auch durch verursachen aber trotzfdem einen Scriptfehler.

Hier mal meine Config und ein Beispiel Script aus meiner Sammlung:

{
  "intents": [
    {
      "name": "AMAZON.CancelIntent",
      "samples": []
    },
    {
      "name": "AMAZON.HelpIntent",
      "samples": []
    },
    {
      "name": "AMAZON.StopIntent",
      "samples": []
    },
    {
      "name": "beschattung",
      "samples": [
        "Jalousie {rolladen} {bewegung}",
        "{rolladen} Jalousien {bewegung}",
        "{rolladen} Jalousien auf {bewegung}",
        "Fenster {rolladen} {bewegung}",
        "{rolladen} Fenster {bewegung}",
        "{rolladen} Fenster auf {bewegung}",
        "{rolladen} {bewegung}"
      ],
      "slots": [
        {
          "name": "rolladen",
          "type": "rolladen",
          "samples": []
        },
        {
          "name": "bewegung",
          "type": "bewegung",
          "samples": []
        }
      ]
    },
    {
      "name": "Bewasserung",
      "samples": [
        "bewässerung {garten} {action}"
      ],
      "slots": [
        {
          "name": "garten",
          "type": "garten",
          "samples": []
        },
        {
          "name": "action",
          "type": "action",
          "samples": []
        }
      ]
    },
    {
      "name": "GetInformation",
      "samples": [
        "{subject}",
        "informationen über {subject}",
        "informationen"
      ],
      "slots": [
        {
          "name": "subject",
          "type": "Information_Subjects",
          "samples": []
        }
      ]
    },
    {
      "name": "InformationSubjectResponse",
      "samples": [
        "{subject}"
      ],
      "slots": [
        {
          "name": "subject",
          "type": "Information_Subjects",
          "samples": []
        }
      ]
    },
    {
      "name": "KlimaTemp",
      "samples": [
        "wie viel Grad haben wir im {rooms}",
        "wie warm ist es im {rooms}",
        "stelle {rooms} auf {zahl} Grad",
        "{rooms} auf {zahl} Grad",
        "welche {zusatz} ist im {rooms}",
        "wie {zusatz} soll es im {rooms} sein"
      ],
      "slots": [
        {
          "name": "rooms",
          "type": "rooms",
          "samples": []
        },
        {
          "name": "action",
          "type": "action",
          "samples": []
        },
        {
          "name": "zusatz",
          "type": "zusatz",
          "samples": []
        },
        {
          "name": "zahl",
          "type": "AMAZON.NUMBER",
          "samples": []
        }
      ]
    },
    {
      "name": "Pool",
      "samples": [
        "wie {zusatz} ist der Pool",
        "Programm Pool auf {programm}",
        "Pool Programm auf {programm}"
      ],
      "slots": [
        {
          "name": "programm",
          "type": "programm",
          "samples": []
        },
        {
          "name": "zusatz",
          "type": "zusatz",
          "samples": []
        }
      ]
    },
    {
      "name": "PowerUnit",
      "samples": [
        "Steckdosen {rooms} {action} schalten",
        "Steckdosen {rooms} {action}"
      ],
      "slots": [
        {
          "name": "rooms",
          "type": "rooms",
          "samples": []
        },
        {
          "name": "action",
          "type": "action",
          "samples": []
        }
      ]
    },
    {
      "name": "SonosPlay",
      "samples": [
        "Sonos im {rooms} {action}",
        "Sonos {action}"
      ],
      "slots": [
        {
          "name": "rooms",
          "type": "rooms",
          "samples": []
        },
        {
          "name": "action",
          "type": "action",
          "samples": []
        }
      ]
    },
    {
      "name": "Sonstiges",
      "samples": [
        "{typ} {bewegung}",
        "er soll {typ} {bewegung}"
      ],
      "slots": [
        {
          "name": "typ",
          "type": "typ",
          "samples": []
        },
        {
          "name": "bewegung",
          "type": "bewegung",
          "samples": []
        }
      ]
    },
    {
      "name": "ToggleLight",
      "samples": [
        "das Licht im {rooms} {action} schalten",
        "Licht im {rooms} {action} schalten",
        "er soll das Licht im {rooms} {action} schalten",
        "{rooms} Licht {action} schalten",
        "{rooms} Licht {action}",
        "{rooms} Beleuchtung {action}"
      ],
      "slots": [
        {
          "name": "rooms",
          "type": "rooms",
          "samples": []
        },
        {
          "name": "action",
          "type": "action",
          "samples": []
        }
      ]
    }
  ],
  "types": [
    {
      "name": "action",
      "values": [
        {
          "id": null,
          "name": {
            "value": "ein",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "aus",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "an",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "einschalten",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "ausschalten",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "starten",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "stoppen",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "bewegung",
      "values": [
        {
          "id": null,
          "name": {
            "value": "öffnen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "schließen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "zu",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "auf",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "absperren",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "verschließen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "abschließen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "aufsperren",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "aufschließen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "entriegeln",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "style",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "halt",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "stop",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "daniel",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "garten",
      "values": [
        {
          "id": null,
          "name": {
            "value": "vor Pool",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "Rasen groß",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "Einfahrt",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "Hecke",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "Information_Subjects",
      "values": [
        {
          "id": null,
          "name": {
            "value": "licht",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "licht aus",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "instanzen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "skripte",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "variablen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "wohnzimmer",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "programm",
      "values": [
        {
          "id": null,
          "name": {
            "value": "Bade Betrieb",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "dauer an",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "aus",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "dauer aus",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "maximal Betrieb",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "normal Betrieb",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "minimal Betrieb",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "rolladen",
      "values": [
        {
          "id": null,
          "name": {
            "value": "alle",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "einfahrt",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "schlafzimmer",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "erker",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "wohnzimmer",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "küche",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "übereck links",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "übereck fenster links",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "übereck rechts",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "übereck fenster rechts",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "programm",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "rooms",
      "values": [
        {
          "id": null,
          "name": {
            "value": "wohnzimmer",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "esszimmer",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "wohnen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "flur",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "büro",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "arbeitszimmer",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "schlafzimmer",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "schlafen",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "küche",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "garten",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "einfahrt",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "garagentor",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "erker",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "haustüre",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "carport",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "terasse",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "fernseher",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "ambient",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "garage",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "aquariumraum",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "vorratsraum",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "zufahrt",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "umkleide",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "ankleide",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "pool",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "typ",
      "values": [
        {
          "id": null,
          "name": {
            "value": "garagentor",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "garage",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "pool",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "haustüre",
            "synonyms": []
          }
        }
      ]
    },
    {
      "name": "zusatz",
      "values": [
        {
          "id": null,
          "name": {
            "value": "solltemperatur",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "warm",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "kalt",
            "synonyms": []
          }
        }
      ]
    }
  ]
}
<?
use Patami\IPS\System\IPS;
 
function Execute(Request $request)

{
	$rolladen = strtolower($request->slots->rolladen);
	$bewegung = strtolower($request->slots->bewegung);
   	if($rolladen == "alle")
   {
   		if($bewegung == "zu")
        {
            HM_WriteValueBoolean(40658 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Zu]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Alle Jalousien werden Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueBoolean(40658 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Zu]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Alle Jalousien werden Geschlossen');
        }
        elseif($bewegung == "auf")
        {
            HM_WriteValueBoolean(43922 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Auf]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Alle Jalousien werden geöffnet');
        }
		elseif($bewegung == "öffnen")
        {
            HM_WriteValueBoolean(43922 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Auf]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Alle Jalousien werden geöffnet');
        }
		elseif($bewegung == "style")
        {
            HM_WriteValueBoolean(57816 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousien Einstellung Style');
        }
		elseif($bewegung == "stop")
        {
            HM_WriteValueBoolean(51545 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Stop]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousien Stop');
        }
		elseif($bewegung == "halt")
        {
            HM_WriteValueBoolean(51545 /*[Program\Hardware\Jalousie\CCU Jalousie Alle Stop]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousien Stop');
        }
   }
      	if($rolladen == "einfahrt")
   {
           if($bewegung == "style")
        {
            HM_WriteValueBoolean(23680 /*[Program\Hardware\Jalousie\CCU Jalousie Einfahrt Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Einfahrt Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(16566 /*[Program\Steuerung\Jalousien\Jalousie Einfahrt]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Einfahrt Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(16566 /*[Program\Steuerung\Jalousien\Jalousie Einfahrt]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Einfahrt Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(16566 /*[Program\Steuerung\Jalousien\Jalousie Einfahrt]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Einfahrt Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(16566 /*[Program\Steuerung\Jalousien\Jalousie Einfahrt]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Einfahrt Offnen');
        }
   }
   if($rolladen == "erker")
   {
   		if($bewegung == "style")
        {
            HM_WriteValueBoolean(45382 /*[Program\Hardware\Jalousie\CCU Jalousie Erker Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Erker Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(32148 /*[Program\Steuerung\Jalousien\Jalousie Erker]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Erker Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(32148 /*[Program\Steuerung\Jalousien\Jalousie Erker]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Erker Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(32148 /*[Program\Steuerung\Jalousien\Jalousie Erker]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Erker Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(32148 /*[Program\Steuerung\Jalousien\Jalousie Erker]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Erker Offnen');
        }
   }
   if($rolladen == "küche")
   {
   		if($bewegung == "style")
        {
            HM_WriteValueBoolean(18027 /*[Program\Hardware\Jalousie\CCU Jalousie Küche Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Küche Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(15349 /*[Program\Steuerung\Jalousien\Jalousie Küche]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Küche Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(15349 /*[Program\Steuerung\Jalousien\Jalousie Küche]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Küche Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(15349 /*[Program\Steuerung\Jalousien\Jalousie Küche]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Küche Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(15349 /*[Program\Steuerung\Jalousien\Jalousie Küche]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Küche Offnen');
        }
   }
   if($rolladen == "schlafzimmer")
   {
           if($bewegung == "style")
        {
            HM_WriteValueBoolean(34663 /*[Program\Hardware\Jalousie\CCU Jalousie Schlafzimmer Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Schlafzimmer Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(29733 /*[Program\Steuerung\Jalousien\Jalousie Schlafzimmer]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Schlafzimmer Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(29733 /*[Program\Steuerung\Jalousien\Jalousie Schlafzimmer]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Schlafzimmer Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(29733 /*[Program\Steuerung\Jalousien\Jalousie Schlafzimmer]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Schlafzimmer Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(29733 /*[Program\Steuerung\Jalousien\Jalousie Schlafzimmer]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Schlafzimmer Offnen');
        }
   }
   if($rolladen == "programm")
   {
           if($bewegung == "daniel")
        {
            HM_WriteValueBoolean(58702 /*[Program\Hardware\Jalousie\CCU Jalousie Style ohne OG]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Alle Jalousie auf Einstellung Daniel schläft');
        }
	}
   if($rolladen == "wohnzimmer")
   {
   		if($bewegung == "style")
        {
            HM_WriteValueBoolean(54351 /*[Program\Hardware\Jalousie\CCU Jalousie Wohnzimmer Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Wohnzimmer Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(30730 /*[Program\Steuerung\Jalousien\Jalousie Wohnzimmer]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Wohnzimmer Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(30730 /*[Program\Steuerung\Jalousien\Jalousie Wohnzimmer]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Wohnzimmer Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(30730 /*[Program\Steuerung\Jalousien\Jalousie Wohnzimmer]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Wohnzimmer Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(30730 /*[Program\Steuerung\Jalousien\Jalousie Wohnzimmer]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Wohnzimmer Offnen');
        }
   }
   if(($rolladen == "übereck links") or ($rolladen == "übereck fenster links"))
   {
   		if($bewegung == "style")
        {
            HM_WriteValueBoolean(45411 /*[Program\Hardware\Jalousie\CCU Jalousie Übereck Links Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck links Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(32911 /*[Program\Steuerung\Jalousien\Jalousie Übereck Links]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck links Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(32911 /*[Program\Steuerung\Jalousien\Jalousie Übereck Links]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck links Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(32911 /*[Program\Steuerung\Jalousien\Jalousie Übereck Links]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck links Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(32911 /*[Program\Steuerung\Jalousien\Jalousie Übereck Links]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck links Offnen');
        }
   }
   if(($rolladen == "übereck rechts") or ($rolladen == "übereck fenster rechts"))
   {
   		if($bewegung == "style")
        {
            HM_WriteValueBoolean(22614 /*[Program\Hardware\Jalousie\CCU Jalousie Übereck Rechts Style]*/, "PRESS_SHORT" , true);
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck rechts Einstellung Style');
        }
        elseif($bewegung == "zu")
        {
            HM_WriteValueFloat(59925 /*[Program\Steuerung\Jalousien\Jalousie Übereck Rechts]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck rechts Geschlossen');
        }
        elseif($bewegung == "schließen")
        {
            HM_WriteValueFloat(59925 /*[Program\Steuerung\Jalousien\Jalousie Übereck Rechts]*/ , "LEVEL" , 0.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck rechts Geschlossen');
        }
		elseif($bewegung == "auf")
        {
            HM_WriteValueFloat(59925 /*[Program\Steuerung\Jalousien\Jalousie Übereck Rechts]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck rechts Offnen');
        }
        elseif($bewegung == "öffnen")
        {
            HM_WriteValueFloat(59925 /*[Program\Steuerung\Jalousien\Jalousie Übereck Rechts]*/ , "LEVEL" , 100.0);			
			$status = "ein";
			return TellResponse::CreatePlainText('Jalousie Übereck rechts Offnen');
        }
   }
   return $status;
} 

Hier der Debug eines Fehlers

Und hier wenn er mal durchgeht

Vielleicht sieht der eine oder andere etwas was mir noch nicht aufgefallen wäre.

Hallo,
habe Heute mal probiert den Skill zu installieren.Auf Amazon habe ich alles, dank der guten Anleitung auch hinbekommen.
Der Skill wird auch in der Alexa App angezeigt. Mit dem Einrichten in IPS klappt aber was nicht.
In der Intsanz Alexa Custom Skill wird die Applikation ID nicht erkannt. Habe mir die ID von der Amazon Seite kopiert wie in der Anleitung steht.

Habe ich irgendwo was übersehen? Wie kann ich den Fehler eingrenzen.

Der Fehler ist im Interaction Modell bzw. bei Alexa zu suchen. Wenn wie in Deinem Beispiel ein Fehler auftritt wurde von Amazon kein rolladen Slot gesendet. Warum das so ist musst Du im Interaction Modell überprüfen. Auf seiten Deines Skripts liegt ein Fehler vor das Du nur mit elseif arbeitest aber keine else Bedingung hast. Dadurch kommt es zu einem Fehler, da kein rolladen Slot von Amazon gesendet wird greift auch keine einzige Bedingung von Dir und dadurch wird die Variable $status auch nicht definiert. Du brauchst also noch eine else Bedingung und diese sollte Dir dann eine Fehlermeldung zurück geben an Alexa. Du kannst aber auch auf Seiten des Interaction Modells prüfen lassen ob ein Slot Type vorhanden ist und dann gegeben falls eine Rückfrage stellen, ist vielleicht in dem Fall der bessere Weg.

Der Fehler liegt wohl darin das irgendwas beim Kopieren der Daten schief gelaufen ist. Kopiere doch noch mal erneut die Werte eventuell hast Du ja einen Buchstaben nicht mitkopiert oder ähnliches.

An der ID hat es nicht gelegen, habe heute morgen noch mal alles durchgeschaut und festgestellt, das die Instanz Alexa Custom Skill keinen WebHook angelegt hat. Habe die Instanz gelöscht und neu angelegt und es hat dann ohne Fehler geklappt. Wenn ich jetzt Alexa frage, sagt sie mir das der Skill nicht ausgeführt werden kann da das Scrippt fehlerhaft ist.
Habe mal ein Debug gemacht.

Wenn ich dieses Script einsetze

<?
function Execute(Request $request)
{
	// Write your own code here
	return TellResponse::CreatePlainText('Willkommen');
}

funktioniert es, sie antwortet brav mit Willkommen.

Dazu müste man ja mal das fehlerhafte Skript sehen um irgendwas sagen zu können der Rest ist Glaskugel lesen. Ich vermute ja eher das das das übliche Phänomen bei Dir ist ist dem mal mal endlich auf die Schliche kommen müste was die eigentliche Ursache ist sonst hat das wenig Sinn. Irgendwie scheinen ja bei bei Dir Skripte die sonst einwandfrei laufen Fehlermeldungen zu produzieren aufgrund von „Leerzeichen“. Was ist denn auf dem Rechner auf dem IPS läuft als Sprache und Zeichensatz eingestellt?

Moin Moin,
bei „irgendwas auf die Schliche kommen“ bin ich gerne dabei :cool:
Der ‚Rechner‘ (ein RPI-V1 mit raspbian-lite, spricht deutsch) ist gestern gerade mit einem dot nach Rödermark umgezogen.
Ich brauche nur noch ein paar Tage Zeit um die letzte Baustelle und was sonst noch so liegen geblieben ist erst mal aufzuarbeiten. An dem oben beschriebenen Zustand habe ich (wegen der Baustelle) bislang nichts mehr verändert.
Wenn dir ein Putty+Console-Zugang reicht, schicke ich dir auch gerne einen Link. Nur möchte ich eigentlich gerne noch was dazu lernen und würde bei der Fehlersuche auch gerne mal über die Schulter schauen.

Grüße, Uwe