automatischer Restart/Reboot nach Stop

wenn es um andere Software geht
Benutzeravatar
JoachimF
Beiträge: 339
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

automatischer Restart/Reboot nach Stop

Beitrag von JoachimF »

Kurz nach Mitternacht ist die Weewx Ecowitt Instanz (GW3000) stehen geblieben.
daytempdew.png
daytempdew.png (16.54 KiB) 174 mal betrachtet
Einige Daten, wie z.B. Temperatur, werden nach einem 'sudo systemclt restart weewx' automatisch wieder nachgetragen,
aber nicht alle Daten.
Ich würde mir ein Script erstellen, welches bei Ausbleiben von Daten einen automatischen Restart ausführt.
Welches Kriterium wäre dafür geeignet?
Alter der Grafiken in der Html, Syslog ?
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 6117
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 147 mal
Kontaktdaten:

Re: automatischer Restart/Reboot nach Stop

Beitrag von Werner »

@Joachim,
Die Daten (z.B. Spannungen, Signale, RSSi) die fehlen, werden nicht auf der SDCard gespeichert
und können deshalb auch nicht von dort wiederhergestellt werden.


Ich überwache die Datenbanken der einzelnen Instanzen mit einem cronjob alle 5 Minuten
-> checkweew.sh -> */5 * * * * /etc/checkweewx.sh
(7 Instanzen von Weewx), Ja es laufen 7 Instanzen von WeeWx auf diesem RasPi !
wobei manche Ecowitt-Geräte unbedingt vorher Stromlos benötigen, dass mache ich mit
Shelly's - da ich mehrere Generation davon habe ist das auch im Script berücksichtigt
Das wird auch im Ordner /data protokolliert und alle config-Dateien von Weewx liegen bei
mir unter /etc/weewx/weewx?.conf (sind durchnummeriert)

Code: Alles auswählen

#!/bin/bash

#*/5 * * * * /etc/checkweewx.sh

# Debug-Optionen
set -o nounset
CheckTime=$(((5*60)+5)) 

dtz=$( /bin/date +'%Y/%m/%d %H:%M:%S' )
#echo "$dtz - CheckWeewx" >> /data/checkweewx.txt

CheckWeewx() {
  vzeit=$( date -d "5 minute ago" +%s )
  #dzeit=$( date -r $FileSDB +%s )
if [ -f "$FileSDB" ]; then
   dzeit=$( date -r $FileSDB +%s )
else 
   dzeit=$vzeit
   echo "$dtz - Nr:$nr - not found $FileSDB" >> /data/checkweewx.txt
fi


  TimeDiff=$[vzeit - dzeit]
  #echo "Nr:$nr - $TimeDiff - c:$CheckTime - v:$vzeit - d:$dzeit" >> /data/checkweewx.txt
  if [ ${TimeDiff} -ge ${CheckTime} ]
   then
    echo "$dtz - Restart Nr:$nr - TimeDiff:$TimeDiff $FileSDB" >> /data/checkweewx.txt
    sudo /etc/init.d/weewx$nr restart 
   #else
   # echo "Nr:$nr - $TimeDiff - alles ok"
  fi
}

CheckWeewxShelly() {
  vzeit=$( date -d "5 minute ago" +%s )
  #dzeit=$( date -r $FileSDB +%s )
if [ -f "$FileSDB" ]; then
   dzeit=$( date -r $FileSDB +%s )
else 
   dzeit=$vzeit
   echo "$dtz - Nr:$nr - not found $FileSDB" >> /data/checkweewx.txt
fi


  TimeDiff=$[vzeit - dzeit]
  #echo "Nr:$nr - $TimeDiff - c:$CheckTime - v:$vzeit - d:$dzeit" >> /data/checkweewx.txt
  if [ ${TimeDiff} -ge ${CheckTime} ]
   then
    echo "$dtz - Power Off Nr:$nr - TimeDiff:$TimeDiff $FileSDB" >> /data/checkweewx.txt
    curl http://$IPShelly/relay/0?turn=off
    sleep 15
    dtz=$( /bin/date +'%Y/%m/%d %H:%M:%S' )
    echo "$dtz - Power On Nr:$nr" >> /data/checkweewx.txt
    curl http://$IPShelly/relay/0?turn=on
    sleep 15
    dtz=$( /bin/date +'%Y/%m/%d %H:%M:%S' )
    echo "$dtz - Restart Nr:$nr - TimeDiff:$TimeDiff $FileSDB" >> /data/checkweewx.txt
    sudo /etc/init.d/weewx$nr restart 
   #else
   # echo "Nr:$nr - $TimeDiff - alles ok"
  fi
}

