fix: changes for state

git-svn-id: https://svn.fhem.de/fhem/trunk@17282 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
hexenmeister 2018-09-05 20:38:58 +00:00
parent 25b5320119
commit baa6fca3b3

View File

@ -29,7 +29,7 @@ use warnings;
#my $DEBUG = 1; #my $DEBUG = 1;
my $cvsid = '$Id$'; my $cvsid = '$Id$';
my $VERSION = "version 0.9.4 by hexenmeister\n$cvsid"; my $VERSION = "version 0.9.5 by hexenmeister\n$cvsid";
my %sets = ( my %sets = (
); );
@ -136,8 +136,12 @@ BEGIN {
defs defs
AttrVal AttrVal
ReadingsVal ReadingsVal
ReadingsTimestamp
ReadingsAge
deviceEvents
AssignIoPort AssignIoPort
addToDevAttrList addToDevAttrList
delFromDevAttrList
devspec2array devspec2array
gettimeofday gettimeofday
InternalTimer InternalTimer
@ -1242,28 +1246,43 @@ sub Notify() {
return "" unless ($size>0); return "" unless ($size>0);
} }
foreach my $event (@{$dev->{CHANGED}}) { #Log3($hash->{NAME},1,"Notify for $dev->{NAME}>>>>>>>> ".Dumper($dev)) if $dev->{NAME} eq 'sonoff_8';
#Log3($hash->{NAME},5,"Notify for $dev->{NAME} event: $event STATE: $dev->{STATE}"); #Log3($hash->{NAME},1,"Notify for $dev->{NAME}>>>>>>>> ".Dumper(deviceEvents($dev,1))) if $dev->{NAME} eq 'sonoff_8';
#foreach my $event (@{$dev->{CHANGED}}) {
foreach my $event (@{deviceEvents($dev,1)}) {
#Log3($hash->{NAME},1,"Notify for $dev->{NAME} event: $event STATE: $dev->{STATE}");
$event =~ /^([^:]+)(: )?(.*)$/; $event =~ /^([^:]+)(: )?(.*)$/;
#Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> event: $event, '".((defined $1) ? $1 : "-undef-")."', '".((defined $3) ? $3 : "-undef-")."'"); #Log3($hash->{NAME},1,"MQTT-GB:DEBUG:> event: $event, '".((defined $1) ? $1 : "-undef-")."', '".((defined $3) ? $3 : "-undef-")."'");
my $devreading = undef; my $devreading = undef;
my $devval = undef; my $devval = undef;
# pruefen, ob der neue Wert dem 'state' des Devices entspricht # pruefen, ob der neue Wert dem 'state' des Devices entspricht
# {$defs{$dev}{STATE}} # {$defs{$dev}{STATE}}
if ($dev->{STATE} ne $event) { #Log3($hash->{NAME},1,"Notify for $dev->{NAME} : state: ".ReadingsVal($dev->{NAME},'state','nö'));
# Wenn Readings 'state' existiert. Nicht STATE! Wenn der Wert dem neuen 'change' gleich ist. Wenn der ReadingsTimestamp frisch ist => dann state annehmen.
#my $vState = ReadingsVal($dev->{NAME},'state',undef);
#my $tState = ReadingsTimestamp($dev->{NAME},'state',undef);
#my $aState = ReadingsAge($dev->{NAME},'state',-1);
#Log3($hash->{NAME},1,"Notify for $dev->{NAME}>>>>>>>> vState: $vState, tState: $tState, age: $aState ");# if $hash->{NAME} eq 'sonoff_8';
#unless (defined ($vState) and ($vState eq $event) and ($aState <= 1)) {
#if (!defined ($vState) or ($vState ne $event)) {
#if ($dev->{STATE} ne $event) {
#if (defined $3 and $3 ne "") { #if (defined $3 and $3 ne "") {
# $vState = 'undef' unless defined $vState;
#Log3($hash->{NAME},1,"Notify recognise state change = no : event: $event, old_state: $vState, state age: $aState");
#send reading=$1 value=$3 #send reading=$1 value=$3
#publishDeviceUpdate($hash, $dev, $1, $3); #publishDeviceUpdate($hash, $dev, $1, $3);
$devreading = $1; $devreading = $1;
$devval = $3; $devval = $3;
} else { # } else {
#send reading=state value=$1 # #Log3($hash->{NAME},1,"Notify recognise state change = yes : event: $event, old_state: $vState, state age: $aState");
#publishDeviceUpdate($hash, $dev, 'state', $1); # #send reading=state value=$1
$devreading = 'state'; # #publishDeviceUpdate($hash, $dev, 'state', $1);
#$devval = $1; # $devreading = 'state';
$devval = $event; # #$devval = $1;
} # $devval = $event;
#Log3($hash->{NAME},5,"Notify for $dev->{NAME} reading: $devreading, val: $devval"); # }
#Log3($hash->{NAME},1,"Notify for $dev->{NAME} reading: $devreading, val: $devval");
if(defined $devreading and defined $devval) { if(defined $devreading and defined $devval) {
# wenn ueberwachtes device and reading # wenn ueberwachtes device and reading
publishDeviceUpdate($hash, $dev, $devreading, $devval); publishDeviceUpdate($hash, $dev, $devreading, $devval);