#!/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 <