CheckWeewxShellyNew() {
  vzeit=$( date -d "5 minute ago" +%s )
  #dzeit=$( date -r $FileSDB +%s )
if [ -f "$FileSDB" ]; then
   dzeit=$( date -r $FileSDB +%s )
else 
   dzeit=$vzeit
   echo "$dtz - Nr:$nr - not found $FileSDB" >> /data/checkweewx.txt
fi


  TimeDiff=$[vzeit - dzeit]
  #echo "Nr:$nr - $TimeDiff - c:$CheckTime - v:$vzeit - d:$dzeit" >> /data/checkweewx.txt
  if [ ${TimeDiff} -ge ${CheckTime} ]
   then
    echo "$dtz - Power Off Nr:$nr - TimeDiff:$TimeDiff $FileSDB" >> /data/checkweewx.txt
    curl "http://$IPShelly/rpc/Switch.Set?id=0&on=false"
    sleep 15
    dtz=$( /bin/date +'%Y/%m/%d %H:%M:%S' )
    echo "$dtz - Power On Nr:$nr" >> /data/checkweewx.txt
    curl "http://$IPShelly/rpc/Switch.Set?id=0&on=true"
    sleep 15
    dtz=$( /bin/date +'%Y/%m/%d %H:%M:%S' )
    echo "$dtz - Restart Nr:$nr - TimeDiff:$TimeDiff $FileSDB" >> /data/checkweewx.txt
    sudo /etc/init.d/weewx$nr restart 
   #else
   # echo "Nr:$nr - $TimeDiff - alles ok"
  fi
}

#nr=
#FileSDB=/var/lib/weewx/weewx.sdb
#CheckWeewx

nr=1
FileSDB=/var/lib/weewx/weewx_ecowitt2.sdb
IPShelly=192.168.0.144
CheckWeewxShellyNew

nr=2
FileSDB=/var/lib/weewx/weewx_ecowitt.sdb
CheckWeewx

nr=3
FileSDB=/var/lib/weewx/weewx_wlludp.sdb
CheckWeewx

nr=4
FileSDB=/var/lib/weewx/weewx_ecowitt4.sdb
CheckWeewx

nr=5
FileSDB=/var/lib/weewx/weewx_ecowitt3.sdb
CheckWeewx

nr=6
FileSDB=/var/lib/weewx/weewx_ecowitt6.sdb
CheckWeewx

nr=7
FileSDB=/var/lib/weewx/davisconsole.sdb
CheckWeewx
Du mußt sehr wahrscheinlich das ändern bzw. auch den Log-Pfad (/data ) bzw. bei Shelly die IP-Adresse:

Code: Alles auswählen

sudo /etc/init.d/weewx$nr restart 
zu

Code: Alles auswählen

sudo systemclt restart weewx$nr 
Benutzeravatar
JoachimF
Beiträge: 339
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: automatischer Restart/Reboot nach Stop

Beitrag von JoachimF »

@Werner

meine Lösung sieht so aus :

Code: Alles auswählen

#!/bin/bash
#ECO Weewx

#Datum der Modify Zeit in Unixtime
bildzeit=$(stat /var/www/html/weewx/eco/dayhum.png --format='%Y')
#echo $bildzeit
#date -d@$bildzeit

#aktuelle Zeit minus 6 Minuten in Unixtime
sixminutezeit=$( date -d "6 minute ago" +%s )
#echo sixminutezeit

# Differenz größer 6 Minuten (360) erfolgt ein Restart
if [ "$sixminutezeit" -gt "$bildzeit" ] ; then
	echo "6 Minuten Differenz - Restart von ECO"
	sudo systemctl restart weewx1
fi
Ich vergleiche ein Bilderstellungsdatum mit der aktuellen Zeit (- 6m).
Sudo systemclt habe ich in der /etc/sudoers auf nopasswd gesetzt.

SmartHome habe ich nicht und werde ich auch nicht hier in Südfrankreich installieren.

$FileSDB ??
Was prüfts du bzgl. der Datenbank?
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 6117
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 147 mal
Kontaktdaten:

Re: automatischer Restart/Reboot nach Stop

Beitrag von Werner »

@Joachim,
$FileSDB ??
Was prüfts du bzgl. der Datenbank?

Code: Alles auswählen

dzeit=$( date -r $FileSDB +%s )
Damit wird das Änderungsdatum der Datenbank geprüft.

Shelly-Steckdosen kann man auch nur Lokal nutzen und sind
eben ideal wenn man etwas automatisch steuern muß.
Benutzeravatar
JoachimF
Beiträge: 339
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: automatischer Restart/Reboot nach Stop

Beitrag von JoachimF »

@Werner,

date -r war mir nicht bekannt
Aus der man page
-r, --reference=FILE
display the last modification time of FILE

und ich werde es auch zur Überwachung der DB benutzen.
Gruß Joachim

https://puttkammer.de
Antworten