Security in der Gartenbewässerung

Security in der Gartenbewässerung

Es könnte sein, dass die Gartenbewässerung gestartet, jedoch nicht gestoppt wird. Ein Grund könnte sein, dass die Internetverbindung vom Raspi zum einem der Shellys kurzfristig unterbrochen ist. Damit in einem solchen Fall das Wasser nicht permament fliesst, setzen wir einen cronjob auf, der dies verhindert.
Annahme: Wir starten die Bewässerung um 03:11 Uhr während einer halben Stunde, pausieren danach ein halbe Stunde und wässern anschliessend nochmals eine halbe Stunde, dann sollte das Ventil nur zwischen ca. 03 Uhr und maximal 05 Uhr offen sein. In den übrigen Zeiten wird jede halbe Stunde kontrolliert, ob das Ventil geschlossen ist - falls nicht, wird es geschlossen. Wir definieren einen cronjob wie folgt:

*/30 0-2,5-23 * * * $HOME/smarthome/gartenbewaesserung/security/wasserSTOPP.sh >> $HOME/smarthome/gartenbewaesserung/security/wasserSTOPP.log 2>>$HOME/smarthome/gartenbewaesserung/security/wasserSTOPP.errlog

Das Sicherheitsscript wasserSTOPP.sh sieht wie folgt aus:

Zur besseren Darstellung wurde vor dem Einfügen des untenstehenden Scripts folgender Befehl benutzt:
cat ha.sh | > ha.text


#!/bin/bash # wasserSTOPP.sh 18Feb2024/uk # # Schalte Wasser sicherheitshalber aus (cronjob), falls dies nicht # ordnungsgemäss geschehen konnte: # cd $HOME/smarthome/gartenbewaesserung/security/ # source $HOME/smarthome/HA/MASTER.file if test "$MASTER" = "no" ; then echo "Nicht Master - exit! `date +%d.%m.%Y_%H:%M`" ## sleep 113 exit fi # IP_TRAFO="192.168.XXX.YYY" IP_VENTIL="192.168.XXX.ZZZ" # rm -f STOPP.history_new # task="http://$IP_VENTIL/rpc/Shelly.GetStatus" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt if test $? -eq 0 ; then out=`cat outVENTIL.txt | tr -s "," " " | tr -s ":" " " | tr -d '"' | tr -d "}"` VENTILstatus=`echo $out | cut -d" " -f 22` alarm=".false." if test "$VENTILstatus" = "true" ; then alarm=".true." echo "<font color=red><b>VENTIL status = $VENTILstatus `date +%d.%m.%Y_%H:%M:%S`</font></b><br>" >> STOPP.history_new echo "VENTIL offen, sollte aber geschlossen sein! - `date +%d.%m.%Y_%H:%M:%S`<br>" >> STOPP.history_new echo "TRAFO wird sicherheitshalber eingeschaltet...<br>" >> STOPP.history_new task="http://$IP_TRAFO/relay/0?turn=on" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outTRAFO.txt sleep 3 echo "VENTIL wird geschlossen...<br>" >> STOPP.history_new task="http://$IP_VENTIL/relay/0?turn=off" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt sleep 3 echo "TRAFO wird ausgeschaltet...<br>" >> STOPP.history_new task="http://$IP_TRAFO/relay/0?turn=off" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outTRAFO.txt task="http://$IP_VENTIL/rpc/Shelly.GetStatus" curl --fail --silent --show-error --no-sessionid --request GET "$task" --output outVENTIL.txt out=`cat outVENTIL.txt | tr -s "," " " | tr -s ":" " " | tr -d '"' | tr -d "}"` VENTILstatus=`echo $out | cut -d" " -f 22` echo "VENTIL status = $VENTILstatus - `date +%d.%m.%Y_%H:%M:%S`<br>" >> STOPP.history_new else echo "<font color=green><b>VENTIL ist geschlossen; OK - `date +%d.%m.%Y_%H:%M:%S`</font></b><br>" >> STOPP.history_new fi fi echo "<p>" >> STOPP.history_new # echo "<html>" > index_head.html echo "<head>" >> index_head.html echo "<body bgcolor=bbccff>" >> index_head.html echo "<title>" >> index_head.html echo "Security: Wasser STOPP History" >> index_head.html echo "</title>" >> index_head.html echo "</head>" >> index_head.html echo "<h2>Security: Wasser STOPP History</h2>" >> index_head.html echo "<p>" >> index_head.html if test "$alarm" = ".false." ; then echo "Die folgende Zeile wird regelmässig aktualisiert:" >> index_head.html echo "(Ausnahme: 03:00-06:00, wenn mögliche Bewässerung aktiviert ist)" >> index_head.html echo "<p>" >> index_head.html fi # cat index_head.html > STOPP.history_current # # Hole History von REMOTE_RECHNER, damit sie aktuell und auf beiden raspi's gleich ist: scp -p REMOTE_RECHNER:/var/www/htdocs-www.kradolfer.net/gartenbewaesserung/security/STOPP.history . # if test "$alarm" = ".true." ; then cat STOPP.history_new >> STOPP.history_current echo " <p>" >> STOPP.history_current echo "Die folgenden Zeilen werden nur aktualisiert, wenn das Ventil geschlossen werden muss:" >> STOPP.history_current echo "<p>" >> STOPP.history_current cat STOPP.history >> STOPP.history_current # cat STOPP.history >> STOPP.history_new mv STOPP.history_new STOPP.history scp -p STOPP.history REMOTE_RECHNER:/var/www/htdocs-www.kradolfer.net/gartenbewaesserung/security/ else cat STOPP.history_new >> STOPP.history_current echo " <p>" >> STOPP.history_current echo "Die folgenden Zeilen werden nur aktualisiert, wenn das Ventil geschlossen werden muss:" >> STOPP.history_current echo "<p>" >> STOPP.history_current cat STOPP.history >> STOPP.history_current fi # echo "<hr>" >> STOPP.history_current echo "<address>Last (automatic) update (`uname -n`): `date +%d.%m.%Y_%H:%M:%S` - Created: 19Feb2024/uk</address>" >> STOPP.history_current echo "</html>" >> STOPP.history_current # ##./make_security.sh scp -p STOPP.history_current REMOTE_RECHNER:ZIEL_DIRECTORY/ scp -p STOPP.history REMOTE_RECHNER:ZIEL_DIRECTORY/ #


Last update: 22Apr2024 - Created: 18Feb2024/uk