Autor Thema: alexa-fhem test version mit slots im fhemIntents  (Gelesen 7843 mal)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19266
alexa-fhem test version mit slots im fhemIntents
« am: 20 Februar 2017, 11:48:06 »
anbei eine erste version von alexa-fhem mit der custom slots in den fhemIntents möglich sind. zum testen ist die 39_alexa.pm version aus dem update morgen früh nötig.

wichtig: das ist noch nicht die angekündigte konfigurierbarkeit der abfragen. die soll sehr viel automatisierter erfolgen. ohne das man für jede abfrage einen eigenen intent bauen muss.

wie funktioniert es:
- in der sample utterance sind jeweils platzhalter der art {<name>[:<values>]} erlaubt
- <name> ist der name des slots
- im perl code kann auf $<name> zugegriffen werden
- <values> ist eine durch ; getrennte liste der möglichen werte oder ein amazon default type
- die standart FHEM_.* slot types können ebenfalls verwendet werden -> name ohne FHEM_ angeben, keine values angeben.
- achtung: in name dürfen nur die erlauben zwischen vorkommen. d.h. keine zahlen.


mehr oder weniger sinnvolle beispiele:
{rechne($OPERANDA,$OPERATOR,$OPERANDB)}=wieviel ist {OPERANDA:AMAZON.NUMBER} {OPERATOR:plus;minus;mal;geteilt+durch} {OPERANDB:AMAZON.NUMBER}
-> alexa, frage fhem: wie fiel ist drei mal vier


{liste($Room)}=welche geräte gibt es {preposition} {Room}
-> alexa, frage fhem: welche geräte gibt es im schlafzimmer

sub
rechne($$$)
{
  my ($OPERANDA,$OPERATOR,$OPERANDB) = @_;
 
  if( $OPERATOR eq 'plus' ) {
    return "$OPERANDA $OPERATOR $OPERANDB ist ". ($OPERANDA + $OPERANDB);
  } elsif( $OPERATOR eq 'minus' ) {
    return "$OPERANDA $OPERATOR $OPERANDB ist ". ($OPERANDA - $OPERANDB);
  } elsif( $OPERATOR eq 'mal' ) {
    return "$OPERANDA $OPERATOR $OPERANDB ist ". ($OPERANDA * $OPERANDB);
  } elsif( $OPERATOR eq 'geteilt durch' ) {
    return "ich kann nicht durch $OPERANDB teilen" if( $OPERANDB == 0 );
    return "$OPERANDA $OPERATOR $OPERANDB ist ". ($OPERANDA / $OPERANDB);
  }
 
  return "ich kann nicht $OPERANDA $OPERATOR $OPERANDB rechnen";
}
 
sub
liste($)
{
  my($room) = @_;
 
  my @list = devspec2array("alexaRoom=$room");
  return join(',', @list);
}

TODO:
- parameter übergabe alternativ als hash mit den einzelnen slot werten
- besser prüfung auf erlaubte werte und zeichen
- verlagern der code erzeugung auf fhem seite

gruss
  andre

edit 2017-04-10: die hier beschriebene erweiterung ist in der 'offiziellen' version hier: https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117 enthalten.
« Letzte Änderung: 10 April 2017, 22:40:40 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH
Gefällt mir Gefällt mir x 4 Liste anzeigen

Offline Thyraz

  • Sr. Member
  • ****
  • Beiträge: 965
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #1 am: 20 Februar 2017, 14:12:12 »
Wird später sofort getestet. :D
Ist ja genau das worum ich neulich gebettelt habe.

Vielen Dank dafür. :)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Snips, ...

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19266
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #2 am: 20 Februar 2017, 15:33:41 »
ich hab doch gesagt es kommt :)
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Thyraz

  • Sr. Member
  • ****
  • Beiträge: 965
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #3 am: 20 Februar 2017, 20:36:38 »
Aber so schnell. ;)

Funktioniert einwandfrei.
Jetzt kanns richtig losgehen...

"Echo, frage Smart Home: Wie warm ist es im Büro?" -> "Die aktuelle Temperatur beträgt 21.5 Grad bei 51 Prozent Luftfeuchtigkeit"

{alexaRoomTemperature($preposition,$Room)}=wie warm ist es {preposition} {Room}

