2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-07 19:04:20 +00:00

39_alexa.pm: allow slots in fhemIntents

git-svn-id: https://svn.fhem.de/fhem/trunk@13467 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2017-02-20 10:25:04 +00:00
parent ac59825b12
commit 239f9b3337

View File

@ -397,6 +397,8 @@ Log 1, Dumper $characteristicsOfIntent;
next if( !$entry ); next if( !$entry );
next if( $entry =~ /^#/ ); next if( $entry =~ /^#/ );
my $slots = [];
my ($intent, $remainder) = split( /:|=/, $entry, 2 ); my ($intent, $remainder) = split( /:|=/, $entry, 2 );
my @parts = split( /,/, $remainder ); my @parts = split( /,/, $remainder );
my $utterance = $parts[$#parts]; my $utterance = $parts[$#parts];
@ -411,20 +413,53 @@ Log 1, Dumper $characteristicsOfIntent;
} }
} elsif( $intent =~ m/^{.*}$/ ) { } elsif( $intent =~ m/^{.*}$/ ) {
$intent_name = 'FHEMperlCodeIntent'; $intent_name = 'FHEMperlCodeIntent';
my $nr = '';
my $i = 1; my $i = 1;
while( defined($intents{$intent_name}) ) { while( defined($intents{$intent_name}) ) {
if( $i < 26 ) { if( $i < 26 ) {
$intent_name = "FHEMperlCodeIntent".chr(65+$i); $nr = chr(65+$i);
} else { } else {
$intent_name = "FHEMperlCodeIntent".chr(64+int($i/26)).chr(65+$i%26); $nr = chr(64+int($i/26)).chr(65+$i%26);
} }
++$i; ++$i;
$intent_name = "FHEMperlCodeIntent$nr";
} }
Log 1, $intent_name;
my $u = $utterance;
while( $u =~ /\{(.*?)\}/g ) {
my $slot = $1;
my ($name, $values) = split( /:|=/, $slot, 2 );
my $slot_name = "${intent_name}_${name}";
if( $values ) {
if( $values && $values =~ /^AMAZON/ ) {
push @{$slots}, { name => $slot_name, type => $values };
} else {
push @{$slots}, { name => $slot_name, type => "${intent_name}_${name}_Value" };
$values =~ s/\+/ /g;
my @values = split(';', $values );
$types->{"${intent_name}_${name}_Value"} = \@values if( $values[0] );
}
$slot =~ s/\+/\\\+/;
$utterance =~ s/\{$slot\}/\{$slot_name\}/;
} else {
push @{$slots}, { name => $name, type => "FHEM_$name" };
}
}
} }
$intent_name =~ s/ //g; $intent_name =~ s/ //g;
$intents{$intent_name} = $intent; $intents{$intent_name} = $intent;
push @{$schema->{intents}}, {intent => $intent_name, }; if( @{$slots} ) {
push @{$schema->{intents}}, {intent => $intent_name, slots => $slots };
} else {
push @{$schema->{intents}}, {intent => $intent_name };
}
$samples .= "\n$intent_name $utterance"; $samples .= "\n$intent_name $utterance";
} }