Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # read and evaluate SML output received from iskra mt681 eHZ
- # set serial device
- INPUT_DEV="/dev/ttyUSB0"
- set $INPUT_DEV to 9600 8N1
- 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
- SML_START_SEQUENCE="1B1B1B1B0101010176"
- METER_OUTPUT__START_SEQUENCE=""
- i=1
- debug=0
- short=1
- while [ "$METER_OUTPUT__START_SEQUENCE" != "$SML_START_SEQUENCE" ]
- do
- # xxd - make a hexdump or do the reverse.
- # -p: output in postscript continuous hexdump style. Also known as plain hexdump style.
- # -u: use upper case hex letters. Default is lower case.
- # -l: stop after writing <len> octets.
- METER_OUTPUT=`cat $INPUT_DEV 2>/dev/null | xxd -p -u -l 324`
- METER_OUTPUT=$(echo $METER_OUTPUT | tr -d '\n' | tr -d ' ')
- METER_OUTPUT__START_SEQUENCE=$(echo "${METER_OUTPUT:0:18}")
- if [ "${debug}" -eq 1 ]; then
- echo "$i."
- echo "METER_OUTPUT: $METER_OUTPUT"
- echo "METER_OUTPUT__START_SEQUENCE: $METER_OUTPUT__START_SEQUENCE"
- fi
- if [ $METER_OUTPUT__START_SEQUENCE != $SML_START_SEQUENCE ];
- then
- echo "missed start and trying again..."
- # exit 1
- fi
- let i=i+1
- done
- #Positive Gesamtwirkenergie (A+) : 298:18
- #Positive Wirkenergie Tarif 1 (A+): 346:18
- #Positive Wirkenergie Tarif 2 (A+): 394:18
- #Aktuelle Gesamtwirkleistung (P+ - P-): 442:10 (+2)
- let METER_180=0x${METER_OUTPUT:298:18}
- STAND=$(echo "scale=2; $METER_180 / 10000" |bc)
- let METER_180=0x${METER_OUTPUT:444:8}
- LEISTUNG=$(echo "scale=2; $METER_180 / 1" |bc)
- if [ "${short}" -eq 1 ]; then
- echo "$(/bin/date +%Y-%m-%d_%H:%M:%S) - Zaehlerstand: $STAND - Leistung aktuell: $LEISTUNG"
- else
- echo "Datum: $(/bin/date +%Y-%m-%d_%H%M%S)"
- echo "Positive Gesamtwirkenergie (Zaehlerstand): " $STAND "kWh"
- echo "Aktuelle Gesamtwirkleistung: " $LEISTUNG "W"
- fi
- # 1b 1b 1b 1b 01 01 01 01 Escape + StartMessage
- # 76
- # 05 00 62 b7 a1 transactionID (5Byte)
- # 62 00 groupNo
- # 62 00 abortOnError
- # 72
- # 63 01 01 Nachricht 0101 = SML_PublicOpen.Res
- # 76
- # 01 codepage
- # 01 clientID
- # 05 00 20 e7 df reqFileID
- # 09 xx xx xx xx xx xx xx xx ServerID
- # 01 refTime
- # 01 smlVersion
- # 63 de c8 CRC
- # 00 SMLEndOfMessage
- # 76
- # 05 00 62 b7 a2 transactionID (5Byte)
- # 62 00 groupNo
- # 62 00 abortOnError
- # 72
- # 63 07 01 Nachricht 0701 = SML_GetList.Res
- # 77
- # 01
- # 09 xx xx xx xx xx xx xx xx Server-ID:
- # 07
- # 01
- # 00 62 0a ff ff
- # 72
- # 62 01 secIndex = 1
- # 65 00 33 5e dd 7d Sekunden-Index als unsigned 32
- # 77
- # 07 81 81 c7 82 03 ff objName 129-129:199.130.3*255
- # Herstelleridentifikation
- # 01 status (leer)
- # 01 valTime (leer)
- # 01 unit(leer)
- # 01 scaler (leer)
- # 04 49 53 4b Value
- # 01 valueSignature (leer)
- # 77
- # 07 01 00 00 00 09 ff objName 1-0:0.0.9*255
- # Geräteidentifikation
- # 01 status
- # 01 valTime
- # 01 unit
- # 01 scaler
- # 09 xx xx xx xx xx xx xx xx Server-ID:
- # 01
- # 77
- # 07 01 00 01 08 00 ff objName 1-0:1.8.0*255
- # Positive Gesamtwirkenergie (A+)
- # 65 00
- # 01
- # 01
- # 82 0 1
- # 62 1e unit (unsigned8) 1E = Wh
- # 52 ff scaler (int8) -1 = *10^-1 = /10
- # 59 00 00 00 00 00 37 00 e2 value = 3604706 => 360470,6 = 360,47 kWh
- # 01
- # 77
- # 07 01 00 01 08 01 ff objName 1-0:1.8.1*255
- # Positive Wirkenergie Tarif 1 (A+)
- # 01
- # 01
- # 62 1e unit (unsigned8) 1E = Wh
- # 52 ff scaler (int8) -1 = *10^-1 = /10
- # 59 00 00 00 00 00 37 00 e2 01 value = 3604706 => 360470,6 = 360,47kWh
- # 77
- # 07 01 00 01 08 02 ff objName 1-0:1.8.2*255
- # Positive Wirkenergie Tarif 2 (A+)
- # 01 status (leer)
- # 01 valTime (leer)
- # 62 1e unit (unsigned8) 1E = Wh
- # 52 ff scaler (int8) -1 = *10^-1 = /10
- # 59 00 00 00 00 00 00 00 00 value 0
- # 01
- # 77
- # 07 01 00 02 08 00 ff objName 1-0:2.8.0*255
- # Negative Gesamtwirkenergie (A-)
- # 65 00
- # 01
- # 01
- # 82 01
- # 62 1e unit (unsigned8) 1E = Wh
- # 52 ff scaler (int8) -1 = *10^-1 = /10
- # 59 00 00 00 00 00 0c 51 37 value 807223 = 380722,3 Wh = 80,7223 kWh
- # 01
- # 77
- # 07 01 00 02 08 01 ff objName 1-0:2.8.1*255
- # Negative Wirkenergie Tarif 1 (A-)
- # 01
- # 01
- # 62 1e unit (unsigned8) 1E = Wh
- # 52 ff scaler (int8) -1 = *10^- 1 = /10
- # 59 00 00 00 00 00 0c 51 37 value 807223 = 380722,3 Wh = 80,7223 kWh
- # 01
- # 77
- # 07 01 00 02 08 02 ff objName 1-0:2.8.2*255
- # Negative Wirkenergie Tarif 2(A-)
- # 01
- # 01
- # 62 1e unit (unsigned8) 1E = Wh
- # 52 ff scaler (int8) -1 = *10^-1 = /10
- # 59 00 00 00 00 00 00 00 00 value = 0
- # 01
- # 77
- # 07 01 00 10 07 00 ff objName 1-0:16.7.0*255
- # Aktuelle Gesamtwirkleistung (P+ - P-)
- # 01
- # 01
- # 62 1B unit (unsigned8) 1B = W
- # 52 00 scaler (int8) = /1
- # 55 00 00 08 5e value = 2142 W
- # 01
- # 77
- # 07 01 00 24 07 00 ff objName 1-0:36.7.0*255
- # Aktuelle Gesamtwirkleistung (P+ - P-) in der Phase L1
- # 01
- # 01
- # 62 1B unit (unsigned8) 1B = W
- # 52 00 scaler (int8) = /1
- # 55 00 00 08 b6 value = 2230 W
- # 01
- # 77
- # 07 01 00 38 07 00 ff objName 1-0:56.7.0*255
- # Aktuelle Gesamtwirkleistung (P+ - P-) in der Phase L2
- # 01
- # 01
- # 62 1B unit (unsigned8) 1B = W
- # 52 00 scaler (int8) = /1
- # 55 ff ff ff 9b
- # 01
- # 77
- # 07 01 00 4c 07 00 ff objName 1-0:76.7.0*255
- # Aktuelle Gesamtwirkleistung (P+ - P-) in der Phase L3
- # 01
- # 01
- # 62 1B unit (unsigned8) 1B = W
- # 52 00 scaler (int8) = /1
- # 55 00 00 00 13 value = 19 W
- # 01
- # 77
- # 07 81 81 c7 82 05 ff objName 129-129:199.130.5*255
- # Public Key des Zählers
- # 01 status (leer)
- # 01 valTime (leer)
- # 01 unit(leer)
- # 01 scaler (leer)
- # 83 xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # xx xx xx xx x x xx xx
- # x x xx
- # 63 a2 59 CRC
- # 00
- # 00
- # 00 SMLEndOfMessage
- # 1b 1b 1b 1b Escape
- # 1a 02 19 49 EndeMessage + CRC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement