My RPiZ based backyard camera (192.168.3.18) is now triggered by Zigbee PIR sensors.
These send status messages to the Sonoff Zigbee Bridge (192.168.3.14 running Tasmota) which then publishes them to my MQTT Broker (running on a RPi4 192.168.3.6).
A Node-Red instance (running on a different RPi4 192.168.3.7) then parses these messages and if it is a motion ON (rather than OFF) message it causes a file to be created on its RPi4.
The RPiZ is checks for this file every second and takes a MOTION photo if it exists and after 5 minutes takes a TIMER photo anyway. It's using the following Bash script:
pi@tola-rpiz-noir-camera:~ $
pi@tola-rpiz-noir-camera:~ $
pi@tola-rpiz-noir-camera:~ $ sudo systemctl restart cameraStillCapture.service
pi@tola-rpiz-noir-camera:~ $ sudo systemctl status cameraStillCapture.service
● cameraStillCapture.service - Camera Still Capture
Loaded: loaded (/etc/systemd/system/cameraStillCapture.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-04-17 10:21:14 BST; 2s ago
Main PID: 7234 (camera.sh)
CGroup: /system.slice/cameraStillCapture.service
├─7234 /bin/bash /home/pi/camera.sh
└─7242 ssh pi@192.168.3.7 ls -al /home/pi/takePhoto.txt
Apr 17 10:21:14 tola-rpiz-noir-camera systemd[1]: Started Camera Still Capture.
Apr 17 10:21:15 tola-rpiz-noir-camera camera.sh[7234]: ls: cannot access '/home/pi/takePhoto.txt': No such file or
pi@tola-rpiz-noir-camera:~ $ cat camera.sh
#!/bin/bash
counter=500
RESP2="TIMER"
while :
do
#echo $counter
if [ $counter -gt 312 ]; then
raspistill -rot 90 -o /home/pi/backdoorRAW.jpg
convert /home/pi/backdoorRAW.jpg -fill white -undercolor '#00000080' -gravity North -pointsize 64 -annotate +5+5 $RESP2" $(date) " /home/pi/backdoor.jpg
RESP2="TIMER"
sudo cp /home/pi/backdoor*.jpg /var/www/html/
scp /home/pi/backdoor.jpg pi@192.168.3.6:/home/pi
counter=0
#echo RESET $counter
fi
RESP=$(ssh pi@192.168.3.7 "ls -al /home/pi/takePhoto.txt")
# If empty then file didn't exist and error stream message produced
# i.e. ls: Cannot access xxxxx No such file...
#echo $RESP
SUB='takePhoto'
#echo $SUB
if [ $(grep -c "$SUB" <<< "$RESP") -eq 1 ]; then
#echo "There"
counter=1000
RESP2=$(ssh pi@192.168.3.7 "cat /home/pi/takePhoto.txt")
echo $RESP2
RESP3=$(ssh pi@192.168.3.7 "rm /home/pi/takePhoto.txt")
#else
#echo "Not There"
fi
#sleep 312
sleep 1
counter=$((counter+1))
done
pi@tola-rpiz-noir-camera:~ $ date
Sun Apr 17 10:21:26 BST 2022
pi@tola-rpiz-noir-camera:~ $
I had to speed up the make movies script to catch the rapidly changin MOTION images (TIMER images only change every 5 mins)
pi@tola-smarthome-v3:~ $ cat makeMovies.sh
#!/bin/bash
echo "" > oldCottage.jpg
lastCottageSum=$(sum oldCottage.jpg | cut -c1-6)
cottageCounter=0
echo "" > oldExtension.jpg
lastExtensionSum=$(sum oldExtension.jpg | cut -c1-6)
extensionCounter=0
echo "" > oldFrontgarden.jpg
lastFrontgardenSum=$(sum oldFrontgarden.jpg | cut -c1-6)
frontgardenCounter=0
echo "" > oldBackdoor.jpg
lastBackdoorSum=$(sum oldBackdoor.jpg | cut -c1-6)
backdoorCounter=0
lastDate=$(date -I)
while :
do
cottageSum=$(sum cottage.jpg | cut -c1-6)
if [ $cottageSum -ne $lastCottageSum ]
then
echo $(date) cottage $cottageSum $lastCottageSum
lastCottageSum=$cottageSum
cottageCounter=$((cottageCounter+1))
#cp cottage.jpg cottageM$cottageCounter.jpg
cp cottage.jpg cottageM$(printf %04d $cottageCounter).jpg
fi
extensionSum=$(sum extension.jpg | cut -c1-6)
if [ $extensionSum -ne $lastExtensionSum ]
then
echo $(date) extension $extensionSum $lastExtensionSum
lastExtensionSum=$extensionSum
extensionCounter=$((extensionCounter+1))
#cp extension.jpg extensionM$extensionCounter.jpg
cp extension.jpg extensionM$(printf %04d $extensionCounter).jpg
fi
frontgardenSum=$(sum frontgarden.jpg | cut -c1-6)
if [ $frontgardenSum -ne $lastFrontgardenSum ]
then
echo $(date) frontgarden $frontgardenSum $lastFrontgardenSum
lastFrontgardenSum=$frontgardenSum
frontgardenCounter=$((frontgardenCounter+1))
#cp frontgarden.jpg frontgardenM$frontgardenCounter.jpg
cp frontgarden.jpg frontgardenM$(printf %04d $frontgardenCounter).jpg
fi
backdoorSum=$(sum backdoor.jpg | cut -c1-6)
if [ $backdoorSum -ne $lastBackdoorSum ]
then
echo $(date) backdoor $backdoorSum $lastBackdoorSum
lastBackdoorSum=$backdoorSum
backdoorCounter=$((backdoorCounter+1))
#cp backdoor.jpg backdoorM$backdoorCounter.jpg
cp backdoor.jpg backdoorM$(printf %04d $backdoorCounter).jpg
fi
date=$(date -I)
if [ $date != $lastDate ]
then
echo $(date) date $date $lastDate
mkdir $lastDate
mv frontroomM* $lastDate
frontroomCounter=0
mv cottageM* $lastDate
cottageCounter=0
mv frontgardenM* $lastDate
frontgardenCounter=0
mv backdoorM* $lastDate
backdoorCounter=0
lastDate=$date
fi
echo $(date) cottage $cottageSum $lastCottageSum
echo $(date) extension $extensionSum $lastExtensionSum
echo $(date) frontgarden $frontgardenSum $lastFrontgardenSum
echo $(date) backdoor $backdoorSum $lastBackdoorSum
# Need to be quicker to catch MOTION rather than TIMER images
#sleep 60
sleep 5
done
pi@tola-smarthome-v3:~ $ date
Sun 17 Apr 11:37:11 BST 2022
pi@tola-smarthome-v3:~ $ df -m .
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/root 14668 10114 3926 73% /
No comments:
Post a Comment