mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
75_msgConfig: add message return channel (Forum #77341)
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@15165 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
b816e31cac
commit
1ff90ab6cf
@ -8,13 +8,15 @@ use Data::Dumper;
|
|||||||
# initialize ##################################################################
|
# initialize ##################################################################
|
||||||
sub msgConfig_Initialize($) {
|
sub msgConfig_Initialize($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
|
my $TYPE = "msgConfig";
|
||||||
|
|
||||||
require "$attr{global}{modpath}/FHEM/msgSchema.pm";
|
require "$attr{global}{modpath}/FHEM/msgSchema.pm";
|
||||||
|
|
||||||
$hash->{DefFn} = "msgConfig_Define";
|
$hash->{DefFn} = $TYPE . "_Define";
|
||||||
$hash->{SetFn} = "msgConfig_Set";
|
$hash->{SetFn} = $TYPE . "_Set";
|
||||||
$hash->{GetFn} = "msgConfig_Get";
|
$hash->{GetFn} = $TYPE . "_Get";
|
||||||
$hash->{UndefFn} = "msgConfig_Undefine";
|
$hash->{UndefFn} = $TYPE . "_Undefine";
|
||||||
|
$hash->{NotifyFn} = $TYPE . "_Notify";
|
||||||
|
|
||||||
# add attributes for configuration
|
# add attributes for configuration
|
||||||
no warnings 'qw';
|
no warnings 'qw';
|
||||||
@ -69,6 +71,7 @@ sub msgConfig_Initialize($) {
|
|||||||
msgPriorityPush:-2,-1,0,1,2
|
msgPriorityPush:-2,-1,0,1,2
|
||||||
msgPriorityScreen:-2,-1,0,1,2
|
msgPriorityScreen:-2,-1,0,1,2
|
||||||
msgPriorityText:-2,-1,0,1,2
|
msgPriorityText:-2,-1,0,1,2
|
||||||
|
msgRcv:1,0
|
||||||
msgResidentsDev
|
msgResidentsDev
|
||||||
msgSwitcherDev
|
msgSwitcherDev
|
||||||
msgThPrioHigh:-2,-1,0,1,2
|
msgThPrioHigh:-2,-1,0,1,2
|
||||||
@ -145,21 +148,21 @@ sub msgConfig_Initialize($) {
|
|||||||
|
|
||||||
# regular Fn ##################################################################
|
# regular Fn ##################################################################
|
||||||
sub msgConfig_Define($$) {
|
sub msgConfig_Define($$) {
|
||||||
|
|
||||||
my ( $hash, $def ) = @_;
|
my ( $hash, $def ) = @_;
|
||||||
|
my $TYPE = $hash->{TYPE};
|
||||||
|
|
||||||
my @a = split( "[ \t]+", $def, 5 );
|
my @a = split( "[ \t]+", $def, 5 );
|
||||||
|
|
||||||
return "Usage: define <name> msgConfig"
|
return "Usage: define <name> $TYPE"
|
||||||
if ( int(@a) < 2 );
|
if ( int(@a) < 2 );
|
||||||
my $name = $a[0];
|
my $name = $a[0];
|
||||||
|
|
||||||
return "Global configuration device already defined: "
|
return "Global configuration device already defined: "
|
||||||
. $modules{msgConfig}{defptr}{NAME}
|
. $modules{$TYPE}{defptr}{NAME}
|
||||||
if ( defined( $modules{msgConfig}{defptr} ) );
|
if ( defined( $modules{$TYPE}{defptr} ) );
|
||||||
|
|
||||||
# create global unique device definition
|
# create global unique device definition
|
||||||
$modules{msgConfig}{defptr} = $hash;
|
$modules{$TYPE}{defptr} = $hash;
|
||||||
|
|
||||||
# set default settings on first define
|
# set default settings on first define
|
||||||
if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
|
if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
|
||||||
@ -179,15 +182,17 @@ sub msgConfig_Define($$) {
|
|||||||
readingsEndUpdate( $hash, 1 );
|
readingsEndUpdate( $hash, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$hash->{NOTIFYDEV} = "TYPE=(Jabber|TelegramBot|yowsup)";
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub msgConfig_Undefine($$) {
|
sub msgConfig_Undefine($$) {
|
||||||
|
|
||||||
my ( $hash, $name ) = @_;
|
my ( $hash, $name ) = @_;
|
||||||
|
my $TYPE = $hash->{TYPE};
|
||||||
|
|
||||||
# release global unique device definition
|
# release global unique device definition
|
||||||
delete $modules{msgConfig}{defptr};
|
delete $modules{$TYPE}{defptr};
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -195,10 +200,11 @@ sub msgConfig_Undefine($$) {
|
|||||||
sub msgConfig_Set($@) {
|
sub msgConfig_Set($@) {
|
||||||
my ( $hash, @a ) = @_;
|
my ( $hash, @a ) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
my $TYPE = $hash->{TYPE};
|
||||||
shift @a;
|
shift @a;
|
||||||
my $what = shift @a;
|
my $what = shift @a;
|
||||||
|
|
||||||
Log3 $name, 5, "msgConfig $name: called function msgConfig_Set()";
|
Log3 $name, 5, "$TYPE $name: called function $TYPE" . "_Set()";
|
||||||
|
|
||||||
my @msgTypes = ( "audio", "light", "mail", "push", "screen", "queue" );
|
my @msgTypes = ( "audio", "light", "mail", "push", "screen", "queue" );
|
||||||
|
|
||||||
@ -212,7 +218,7 @@ sub msgConfig_Set($@) {
|
|||||||
# addLocation
|
# addLocation
|
||||||
elsif ( lc($what) eq "addlocation" ) {
|
elsif ( lc($what) eq "addlocation" ) {
|
||||||
my $location = join( " ", @a );
|
my $location = join( " ", @a );
|
||||||
my $group = AttrVal( $name, "group", "msgConfig" );
|
my $group = AttrVal( $name, "group", $TYPE );
|
||||||
my $room = AttrVal( $name, "room", "" );
|
my $room = AttrVal( $name, "room", "" );
|
||||||
my $return = "";
|
my $return = "";
|
||||||
|
|
||||||
@ -374,10 +380,11 @@ m/^msgLocationName$|^msgLocationName\s|\smsgLocationName\s|\smsgLocationName$/
|
|||||||
sub msgConfig_Get($@) {
|
sub msgConfig_Get($@) {
|
||||||
my ( $hash, @a ) = @_;
|
my ( $hash, @a ) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
my $TYPE = $hash->{TYPE};
|
||||||
shift @a;
|
shift @a;
|
||||||
my $what = shift @a;
|
my $what = shift @a;
|
||||||
|
|
||||||
Log3 $name, 5, "msgConfig $name: called function msgConfig_Get()";
|
Log3 $name, 5, "$TYPE $name: called function $TYPE" . "_Get()";
|
||||||
|
|
||||||
my @msgTypes = ( "audio", "light", "mail", "push", "screen" );
|
my @msgTypes = ( "audio", "light", "mail", "push", "screen" );
|
||||||
|
|
||||||
@ -551,6 +558,90 @@ sub msgConfig_Get($@) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub msgConfig_Notify($$) {
|
||||||
|
my ( $hash, $dev ) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
my $TYPE = GetType($name);
|
||||||
|
my $devName = $dev->{NAME};
|
||||||
|
my $devType = GetType($devName);
|
||||||
|
|
||||||
|
return ""
|
||||||
|
if ( IsDisabled($name)
|
||||||
|
or IsDisabled($devName)
|
||||||
|
or !AttrVal( $devName, "msgRcv", AttrVal( $name, "msgRcv", "1" ) ) );
|
||||||
|
|
||||||
|
Log3 $name, 5, "$TYPE $name: called function $TYPE" . "_Notify()";
|
||||||
|
|
||||||
|
my @events = @{ deviceEvents( $dev, 1 ) };
|
||||||
|
|
||||||
|
return "" unless (@events);
|
||||||
|
|
||||||
|
foreach my $event (@events) {
|
||||||
|
next
|
||||||
|
unless (
|
||||||
|
$event =~ m/^(msgText|queryData|((?:OTR)?Last)Message|message)/ );
|
||||||
|
my ( $sender, $msg );
|
||||||
|
|
||||||
|
# TelegramBot
|
||||||
|
if ( $devType eq "TelegramBot" ) {
|
||||||
|
if ( $1 eq "msgText" ) {
|
||||||
|
$sender = ReadingsVal( $devName, "msgPeerId", undef );
|
||||||
|
$msg = ReadingsVal( $devName, "msgText", undef );
|
||||||
|
}
|
||||||
|
elsif ( $1 eq "queryData" ) {
|
||||||
|
$sender = ReadingsVal( $devName, "queryPeerId", undef );
|
||||||
|
$msg = ReadingsVal( $devName, "queryData", undef );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Jabber
|
||||||
|
elsif ( $devType eq "Jabber" ) {
|
||||||
|
($sender) =
|
||||||
|
( ReadingsVal( $devName, $2 . "SenderJID", undef ) =~ m/[^\/]/g );
|
||||||
|
$msg = ReadingsVal( $devName, $2 . "Message", undef );
|
||||||
|
}
|
||||||
|
|
||||||
|
# yowsup
|
||||||
|
elsif ( $devType eq "yowsup" ) {
|
||||||
|
$sender = $devName;
|
||||||
|
$devName = $modules{yowsup}{defptr}{yowsup}->{NAME};
|
||||||
|
$msg = ReadingsVal( $devName, "message", undef );
|
||||||
|
}
|
||||||
|
|
||||||
|
next unless ( $sender && $sender ne "" && $msg && $msg ne "" );
|
||||||
|
|
||||||
|
foreach my $t ( "push", "screen" ) {
|
||||||
|
my @contacts = devspec2array(
|
||||||
|
"msgContact" . ucfirst($t) . "=.*$devName:[@#]*$sender.*" );
|
||||||
|
|
||||||
|
if (@contacts) {
|
||||||
|
foreach (@contacts) {
|
||||||
|
unless ( IsDevice($_) ) {
|
||||||
|
Log3 $name, 4, "msg $name: "
|
||||||
|
. "ERROR: Received $t message from $devName for non-existing recipient device $_";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log3 $_, 4,
|
||||||
|
"msg $_: " . "Received $t message from $devName: $msg";
|
||||||
|
|
||||||
|
my $recipient = $defs{$_};
|
||||||
|
|
||||||
|
readingsBeginUpdate($recipient);
|
||||||
|
readingsBulkUpdate( $recipient,
|
||||||
|
"fhemMsgRcv" . ucfirst($t), $msg );
|
||||||
|
readingsBulkUpdate( $recipient,
|
||||||
|
"fhemMsgRcv" . ucfirst($t) . "Gw", $devName );
|
||||||
|
readingsEndUpdate( $recipient, 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
# module Fn ####################################################################
|
# module Fn ####################################################################
|
||||||
sub MSG_FindAttrVal($$$$) {
|
sub MSG_FindAttrVal($$$$) {
|
||||||
my ( $d, $n, $msgType, $default ) = @_;
|
my ( $d, $n, $msgType, $default ) = @_;
|
||||||
@ -735,7 +826,6 @@ This next step is basically to set attribute msgResidentsDevice to refer to this
|
|||||||
<li>
|
<li>
|
||||||
<b>createSwitcherDev</b> <de|en> <br>
|
<b>createSwitcherDev</b> <de|en> <br>
|
||||||
Creates a pre-configured Dummy device named HouseAnn and updates globalMsg attribute msgSwitcherDev to refer to it.
|
Creates a pre-configured Dummy device named HouseAnn and updates globalMsg attribute msgSwitcherDev to refer to it.
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user