diff --git a/fhem/FHEM/39_Talk2Fhem.pm b/fhem/FHEM/39_Talk2Fhem.pm
index c90d26b72..6e4c7655f 100644
--- a/fhem/FHEM/39_Talk2Fhem.pm
+++ b/fhem/FHEM/39_Talk2Fhem.pm
@@ -98,6 +98,10 @@
# replace ; to ;; in timecommands
# Add 1 day if timecode is in past in hour phrases
# Added async warning if keywordlist is unkown
+# 04.03.2018 0.4.6
+# Breacket decoding bug fixed
+#
+#
################################################################
# TODO:
#
@@ -109,6 +113,9 @@
# zusätzlich unmodifizierte zeit greifbar machen
# timephrase kombies morgen früh um 9 uhr ist unzuverlässig. evtl order einführen, dann kann auch die splittung weg
# viertel zeitphrasen
+# - regexp
+#vordefinierte regex zu verfügung stellen
+# (i[nm]|vor|auf|unter|hinter)? ?(de[rmn]|die|das)? ?
package main;
@@ -123,7 +130,7 @@ use Encode qw(decode encode);
my %Talk2Fhem_globals;
-$Talk2Fhem_globals{version}="0.4.5";
+$Talk2Fhem_globals{version}="0.4.6";
$Talk2Fhem_globals{EN}{erase} = ['\bplease\b', '\balso\b', '^msgtext:'];
$Talk2Fhem_globals{EN}{numbers} = {
@@ -552,13 +559,13 @@ sub Talk2Fhem_Set($@)
{
my ( $hash, $name, @args ) = @_;
(return "\"set $name\" needs at least one argument") unless(scalar(@args));
- (return "Unknown argument ?, choose one of ! cleartriggers:noArg cleartimers:noArg") if($args[0] eq "?");
+ (return "Unknown argument ?, choose one of ! cleartriggers:noArg cleartimers:noArg") if($args[0] eq "?");
if ($hash->{STATE} ne "Initialized") {
#Fülle nur cmds array
- } elsif ($args[0] eq "cleartimers") {
+ } elsif ($args[0] eq "cleartimers") {
AnalyzeCommand($hash->{CL}, "delete at_".$name."_.*");
- } elsif ($args[0] eq "cleartriggers") {
+ } elsif ($args[0] eq "cleartriggers") {
$$hash{helper}{notifies} = [];
Talk2Fhem_UpdND($hash);
@@ -767,11 +774,11 @@ sub Talk2Fhem_Get($$@)
sub Talk2Fhem_Attr(@)
{
my ( $cmd, $name, $attrName, $attrValue ) = @_;
-
- # $cmd - Vorgangsart - kann die Werte "del" (löschen) oder "set" (setzen) annehmen
+
+ # $cmd - Vorgangsart - kann die Werte "del" (löschen) oder "set" (setzen) annehmen
# $name - Gerätename
# $attrName/$attrValue sind Attribut-Name und Attribut-Wert
- return unless $init_done;
+ return unless $init_done;
#Log 1, Dumper @_;
if ($attrName eq "T2F_keywordlist" or $attrName eq "T2F_modwordlist") {
$defs{$name}{helper}{phrase} = undef;
@@ -893,9 +900,12 @@ my $list = (shift || AttrVal($hash->{NAME}, $type, ""));
$list = Talk2Fhem_parseParams($list);
#Log 1, Dumper $list;
return ("Error while parsing Keywordlist.\n$list" ) unless(ref($list) eq "HASH");
+ delete $hash->{helper}{T2F_andwordlist};
+ delete $hash->{helper}{$type};
foreach (keys %$list) {
# $$list{$_} = Talk2Fhem_parseArray($$list{$_});
- $hash->{helper}{$type}{$_} = Talk2Fhem_parseArray($$list{$_});
+ $hash->{helper}{T2F_andwordlist}{$_} = Talk2Fhem_parseArray($$list{$_}) if /^\&/;
+ $hash->{helper}{$type}{s/^\&//r} = Talk2Fhem_parseArray($$list{$_});
}
# my $modlist = Talk2Fhem_parseParams(AttrVal($name, "T2F_modwordlist", ""));;
@@ -978,13 +988,20 @@ my @cmds = split(/ und (?!$Talk2Fhem_globals{DE}{numberre})/, $txt);
# CHECK if $cmd[0] hit Talk2Fhem_test. Unless dont split. And make a deeper analysis.
#if ($#cmd)
# before test remove time and if phrases simple
-# unless (Talk2Fhem_test($me, $cmds[0])) {
+# unless (Talk2Fhem_test($me, $cmds[0]))
# Nun schauen wir mal was vor und nach dem und ist.
# könnte phrasentreffer auf kompletten satz ausschluss geben
-#
-# }
+
+
+# Tiefe UND analyse
+#for (@cmd) {
+
#}
+#print Dumper $$me{helper}{T2F_andwordlist};
+
+#return;
+
foreach (@cmds) {
@@ -1215,7 +1232,7 @@ my $punmatch = $cmd;
my @dir = ($$spec{origin});
T2FL($myname, 5, "$myname Evaluate search:\n$cmd =~ /$$phr{key}/i") if ref $res;
for my $fphr (@fphrs) {
-# if (my @d = ($cmd =~ qr/$fphr/i)){
+# if (my @d = ($cmd =~ qr/$fphr/i))
if ($fphr =~ s/^\?//){
my @d = (eval { $cmd =~ /$fphr/i});
my $m = $&;
@@ -1517,9 +1534,12 @@ my %react;
# my @cs = map { my @t = split('\|', $_ =~ s/^\(|\)$//gr); \@t } $$phr{key} =~ /(? 10;
}
-
+#T2FL($myname, 5, "CS: ".Dumper @cs);
+
# @keywords = @{$cs[($clipno-1)]};
# Log 1, Dumper @cs;
# @cs = grep { /^\(/ } @cs;
# Log 1, Dumper @cs;
# Log 1, "-----> ".$cs[($clipno-1)];
(my $clip = $cs[($clipno)]) =~ s/^\(|\)$//g;
+#T2FL($myname, 5, "clip: ".Dumper $clip);
# push(@keywords, split('\|', $clip) extract_bracketed($clip, '()'));
@keywords = map { /^\(/ ? $_ : split('\|', $_=~s/^\||\|$//gr) } extract_multiple($clip, [sub { extract_bracketed($_[0], '()') }]);
+#T2FL($myname, 5, "keywords: ".Dumper @keywords);
# @keywords = split('\|',);
#Log 1, Dumper @keywords;
@@ -1551,7 +1574,7 @@ my %react;
} else {
@keywords = @{$keylist{$hitnokeylist[$clipno]}};
}
- T2FL($myname, 4, "Searching position of $d in @keywords");
+# T2FL($myname, 4, "Searching position of $d in @keywords");
@keywords = map { Talk2Fhem_escapeumlauts($_, $disu) } @keywords;
T2FL($myname, 4, "Searching position of $d in @keywords");
my $i=0;
@@ -1686,36 +1709,36 @@ return($_[2]);
Talk2Fhem
- The module Talk2Fhem is a connection between natural language and FHEM commands.
+ The module Talk2Fhem is a connection between natural language and FHEM commands.
The configuration is carried out conveniently via the FHEM web frontend.
For a more detailed description and further examples see Talk2Fhem Wiki.
-
- Define
-
- define <name> Talk2Fhem
-
- Example: define talk Talk2Fhem
-
- The actual configuration should first be done on the FHEM side.
-
+
+ Define
+
+ define <name> Talk2Fhem
+
+ Example: define talk Talk2Fhem
+
+ The actual configuration should first be done on the FHEM side.
+
The individual language phrases are configured line by line. A configuration
always starts by the regular expression, followed by at least one space or tab
from an equal sign.
The command part begins after the equals sign with a space, tab, or newline.
- <regexp> = <command>
-
- Short refernce:
-
- <RegExpPart> [&& [?!]<RegExpPart_n>] = [ <FHEM command> | { <Perl code> } | (<option> => '<wert>' , ... ) ]
-
- Example: helo world = {Log 1, Helo World}
-
+ <regexp> = <command>
+
+ Short refernce:
+
+ <RegExpPart> [&& [?!]<RegExpPart_n>] = [ <FHEM command> | { <Perl code> } | (<option> => '<wert>' , ... ) ]
+
+ Example: helo world = {Log 1, Helo World}
+
Everything after a hashtag '#' is ignored until the end of the line.
-
+
<regexp>
Regular expression describing the text at which the command should be executed
-
+
<command>
The executive part. The following formats are allowed:
@@ -1774,47 +1797,47 @@ return($_[2]);
- $0 Contains the text of the detected T2F_origin regexp.
-
-
-
- Set
-
- set <name> [!]<text>
-
- The text is sent to the module via the set command.
+
+
+
+ Set
+
+ set <name> [!]<text>
+
+ The text is sent to the module via the set command.
See commandref#set for more help.
- cleartimers
Removes the pending time-related commands
- cleartriggers
Removes the pending event-related commands
-
-
+
+
-
- Get
- get <name> <option>
-
+
+ Get
+ get <name> <option>
+
Information can be read from the module via get.
See commandref#get for more information on "get".
- <option>
+ <option>
- - @keywordlist @modwordlist
- Compare the two lists word by word.
- - keylistno
- A list of the configured "keyword" lists. For easier positioning of "modword" lists
- - log
- Shows the log entries of the last command
- - modificationtypes
- Shows the regexp of the modificationtypes.
- - standardfilter
- Load the standartfilter and print it in the Attribute T2F_filter if its empty
- - version
- The module version
-
+ - @keywordlist @modwordlist
+ Compare the two lists word by word.
+ - keylistno
+ A list of the configured "keyword" lists. For easier positioning of "modword" lists
+ - log
+ Shows the log entries of the last command
+ - modificationtypes
+ Shows the regexp of the modificationtypes.
+ - standardfilter
+ Load the standartfilter and print it in the Attribute T2F_filter if its empty
+ - version
+ The module version
+
-
+
- Readings
-
+ Readings
+
- set
Contains the last text sent via "set".
@@ -1845,37 +1868,37 @@ return($_[2]);
- notifies
Contains a list of the devices that are relevant for the currently waiting conditional commands. There is an internal notify on these devices.
-
+
-
-
-
- Attribute
-
- attr <name> <attribute> <value>
-
- See commandref#attr for more information about the attributes.
-
- Attributes:
-
- - T2F_keywordlist <name> = <list>
+
+
+
+ Attribute
+
+ attr <name> <attribute> <value>
+
+ See commandref#attr for more information about the attributes.
+
+ Attributes:
+
+ - T2F_keywordlist <name> = <list>
A comma-separated list of keywords such as: rooms, names, colors, etc ...
In other words, things named with a natural name.
- - T2F_modwordlist <name> = <list>
+ - T2F_modwordlist <name> = <list>
A comma seperated list of substitution words used for the keywords.
For example: device names in FHEM
- - T2F_if
+ - T2F_if
A collection of event-driven configurations. The syntax is that of the definition. Command part is an IF condition.
z.B.: (when|if) .*?door = [door] eq "open"
- - T2F_filter
+ - T2F_filter
Comma-separated list of RegExp generally removed.
Standard: \bplease\b,\balso\b
- - T2F_origin
+ - T2F_origin
A RegExp which is generally removed and whose output can be accessed via $0.
Can be used for user mapping.
- - T2F_languageDE|EN
+ - T2F_languageDE|EN
The used language can be set via the global attribute "language". Or overwritten with this attribute.
- T2F_disableumlautescaping <0|1>
@@ -1883,9 +1906,9 @@ return($_[2]);
- disable <0|1>
Can be used for test purposes. If the attribute is set to 1, the FHEM command is not executed
but written in reading cmds.
-
-
-
+
+
+
@@ -1895,36 +1918,36 @@ return($_[2]);
Talk2Fhem
- Das Modul Talk2Fhem stellt eine Verbindung zwischen natürlicher Sprache und FHEM Befehlen her.
+ Das Modul Talk2Fhem stellt eine Verbindung zwischen natürlicher Sprache und FHEM Befehlen her.
Die Konfiguration erfolgt dabei komfortabel über das FHEM Webfrontend.
Für eine genauere Beschreibung und weiterführende Beispiele siehe Talk2Fhem Wiki.
-
-
- Define
-
- define <name> Talk2Fhem
-
- Beispiel: define talk Talk2Fhem
-
- Die eigentliche Konfigration sollte erst auf der FHEM Seite erfolgen.
-
+
+
+ Define
+
+ define <name> Talk2Fhem
+
+ Beispiel: define talk Talk2Fhem
+
+ Die eigentliche Konfigration sollte erst auf der FHEM Seite erfolgen.
+
Die einzelnen Sprachphrasen werden Zeile für Zeile konfiguriert. Hierbei fängt eine Konfiguration
immer mit dem Regulärem Ausdruck an, gefolgt von mindestens einem Leerzeichen oder Tabulator gefolgt
von einem Gleichheitszeichen.
Der Kommandoteil fängt nach dem Gleichheitszeichen mit einem Leerzeichen, Tabulator oder Zeilenumbruch an.
- <regexp> = <command>
-
- Kurzreferenz:
-
- <RegExpPart> [&& [?!]<RegExpPart_n>] = [ <FHEM command> | { <Perl code> } | (<option> => '<wert>' , ... ) ]
-
- Beispiel: hallo welt = {Log 1, Hallo Welt}
-
+ <regexp> = <command>
+
+ Kurzreferenz:
+
+ <RegExpPart> [&& [?!]<RegExpPart_n>] = [ <FHEM command> | { <Perl code> } | (<option> => '<wert>' , ... ) ]
+
+ Beispiel: hallo welt = {Log 1, Hallo Welt}
+
Alles nach einem Hashtag '#' wird bis zum Zeilenende ignoriert.
-
+
<regexp>
Regulärer Ausdruck der den Text beschreibt, bei dem das Kommando ausgeführt werden soll
-
+
<command>
Der ausführende Teil. Folgende Formate sind Zulässig:
@@ -1983,48 +2006,48 @@ return($_[2]);
-
-
-
- Set
-
- set <name> [!]<text>
-
- Über das set Kommando wird der zu interpretierende Text an das Modul gesendet.
+
+
+
+ Set
+
+ set <name> [!]<text>
+
+ Über das set Kommando wird der zu interpretierende Text an das Modul gesendet.
Schaue unter commandref#set für weiterführende Hilfe.
- cleartimers
Entfernt die wartenden zeitbezogenen Kommandos
- cleartriggers
Entfernt die wartenden ereignisbezogenen Kommandos
-
-
+
+
-
- Get
- get <name> <option>
-
- Über get lassen sich Informationen aus dem Modul auslesen.
- Siehe commandref#get für weitere Informationen zu "get".
-
- <option>
+
+ Get
+ get <name> <option>
+
+ Über get lassen sich Informationen aus dem Modul auslesen.
+ Siehe commandref#get für weitere Informationen zu "get".
+
+ <option>
- - @keywordlist @modwordlist
- Vergleich der zwei Listen Wort für Wort
- - keylistno
- Eine Auflistung der Konfigurierten "Keyword"-Listen. Zur einfacheren Positionierung der "Modword"-Listen
- - log
- Zeigt die Logeinträge des letzten Kommandos
- - modificationtypes
- Zeigt die RegExp der Modifikationstypen.
- - standardfilter
- Lädt den Standardfilter und schreibt ihn in das Attribut T2F_filter wenn er leer ist
- - version
- Die Modulversion
-
+ - @keywordlist @modwordlist
+ Vergleich der zwei Listen Wort für Wort
+ - keylistno
+ Eine Auflistung der Konfigurierten "Keyword"-Listen. Zur einfacheren Positionierung der "Modword"-Listen
+ - log
+ Zeigt die Logeinträge des letzten Kommandos
+ - modificationtypes
+ Zeigt die RegExp der Modifikationstypen.
+ - standardfilter
+ Lädt den Standardfilter und schreibt ihn in das Attribut T2F_filter wenn er leer ist
+ - version
+ Die Modulversion
+
-
+
- Readings
-
+ Readings
+
- set
Enthält den zuletzt über "set" gesendeten Text.
@@ -2055,50 +2078,50 @@ return($_[2]);
- notifies
Enthält eine Auflistung der Devices die für die aktuell wartenden bedingten Kommandos relevant sind. Auf diesen Devices liegt ein internes notify.
-
+
-
-
-
- Attribute
-
- attr <name> <attribute> <value>
-
- Siehe commandref#attr für weitere Informationen zu den Attributen.
-
- Attribute:
-
- - T2F_keywordlist <name> = <list>
- Eine Komma seperierte Liste von Schlüsselwörtern wie z.B.: Räumen, Namen, Farben usw...
+
+
+
+ Attribute
+
+ attr <name> <attribute> <value>
+
+ Siehe commandref#attr für weitere Informationen zu den Attributen.
+
+ Attribute:
+
+ - T2F_keywordlist <name> = <list>
+ Eine Komma seperierte Liste von Schlüsselwörtern wie z.B.: Räumen, Namen, Farben usw...
Mit anderen Worten, mit natürlichem Namen benannte Sachen.
-
- - T2F_modwordlist <name> = <list>
- Eine Komma seperierte Liste von Ersetzungswörten die für die Schlüsselwörter eingesetzt werden.
+
+ - T2F_modwordlist <name> = <list>
+ Eine Komma seperierte Liste von Ersetzungswörten die für die Schlüsselwörter eingesetzt werden.
z.B.: Gerätenamen in FHEM
-
- - T2F_if
+
+ - T2F_if
Eine Auflistung von ereignisgesteuerten Konfigurationen. Die Syntax ist die der Definition. Kommandoteil ist eine IF Bedingung.
z.B.: wenn .*?tür = [door] eq "open"
- - T2F_filter
+ - T2F_filter
Kommaseparierte Liste von RegExp die generell entfernt werden.
Standard: \bbitte\b,\bauch\b,\bkann\b,\bsoll\b
- - T2F_origin
+ - T2F_origin
Eine RegExp die generell entfernt wird und deren Ausgabe über $0 angesprochen werden kann.
Kann für eine Benutzerzuordnung verwendet werden.
- - T2F_languageDE|EN
+ - T2F_languageDE|EN
Die verwendete Sprache kann über das globale Attribut "language" gesetzt werden. Oder über dieses Attribut überschrieben werden.
- T2F_disableumlautescaping <0|1>
Deaktiviert das Konvertieren der Umlaute in "\S\S?"
- - disable <0|1>
- Kann zu Testzwecken verwendet werden. Steht das Attribut auf 1, wird das FHEM-Kommando nicht ausgeführt
+ - disable <0|1>
+ Kann zu Testzwecken verwendet werden. Steht das Attribut auf 1, wird das FHEM-Kommando nicht ausgeführt
aber in das Reading cmds geschrieben.
-
-
-
+
+
+