Page 1 of 1
Taking multiple snapshots after the doorbell is activated
Posted: Friday 08 January 2016 16:50
by Chakkie
Hi all,
I've been looking into this forum for a while and seems no one has posted this topic before. So I guess I just made a new one.
I was wondering if there is a possiblity to tell domoticz to make multiple snapshot in a certain interval after the doorbell is activated (pushed).
Like doorbell pushed -> take 10 snapshots with 0.5 - 1 second interval. -> send these images to an email or telegram bot.
Thanks all
Re: Taking multiple snapshots after the doorbell is activate
Posted: Friday 08 January 2016 17:19
by Egregius
Depends on the camera, not?
I just started playing with a RPi camera, looks very promising
Re: Taking multiple snapshots after the doorbell is activate
Posted: Friday 08 January 2016 17:24
by proohu01
Sure you can. Just start off with a lua script like this and change it to your linking. That is what I did. The origional link to the source forum is in the LUA script. This script protects you from peolple that like to press the doorbell more than once in a couple of seconds.
Code: Select all
--[[
Test-Deurbel-Foto
Lua Device script
--]]
-- Script needs a Domoticz uservariable called 'Dummybel_previous' of type 'String'
-- See http://domoticz.com/forum/viewtopic.php?f=23&t=7512 for more information
telegram_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
telegram_chatid_1 = 'xxxxxxx'
telegram_chatid_2 = 'xxxxxxx'
TimeBetweenPresses = 10 --time that needs to be between presses (in seconds), before os.execute line is ran again
commandArray = {}
function datetimedifferencenow(s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
if (devicechanged['dummybel'] == 'On') then
if (datetimedifferencenow(uservariables_lastupdate['Dummybel_previous']) > TimeBetweenPresses ) then
commandArray['Variable:Dummybel_previous']=tostring(os.time())
print('<b style="color:Blue">Doorbell pressed, previous time was <b style="color:Green">MORE</b> than '..TimeBetweenPresses..' sec ago, send pushnotification</b>')
os.execute('wget http://127.0.0.1:8080/camsnapshot.jpg?idx=1 && sudo mv camsnapshot.jpg?idx=1 /var/tmp/snapshot.jpg ')
os.execute('curl -s -X POST "https://api.telegram.org/bot'..telegram_token..'/sendPhoto" -F chat_id='..telegram_chatid_1..' -F photo="@/var/tmp/snapshot.jpg" ')
os.execute('curl -s -X POST "https://api.telegram.org/bot'..telegram_token..'/sendPhoto" -F chat_id='..telegram_chatid_2..' -F photo="@/var/tmp/snapshot.jpg" ')
commandArray['Variable:Dummybel_previous']=tostring(os.time())
else
print('<b style="color:Blue">Doorbell pressed, previous time was <b style="color:Red">LESS</b> than '..TimeBetweenPresses..' sec ago, ignore press of button</b>')
end
end
return commandArray
Re: Taking multiple snapshots after the doorbell is activate
Posted: Friday 08 January 2016 21:04
by Chakkie
Thanks you so much for sharing your script.
This is actually a very nice script to prevent someone who wants to mess with your doorbell by like pressing so many times.
But what I was looking for is when someone at the door press the doorbell once then mutiple snapshots will be taken in a specified interval.
The reason is that one snapshot may not always get a clear shot of the person's face. If you take a multiple shot in a half second interval or less you'll have a bigger chance of getting a better image of that person.
Looking at the lua script and could'nt find the trace of how to define the number of snapshot to be taken and the interval between the shots.
May be just adding simple lines will do the tricks??
Re: Taking multiple snapshots after the doorbell is activate
Posted: Thursday 21 January 2016 0:46
by Chakkie
Hi for anyone who also interested. I have figured out how to take a multiple short when doorbell is activated.
lua script:
Code: Select all
commandArray = {}
if (devicechanged['Deurbel voordeur']=='On') then
os.execute('/home/pi/domoticz/scripts/SentSnapshot.sh')
os.execute('/home/pi/domoticz/scripts/SentSnapshot.sh')
os.execute('/home/pi/domoticz/scripts/SentSnapshot.sh')
os.execute('/home/pi/domoticz/scripts/SentSnapshot.sh')
print('Script Deurbel is ingedrukt')
end
return commandArray
Just add the os.execute multiple times in the lua script
Use the following bash script and add sleep x (x is in second) to determine the interval between each snapshot is taken.
The following script is from another user who mentioned this script in the other topic. Please change the parameter to your own.
Code: Select all
#!/bin/sh
today=`/bin/date '+%d-%m-%Y__%H-%M-%S'`; #Used to generate filename
IP="172.19.3.7" # IP address Camera
#Ping IP-address of camera to see if it's online, otherwise we don't have to grab a snapshot
if ping -c 1 $IP > /dev/null ; then #Grab snapshot
#Get Snapshot from camera
wget "http://172.19.3.7:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=user&pwd=password" -O /volume1/Data/Deurbel_Snapshots/deurbel-$today.jpeg
#Send pushnotification with snapshot
/usr/bin/curl -s -X POST "https://api.telegram.org/bot123456789:yourcode/sendPhoto" -F chat_id=123456789 -F photo="@/volume1/Data/Deurbel_Snapshots/deurbel-$today.jpeg"
#Delete previous taken snapshots older than 7 days
find /volume1/Data/Deurbel_Snapshots/ -name '*.jpeg' -mtime +7 -delete
else
/usr/bin/curl --data chat_id=138165201 --data-urlencode "text=Camera is offline, so no image can be sent" "https://api.telegram.org/bot123456789:yourcode/sendMessage"
fi
Re: Taking multiple snapshots after the doorbell is activated
Posted: Sunday 28 February 2016 17:59
by JanKarel
Hello Chakkie would you have a suggestion for attachments to e-mails as well. I have the same object in mind as you, i.e. in response to a motion sensor, but únfortunately I'm not familiar at all with telegram bots.
JanKarel