sub alexaRoomTemperature($$) {
my($preposition,$room) = @_;
my $device = "";

$room = lc($room);

if ($room eq "wohnzimmer") {
$device = "Netatmo_Indoor01";
} elsif ($room eq "schlafzimmer") {
$device = "Netatmo_Indoor02";
} elsif ($room eq "büro") {
$device = "Netatmo_Indoor03";
} elsif ($room eq "kinderzimmer") {
$device = "Netatmo_Indoor04";
} else {
return "Kein passendes Thermometer gefunden";
}

my $temperature = ReadingsVal($device, "temperatureVal", 0);
$temperature =~ s/\./\,/g;
my $humidity = ReadingsVal($device, "humidity", 0);

return "Die aktuelle Temperatur beträgt $temperature Grad bei $humidity Prozent Luftfeuchtigkeit";
}
« Letzte Änderung: 20 Februar 2017, 20:56:20 von Thyraz »
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Snips, ...

Offline jvollmer

  • New Member
  • *
  • Beiträge: 23
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #4 am: 20 Februar 2017, 21:12:19 »
Hallo, wenn ich es richtig sehe, dann werden die zugehörigen "slots" in der Ausgabe des interactionModel nicht mit angezeigt.
Die musste ich selber anlegen!

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19266
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #5 am: 20 Februar 2017, 21:14:04 »
die slots werden mit ausgegeben.

was hast du genau konfiguriert?
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Thyraz

  • Sr. Member
  • ****
  • Beiträge: 965
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #6 am: 20 Februar 2017, 21:38:08 »
Hallo, wenn ich es richtig sehe, dann werden die zugehörigen "slots" in der Ausgabe des interactionModel nicht mit angezeigt.
Die musste ich selber anlegen!

Folgender Satz aus dem ersten Post könnte helfen ;)

zum testen ist die 39_alexa.pm version aus dem update morgen früh nötig.

(Alternativ eben heute schon aus SVN besorgen.)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Snips, ...

Offline jvollmer

  • New Member
  • *
  • Beiträge: 23
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #7 am: 20 Februar 2017, 23:10:47 »
Hallo:
Hier die fhem Konfiguration
Zitat
....
{AlarmA_modus($AlarmModus)}=Alarmanlage {AlarmModus} scharf[
/quote]
Die InteractionModel Anzeige zeigt dann folgendes an:
Zitat
      {
         "intent" : "FHEMperlCodeIntentE"
      },
Nach intent müsste aber eigentlch  noch "slots :  ..." folgen.
Mit Selbsteintragung  funktioniert es aber dann super. Danke.

Offline Thyraz

  • Sr. Member
  • ****
  • Beiträge: 965
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #8 am: 21 Februar 2017, 07:39:06 »
Zu meinem letzten Post der evtl. nicht selbsterklärend genug war: Bei mir kam es genau zu dem Fehler, weil ich die neue Version zwar per SVN gezgen hatte, aber vergessen auf meinen Pi übertragen.

Daher evtl. nochmal schauen ob du wirklich die neue Version von 39_alexa.pm drauf hast.
Ab jetzt/heute sollte die ja auch über das normale Update kommen.

Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Snips, ...

Offline cyvr1

  • Jr. Member
  • **
  • Beiträge: 77
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #9 am: 21 Februar 2017, 11:38:52 »
Hallo,

nur mal 'ne ganz blöde Frage zwischendurch. Bitte nicht hauen.  ;)

Die subs packe ich in die 99_myUtils.pm. Korrekt?

Wo kommt dann dieser Teil hin :
{liste($Room)}=welche geräte gibt es {preposition} {Room}


Unter Sample Utterances im Custon Skill?

----------
Stephan Krätzschmar

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19266
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #10 am: 21 Februar 2017, 11:39:58 »
unter fhemIntents im alexa device
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline cyvr1

  • Jr. Member
  • **
  • Beiträge: 77
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #11 am: 21 Februar 2017, 12:09:29 »
Danke, dann fange ich mal mit dem Ausprobieren an.

----------
Stephan Krätzschmar

Offline Roman

  • Jr. Member
  • **
  • Beiträge: 93
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #12 am: 24 Februar 2017, 20:14:47 »
Hi Justme1968,

bin erst heute dazu gekommen das auch mal zu kurz testen.

Ich hab mir mal zwei Test fhemintents mit Parametern erstellt. Tut bei mir genau das was es soll.
<Daumen hoch> :)

