NEWS
[gelöst] ioBroker Custom Skill / Javascript Problem
-
Hallo,
Laut Github Beschreibung kann man ja auf die Fragen im ioBroker Custom Skill mit dem text2command Adapter reagieren, oder auch mit Javascript (Beispiel ist auch in Github zu finden).
Ich habe hierfür nun ein wenig mit Javascript experimentiert, da ich mir auf Dauer hier mehr Flexibilität und ggf. etwas weniger Pflegeaufwand als bei text2command verspreche.
Ich verwende den iot Adapter, und habe dort "Benutze text2command Instanz" deaktiviert.
Habe dann das Beispiel Script für einen kleinen Test etwas angepasst, das schaut dann so aus:
// important, that ack=true on({id: 'iot.0.smart.lastCommand', ack: true, change: 'any'}, obj => { // you have 200ms to prepare the answer and to write it into iot.X.smart.lastResponse log("### Last Command: " +obj.state.val); if(obj.state.val.match(/büro/) && obj.state.val.match(/luftfeuchtigkeit/)) { var humVal = getState("hm-rpc.0.MEQxxxxxxx.1.HUMIDITY").val; setState("iot.0.smart.lastResponse", "Die Luftfeuchtigkeit im Büro liegt aktuell bei " +humVal+ " Prozent"); // important, that ack=false (default) //setState('iot.0.smart.lastResponse', 'Received phrase is: ' + obj.state.val); // important, that ack=false (default) } });
Dann teste ich mit dem Satz "Alexa, Frag ioBroker nach der Luftfeuchtigkeit im Büro".
Bekomme auch sofort die Antwort "Die Luftfeuchtigkeit im Büro liegt aktuell bei <wert>Prozent".
Theoretisch alles wunderbar.
Allerdings wartet Alexa nach der Antwort auf eine weitere Eingabe. D.h. sie bleibt aktiv und hört weiter zu. Wenn ich noch etwas sage, dann wird das auch als Eingabe vom ioBroker Skill verarbeitet und steht in iot.0.smart.lastCommand zur Verfügung.
Wenn ich nichts sage sprich nicht weiter reagiere, dann wartet sie ein paar Sekunden. Dann kommt der Quittierungston gefolgt von der Meldung "Ich habe im Moment Schwierigkeiten auf Deinen Custom ioBroker Skill zuzugreifen".
Der Skill ist aber korrekt verbunden bzw. verknüpft (wurde auch schon getrennt und wieder verbunden).
Gibt es da noch einen Fehler im ioBroker Custom Skill in Kombination mit Javascript?
Hier noch die Versionen der Adapter die meiner Meinung nach hier relevant sein könnten:
JS Script Engine >>> 4.0.11
IoT Assitants >>> 0.3.1
Ich verwende zwei JS Sript Engine Instanzen. Instanz 0 für Tests und Instanz 1 produktiv.
Getestet habe ich das Ganze bei mir in der javascript.0 Instanz.
Könnt ihr das auch reproduzieren oder habe ich hier irgendwo etwas übersehen?
Bin für jeden Tipp dankbar!
Gruß
Roland</wert>
-
Das kann sehr gut sein. Welche Version des iot Adapters nutzt du? Bitte die mal ein issue anlegen mit link hierher.
Gesendet vom Handy …
-
Hallo Ingo,
Wie oben geschrieben.
JS Script Engine >>> 4.0.11
IoT Adapter >>> 0.3.1
Werde, wie von Dir vorgeschlagen, beim IoT Adapter mal ein Github Issue anlegen.
Gruß
Roland
-
Ja, der Fakt das die Session offen bleibt im Default war so.
Bitte mal 0.4.0 vom Github testen. Dort bleibt die Session jetzt nur offen wenn vorher ein "öffne ioBroker" gesagt wurde, sonst geht die Session zu. Es sei denn man nutzt die neuen Möglichkeiten um es zu Kontrollieren :-))
-
So, habe mal 0.4.0 vom IoT Adapter installiert.
Spannend was sich da nun alles getan hat. Das ergibt nun ganz neue Möglichkeiten :mrgreen:
Auf jeden Fall wurde das Problem behoben!
Die neuen Möglichkeiten muss ich mir nun erst genauer anschauen.
Vielen Dank für alles!
Eine Frage noch, weil ich darüber gestolpert bin.
Es gibt einen HelperState der im Github wie folgt beschrieben ist:
smart.lastRoom: Room name (if exists) for which last command was executed.
Der wird bei mir nicht befüllt. Woher kommt dieser Wert, wenn er denn befüllt wird bzw. worauf bezieht sich das "if exist".
Gruß
Roland
-
Es gibt einen HelperState der im Github wie folgt beschrieben ist:
smart.lastRoom: Room name (if exists) for which last command was executed.
Der wird bei mir nicht befüllt. Woher kommt dieser Wert, wenn er denn befüllt wird bzw. worauf bezieht sich das "if exist". `
Also wenn Du bei den Smart-Device einstellungen direkt im Objekt noch room bzw func setzt dann wird das gefüllt. Es wird wohl aber scheinbar nicht automatisch vom Objekt übernommen wie es mir scheint.