mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-07 23:09:26 +00:00
75_msgConfig: add message return channel (Forum #77341)
git-svn-id: https://svn.fhem.de/fhem/trunk@15165 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
beeac36b60
commit
2477f8cec1
@ -8,13 +8,15 @@ use Data::Dumper;
|
||||
# initialize ##################################################################
|
||||
sub msgConfig_Initialize($) {
|
||||
my ($hash) = @_;
|
||||
my $TYPE = "msgConfig";
|
||||
|
||||
require "$attr{global}{modpath}/FHEM/msgSchema.pm";
|
||||
|
||||
$hash->{DefFn} = "msgConfig_Define";
|
||||
$hash->{SetFn} = "msgConfig_Set";
|
||||
$hash->{GetFn} = "msgConfig_Get";
|
||||
$hash->{UndefFn} = "msgConfig_Undefine";
|
||||
$hash->{DefFn} = $TYPE . "_Define";
|
||||
$hash->{SetFn} = $TYPE . "_Set";
|
||||
$hash->{GetFn} = $TYPE . "_Get";
|
||||
$hash->{UndefFn} = $TYPE . "_Undefine";
|
||||
$hash->{NotifyFn} = $TYPE . "_Notify";
|
||||
|
||||
# add attributes for configuration
|
||||
no warnings 'qw';
|
||||
@ -69,6 +71,7 @@ sub msgConfig_Initialize($) {
|
||||
msgPriorityPush:-2,-1,0,1,2
|
||||
msgPriorityScreen:-2,-1,0,1,2
|
||||
msgPriorityText:-2,-1,0,1,2
|
||||
msgRcv:1,0
|
||||
msgResidentsDev
|
||||
msgSwitcherDev
|
||||
msgThPrioHigh:-2,-1,0,1,2
|
||||
@ -145,21 +148,21 @@ sub msgConfig_Initialize($) {
|
||||
|
||||
# regular Fn ##################################################################
|
||||
sub msgConfig_Define($$) {
|
||||
|
||||
my ( $hash, $def ) = @_;
|
||||
my $TYPE = $hash->{TYPE};
|
||||
|
||||
my @a = split( "[ \t]+", $def, 5 );
|
||||
|
||||
return "Usage: define <name> msgConfig"
|
||||
return "Usage: define <name> $TYPE"
|
||||
if ( int(@a) < 2 );
|
||||
my $name = $a[0];
|
||||
|
||||
return "Global configuration device already defined: "
|
||||
. $modules{msgConfig}{defptr}{NAME}
|
||||
if ( defined( $modules{msgConfig}{defptr} ) );
|
||||
. $modules{$TYPE}{defptr}{NAME}
|
||||
if ( defined( $modules{$TYPE}{defptr} ) );
|
||||
|
||||
# create global unique device definition
|
||||
$modules{msgConfig}{defptr} = $hash;
|
||||
$modules{$TYPE}{defptr} = $hash;
|
||||
|
||||
# set default settings on first define
|
||||
if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
|
||||
@ -179,15 +182,17 @@ sub msgConfig_Define($$) {
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
}
|
||||
|
||||
$hash->{NOTIFYDEV} = "TYPE=(Jabber|TelegramBot|yowsup)";
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub msgConfig_Undefine($$) {
|
||||
|
||||
my ( $hash, $name ) = @_;
|
||||
my $TYPE = $hash->{TYPE};
|
||||
|
||||
# release global unique device definition
|
||||
delete $modules{msgConfig}{defptr};
|
||||
delete $modules{$TYPE}{defptr};
|
||||
|
||||
return undef;
|
||||
}
|
||||
@ -195,10 +200,11 @@ sub msgConfig_Undefine($$) {
|
||||
sub msgConfig_Set($@) {
|
||||
my ( $hash, @a ) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $TYPE = $hash->{TYPE};
|
||||
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" );
|
||||
|
||||
@ -212,7 +218,7 @@ sub msgConfig_Set($@) {
|
||||
# addLocation
|
||||
elsif ( lc($what) eq "addlocation" ) {
|
||||
my $location = join( " ", @a );
|
||||
my $group = AttrVal( $name, "group", "msgConfig" );
|
||||
my $group = AttrVal( $name, "group", $TYPE );
|
||||
my $room = AttrVal( $name, "room", "" );
|
||||
my $return = "";
|
||||
|
||||
@ -374,10 +380,11 @@ m/^msgLocationName$|^msgLocationName\s|\smsgLocationName\s|\smsgLocationName$/
|
||||
sub msgConfig_Get($@) {
|
||||
my ( $hash, @a ) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $TYPE = $hash->{TYPE};
|
||||
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" );
|
||||
|
||||
@ -551,6 +558,90 @@ sub msgConfig_Get($@) {
|
||||
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 ####################################################################
|
||||
sub MSG_FindAttrVal($$$$) {
|
||||
my ( $d, $n, $msgType, $default ) = @_;
|
||||
@ -735,7 +826,6 @@ This next step is basically to set attribute msgResidentsDevice to refer to this
|
||||
<li>
|
||||
<b>createSwitcherDev</b> <de|en> <br>
|
||||
Creates a pre-configured Dummy device named HouseAnn and updates globalMsg attribute msgSwitcherDev to refer to it.
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
Loading…
x
Reference in New Issue
Block a user