Mutliple events
Moderator: leecollings
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Mutliple events
Hi Guys,
I am posting this here, as it's switch related.
I am having an issue where a specifi bash script is triggered to run more than once. I know why, but not how to surpress it.
I have several EspEasy devices, with all kinds of sensors and they all work flawlessly except for the one with a doorbell switch.
What happens is this, doorbell button is pushed, this triggers an event on the Esp and then send to the controller (Domoticz).
There it activates a bash script.
This script records a stream from the doorcamera, which is saved and sent to my phone.
All this works wonderfull, only thing is that when the doorbell is pressed seveerl times, the scriupt is triggered several times.
I made sure that if the script runs, it cannot run simultaneously. So it runs one after another for the amounts of the times the doorbell is pressed.
What i would like is to prevent this behaviour on the Esp or on Domoticz. For example do not run when pressed within a minute or so.
My Esp Device looks like this:
GPIO-0 (D3)
Switch Type: Switch
Switch Button Type: Normal Switch
De-bounce (ms): 250
Doubleclick event: Disabled
Doubleclick max. interval (ms): 2000
Longpress event: Disabled
Longpress min. interval (ms): 1000
Interval: 5000 [sec] (Optional for this Device)
In the Domoticz the switch is set-up like this:
Name: Deurbel
Switch Type: On/Off
On Delay: 0 (Seconds) 0 = Disabled
Off Delay: 20 (Seconds) 0 = Disabled
On Action: script:///home/pi/domoticz/scripts/VoordeurBelCam-vid.sh
Under devices:
Esp Switches 0001406C 1 Deurbel Light/Switch Switch Off
I think i am overlooking something easy and am pretty sure this should/can be solved in either the Esp or in Domoticz
I am posting this here, as it's switch related.
I am having an issue where a specifi bash script is triggered to run more than once. I know why, but not how to surpress it.
I have several EspEasy devices, with all kinds of sensors and they all work flawlessly except for the one with a doorbell switch.
What happens is this, doorbell button is pushed, this triggers an event on the Esp and then send to the controller (Domoticz).
There it activates a bash script.
This script records a stream from the doorcamera, which is saved and sent to my phone.
All this works wonderfull, only thing is that when the doorbell is pressed seveerl times, the scriupt is triggered several times.
I made sure that if the script runs, it cannot run simultaneously. So it runs one after another for the amounts of the times the doorbell is pressed.
What i would like is to prevent this behaviour on the Esp or on Domoticz. For example do not run when pressed within a minute or so.
My Esp Device looks like this:
GPIO-0 (D3)
Switch Type: Switch
Switch Button Type: Normal Switch
De-bounce (ms): 250
Doubleclick event: Disabled
Doubleclick max. interval (ms): 2000
Longpress event: Disabled
Longpress min. interval (ms): 1000
Interval: 5000 [sec] (Optional for this Device)
In the Domoticz the switch is set-up like this:
Name: Deurbel
Switch Type: On/Off
On Delay: 0 (Seconds) 0 = Disabled
Off Delay: 20 (Seconds) 0 = Disabled
On Action: script:///home/pi/domoticz/scripts/VoordeurBelCam-vid.sh
Under devices:
Esp Switches 0001406C 1 Deurbel Light/Switch Switch Off
I think i am overlooking something easy and am pretty sure this should/can be solved in either the Esp or in Domoticz
- jvdz
- Posts: 2189
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: Mutliple events
Add something like this to avoid running multiple occurrences of a shell script:
check what the proper value of $cnt has to be in the script and change the test value 1 when needed.
Code: Select all
cnt=`ps x | grep "VoordeurBelCam-vid.sh"|grep -cv grep`
echo $cnt
if [ $cnt -gt 1 ]
then
echo "Process already running"
exit
fi
--- rest of your script
New Garbage collection scripts: https://github.com/jvanderzande/GarbageCalendar
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
Hi jvdz,
In the script i already prevent it from running more then once, that's not the problem.
The problem is that, somewhere (Domoticz, Espeasy) each press is remembered and handled after the first press and thus the script starts again.
In the script i already prevent it from running more then once, that's not the problem.
The problem is that, somewhere (Domoticz, Espeasy) each press is remembered and handled after the first press and thus the script starts again.
- jvdz
- Posts: 2189
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: Mutliple events
Ah ok ... so it is started by an event. Then you need to make it so the event script ( a separate new one) launches the recording script and then end immediately. That way yhe events are handled right away and any second run is stopped by yhe above logic.
New Garbage collection scripts: https://github.com/jvanderzande/GarbageCalendar
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
First thanks for your quick replies!
Not sure why this would work, but worth a try.
I have created a new script, which is started by the Domo switch event:
cnt=`ps x | grep "Pre-VoordeurBel.sh"|grep -cv grep`
echo $cnt
if [ $cnt -gt 1 ]
then
echo "Process already running"
exit
fi
--- rest of your script
./VoordeurBelCam-vid.sh
This what you meant?
Gonna test it asap.
Care to elaborate? Why would this new script not run multiple times, just like the original?
To me, it looks like Domo would just wait until the script ends and then says go ahead, another one.
Not sure why this would work, but worth a try.
I have created a new script, which is started by the Domo switch event:
cnt=`ps x | grep "Pre-VoordeurBel.sh"|grep -cv grep`
echo $cnt
if [ $cnt -gt 1 ]
then
echo "Process already running"
exit
fi
--- rest of your script
./VoordeurBelCam-vid.sh
This what you meant?
Gonna test it asap.
Care to elaborate? Why would this new script not run multiple times, just like the original?
To me, it looks like Domo would just wait until the script ends and then says go ahead, another one.
- jvdz
- Posts: 2189
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: Mutliple events
Yes but you need a & at the end of the line or else the script will wait for VoordeurBelCam-vid.sh to finish!
So the line need to be
./VoordeurBelCam-vid.sh &
And the check for the VoordeurBelCam-vid.sh in stead of the pre.....
So the line need to be
./VoordeurBelCam-vid.sh &
And the check for the VoordeurBelCam-vid.sh in stead of the pre.....
New Garbage collection scripts: https://github.com/jvanderzande/GarbageCalendar
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
So, like this:
cnt=`ps x | grep "VoordeurBelCam-vid.sh"|grep -cv grep`
echo $cnt
if [ $cnt -gt 1 ]
then
echo "Process already running"
exit
fi
--- rest of your script
./VoordeurBelCam-vid.sh &
Although this looks very promising and i'll definately will use it, wouldn't it be better to prevent this behaviour in Domo or already at the Esp?
cnt=`ps x | grep "VoordeurBelCam-vid.sh"|grep -cv grep`
echo $cnt
if [ $cnt -gt 1 ]
then
echo "Process already running"
exit
fi
--- rest of your script
./VoordeurBelCam-vid.sh &
Although this looks very promising and i'll definately will use it, wouldn't it be better to prevent this behaviour in Domo or already at the Esp?
- habahabahaba
- Posts: 192
- Joined: Saturday 18 March 2023 14:44
- Target OS: Windows
- Domoticz version: 2024.4
- Contact:
Re: Mutliple events
try to use <LastUpdate> property in Dzvents script
if <YourDeviceStatus>.lastUpdate.secondsAgo > 60 then
-- your actions
end
if <YourDeviceStatus>.lastUpdate.secondsAgo > 60 then
-- your actions
end
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
Thanks Haba,
I will look into this also, not really played with Dzevents before.
I will look into this also, not really played with Dzevents before.
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
I have it running the way you describe it and your logic works, but it does not help me with my problem, which is still thereAriePiet wrote: ↑Sunday 31 March 2024 14:18 So, like this:
cnt=`ps x | grep "VoordeurBelCam-vid.sh"|grep -cv grep`
echo $cnt
if [ $cnt -gt 1 ]
then
echo "Process already running"
exit
fi
--- rest of your script
./VoordeurBelCam-vid.sh &
Although this looks very promising and i'll definately will use it, wouldn't it be better to prevent this behaviour in Domo or already at the Esp?
- habahabahaba
- Posts: 192
- Joined: Saturday 18 March 2023 14:44
- Target OS: Windows
- Domoticz version: 2024.4
- Contact:
Re: Mutliple events
And where did you place the path to your script?
Try to put it on "Notifications"
To the "Action" field and there is Ignore interval slider
Which can be set it Setup/Settings/Notifications
Try to put it on "Notifications"
To the "Action" field and there is Ignore interval slider
Which can be set it Setup/Settings/Notifications
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
@haba
Tears of joy and happiness here, it looks like it's working!
Not sure about you example, but i had to uncheck the 'Ignore Interval' option:
Tears of joy and happiness here, it looks like it's working!
Not sure about you example, but i had to uncheck the 'Ignore Interval' option:
- habahabahaba
- Posts: 192
- Joined: Saturday 18 March 2023 14:44
- Target OS: Windows
- Domoticz version: 2024.4
- Contact:
Re: Mutliple events
Great
Could you show the 'VoordeurBelCam-vid.sh' code?
May be i need it too
Could you show the 'VoordeurBelCam-vid.sh' code?
May be i need it too
-
- Posts: 8
- Joined: Saturday 30 March 2024 12:40
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Mutliple events
Hi Haba,
Sorry for the late response.
Here you have the basic for the script:
#!/bin/bash
# VoordeurBelCam-vid.sh
# ==============
# |Author: JvdB|
# ==============
# Take video with the SmartWares IP WiFi camera..!
# With this script you save a live video from any camera using rtsp, mine is a SmartWares
#
# Script is triggered by a sensor (Doorbell), variables on when to run are not covered in this script (for that i use Domoticz).
# Capture program is 'FFMPEG', installation/set-up is not covered in this script.
# Communication to/with Telegram is done with 'Curl', installation/set-up is not covered in this script.
#
# To prevent this script from running more instances at the same time and thus probably slow down you pi (or server), we make sure it only runs once
# We do this by creating a PID file, if one exist when the script starts it won't run. Besides that if an abandoned PID file is found, but there's no corresponding process,
# the existing PID file is removed and a new one created and the script will run normally.
#
# ============================================
# Redirect stdout and stderr to debug log file
# ============================================
#exec &>> /home/pi/domoticz/scripts/debug.log
#
# =======================================================
# Start PID file creation and check for running instances
# =======================================================
PIDFILE=/home/pi/domoticz/scripts/VoordeurBelCam-vid.pid
#
# ----- script running? -----
[[ -s $PIDFILE ]] && exit
#
# no, create pidfile
echo $BASHPID > $PIDFILE
#
# =================
# En PID file check
# =================
# Start Variables
# =================
# currenttime - Check the current time to let the script run or not
# DATE - Datetime stamp, i always start with this variable, otherwise you might encounter problems in your script, if the path is changed
# IP - the ip address of your camera
# PORT - the port on which the camera operates (SmartWares is default 80, that's why i don't use it in this script)
# Rec_Time - duration of recording in seconds
# PATH - where the recording will be saved
# FILENAME - Name of the file/recording - Datetime is added! (format/extension for me is always mp4)
# Telegram_bot_id - Telegram bot id, bot from who you'll receive notifications
# Telegram_chat_id - Telegram chat id, this can be a personal or a group chat id. Howto set-up is not covered in this script!
# Ret_days - Amount of days to save previous recordings, play around with this
#
currenttime=$(date +%H:%M)
DATE=`date '+%Y-%m-%d_%H-%M'`
IP=123.123.123.123
# PORT=8080
Rec_Time=180
#Rec_Time=30
PATH='/DATA/media/videos/voordeur'
FILENAME="Voordeur-$DATE.mp4"
Telegram_bot_id=botname:"123...some string"
Telegram_chat_id="You TG id"
Message='Deurbel..!'
Ret_days=7
#
# ================
# End variables
# ================
# Start time check
# ================
#
if [[ "$currenttime" > "00:00" ]] || [[ "$currenttime" < "00:00" ]]
then
#
# ===============
# End time check
# ===============
# Start recording
# ===============
#
/usr/bin/ffmpeg -i rtsp://"loginname":"password"@$IP/live/av0? -vcodec copy -t $Rec_Time -y $PATH/$FILENAME;
#
# ======================
# End Recording
# ======================
# Start Telegram message
# ======================
#
/usr/bin/curl -s -X POST "https://api.telegram.org/$Telegram_bot_ ... t=$Message"
#
# Send Telegram video (optional, please consider time/length of recording), uncomment it if you want to sent it
# -------------------------------------------------------------------------------------------------------------
/usr/bin/curl -s -X POST "https://api.telegram.org/$Telegram_bot_id/sendVideo" -F chat_id=$Telegram_chat_id -F video="@$PATH/$FILENAME"
#
# ===================
# End Telgram message
# ===================
# Start Clean-up
# Remove recording(s) (To prevent you harddisk from filling up) and to remove the PID file.
# =========================================================================================
#
/usr/bin/find $PATH -type f -name '*.mp4' -mtime +$Ret_days -exec /bin/rm {} \;
/bin/rm /home/pi/domoticz/scripts/VoordeurBelCam-vid.pid
#
# =============
# End Clean-up
# =============
#
exit 0
else
#
# Remove the PID file for the second exit (when the script did not run, because of time window).
# ==============================================================================================
#
/bin/rm /home/pi/domoticz/scripts/VoordeurBelCam-vid.pid
exit 0
fi
In the above i use a generic RTS stream from a capable camera and i use Telegram to sent the info/video to my phone.
The files are stored for 7 days
And the time option is there, just in case you want to only record at given times or as in my case you also use this script for movement (other caerma in backyard) at certain times during the night.
Sorry for the late response.
Here you have the basic for the script:
#!/bin/bash
# VoordeurBelCam-vid.sh
# ==============
# |Author: JvdB|
# ==============
# Take video with the SmartWares IP WiFi camera..!
# With this script you save a live video from any camera using rtsp, mine is a SmartWares
#
# Script is triggered by a sensor (Doorbell), variables on when to run are not covered in this script (for that i use Domoticz).
# Capture program is 'FFMPEG', installation/set-up is not covered in this script.
# Communication to/with Telegram is done with 'Curl', installation/set-up is not covered in this script.
#
# To prevent this script from running more instances at the same time and thus probably slow down you pi (or server), we make sure it only runs once
# We do this by creating a PID file, if one exist when the script starts it won't run. Besides that if an abandoned PID file is found, but there's no corresponding process,
# the existing PID file is removed and a new one created and the script will run normally.
#
# ============================================
# Redirect stdout and stderr to debug log file
# ============================================
#exec &>> /home/pi/domoticz/scripts/debug.log
#
# =======================================================
# Start PID file creation and check for running instances
# =======================================================
PIDFILE=/home/pi/domoticz/scripts/VoordeurBelCam-vid.pid
#
# ----- script running? -----
[[ -s $PIDFILE ]] && exit
#
# no, create pidfile
echo $BASHPID > $PIDFILE
#
# =================
# En PID file check
# =================
# Start Variables
# =================
# currenttime - Check the current time to let the script run or not
# DATE - Datetime stamp, i always start with this variable, otherwise you might encounter problems in your script, if the path is changed
# IP - the ip address of your camera
# PORT - the port on which the camera operates (SmartWares is default 80, that's why i don't use it in this script)
# Rec_Time - duration of recording in seconds
# PATH - where the recording will be saved
# FILENAME - Name of the file/recording - Datetime is added! (format/extension for me is always mp4)
# Telegram_bot_id - Telegram bot id, bot from who you'll receive notifications
# Telegram_chat_id - Telegram chat id, this can be a personal or a group chat id. Howto set-up is not covered in this script!
# Ret_days - Amount of days to save previous recordings, play around with this
#
currenttime=$(date +%H:%M)
DATE=`date '+%Y-%m-%d_%H-%M'`
IP=123.123.123.123
# PORT=8080
Rec_Time=180
#Rec_Time=30
PATH='/DATA/media/videos/voordeur'
FILENAME="Voordeur-$DATE.mp4"
Telegram_bot_id=botname:"123...some string"
Telegram_chat_id="You TG id"
Message='Deurbel..!'
Ret_days=7
#
# ================
# End variables
# ================
# Start time check
# ================
#
if [[ "$currenttime" > "00:00" ]] || [[ "$currenttime" < "00:00" ]]
then
#
# ===============
# End time check
# ===============
# Start recording
# ===============
#
/usr/bin/ffmpeg -i rtsp://"loginname":"password"@$IP/live/av0? -vcodec copy -t $Rec_Time -y $PATH/$FILENAME;
#
# ======================
# End Recording
# ======================
# Start Telegram message
# ======================
#
/usr/bin/curl -s -X POST "https://api.telegram.org/$Telegram_bot_ ... t=$Message"
#
# Send Telegram video (optional, please consider time/length of recording), uncomment it if you want to sent it
# -------------------------------------------------------------------------------------------------------------
/usr/bin/curl -s -X POST "https://api.telegram.org/$Telegram_bot_id/sendVideo" -F chat_id=$Telegram_chat_id -F video="@$PATH/$FILENAME"
#
# ===================
# End Telgram message
# ===================
# Start Clean-up
# Remove recording(s) (To prevent you harddisk from filling up) and to remove the PID file.
# =========================================================================================
#
/usr/bin/find $PATH -type f -name '*.mp4' -mtime +$Ret_days -exec /bin/rm {} \;
/bin/rm /home/pi/domoticz/scripts/VoordeurBelCam-vid.pid
#
# =============
# End Clean-up
# =============
#
exit 0
else
#
# Remove the PID file for the second exit (when the script did not run, because of time window).
# ==============================================================================================
#
/bin/rm /home/pi/domoticz/scripts/VoordeurBelCam-vid.pid
exit 0
fi
In the above i use a generic RTS stream from a capable camera and i use Telegram to sent the info/video to my phone.
The files are stored for 7 days
And the time option is there, just in case you want to only record at given times or as in my case you also use this script for movement (other caerma in backyard) at certain times during the night.
- habahabahaba
- Posts: 192
- Joined: Saturday 18 March 2023 14:44
- Target OS: Windows
- Domoticz version: 2024.4
- Contact:
Re: Mutliple events
Yes, thank you.
But ffmpeg uses too much resourses of OS.
So, i will stay on taking pictures and sending them
But ffmpeg uses too much resourses of OS.
So, i will stay on taking pictures and sending them
Who is online
Users browsing this forum: No registered users and 1 guest