mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-07 22:29:19 +00:00
75_MSG: also hand over user parameters from attributes to gateway device
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@13958 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
ac78d03359
commit
482c672cc5
@ -38,6 +38,8 @@
|
|||||||
# - if ROOMMATE is asleep, queue message for next day
|
# - if ROOMMATE is asleep, queue message for next day
|
||||||
# (usefull escalate for screen with PostMe?)
|
# (usefull escalate for screen with PostMe?)
|
||||||
# - delivery options as attributes (like ! or ? to gateways, devices or types)
|
# - delivery options as attributes (like ! or ? to gateways, devices or types)
|
||||||
|
# - all messages should be queued and then delivered so a timer may come back
|
||||||
|
# and check the gateway device for successful delivery
|
||||||
#
|
#
|
||||||
|
|
||||||
package main;
|
package main;
|
||||||
@ -1736,6 +1738,8 @@ m/^(absent|disappeared|unauthorized|disconnected|unreachable)$/i
|
|||||||
$cmd =~ s/%TERMINAL%/$termRecipient/gi
|
$cmd =~ s/%TERMINAL%/$termRecipient/gi
|
||||||
if ( $termRecipient ne "" );
|
if ( $termRecipient ne "" );
|
||||||
|
|
||||||
|
my $paramsA;
|
||||||
|
|
||||||
unless ( defined($testMode) && $testMode eq "1" ) {
|
unless ( defined($testMode) && $testMode eq "1" ) {
|
||||||
|
|
||||||
# user parameters from message
|
# user parameters from message
|
||||||
@ -1777,7 +1781,6 @@ m/^(absent|disappeared|unauthorized|disconnected|unreachable)$/i
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
next unless ($_);
|
next unless ($_);
|
||||||
my $params;
|
|
||||||
if ( $_ =~ m/^{.*}$/s
|
if ( $_ =~ m/^{.*}$/s
|
||||||
&& $_ =~ m/=>/
|
&& $_ =~ m/=>/
|
||||||
&& $_ !~ m/\$/ )
|
&& $_ !~ m/\$/ )
|
||||||
@ -1789,20 +1792,20 @@ m/^(absent|disappeared|unauthorized|disconnected|unreachable)$/i
|
|||||||
. "ERROR while reading attribute msgParams";
|
. "ERROR while reading attribute msgParams";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$params = $av
|
$paramsA = $av;
|
||||||
if ( ref($av) eq "HASH" );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my ( $a, $h ) = parseParams($_);
|
my ( $a, $h ) = parseParams($_);
|
||||||
$params = $h
|
$paramsA = $h;
|
||||||
if ( ref($h) eq "HASH" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ref($params) eq "HASH" ) {
|
next unless ref($paramsA) eq "HASH";
|
||||||
for my $key ( keys %$params ) {
|
|
||||||
|
if ( ref($paramsA) eq "HASH" ) {
|
||||||
|
for my $key ( keys %$paramsA ) {
|
||||||
next if ( ref( $params->{$key} ) );
|
next if ( ref( $params->{$key} ) );
|
||||||
my $val = $params->{$key};
|
my $val = $paramsA->{$key};
|
||||||
$cmd =~ s/%$key%/$val/gi;
|
$cmd =~ s/%$key%/$val/gi;
|
||||||
$cmd =~ s/\$$key/$val/g;
|
$cmd =~ s/\$$key/$val/g;
|
||||||
Log3 $logDevice, 5,
|
Log3 $logDevice, 5,
|
||||||
@ -1916,17 +1919,40 @@ m/^(absent|disappeared|unauthorized|disconnected|unreachable)$/i
|
|||||||
{
|
{
|
||||||
# Compatibility to legacy schema:
|
# Compatibility to legacy schema:
|
||||||
# lowercase after _
|
# lowercase after _
|
||||||
$key =~
|
my $s = $gatewayDevType
|
||||||
s/^($gatewayDevType)(_[A-Z0-9]+)$/\1\L\2\e/;
|
. "[\_\/-]([A-Z0-9_-]+)";
|
||||||
|
$key =~ s/^$s$/\L$1/;
|
||||||
|
|
||||||
# remove gateway TYPE when
|
# remove gateway TYPE when
|
||||||
# used as prefix
|
# used as prefix
|
||||||
$key =~ s/^$gatewayDevType\_//;
|
$s = $gatewayDevType . "[_\/-]";
|
||||||
|
$key =~ s/^$s//;
|
||||||
$cmd .= " $key='$value'"
|
$cmd .= " $key='$value'"
|
||||||
if ( !defined( $h->{$key} )
|
if ( !defined( $h->{$key} )
|
||||||
|| $h->{$key} =~
|
|| $h->{$key} =~
|
||||||
m/^[\s\t\n ]*$/ );
|
m/^[\s\t\n ]*$/ );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keys %$paramsA;
|
||||||
|
while ( ( my $key, my $value ) =
|
||||||
|
each %$paramsA )
|
||||||
|
{
|
||||||
|
# Compatibility to legacy schema:
|
||||||
|
# lowercase after _
|
||||||
|
my $s = $gatewayDevType
|
||||||
|
. "[\_\/-]([A-Z0-9_-]+)";
|
||||||
|
$key =~ s/^$s$/\L$1/;
|
||||||
|
|
||||||
|
# remove gateway TYPE when
|
||||||
|
# used as prefix
|
||||||
|
$s = $gatewayDevType . "[_\/-]";
|
||||||
|
$key =~ s/^$s//;
|
||||||
|
$cmd .= " $key='$value'"
|
||||||
|
if ( !defined( $h->{$key} )
|
||||||
|
|| $h->{$key} =~
|
||||||
|
m/^[\s\t\n ]*$/ );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# excplicitly queue message
|
# excplicitly queue message
|
||||||
@ -1951,7 +1977,8 @@ s/^($gatewayDevType)(_[A-Z0-9]+)$/\1\L\2\e/;
|
|||||||
"msg $device: "
|
"msg $device: "
|
||||||
. "$type[$i] route command (Perl): $cmd";
|
. "$type[$i] route command (Perl): $cmd";
|
||||||
eval $cmd;
|
eval $cmd;
|
||||||
if ($@) {
|
unless ( !$@ || $@ =~ m/^[\s\t\n ]*$/ )
|
||||||
|
{
|
||||||
$error = 1;
|
$error = 1;
|
||||||
$loopReturn3 .= "$gatewayDev: $@\n";
|
$loopReturn3 .= "$gatewayDev: $@\n";
|
||||||
}
|
}
|
||||||
@ -1961,9 +1988,12 @@ s/^($gatewayDevType)(_[A-Z0-9]+)$/\1\L\2\e/;
|
|||||||
"msg $device: "
|
"msg $device: "
|
||||||
. "$type[$i] route command (fhem): $cmd";
|
. "$type[$i] route command (fhem): $cmd";
|
||||||
my $ret = fhem $cmd, 1;
|
my $ret = fhem $cmd, 1;
|
||||||
if ($ret) {
|
unless ( !$ret
|
||||||
|
|| $ret =~ m/^[\s\t\n ]*$/ )
|
||||||
|
{
|
||||||
$error = 1;
|
$error = 1;
|
||||||
$loopReturn3 .= "$gatewayDev: $ret\n";
|
$loopReturn3 .=
|
||||||
|
"$gatewayDev: $ret\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user