2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-09 14:47:00 +00:00

FHEM2FHEM: addStateEvent attribute (Forum #76229)

git-svn-id: https://svn.fhem.de/fhem/trunk@15006 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2017-09-05 09:37:33 +00:00
parent 30c48809d5
commit f4f07245e0
4 changed files with 50 additions and 20 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- bugfix: FHEM2FHEM: addStateEvent attribute (Forum #76229)
- bugfix: HttpUtils: use urlDecode for password in URL (Forum #76230)
- bugfix: 74_GardenaSmartDevice.pm: fix little Commandref bug's
- new: 73_GardenaSmartBridge/74_GardenaSmartDevice control your Gardena

View File

@ -26,13 +26,14 @@ FHEM2FHEM_Initialize($)
$hash->{WriteFn} = "FHEM2FHEM_Write";
$hash->{ReadyFn} = "FHEM2FHEM_Ready";
$hash->{SetFn} = "FHEM2FHEM_Set";
$hash->{AttrFn} = "FHEM2FHEM_Attr";
$hash->{noRawInform} = 1;
# Normal devices
$hash->{DefFn} = "FHEM2FHEM_Define";
$hash->{UndefFn} = "FHEM2FHEM_Undef";
$hash->{AttrList}= "dummy:1,0 disable:0,1 ".
"disabledForIntervals excludeEvents eventOnly:1,0";
$hash->{AttrList}= "addStateEvent:1,0 dummy:1,0 disable:0,1 ".
"disabledForIntervals eventOnly:1,0 excludeEvents";
}
#####################################
@ -266,8 +267,9 @@ FHEM2FHEM_OpenDev($$)
DoTrigger($name, "CONNECTED") if($reopen);
syswrite($hash->{TCPDev}, $hash->{portpassword} . "\n")
if($hash->{portpassword});
my $type = AttrVal($hash->{NAME},"addStateEvent",0) ? "onWithState" : "on";
my $msg = $hash->{informType} eq "LOG" ?
"inform on $hash->{regexp}" : "inform raw";
"inform $type $hash->{regexp}" : "inform raw";
syswrite($hash->{TCPDev}, $msg . "\n");
};
@ -329,6 +331,19 @@ FHEM2FHEM_Set($@)
return undef;
}
sub
FHEM2FHEM_Attr(@)
{
my ($type, $devName, $attrName, @param) = @_;
my $hash = $defs{$devName};
return undef if($attrName ne "addStateEvent");
$attr{$devName}{$attrName} = 1;
FHEM2FHEM_CloseDev($hash);
FHEM2FHEM_OpenDev($hash, 1);
return undef;
}
1;
=pod
@ -428,6 +443,12 @@ FHEM2FHEM_Set($@)
if set, generate only events, do not set corresponding readings.
This is a compatibility feature, available only for LOG-Mode.
</li>
<li><a name="#addStateEvent">addStateEvent</a><br>
if set, state events are transmitted correctly. Notes: this is relevant
only with LOG mode, setting it will generate an additional "reappeared"
Log entry, and the remote FHEM must support inform onWithState (i.e. must
be up to date).
</li>
<li><a name="#excludeEvents">excludeEvents &lt;regexp&gt;</a>
do not publish events matching &lt;regexp&gt;
</li>
@ -530,16 +551,22 @@ FHEM2FHEM_Set($@)
<b>Attribute</b>
<ul>
<li><a href="#dummy">dummy</a></li>
<li><a href="#disable">disable</a></li>
<li><a href="#disabledForIntervals">disabledForIntervals</a></li>
<li><a name="#eventOnly">eventOnly</a><br>
falls gesetzt, werden nur die Events generiert, und es wird kein
Reading aktualisiert. Ist nur im LOG-Mode aktiv.
</li>
<li><a name="#excludeEvents">excludeEvents &lt;regexp&gt;</a>
die auf das &lt;regexp&gt; zutreffende Events werden nicht
bereitgestellt.
</li>
<li><a href="#disable">disable</a></li>
<li><a href="#disabledForIntervals">disabledForIntervals</a></li>
<li><a name="#eventOnly">eventOnly</a><br>
falls gesetzt, werden nur die Events generiert, und es wird kein
Reading aktualisiert. Ist nur im LOG-Mode aktiv.
</li>
<li><a name="#addStateEvent">addStateEvent</a><br>
falls gesetzt, werden state Events als solche uebertragen. Zu beachten:
das Attribut ist nur f&uuml;r LOG-Mode relevant, beim Setzen wird eine
zus&auml;tzliche reopened Logzeile generiert, und die andere Seite muss
aktuell sein.
</li>
<li><a name="#excludeEvents">excludeEvents &lt;regexp&gt;</a>
die auf das &lt;regexp&gt; zutreffende Events werden nicht
bereitgestellt.
</li>
</ul>
</ul>

View File

@ -33,7 +33,8 @@ telnet_Initialize($)
$cmds{inform} = { Fn=>"CommandTelnetInform",
ClientFilter => "telnet",
Hlp=>"{on|off|log|raw|timer|status},echo all events to this client" };
Hlp=>"{on|onWithState|off|log|raw|timer|status},".
"echo all events to this client" };
}
sub
@ -376,8 +377,8 @@ CommandTelnetInform($$)
return if(!$cl);
my $name = $cl->{NAME};
return "Usage: inform {on|off|raw|timer|log|status} [regexp]"
if($param !~ m/^(on|off|raw|timer|log|status)/);
return "Usage: inform {on|onWithState|off|raw|timer|log|status} [regexp]"
if($param !~ m/^(on|onWithState|off|raw|timer|log|status)/);
if($param eq "status") {
my $i = $inform{$name};

View File

@ -3378,7 +3378,6 @@ DoTrigger($$@)
################
# Inform
if($hash->{CHANGED}) { # It gets deleted sometimes (?)
$max = int(@{$hash->{CHANGED}}); # can be enriched in the notifies
foreach my $c (keys %inform) {
my $dc = $defs{$c};
if(!$dc || $dc->{NR} != $inform{$c}{NR}) {
@ -3392,11 +3391,13 @@ DoTrigger($$@)
$tn .= sprintf(".%03d", $microseconds/1000);
}
my $re = $inform{$c}{regexp};
my $events = deviceEvents($hash, $inform{$c}{type} =~ m/WithState/);
$max = int(@{$events});
for(my $i = 0; $i < $max; $i++) {
my $state = $hash->{CHANGED}[$i];
next if($re && !($dev =~ m/$re/ || "$dev:$state" =~ m/$re/));
my $event = $events->[$i];
next if($re && !($dev =~ m/$re/ || "$dev:$event" =~ m/$re/));
addToWritebuffer($dc,($inform{$c}{type} eq "timer" ? "$tn " : "").
"$hash->{TYPE} $dev $state\n");
"$hash->{TYPE} $dev $event\n");
}
}
}