Hallo!
Ich habe ein kleines Script geschrieben, welches sich täglich die Verbrauchswerte von Geräten mit Tasmota Firmware holt und abspeichert.
Den Messwert für "Yesterday" legt das Script täglich in einer Textdatei (strom_IP_1tag.txt) ab. Am 1. des Monats rechnet das Script diese Werte zusammen, leert die Datei (für Werte vom nächsten Monat) und legt das Ergebnis in eine weitere Textdatei (strom_IP_2monat.txt) ab. Am 1.1. jeden Jahres rechnet das Script auch diese 12 Werte zusammen und legt eine Textdatei (strom_IP_3jahr.txt) an.
Weiterhin schreibt das Script ein Log, wo auch verzeichnet ist, wenn ein Gerät nicht erreicht werden konnte.
Bei mir liegt das Script im Verzeichnis /root/strom
Dort liegt eine strom.sh, die täglich 1x ausgeführt werden muss (automatisiert über crontab).
Bei der Konfiguration müssen folgende Punkte bearbeitet werden:
- Verzeichnis (Standard: /root/strom)
- IP-Stamm (die ersten drei Zahlen der IP) (Standard: 192.168.0.)
- Zeile 21 in Klammern die IPs, die abgefragt werden sollen. Das Trennzeichen ist ein Freizeichen (Standard: 121 122). Dies ist die vierte Ziffer der IP.
- crontab auf die strom.sh (täglich 1x ausführen, nicht mehrmals!)
Und nun hier das Script:
#!/bin/bash
######################
### CONFIG ###
######################
## Verzeichnis
cd /root/strom
## IP-Bereich und Gerät
ipstamm=192.168.0.
## IPs
# IPs in Zeile 21 hinterlegen!
######################
### CONFIG - ENDE ####
######################
## IPs in Array
meinarray=(121 122)
for i in ${meinarray[@]}; do
## Holen der Daten
messung=$(curl --silent 'http://'$ipstamm$i'/cm?cmnd=EnergyReset' | cut -d\" -f7 | cut -c 2-99 | sed 's/.$//')
## Prüfen der Daten
if [[ $messung = "" ]]
then
messung="0.000";
fehler=" (nicht erreicht)"
fi
## Schreiben der Daten
echo $messung >> '/root/strom/strom_'$i'_1tag.txt'
## Ausgabe der Daten (auskommentiert)
#echo $i" "$messung
## Prüfung Anfang des Monats
if [ `date +%d` == "01" ]
then
awk '{sum+=$1}END{print sum}' 'strom_'$i'_1tag.txt' >> 'strom_'$i'_2monat.txt'
> 'strom_'$i'_1tag.txt'
fi
## Prüfung Anfang des Jahres
if [ `date +%d` == "01" ] && [ `date +%m` == "01" ]
then
awk '{sum+=$1}END{print sum}' 'strom_'$i'_2monat.txt' >> 'strom_'$i'_3jahr'`date +%Y`.txt
> 'strom_'$i'_2monat.txt'
fi
## Log
echo `date +%Y%m%d`" Gerät "$i" - "$messung$fehler >> /root/logs/strom.log
## Array Ende
sleep 1
unset fehler
unset messung
done
## Ende
exit 0
Alles anzeigen
Das Script ist zur freien Verfügung. Wenn es jemand verbessert, würde ich mich freuen, wenn man die Verbesserung hier mit uns teilt.