diff --git a/edl21.sh b/edl21.sh new file mode 100644 index 0000000..23c8c8f --- /dev/null +++ b/edl21.sh @@ -0,0 +1,68 @@ +#!/bin/bash +#Eingabegerät +INPUT_DEV="/dev/ttyUSB0"; +stty -F $INPUT_DEV 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 + +#Datum, Zeit und Datei. +DATE=$(/bin/date +%Y%m%d-%H%M%S); +PFAD=$(dirname "$(readlink -e "$0")"); +FILE=$PFAD"/"$DATE."txt"; +LOG=$PFAD"/edl.log"; + +#Datenbank +DB_USER=""; +DB_PASS=""; +DB_HOST=""; +DB_NAME=""; +DB_TAB="EdlData"; + +#Startsequenz +SEQ_START="1B1B1B1B01010101"; +#Endsequenz +SEQ_END="001B1B1B1B1A00"; +#Beginn Zähler 1.8.0 (Wirkarbeit Bezug) +SEQ_180="070100010800FF"; +#Beginn Zähler 2.8.0 (Wirkarbeit Lieferung) +SEQ_280="070100020800FF"; +#Beginn aktuelle Wirkleistung +SEQ_PWR="070100100700FF"; + +INOUT=2147483647; + +cat $INPUT_DEV 2>/dev/null | xxd -p -u -l 600 1> $FILE; + +STRING=`tr -d "\n" < $FILE`; +STRING=${STRING#*$SEQ_START}; +STRING=${STRING%%$SEQ_END*}; + +STRING_180=${STRING#*$SEQ_180}; +let STRING_180=0x${STRING_180:20:10}; + +STRING_280=${STRING#*$SEQ_280}; +let STRING_280=0x${STRING_280:20:10}; + +STRING_PWR=${STRING#*$SEQ_PWR}; +let STRING_PWR=0x${STRING_PWR:14:8}; + +#Richtung der Leistung abfangen und in W umrechnen.. +if [ $STRING_PWR -gt $INOUT ]; then + STRING_PWR_OUT=$(echo "(4294967295 - $STRING_PWR) / (10)"|bc); + STRING_PWR_IN=0; +else + STRING_PWR_IN=$(echo "$STRING_PWR / 10"|bc); + STRING_PWR_OUT=0; +fi +#Zählerstände in Wh! +STRING_180=$(echo "scale=4; $STRING_180 / 10" |bc); +STRING_280=$(echo "scale=4; $STRING_280 / 10" |bc); + +#LOG +echo $DATE";"$STRING_180";"$STRING_280";"$STRING_PWR_IN";"$STRING_PWR_OUT >> $LOG ; + +#DATENBANK +mysql -u $DB_USER -p$DB_PASS -h $DB_HOST -D $DB_NAME <