From c1832018e3e07a2ac39a1aa586a01184f20a0d41 Mon Sep 17 00:00:00 2001 From: deespe Date: Thu, 8 Jun 2017 19:30:49 +0000 Subject: [PATCH] 22_HOMEMODE: add reading lastInfo, add userattr to sensors with same devspec git-svn-id: https://svn.fhem.de/fhem/trunk@14482 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/22_HOMEMODE.pm | 53 +++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/fhem/FHEM/22_HOMEMODE.pm b/fhem/FHEM/22_HOMEMODE.pm index d3a6e3090..50ea4adfb 100644 --- a/fhem/FHEM/22_HOMEMODE.pm +++ b/fhem/FHEM/22_HOMEMODE.pm @@ -16,7 +16,7 @@ use Time::HiRes qw(gettimeofday); use HttpUtils; use vars qw{%attr %defs %modules}; -my $HOMEMODE_version = "1.1.2"; +my $HOMEMODE_version = "1.1.3"; my $HOMEMODE_Daytimes = "05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night"; my $HOMEMODE_Seasons = "03.01|spring 06.01|summer 09.01|autumn 12.01|winter"; my $HOMEMODE_UserModes = "gotosleep,awoken,asleep"; @@ -1507,30 +1507,17 @@ sub HOMEMODE_Attr(@) "Invalid value $attr_value for attribute $attr_name. Must be a number from 1 to 99999 for interval in minutes!"; return $trans if ($attr_value !~ /^\d{1,5}$/); } - elsif ($attr_name eq "HomeSensorsContact" && $init_done) + elsif ($attr_name =~ /^(HomeSensorsContact|HomeSensorsMotion)$/ && $init_done) { $trans = $HOMEMODE_de? "$attr_value muss ein gültiger Devspec sein!": "$attr_value must be a valid devspec!"; return $trans if (!HOMEMODE_CheckIfIsValidDevspec($attr_value)); - if ($attr_value_old ne $attr_value) - { - CommandDeleteReading(undef,"$name lastContact|prevContact|contacts.*"); - HOMEMODE_updateInternals($hash); - HOMEMODE_addSensorsuserattr($hash,$attr_value,$attr_value_old); - } - } - elsif ($attr_name eq "HomeSensorsMotion" && $init_done) - { - $trans = $HOMEMODE_de? - "$attr_value muss ein gültiger Devspec sein!": - "$attr_value must be a valid devspec!"; - return $trans if (!HOMEMODE_CheckIfIsValidDevspec($attr_value)); - if ($attr_value_old ne $attr_value) - { - HOMEMODE_updateInternals($hash); - HOMEMODE_addSensorsuserattr($hash,$attr_value,$attr_value_old); - } + my $od = ""; + $od = $hash->{SENSORSCONTACT} if ($hash->{SENSORSCONTACT} && $attr_name eq "HomeSensorsContact"); + $od = $hash->{SENSORSMOTION} if ($hash->{SENSORSMOTION} && $attr_name eq "HomeSensorsMotion"); + HOMEMODE_updateInternals($hash); + HOMEMODE_addSensorsuserattr($hash,$attr_value,$od); } elsif ($attr_name eq "HomeSensorsPowerEnergy" && $init_done) { @@ -1539,10 +1526,7 @@ sub HOMEMODE_Attr(@) "$attr_value muss ein gültiger Devspec mit $p und $e Readings sein!": "$attr_value must be a valid devspec with $p and $e readings!"; return $trans if (!HOMEMODE_CheckIfIsValidDevspec($attr_value,$p) || !HOMEMODE_CheckIfIsValidDevspec($attr_value,$e)); - if ($attr_value_old ne $attr_value) - { - HOMEMODE_updateInternals($hash); - } + HOMEMODE_updateInternals($hash); } elsif ($attr_name eq "HomeTwilightDevice" && $init_done) { @@ -1695,7 +1679,7 @@ sub HOMEMODE_Attr(@) "$attr_value muss ein gültiges Gerät mit $read Reading sein!": "$attr_name must be a valid device with $read reading!"; return $trans if (!HOMEMODE_CheckIfIsValidDevspec($attr_value,$read)); - HOMEMODE_updateInternals($hash) if ($attr_value_old ne $attr_value); + HOMEMODE_updateInternals($hash); } elsif ($attr_name eq "HomeSensorsPowerEnergyReadings" && $init_done) { @@ -1728,7 +1712,7 @@ sub HOMEMODE_Attr(@) "$attr_value muss ein gültiges Gerät mit $read Reading sein!": "$attr_name must be a valid device with $read reading!"; return $trans if (!HOMEMODE_CheckIfIsValidDevspec($attr_value,$read)); - HOMEMODE_updateInternals($hash) if ($attr_value_old ne $attr_value); + HOMEMODE_updateInternals($hash); } elsif ($attr_name eq "HomeSensorsBatteryLowPercentage") { @@ -2941,9 +2925,11 @@ sub HOMEMODE_Details($$$) my ($FW_name,$name,$room) = @_; return if (AttrVal($name,"HomeAdvancedDetails","none") eq "none" || (AttrVal($name,"HomeAdvancedDetails","") eq "room" && $FW_detail eq $name)); my $hash = $defs{$name}; + my $iid = ReadingsVal($name,"lastInfo","") ? ReadingsVal($name,"lastInfo","") : ""; + my $info = ReadingsVal($name,$iid,""); my $html = "
"; $html .= ""; - $html .= "
"; + $html .= "
$info
"; $html .= ""; if (AttrVal($name,"HomeYahooWeatherDevice","")) { @@ -2989,7 +2975,14 @@ sub HOMEMODE_Details($$$) } $html .= "
"; $html .= "
"; - $html .= ""; + $html .= ""; return $html; } @@ -3906,6 +3899,10 @@ sub HOMEMODE_Details($$$) lastGotosleepByResident
last resident who went gotosleep +
  • + lastInfo
    + last shown item on infopanel (HomeAdvancedDetails) +
  • lastMotion
    last sensor which triggered motion