1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

70_DoorPi.pm: Neue Version

git-svn-id: https://svn.fhem.de/fhem/trunk@12377 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
pahenning 2016-10-18 17:53:27 +00:00
parent d6bb6be67e
commit aada47e4cb
3 changed files with 151 additions and 80 deletions

View File

@ -41,7 +41,7 @@ use vars qw{%attr %defs};
sub Log($$); sub Log($$);
#-- globals on start #-- globals on start
my $version = "1.2"; my $version = "1.4";
#-- these we may get on request #-- these we may get on request
my %gets = ( my %gets = (
@ -73,7 +73,7 @@ sub DoorPi_Initialize ($) {
$hash->{InitFn} = "DoorPi_Init"; $hash->{InitFn} = "DoorPi_Init";
$hash->{AttrList}= "verbose ". $hash->{AttrList}= "verbose ".
"language:de,en ". "language:de,en ringcmd ".
"doorbutton dooropencmd doorlockcmd doorunlockcmd ". "doorbutton dooropencmd doorlockcmd doorunlockcmd ".
"lightbutton lightoncmd lighttimercmd lightoffcmd ". "lightbutton lightoncmd lighttimercmd lightoffcmd ".
"snapshotbutton streambutton ". "snapshotbutton streambutton ".
@ -83,7 +83,6 @@ sub DoorPi_Initialize ($) {
$hash->{FW_detailFn} = "DoorPi_makeTable"; $hash->{FW_detailFn} = "DoorPi_makeTable";
$hash->{FW_summaryFn} = "DoorPi_makeShort"; $hash->{FW_summaryFn} = "DoorPi_makeShort";
$hash->{FW_atPageEnd} = 1;
} }
######################################################################################## ########################################################################################
@ -274,8 +273,14 @@ sub DoorPi_Set ($@) {
if ( !grep( /$key/, @{$hash->{HELPER}->{CMDS}} ) && ($key ne "call") && ($key ne "door") ); if ( !grep( /$key/, @{$hash->{HELPER}->{CMDS}} ) && ($key ne "call") && ($key ne "door") );
#-- hidden command "call" to be used by DoorPi for communicating with this module #-- hidden command "call" to be used by DoorPi for communicating with this module
if( $key eq "call" ){ if( $key eq "call" ){
if( $value =~ "start.*" ){ Log3 $name,1,"[DoorPi] call $value received";
#-- call init
if( $value eq "init" ){
DoorPi_GetConfig($hash);
InternalTimer(gettimeofday()+10, "DoorPi_GetHistory", $hash,0);
#-- call start
}elsif( $value =~ "start.*" ){
readingsSingleUpdate($hash,"call","started",1); readingsSingleUpdate($hash,"call","started",1);
my ($sec, $min, $hour, $day,$month,$year,$wday) = (localtime())[0,1,2,3,4,5,6]; my ($sec, $min, $hour, $day,$month,$year,$wday) = (localtime())[0,1,2,3,4,5,6];
$year += 1900; $year += 1900;
@ -285,31 +290,31 @@ sub DoorPi_Set ($@) {
unshift(@{ $hash->{DATA}}, ["",$timestamp,AttrVal($name, "target$value","unknown"),"active","--","xx","yy"] ); unshift(@{ $hash->{DATA}}, ["",$timestamp,AttrVal($name, "target$value","unknown"),"active","--","xx","yy"] );
#-- update web interface immediately #-- update web interface immediately
DoorPi_inform($hash); DoorPi_inform($hash);
#-- obtain last snapshot
}elsif( $value eq "end" ){ DoorPi_GetLastSnapshot($hash);
readingsSingleUpdate($hash,"call","ended",1); #-- and finally execute FHEM command
fhem(AttrVal($name, "ringcmd",undef))
if(AttrVal($name, "ringcmd",undef));
#-- call end
}elsif( $value =~ "end.*" ){
DoorPi_GetHistory($hash); DoorPi_GetHistory($hash);
#-- update web interface in 5 seconds
InternalTimer(gettimeofday()+5, "DoorPi_inform", $hash,0); InternalTimer(gettimeofday()+5, "DoorPi_inform", $hash,0);
readingsSingleUpdate($hash,"call","ended",1);
readingsSingleUpdate($hash,"call_listed",int(@{ $hash->{DATA}}),1);
#-- call rejected
}elsif( $value eq "rejected" ){ }elsif( $value eq "rejected" ){
DoorPi_GetHistory($hash);
InternalTimer(gettimeofday()+5, "DoorPi_inform", $hash,0);
readingsSingleUpdate($hash,"call","rejected",1); readingsSingleUpdate($hash,"call","rejected",1);
DoorPi_GetHistory($hash); #-- call dismissed
}elsif( $value eq "dismissed" ){ }elsif( $value eq "dismissed" ){
DoorPi_GetHistory($hash);
InternalTimer(gettimeofday()+5, "DoorPi_inform", $hash,0);
readingsSingleUpdate($hash,"call","dismissed",1); readingsSingleUpdate($hash,"call","dismissed",1);
DoorPi_GetHistory($hash);
}elsif( $value eq "startup" ){
DoorPi_GetConfig($hash);
DoorPi_GetHistory($hash);
}elsif( $value eq "snapshot" ){
# TODO
}else{ }else{
Log 1,"[DoorPi_Set] $value"; Log 1,"[DoorPi] unknown command set ... call $value";
} }
#-- call target #-- target for the call
}elsif( $key eq "target" ){ }elsif( $key eq "target" ){
if( $value =~ /[0123]/ ){ if( $value =~ /[0123]/ ){
if(AttrVal($name, "target$value",undef)){ if(AttrVal($name, "target$value",undef)){
@ -324,7 +329,7 @@ sub DoorPi_Set ($@) {
return; return;
} }
#-- Door opening - rather complicated #-- door commands
}elsif( ($key eq "$door")||($key eq "door") ){ }elsif( ($key eq "$door")||($key eq "door") ){
my $lockstate = ReadingsVal($name,"lockstate",undef); my $lockstate = ReadingsVal($name,"lockstate",undef);
@ -394,7 +399,7 @@ sub DoorPi_Set ($@) {
fhem(AttrVal($name, "doorunlockcmd",undef)); fhem(AttrVal($name, "doorunlockcmd",undef));
Log 1,"[DoorPi_Set] sent doorunlocked command to DoorPi and executed FHEM doorunlock command"; Log 1,"[DoorPi_Set] sent doorunlocked command to DoorPi and executed FHEM doorunlock command";
}else{ }else{
Log 1,"[DoorPi_Set] sent doorunlocked command to DoorPi and NOT executed FHEM doorunlock command"; #Log 1,"[DoorPi_Set] sent doorunlocked command to DoorPi and NOT executed FHEM doorunlock command";
} }
readingsSingleUpdate($hash,"lockstate","unlocked",1); readingsSingleUpdate($hash,"lockstate","unlocked",1);
readingsSingleUpdate($hash,$door,"unlocked",1); readingsSingleUpdate($hash,$door,"unlocked",1);
@ -408,7 +413,7 @@ sub DoorPi_Set ($@) {
fhem(AttrVal($name, "doorlockcmd",undef)); fhem(AttrVal($name, "doorlockcmd",undef));
Log 1,"[DoorPi_Set] sent doorlocked command to DoorPi and executed extra FHEM doorlock command"; Log 1,"[DoorPi_Set] sent doorlocked command to DoorPi and executed extra FHEM doorlock command";
}else{ }else{
Log 1,"[DoorPi_Set] sent doorlocked command to DoorPi and NOT executed extra FHEM doorlock command"; #Log 1,"[DoorPi_Set] sent doorlocked command to DoorPi and NOT executed extra FHEM doorlock command";
} }
readingsSingleUpdate($hash,"lockstate","locked",1); readingsSingleUpdate($hash,"lockstate","locked",1);
readingsSingleUpdate($hash,$door,"locked",1); readingsSingleUpdate($hash,$door,"locked",1);
@ -418,6 +423,7 @@ sub DoorPi_Set ($@) {
#-- snapshot #-- snapshot
}elsif( $key eq "$snapshot" ){ }elsif( $key eq "$snapshot" ){
$v=DoorPi_Cmd($hash,"snapshot"); $v=DoorPi_Cmd($hash,"snapshot");
InternalTimer(gettimeofday()+3, "DoorPi_GetLastSnapshot", $hash,0);
#-- video stream #-- video stream
}elsif( $key eq "$stream" ){ }elsif( $key eq "$stream" ){
if( $value eq "on" ){ if( $value eq "on" ){
@ -673,8 +679,8 @@ sub DoorPi_GetLastSnapshot {
#-- decode config #-- decode config
my $DoorPi = $jhash0->{"config"}->{"DoorPi"}; my $DoorPi = $jhash0->{"config"}->{"DoorPi"};
my $lastsnap = $jhash0->{"config"}->{"DoorPi"}->{"last_snapshot"}; my $lastsnap = $jhash0->{"config"}->{"DoorPi"}->{"last_snapshot"};
$url = "http://".$hash->{TCPIP}."/";
#push(@{ $hash->{DATA}}, ["",$state,$timestamp,$number,"started","--",$snapshot,$record] ); $lastsnap =~ s/\/home\/doorpi\/records\//$url/;
Log 1,"[DoorPi_GetLastSnapshot] returns $lastsnap"; Log 1,"[DoorPi_GetLastSnapshot] returns $lastsnap";
@ -1055,20 +1061,11 @@ sub DoorPi_makeShort($$$$){
my $ret = ""; my $ret = "";
if(AttrVal($name, "no-heading", "0") eq "0" and defined($FW_ME) and defined($FW_subdir))
{
#$ret .= '<tr><td>';
$ret .= '<div class="col1"><a href="'.$FW_ME.$FW_subdir.'?detail='.$name.'">'.$alias.'</a>'.(IsDisabled($name) ? ' (disabled)' : '').'</div>';
}
if(AttrVal($name, "language", "en") eq "de"){ if(AttrVal($name, "language", "en") eq "de"){
$ret .= "</td><td>".int(@{ $hash->{DATA}})." Einträge"; $ret .= "<div class=\"col2\">".int(@{$hash->{DATA}})."\&nbsp;Einträge</div>";
}else{ }else{
$ret .= "</td><td>".int(@{ $hash->{DATA}})." calls"; $ret .= "<div class=\"col2\">".int(@{$hash->{DATA}})."\&nbsp;calls</div>";
} }
$ret .= "</td><td><a href=\"/fhem?cmd.$devname=set $devname door open\">open</a>";
setlocale(LC_ALL, $old_locale); setlocale(LC_ALL, $old_locale);
@ -1101,19 +1098,28 @@ sub DoorPi_makeTable($$$$){
sub DoorPi_inform($){ sub DoorPi_inform($){
my ($hash) = @_; my ($hash) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $alias = AttrVal($hash->{NAME}, "alias", $hash->{NAME});
Log3 $name, 5, "[Doorpi_inform]- inform all FHEMWEB clients"; Log3 $name, 1, "[Doorpi_inform]- inform all FHEMWEB clients";
my $count = 0; my $count = 0;
foreach my $line (DoorPi_list($hash,1)){ foreach my $line (DoorPi_list($hash,1)){
#Log 1,"[Doorpi_Set] - informing $name with $line"; #Log 1,"[Doorpi_Set] - informing $name";
FW_directNotify($name, $line, 1); FW_directNotify($name, $line, 1);
$count++; $count++;
} }
# send the current row count to ensure all other rows are deleted via JS my $ret;
# FW_directNotify($name,"max-lines,$count", 1); if(AttrVal($name, "language", "en") eq "de"){
} $ret .= "</td><td><div class=\"col2\">".int(@{$hash->{DATA}})."\&nbsp;Einträge</div>";
}else{
$ret .= "</td><td><div class=\"col2\">".int(@{$hash->{DATA}})."\&nbsp;calls</div>";
}
FW_directNotify($name,"",$ret);
return undef;
}
####################################################################################### #######################################################################################
# #
@ -1274,7 +1280,6 @@ sub DoorPi_list($;$){
setlocale(LC_ALL, $old_locale); setlocale(LC_ALL, $old_locale);
return ($to_json ? @json_output : $ret); return ($to_json ? @json_output : $ret);
#return ($ret);
} }
@ -1366,6 +1371,9 @@ sub DoorPi_list($;$){
<li><a name="doorpi_target2"><code>attr &lt;DoorPi-Device&gt; target[0|1|2|3] <li><a name="doorpi_target2"><code>attr &lt;DoorPi-Device&gt; target[0|1|2|3]
&lt;string&gt;</code></a> &lt;string&gt;</code></a>
<br />Call target numbers for different redirections. If none is set, redirection will not be offered.</li> <br />Call target numbers for different redirections. If none is set, redirection will not be offered.</li>
<li><a name="doorpi_ringcmd"><code>attr &lt;DoorPi-Device&gt; ringcmd
&lt;string&gt;</code></a>
<br />FHEM command additionally executed for ringing action (no default)</li>
<li><a name="doorpi_doorbutton"><code>attr &lt;DoorPi-Device&gt; doorbutton <li><a name="doorpi_doorbutton"><code>attr &lt;DoorPi-Device&gt; doorbutton
&lt;string&gt;</code></a> &lt;string&gt;</code></a>
<br />DoorPi name for door action (default: door)</li> <br />DoorPi name for door action (default: door)</li>

View File

@ -1,5 +1,35 @@
# /bin/sh # /bin/sh
#
# FHEMHelper.sh
#
# Script file to perform various external tasks for DoorPi
#
# Prof. Dr. Peter A. Henning, 2016
#
# $Id: FHEMHelper 2016-05 - pahenning $
#
########################################################################################
#
# This programm is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# The GNU General Public License can be found at
# http://www.gnu.org/copyleft/gpl.html.
# A copy is found in the textfile GPL.txt and important notices to the license
# from the author is found in LICENSE.txt distributed with these scripts.
#
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#########################################################################################
# History
# no_Legend 2016-09-28: Hinzufügen von verschiedenen Variablen, sowie bedingte Ausführung
# der Textausgaben auf einem TTS_Device.
#########################################################################################
checkstream() { checkstream() {
streampid=`pidof mjpg_streamer` streampid=`pidof mjpg_streamer`
@ -10,41 +40,60 @@ checkstream() {
fi fi
} }
FHEMDP="A.Door.Pi" FHEMDP="A.Door.Pi" # FHEM Devicename for DoorPi
FHEMIP="192.168.xxx" FHEMIP="192.168.x.y" # IP address for DoorPi
FHEM="http://192.168xx:8083/fhem?XHR=1&cmd.$FHEMDP" FHEMPORT="8083" # Port number for DoorPi
HOME="/home/doorpi" FHEMHTTPS="false" # true for HTTPS, false without HTTPS
default_target="722xxxx" curlprog="curl"
curlargs="" # -k to disable HTTPS certificate check,
# -u user:password for user and password
HOME="/home/doorpi" # Doorpi Standard /usr/local/etc/DoorPi/
default_target="yyyyy" # default telephone number to be called
FHEMTTS="true" # true for TTS output, false without TTS
FHEMTTSDEVICE="GalaxyTab" # FHEM Devicename for TTS device
### FHEM path ###
if [ $FHEMHTTPS = "true" ]; then
FHEM="https://$FHEMIP:$FHEMPORT/fhem?XHR=1&cmd.$FHEMDP"
else
FHEM="http://$FHEMIP:$FHEMPORT/fhem?XHR=1&cmd.$FHEMDP"
fi
### execute commands ##
case $1 in case $1 in
init) target=`cat $HOME/calltarget` init) #-- send current target to FHEM
curl "$FHEM=setreading%20$FHEMDP%20call_target%20$target" & target=`cat $HOME/calltarget`
$curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20call_target%20$target" &
#-- send state of mjpg_streamer to FHEM
streampid=`pidof mjpg_streamer` streampid=`pidof mjpg_streamer`
if [ -z "$streampid" ]; then if [ -z "$streampid" ]; then
curl "$FHEM=setreading%20$FHEMDP%20stream%20off" & $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20stream%20off" &
else else
curl "$FHEM=setreading%20$FHEMDP%20stream%20on" & $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20stream%20on" &
fi fi
;; ;;
doorunlockandopen) doorunlockandopen)
curl "$FHEM=set%20GalaxyTab%20ttsSay%20Ein%20Bewohner%20betritt%20das%20Haus" & if [ $FHEMTTS = "true" ]; then
curl "$FHEM=set%20$FHEMDP%20door%20unlockandopen" & $curlprog $curlargs "$FHEM=set%20$FHEMTTSDEVICE%20ttsSay%20Ein%20Bewohner%20betritt%20das%20Haus" &
fi
$curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20unlockandopen" &
;; ;;
wrongid) wrongid)
curl "$FHEM=set%20GalaxyTab%20ttsSay%20Unerlaubter%20Zutrittsversuch" & if [ $FHEMTTS = "true" ]; then
curl "$FHEM=set%20$FHEMDP%20door%20wrong_id" & $curlprog $curlargs "$FHEM=set%20FHEMTTSDEVICE%20ttsSay%20Unerlaubter%20Zutrittsversuch" &
fi
$curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20wrong_id" &
;; ;;
softlock) softlock)
curl "$FHEM=set%20$FHEMDP%20door%20softlock" & $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20softlock" &
;; ;;
call) call)
curl "$FHEM=set%20$FHEMDP%20call%20$2" & $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20$2" &
;; ;;
gettarget) gettarget)
@ -56,11 +105,11 @@ case $1 in
;; ;;
movement) movement)
curl "$FHEM=set%20$FHEMDP%20door%20movement" & $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20movement" &
;; ;;
sabotage) sabotage)
curl "$FHEM=set%20$FHEMDP%20door%20sabotage" & $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20sabotage" &
;; ;;
esac esac