Gruß
Roman

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 5556
  • NIVEAu ist keine Creme...
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #13 am: 24 Februar 2017, 22:05:10 »
Hallo justme1968,

hab's eben getestet:

Klappt SUPER!!!!

Vielen Dank für die Arbeit und das super Modul und alexa-fhem!!!

Gruß, Joachim
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline JoeF

  • New Member
  • *
  • Beiträge: 3
Antw:alexa-fhem test version mit slots im fhemIntents
« Antwort #14 am: 25 Februar 2017, 10:32:08 »
Hallo zusammen,

zu aller erst, vielen Dank für die tollen Module und Einträge im Wiki. Hut ab!

Mit deren Hilfe, habe icht jetzt mit meinem Custom Skill zum Laufen bekommen (Alexa-Fhem Version 0.3.0). Und der fhemIntent

{_99_AlexaUtils_GuteNacht()}=gute nacht
Funktioniert auch.

Nun wollte das ganze erweitern, analog zu einigen Beispielen hier im Thread.
Hierfür habe ich mir eine Funktion geschrieben, welche das Licht in einem Raum auf eine bestimmte Szene setzen soll, und den entsprechenden fhemIntent beim Alexe Device hinzugefügt:

Etwas gekürzt:
{_99_AlexaUtils_SetLightSceneInRoom($preposition,$Room,$State)}=Schalte das Licht {preposition} {Room:Ankleidezimmer;Bad;Büro;[…]} auf {State:Arbeiten;Relax;Lesen;Essen;[…]}
Ich habe hier sämtliche Werte die Room, bzw. State annehmen können, eingetragen. Ist das überhaupt an dieser Stelle nötig? Oder reicht es aus, die Werte dann ein den Costum Slot Types zu definieren?

Nachdem ich dann das Intent Schema, die Custom Slot Types, und die Sample Utterances gefüllt habe habe ich das ganze getestet

Der Vollständigkeit halber, hier ein Auszug aus dem Sample Utterances:
FHEMperlCodeIntentM Schalte das Licht {preposition} {FHEMperlCodeIntentM_Room} auf {FHEMperlCodeIntentM_State}
BTW: kann man die Benamung irgendwie beeinflussen? FHEMperlCodeIntentM ist irgendwie nicht so schön.

Wenn ich nun im Service Simulator folgendes eingebe: „Schalte das Licht im Büro auf Arbeiten“, oder zu Alexa sage "Alexa, sage fhem: Schalte das Licht im Büro auf arbeiten"
Erhalte ich folgenden, vielversprechenden, Service Request:



[session entfernt]
  "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.ecfd69b3-e318-43ff-a605-17e9e49d66cc",
    "locale": "de-DE",
    "timestamp": "2017-02-25T08:50:21Z",
    "intent": {
      "name": "FHEMperlCodeIntentM",
      "slots": {
        "preposition": {
          "name": "preposition",
          "value": "im"
        },
        "FHEMperlCodeIntentM_Room": {
          "name": "FHEMperlCodeIntentM_Room",
          "value": "Büro"
        },
        "FHEMperlCodeIntentM_State": {
          "name": "FHEMperlCodeIntentM_State",
          "value": "Arbeiten"
        }
      }
    }
  }


Was soweit sehr gut aussieht. Allerdings ist die Service Response eher ernüchternd. Da Alexa aber fleißig die Fehlermeldung ausgibt, funktioniert die Kommunikation wohl generell.

{
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "type": "PlainText",
      "text": "Global symbol \"$preposition\" requires explicit package name at (eval 53184) line 1.Global symbol \"$Room\" requires explicit package name at (eval 53184) line 1.Global symbol \"$State\" requires explicit package name at (eval 53184) line 1."
    },
    "shouldEndSession": true
  },
  "sessionAttributes": {}
}

Die Fehlermeldung bedeutet ja, dass eine Variable namens $preposition (sowie alle anderen) nicht deklariert wurden. Was mache ich dann falsch, wenn bei einigen
{liste($Room)}=welche geräte gibt es {preposition} {Room}
funktioniert? Müssen die Variablen vorher noch irgendwo deklariert werden?

Habt ihr da eine Idee, ich bin mit meinem Latein hier leider am Ende.

Vielen Dank schonmal

Gruß, Johannes


 

decade-submarginal