mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
22_HOMEMODE.pm: fix homebridgeMapping for anyoneElseAtHome, ignore disabled presence devices for safety reasons - updateInternalsForce needed after dis-/enabling the presence device, ignore more disabled devices
git-svn-id: https://svn.fhem.de/fhem/trunk@15132 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
d63c50ec83
commit
4469f77d73
@ -16,7 +16,7 @@ use Time::HiRes qw(gettimeofday);
|
|||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
use vars qw{%attr %defs %modules $FW_CSRF};
|
use vars qw{%attr %defs %modules $FW_CSRF};
|
||||||
|
|
||||||
my $HOMEMODE_version = "1.1.7";
|
my $HOMEMODE_version = "1.1.8";
|
||||||
my $HOMEMODE_Daytimes = "05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night";
|
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_Seasons = "03.01|spring 06.01|summer 09.01|autumn 12.01|winter";
|
||||||
my $HOMEMODE_UserModes = "gotosleep,awoken,asleep";
|
my $HOMEMODE_UserModes = "gotosleep,awoken,asleep";
|
||||||
@ -59,7 +59,7 @@ sub HOMEMODE_Define($$)
|
|||||||
if (!$resdev)
|
if (!$resdev)
|
||||||
{
|
{
|
||||||
my @resdevs;
|
my @resdevs;
|
||||||
foreach (devspec2array("TYPE=RESIDENTS"))
|
foreach (devspec2array("TYPE=RESIDENTS:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
push @resdevs,$_;
|
push @resdevs,$_;
|
||||||
}
|
}
|
||||||
@ -335,7 +335,7 @@ sub HOMEMODE_Notify($$)
|
|||||||
if (ReadingsVal($devname,"presence","") !~ /^maybe/)
|
if (ReadingsVal($devname,"presence","") !~ /^maybe/)
|
||||||
{
|
{
|
||||||
my @presentdevicespresent;
|
my @presentdevicespresent;
|
||||||
foreach my $device (devspec2array("TYPE=$prestype:FILTER=presence=(maybe.)?(absent|present|appeared|disappeared)"))
|
foreach my $device (devspec2array("TYPE=$prestype:FILTER=disable!=1:FILTER=presence=^(maybe.)?(absent|present|appeared|disappeared)"))
|
||||||
{
|
{
|
||||||
next if (lc($device) !~ /$residentregex/);
|
next if (lc($device) !~ /$residentregex/);
|
||||||
push @presentdevicespresent,$device if (ReadingsVal($device,"presence","") =~ /^(present|appeared|maybe.absent)$/);
|
push @presentdevicespresent,$device if (ReadingsVal($device,"presence","") =~ /^(present|appeared|maybe.absent)$/);
|
||||||
@ -432,7 +432,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
push @allMonitoredDevices,$resdev;
|
push @allMonitoredDevices,$resdev;
|
||||||
my $autopresence = HOMEMODE_AttrCheck($hash,"HomeAutoPresence",0);
|
my $autopresence = HOMEMODE_AttrCheck($hash,"HomeAutoPresence",0);
|
||||||
my $presencetype = HOMEMODE_AttrCheck($hash,"HomePresenceDeviceType","PRESENCE");
|
my $presencetype = HOMEMODE_AttrCheck($hash,"HomePresenceDeviceType","PRESENCE");
|
||||||
my @presdevs = devspec2array("TYPE=$presencetype:FILTER=presence=^(maybe.)?(absent|present|appeared|disappeared)");
|
my @presdevs = devspec2array("TYPE=$presencetype:FILTER=disable!=1:FILTER=presence=^(maybe.)?(absent|present|appeared|disappeared)");
|
||||||
my @residentsshort;
|
my @residentsshort;
|
||||||
my @logtexte;
|
my @logtexte;
|
||||||
foreach my $resident (split /,/,$hash->{RESIDENTS})
|
foreach my $resident (split /,/,$hash->{RESIDENTS})
|
||||||
@ -485,7 +485,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
if ($contacts)
|
if ($contacts)
|
||||||
{
|
{
|
||||||
my @sensors;
|
my @sensors;
|
||||||
foreach my $s (devspec2array($contacts))
|
foreach my $s (devspec2array("$contacts:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
push @sensors,$s;
|
push @sensors,$s;
|
||||||
push @allMonitoredDevices,$s if (!grep /^$s$/,@allMonitoredDevices);
|
push @allMonitoredDevices,$s if (!grep /^$s$/,@allMonitoredDevices);
|
||||||
@ -496,7 +496,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
if ($motion)
|
if ($motion)
|
||||||
{
|
{
|
||||||
my @sensors;
|
my @sensors;
|
||||||
foreach my $s (devspec2array($motion))
|
foreach my $s (devspec2array("$motion:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
push @sensors,$s;
|
push @sensors,$s;
|
||||||
push @allMonitoredDevices,$s if (!grep /^$s$/,@allMonitoredDevices);
|
push @allMonitoredDevices,$s if (!grep /^$s$/,@allMonitoredDevices);
|
||||||
@ -508,7 +508,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
{
|
{
|
||||||
my @sensors;
|
my @sensors;
|
||||||
my ($p,$e) = split " ",AttrVal($name,"HomeSensorsPowerEnergyReadings","power energy");
|
my ($p,$e) = split " ",AttrVal($name,"HomeSensorsPowerEnergyReadings","power energy");
|
||||||
foreach my $s (devspec2array($power))
|
foreach my $s (devspec2array("$power:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
next unless (defined ReadingsVal($s,$p,undef) && defined ReadingsVal($s,$e,undef));
|
next unless (defined ReadingsVal($s,$p,undef) && defined ReadingsVal($s,$e,undef));
|
||||||
push @sensors,$s;
|
push @sensors,$s;
|
||||||
@ -520,7 +520,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
if ($battery)
|
if ($battery)
|
||||||
{
|
{
|
||||||
my @sensors;
|
my @sensors;
|
||||||
foreach my $s (devspec2array($battery))
|
foreach my $s (devspec2array("$battery:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
my $read = AttrVal($name,"HomeSensorsBatteryReading","battery");
|
my $read = AttrVal($name,"HomeSensorsBatteryReading","battery");
|
||||||
my $val = ReadingsVal($s,$read,undef);
|
my $val = ReadingsVal($s,$read,undef);
|
||||||
@ -544,7 +544,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
my $holiday = HOMEMODE_AttrCheck($hash,"HomeEventsHolidayDevices");
|
my $holiday = HOMEMODE_AttrCheck($hash,"HomeEventsHolidayDevices");
|
||||||
if ($holiday)
|
if ($holiday)
|
||||||
{
|
{
|
||||||
foreach (devspec2array($holiday))
|
foreach (devspec2array("$holiday:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
push @allMonitoredDevices,$_ if (!grep /^$_$/,@allMonitoredDevices);
|
push @allMonitoredDevices,$_ if (!grep /^$_$/,@allMonitoredDevices);
|
||||||
}
|
}
|
||||||
@ -556,7 +556,7 @@ sub HOMEMODE_updateInternals($;$)
|
|||||||
{
|
{
|
||||||
my $read = AttrVal($name,"HomeSensorsLuminanceReading","luminance");
|
my $read = AttrVal($name,"HomeSensorsLuminanceReading","luminance");
|
||||||
my @sensors;
|
my @sensors;
|
||||||
foreach my $s (devspec2array($luminance))
|
foreach my $s (devspec2array("$luminance:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
if (defined ReadingsVal($s,AttrVal($name,"HomeSensorsLuminanceReading","luminance"),undef))
|
if (defined ReadingsVal($s,AttrVal($name,"HomeSensorsLuminanceReading","luminance"),undef))
|
||||||
{
|
{
|
||||||
@ -2321,7 +2321,7 @@ sub HOMEMODE_TriggerState($;$$$)
|
|||||||
my @alarmSensors;
|
my @alarmSensors;
|
||||||
my @lightSensors;
|
my @lightSensors;
|
||||||
my $amode = ReadingsVal($name,"modeAlarm","");
|
my $amode = ReadingsVal($name,"modeAlarm","");
|
||||||
foreach my $sensor (devspec2array($contacts))
|
foreach my $sensor (devspec2array("$contacts:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
my ($oread,$tread) = split " ",AttrVal($sensor,"HomeReadings",AttrVal($name,"HomeSensorsContactReadings","state sabotageError")),2;
|
my ($oread,$tread) = split " ",AttrVal($sensor,"HomeReadings",AttrVal($name,"HomeSensorsContactReadings","state sabotageError")),2;
|
||||||
my $otcmd = AttrVal($sensor,"HomeValues",AttrVal($name,"HomeSensorsContactValues","open|tilted|on"));
|
my $otcmd = AttrVal($sensor,"HomeValues",AttrVal($name,"HomeSensorsContactValues","open|tilted|on"));
|
||||||
@ -2370,7 +2370,7 @@ sub HOMEMODE_TriggerState($;$$$)
|
|||||||
push @sensorsTampered,$sensor;
|
push @sensorsTampered,$sensor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach my $sensor (devspec2array($motions))
|
foreach my $sensor (devspec2array("$motions:FILTER=disable!=1"))
|
||||||
{
|
{
|
||||||
my ($oread,$tread) = split " ",AttrVal($sensor,"HomeReadings",AttrVal($name,"HomeSensorsMotionReadings","state sabotageError")),2;
|
my ($oread,$tread) = split " ",AttrVal($sensor,"HomeReadings",AttrVal($name,"HomeSensorsMotionReadings","state sabotageError")),2;
|
||||||
my $otcmd = AttrVal($sensor,"HomeValues",AttrVal($name,"HomeSensorsMotionValues","open|on"));
|
my $otcmd = AttrVal($sensor,"HomeValues",AttrVal($name,"HomeSensorsMotionValues","open|on"));
|
||||||
@ -2732,7 +2732,7 @@ sub HOMEMODE_HomebridgeMapping($)
|
|||||||
$mapping .= "\nSecuritySystemAlarmType=alarmTriggered_ct,values=0:0;/.*/:1";
|
$mapping .= "\nSecuritySystemAlarmType=alarmTriggered_ct,values=0:0;/.*/:1";
|
||||||
$mapping .= "\nOccupancyDetected=presence,values=present:1;absent:0";
|
$mapping .= "\nOccupancyDetected=presence,values=present:1;absent:0";
|
||||||
$mapping .= "\nMute=dnd,valueOn=on,cmds=1:dnd+on;0:dnd+off";
|
$mapping .= "\nMute=dnd,valueOn=on,cmds=1:dnd+on;0:dnd+off";
|
||||||
$mapping .= "\nOn=anyoneElseAtHome,valueOn=on,cmds=1:anyoneElseAtHome+on;0:anyoneElseAtHome+off";
|
$mapping .= "\nOn=anyoneElseAtHome,valueOn=on,cmdOn=anyoneElseAtHome+on,cmdOff=anyoneElseAtHome+off";
|
||||||
$mapping .= "\nContactSensorState=contactsOutsideOpen_ct,values=0:0;/.*/:1" if (defined ReadingsVal($name,"contactsOutsideOpen_ct",undef));
|
$mapping .= "\nContactSensorState=contactsOutsideOpen_ct,values=0:0;/.*/:1" if (defined ReadingsVal($name,"contactsOutsideOpen_ct",undef));
|
||||||
$mapping .= "\nStatusTampered=sensorsTampered_ct,values=0:0;/.*/:1" if (defined ReadingsVal($name,"sensorsTampered_ct",undef));
|
$mapping .= "\nStatusTampered=sensorsTampered_ct,values=0:0;/.*/:1" if (defined ReadingsVal($name,"sensorsTampered_ct",undef));
|
||||||
$mapping .= "\nMotionDetected=motionsInside_ct,values=0:0;/.*/:1" if (defined ReadingsVal($name,"motionsInside_ct",undef));
|
$mapping .= "\nMotionDetected=motionsInside_ct,values=0:0;/.*/:1" if (defined ReadingsVal($name,"motionsInside_ct",undef));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user