View File

@ -9,7 +9,7 @@ last_snapshot =
[DoorPiWeb] [DoorPiWeb]
indexfile = index.html indexfile = index.html
loginfile = login.html loginfile = login.html
online_fallback = http://motom001.github.io/DoorPiWeb #online_fallback = http://192.168.x.y:8083/fhem?detail=A.Door.Pi
port = 80 port = 80
public = AREA_public public = AREA_public
www = /home/doorpi/records www = /home/doorpi/records
@ -49,7 +49,7 @@ administrators = dashboard,status,config
guests = dashboard guests = dashboard
[AdminNumbers] [AdminNumbers]
**621 = active **xxx = active
[DTMF] [DTMF]
"#" = out:door,1,0,3 "#" = out:door,1,0,3
@ -63,8 +63,8 @@ firewallpolicy = PolicyNoFirewall
sipphonetyp = linphone sipphonetyp = linphone
sipserver_password = xxxxxxxxx sipserver_password = xxxxxxxxx
sipserver_realm = fritz.box sipserver_realm = fritz.box
sipserver_server = xxxxxxx sipserver_server = 192.168.x.y
sipserver_username = xxxxxx sipserver_username = yyy
stun_server = stun_server =
# #
max_call_time = 300 max_call_time = 300
@ -77,7 +77,7 @@ audio_codecs = PCMA,PCMU
record_while_dialing = False record_while_dialing = False
records = /home/doorpi/records/%Y-%m-%d_%H-%M-%S.wav records = /home/doorpi/records/%Y-%m-%d_%H-%M-%S.wav
# #
dialtone = /home/doorpi/sounds/ShortDialTone.wav dialtone = /home/doorpi/sounds/bigben_mono.wav
dialtone_renew_every_start = False dialtone_renew_every_start = False
dialtone_volume = 35 dialtone_volume = 35
echo_cancellation_enabled = False echo_cancellation_enabled = False
@ -90,26 +90,35 @@ video_size = vga
####################### Events ####################### ####################### Events #######################
[EVENT_OnStartup] [EVENT_OnStartup]
10 = sleep:1 10 = sleep:1
20 = os_execute:/home/doorpi/FHEMHelper.sh init
20 = os_execute:/home/doorpi/FHEMHelper.sh call init 20 = os_execute:/home/doorpi/FHEMHelper.sh call init
#30 = out:audio,1
[EVENT_BeforeSipPhoneMakeCall] [EVENT_BeforeSipPhoneMakeCall]
10 = out:irlight,1 10 = out:irlight,1
20 = os_execute:/home/doorpi/FHEMHelper.sh call startup 20 = take_snapshot
30 = take_snapshot 30 = os_execute:/home/doorpi/FHEMHelper.sh call started
40 = out:irlight,0 40 = out:irlight,0
#30 = mailto:haus271828@henning-weingarten.de,DoorPi,DoorPi initiating call #30 = mailto:haus271828@henning-weingarten.de,DoorPi,DoorPi initiating call
#[EVENT_OnCallStateConnect]
#10 = out:audio,0
[EVENT_OnCallStateDisconnect] [EVENT_OnCallStateDisconnect]
10 = os_execute:/home/doorpi/FHEMHelper.sh call end 10 = os_execute:/home/doorpi/FHEMHelper.sh call ended
#20 = out:audio,1
[EVENT_OnCallStateDismissed] [EVENT_OnCallStateDismissed]
10 = os_execute:/home/doorpi/FHEMHelper.sh call dismissed 10 = os_execute:/home/doorpi/FHEMHelper.sh call dismissed
#20 = out:audio,1
[EVENT_OnCallStateReject] [EVENT_OnCallStateReject]
10 = os_execute:/home/doorpi/FHEMHelper.sh call rejected 10 = os_execute:/home/doorpi/FHEMHelper.sh call rejected
20 = out:audio,1
[EVENT_OnTimeMinuteEvery5] [EVENT_OnTimeMinuteEvery5]
10=statuswatchdog:/tmp/doorpi.watchdog 10 = statuswatchdog:/tmp/doorpi.watchdog
#20 = out:audio,1
####################### Keyboards ############################## ####################### Keyboards ##############################
[keyboards] [keyboards]
@ -183,21 +192,27 @@ pull_up_down = PUD_UP
2 = dashlight 2 = dashlight
3 = irlight 3 = irlight
4 = hardlock 4 = hardlock
6 = audio
7 = blinking_led 7 = blinking_led
[onboardpins_InputPins] [onboardpins_InputPins]
0 = file_call_value:/home/doorpi/calltarget 0 = sleep:0
1 = sleep:0 1 = sleep:0
4 = sleep:0 4 = sleep:0
5 = sleep:0 5 = sleep:0
6 = sleep:0 6 = sleep:0
7 = sleep:0 7 = sleep:0
#-- DoorOpen pin from Arduino #-- RING THE BELL
[EVENT_OnKeyPressed_onboardpins.1] [EVENT_OnKeyPressed_onboardpins.0]
10 = os_execute:/home/doorpi/FHEMHelper.sh doorunlockandopen 20 = file_call_value:/home/doorpi/calltarget
20 = os_execute:aplay -D plughw:1,0 /home/doorpi/sounds/067_willkommen.wav
#-- DoorOpen pin from Arduino
[EVENT_OnKeyPressed_onboardpins.1]
#10 = out:audio,0
20 = os_execute:/home/doorpi/FHEMHelper.sh doorunlockandopen
30 = os_execute:aplay -D plughw:1,0 /home/doorpi/sounds/067_willkommen.wav
#40 = out:audio,1
#-- WrongID pin from Arduino #-- WrongID pin from Arduino
[EVENT_OnKeyPressed_onboardpins.4] [EVENT_OnKeyPressed_onboardpins.4]
@ -214,7 +229,6 @@ pull_up_down = PUD_UP
[EVENT_OnKeyPressed_onboardpins.6] [EVENT_OnKeyPressed_onboardpins.6]
10 = out:dashlight,1,0,1 10 = out:dashlight,1,0,1
20 = os_execute:/home/doorpi/FHEMHelper.sh movement 20 = os_execute:/home/doorpi/FHEMHelper.sh movement
30 = sleep:60
#-- Sabotage detection #-- Sabotage detection
[EVENT_OnKeyPressed_onboardpins.7] [EVENT_OnKeyPressed_onboardpins.7]