1
0
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:
jpawlowski 2017-04-10 10:33:30 +00:00
parent ac78d03359
commit 482c672cc5

View File

@ -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";
} }
} }