From fc6a7cb8a0a343bf0994b5c3c1010e70d582d220 Mon Sep 17 00:00:00 2001
From: phenning <>
Date: Tue, 2 May 2017 16:32:41 +0000
Subject: [PATCH] 70_DoorPi.pm: Neue Version mit verbesserten Features
git-svn-id: https://svn.fhem.de/fhem/trunk@14169 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/contrib/DoorPi/70_DoorPi.pm | 30 ++++++++----
fhem/contrib/DoorPi/FHEMHelper.sh.safe | 43 +++++++++-------
fhem/contrib/DoorPi/doorpi.ini.safe | 68 +++++++++++++++++++-------
fhem/contrib/DoorPi/sendphoto.sh.safe | 35 +++++++++++++
4 files changed, 132 insertions(+), 44 deletions(-)
create mode 100644 fhem/contrib/DoorPi/sendphoto.sh.safe
diff --git a/fhem/contrib/DoorPi/70_DoorPi.pm b/fhem/contrib/DoorPi/70_DoorPi.pm
index ceec49bc6..87db45d25 100644
--- a/fhem/contrib/DoorPi/70_DoorPi.pm
+++ b/fhem/contrib/DoorPi/70_DoorPi.pm
@@ -41,7 +41,7 @@ use vars qw{%attr %defs};
sub Log($$);
#-- globals on start
-my $version = "2.0alpha9";
+my $version = "2.0alpha10";
#-- these we may get on request
my %gets = (
@@ -223,10 +223,12 @@ sub DoorPi_Set ($@) {
#-- if only hash as parameter, this is acting as timer callback
if( !@a ){
Log 5,"[DoorPi_Set] delayed action started with ".$hash->{DELAYED};
+ #-- delayed switching off light
if( $hash->{DELAYED} eq "light"){
@a=($hash->{NAME},"light","off");
+ #-- delayed door opening
}elsif( $hash->{DELAYED} eq "door_time"){
- @a=($hash->{NAME},"door","opened");
+ @a=($hash->{NAME},"door","open");
}
$hash->{DELAYED} = "";
}
@@ -236,7 +238,7 @@ sub DoorPi_Set ($@) {
#-- commands
my $door = AttrVal($name, "doorbutton", "door");
- my $doorsubs = "opened";
+ my $doorsubs = "open,opened";
$doorsubs .= ",locked"
if(AttrVal($name, "doorlockcmd",undef));
$doorsubs .= ",unlocked"
@@ -259,6 +261,7 @@ sub DoorPi_Set ($@) {
$newkeys = join(" ",@{ $hash->{HELPER}->{CMDS} });
#Log3 $name, 1,"=====> newkeys before subs $newkeys";
$newkeys =~ s/$door/$door:$doorsubs/; # FHEMWEB sugar
+ $newkeys =~ s/,opened//; # FHEMWEB sugar
$newkeys =~ s/\s$light/ $light:on,on-for-timer,off/; # FHEMWEB sugar
$newkeys =~ s/$dashlight/$dashlight:on,off/; # FHEMWEB sugar
$newkeys =~ s/$stream/$stream:on,off/; # FHEMWEB sugar
@@ -434,18 +437,23 @@ sub DoorPi_Door {
my $door = AttrVal($name, "doorbutton", "door");
my $lockstate = DoorPi_GetLockstate($hash);
- #-- BRANCH 1: opened from FHEM, door opening, forward to DoorPi
- if( (($cmd) && ($cmd eq "opened")) || ((!$cmd) && ($hash->{DELAYED} =~ /^open.*/)) ){
+ #-- "opened" => BRANCH 1.1: opening confirmation from DoorPi
+ if( ($cmd) && ($cmd eq "opened") ){
+ Log3 $name, 1,"[DoorPi_Door 1.1] received 'door opened' confirmation from DoorPi";
+ readingsSingleUpdate($hash,$door,"opened",1);
+
+ #-- "open" => BRANCH 1.0: door opening from FHEM, forward to DoorPi
+ }elsif( (($cmd) && ($cmd eq "open")) || ((!$cmd) && ($hash->{DELAYED} =~ /^open.*/)) ){
$hash->{DELAYED} = "";
#-- doit
$v=DoorPi_Cmd($hash,"dooropen");
- Log3 $name, 1,"[DoorPi_Door 1] sent 'dooropen' command to DoorPi";
- readingsSingleUpdate($hash,$door,"opened",1);
+ Log3 $name, 1,"[DoorPi_Door 1.0] sent 'dooropen' command to DoorPi";
+ readingsSingleUpdate($hash,$door,"opened (pending)",0);
#-- extra fhem command
$fhemcmd = AttrVal($name, "dooropencmd",undef);
fhem($fhemcmd)
if($fhemcmd);
-
+
#-- BRANCH 2: unlockandopen from DoorPi: door has to be unlocked if necessary
}elsif( $cmd eq "unlockandopen" ){
#-- unlocking the door now, delayed opening
@@ -478,10 +486,10 @@ sub DoorPi_Door {
}elsif ($lockstate =~ /^unlocked.*/){
Log3 $name, 1,"[DoorPi_Door] BRANCH 2.2 cmd=$cmd lockstate=$lockstate";
#-- doit
- $v=DoorPi_Cmd($hash,"doorunlocked");
$v=DoorPi_Cmd($hash,"dooropen");
+ $v=DoorPi_Cmd($hash,"doorunlocked");
Log3 $name, 1,"[DoorPi_Door 2.2] reset DoorPi to proper state and sent 'dooropen' command";
- readingsSingleUpdate($hash,$door,"opened",1);
+ readingsSingleUpdate($hash,$door,"opened (pending)",1);
#-- extra fhem command
$fhemcmd = AttrVal($name, "dooropencmd",undef);
fhem($fhemcmd)
@@ -1455,6 +1463,8 @@ sub DoorPi_list($;$){
If the third parameter is a nonempty string, this additional command is skipped. Can be useful, if the
locked/unlocked command comes from the door itself.
+
+ DoorPi will confirm reception of the dooropen command by calling set <DoorPi-Device> door opened
set <DoorPi-Device> snapshot
diff --git a/fhem/contrib/DoorPi/FHEMHelper.sh.safe b/fhem/contrib/DoorPi/FHEMHelper.sh.safe
index 79e2ec82a..08511e68a 100644
--- a/fhem/contrib/DoorPi/FHEMHelper.sh.safe
+++ b/fhem/contrib/DoorPi/FHEMHelper.sh.safe
@@ -4,9 +4,9 @@
#
# Script file to perform various external tasks for DoorPi
#
-# Prof. Dr. Peter A. Henning, 2016
+# Prof. Dr. Peter A. Henning, 2017
#
-# $Id: FHEMHelper 2016-05 - pahenning $
+# $Id: FHEMHelper 2017-05 - pahenning $
#
########################################################################################
#
@@ -41,16 +41,16 @@ checkstream() {
}
FHEMDP="A.Door.Pi" # FHEM Devicename for DoorPi
-FHEMIP="192.168.x.y" # IP address for DoorPi
+FHEMIP="XX.XX.XX.XX" # IP address for DoorPi
FHEMPORT="8083" # Port number for DoorPi
-FHEMHTTPS="false" # true for HTTPS, false without HTTPS
+FHEMHTTPS="false" # true for HTTPS, false without HTTPS
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
+default_target="xxxxxx" # default telephone number to be called
FHEMTTS="true" # true for TTS output, false without TTS
-FHEMTTSDEVICE="GalaxyTab" # FHEM Devicename for TTS device
+FHEMTTSDEVICE="AllTablets" # FHEM Devicename for TTS device
### FHEM path ###
if [ $FHEMHTTPS = "true" ]; then
@@ -62,7 +62,7 @@ if [ $FHEMHTTPS = "true" ]; then
### execute commands ##
case $1 in
-init) #-- send current target to FHEM
+ init) #-- send current target to FHEM
target=`cat $HOME/calltarget`
$curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20call_target%20$target" &
#-- send state of mjpg_streamer to FHEM
@@ -75,17 +75,21 @@ init) #-- send current target to FHEM
;;
doorunlockandopen)
- if [ $FHEMTTS = "true" ]; then
- $curlprog $curlargs "$FHEM=set%20$FHEMTTSDEVICE%20ttsSay%20Ein%20Bewohner%20betritt%20das%20Haus" &
- fi
$curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20unlockandopen" &
+ if [ $FHEMTTS = "true" ]; then
+ $curlprog $curlargs "$FHEM=set%20$FHEMTTSDEVICE%20audioPlay%20Music/066_zutrittbewohner.mp3" &
+ fi
+ ;;
+
+ dooropened)
+ $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20opened" &
;;
wrongid)
- if [ $FHEMTTS = "true" ]; then
- $curlprog $curlargs "$FHEM=set%20FHEMTTSDEVICE%20ttsSay%20Unerlaubter%20Zutrittsversuch" &
- fi
- $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20wrong_id" &
+ $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20wrong_id" &
+ if [ $FHEMTTS = "true" ]; then
+ $curlprog $curlargs "$FHEM=set%20$FHEMTTSDEVICE%20audioPlay%20Music/065_zutrittsversuch.mp3" &
+ fi
;;
softlock)
@@ -101,15 +105,20 @@ init) #-- send current target to FHEM
;;
purge)
- find $HOME/records/ -type f -ctime 1 -delete
+ find $HOME/records/ -type f -ctime +1 -delete
;;
movement)
- $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20movement" &
+ $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20movement" &
;;
sabotage)
- $curlprog $curlargs "$FHEM=set%20$FHEMDP%20door%20sabotage" &
+ $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20sabotage" &
;;
+ alive)
+ $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20alive" &
+ ;;
+
+
esac
diff --git a/fhem/contrib/DoorPi/doorpi.ini.safe b/fhem/contrib/DoorPi/doorpi.ini.safe
index 0d90bde6a..592c2321b 100644
--- a/fhem/contrib/DoorPi/doorpi.ini.safe
+++ b/fhem/contrib/DoorPi/doorpi.ini.safe
@@ -1,3 +1,30 @@
+#
+# doorpi.ini
+#
+# Configuration file for DoorPi
+#
+# Prof. Dr. Peter A. Henning, 2017
+#
+# $Id: doorpi.ini 2017-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.
+#
+#########################################################################################
[DoorPi]
base_path = /usr/local/etc/DoorPi
snapshot_path = /home/doorpi/records
@@ -9,7 +36,7 @@ last_snapshot =
[DoorPiWeb]
indexfile = index.html
loginfile = login.html
-#online_fallback = http://192.168.x.y:8083/fhem?detail=A.Door.Pi
+#online_fallback = URLURL:8083/fhem?detail=A.Door.Pi
port = 80
public = AREA_public
www = /home/doorpi/records
@@ -49,7 +76,7 @@ administrators = dashboard,status,config
guests = dashboard
[AdminNumbers]
-**xxx = active
+**621 = active
[DTMF]
"#" = out:door,1,0,3
@@ -61,10 +88,10 @@ local_port = 5060
firewallpolicy = PolicyNoFirewall
#
sipphonetyp = linphone
-sipserver_password = xxxxxxxxx
+sipserver_password = XXXXXXXXXXXXX
sipserver_realm = fritz.box
-sipserver_server = 192.168.x.y
-sipserver_username = yyy
+sipserver_server = IPIPIP
+sipserver_username = 620
stun_server =
#
max_call_time = 300
@@ -92,14 +119,13 @@ video_size = vga
10 = sleep:1
20 = os_execute:/home/doorpi/FHEMHelper.sh init
20 = os_execute:/home/doorpi/FHEMHelper.sh call init
-#30 = out:audio,1
[EVENT_BeforeSipPhoneMakeCall]
10 = out:irlight,1
20 = take_snapshot
30 = os_execute:/home/doorpi/FHEMHelper.sh call started
40 = out:irlight,0
-#30 = mailto:haus271828@henning-weingarten.de,DoorPi,DoorPi initiating call
+50 = os_execute:/home/doorpi/sendphoto call
#[EVENT_OnCallStateConnect]
#10 = out:audio,0
@@ -118,7 +144,7 @@ video_size = vga
[EVENT_OnTimeMinuteEvery5]
10 = statuswatchdog:/tmp/doorpi.watchdog
-#20 = out:audio,1
+20 = os_execute:/home/doorpi/FHEMHelper.sh alive
####################### Keyboards ##############################
[keyboards]
@@ -132,14 +158,13 @@ base_path_output = /home/doorpi/keyboard/outputs/
reset_input=false
[webservice_InputPins]
-dooropen = out:door,1,0,3
+dooropen = sleep:0
doorlocked = out:hardlock,1
doorunlocked = out:hardlock,0
snapshot = sleep:0
streamon = sleep:0
streamoff = sleep:0
lighton = out:light,1
-#lightonfortimer = out:light,1,0,60
lightoff = out:light,0
dashlighton = out:dashlight,1
dashlightoff = out:dashlight,0
@@ -149,12 +174,18 @@ clear = sleep:0
button1 = sleep:0
button2 = sleep:0
-#-- communicate to FHEM that a snapshot has been taken
+#-- open door and communicate to FHEM that door has been opened
+[EVENT_OnKeyPressed_webservice.dooropen]
+10 = out:door,1,0,3
+20 = os_execute:/home/doorpi/FHEMHelper.sh dooropened
+
+#-- taks snapshot and communicate to FHEM that a snapshot has been taken
[EVENT_OnKeyPressed_webservice.snapshot]
10 = out:irlight,1
20 = os_execute:/home/doorpi/FHEMHelper.sh call snapshot
30 = take_snapshot
40 = out:irlight,0
+50 = os_execute:/home/doorpi/sendphoto.sh snapshot
#-- start video stream
[EVENT_OnKeyPressed_webservice.streamon]
@@ -203,16 +234,18 @@ pull_up_down = PUD_UP
6 = sleep:0
7 = sleep:0
-#-- RING THE BELL
+#-- Ring the bell
[EVENT_OnKeyPressed_onboardpins.0]
-20 = file_call_value:/home/doorpi/calltarget
+10 = file_call_value:/home/doorpi/calltarget
#-- 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
+10 = os_execute:/home/doorpi/FHEMHelper.sh doorunlockandopen
+20 = os_execute:aplay -D plughw:1,0 /home/doorpi/sounds/067_willkommen.wav
+
+#-- Open the door
+#[EVENT_OnKeyPressed_onboardpins.2]
+#10 = out:door,1,0,5
#-- WrongID pin from Arduino
[EVENT_OnKeyPressed_onboardpins.4]
@@ -220,6 +253,7 @@ pull_up_down = PUD_UP
20 = os_execute:/home/doorpi/FHEMHelper.sh wrongid
30 = take_snapshot
40 = out:irlight,0
+50 = os_execute:/home/doorpi/sendphoto.sh wrongid
#-- LockState pin from Arduino - FHEM will transform softlock into hardlock
[EVENT_OnKeyPressed_onboardpins.5]
diff --git a/fhem/contrib/DoorPi/sendphoto.sh.safe b/fhem/contrib/DoorPi/sendphoto.sh.safe
new file mode 100644
index 000000000..d8c68752d
--- /dev/null
+++ b/fhem/contrib/DoorPi/sendphoto.sh.safe
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# sendphoto.sh
+#
+# Script file to send a doorpi photo per telegram
+#
+# Prof. Dr. Peter A. Henning, 2017
+#
+# $Id: sendphoto.sh 2017-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.
+#
+#########################################################################################
+last=`ls -tr /home/doorpi/records/*.jpg | tail -1`
+Token=TELEGRAMTOKEN
+ChatId=CHATID
+echo "Sending photo $last" > /home/doorpi/sendphoto.log
+curl -s -k "https://api.telegram.org/bot${Token}/sendPhoto" -d photo="http://URLURLURL/doorpi/$last" -d chat_id=$ChatId >> /home/doorpi/sendphoto.log
+exit 0
+