Advertisement
Guest User

Untitled

a guest
May 8th, 2015
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.93 KB | None | 0 0
  1.     #!/bin/bash
  2.     # read and evaluate SML output received from iskra mt681 eHZ
  3.  
  4.     # set serial device
  5.     INPUT_DEV="/dev/ttyUSB0"
  6.  
  7.     set $INPUT_DEV to 9600 8N1
  8.     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
  9.  
  10.     SML_START_SEQUENCE="1B1B1B1B0101010176"
  11.     METER_OUTPUT__START_SEQUENCE=""
  12.  
  13.     i=1
  14.     debug=0
  15.     short=1
  16.    
  17.     while [ "$METER_OUTPUT__START_SEQUENCE" != "$SML_START_SEQUENCE" ]
  18.     do
  19.             # xxd - make a hexdump or do the reverse.
  20.             # -p: output in postscript continuous hexdump style. Also known as plain hexdump style.
  21.             # -u: use upper case hex letters. Default is lower case.
  22.             # -l: stop after writing <len> octets.
  23.            
  24.             METER_OUTPUT=`cat $INPUT_DEV 2>/dev/null | xxd -p -u -l 324`
  25.             METER_OUTPUT=$(echo $METER_OUTPUT | tr -d '\n' | tr -d ' ')
  26.             METER_OUTPUT__START_SEQUENCE=$(echo "${METER_OUTPUT:0:18}")
  27.             if [ "${debug}" -eq 1 ]; then
  28.                 echo "$i."
  29.                 echo "METER_OUTPUT: $METER_OUTPUT"
  30.                 echo "METER_OUTPUT__START_SEQUENCE: $METER_OUTPUT__START_SEQUENCE"
  31.             fi
  32.             if [ $METER_OUTPUT__START_SEQUENCE != $SML_START_SEQUENCE ];
  33.             then
  34.                 echo "missed start and trying again..."
  35.                 # exit 1
  36.             fi
  37.             let i=i+1
  38.     done
  39.    
  40. #Positive Gesamtwirkenergie (A+) : 298:18
  41. #Positive Wirkenergie Tarif 1 (A+): 346:18
  42. #Positive Wirkenergie Tarif 2 (A+): 394:18
  43. #Aktuelle Gesamtwirkleistung (P+ - P-): 442:10 (+2)
  44.    
  45.     let METER_180=0x${METER_OUTPUT:298:18}
  46.     STAND=$(echo "scale=2; $METER_180 / 10000" |bc)
  47.    
  48.    
  49.     let METER_180=0x${METER_OUTPUT:444:8}
  50.     LEISTUNG=$(echo "scale=2; $METER_180 / 1" |bc)
  51.    
  52.     if [ "${short}" -eq 1 ]; then
  53.         echo "$(/bin/date +%Y-%m-%d_%H:%M:%S) - Zaehlerstand: $STAND - Leistung aktuell: $LEISTUNG"
  54.     else
  55.         echo "Datum: $(/bin/date +%Y-%m-%d_%H%M%S)"
  56.         echo "Positive Gesamtwirkenergie (Zaehlerstand):    " $STAND "kWh"
  57.         echo "Aktuelle Gesamtwirkleistung: " $LEISTUNG "W"
  58.     fi
  59.  
  60.  
  61.    
  62.     # 1b 1b 1b 1b 01 01 01 01                                 Escape + StartMessage
  63.     # 76                                                        
  64.         # 05 00 62 b7 a1                                         transactionID (5Byte)
  65.         # 62 00                                                groupNo
  66.         # 62 00                                                 abortOnError
  67.         # 72                                                        
  68.             # 63 01 01                                         Nachricht 0101 = SML_PublicOpen.Res
  69.     # 76
  70.                 # 01                                             codepage
  71.                 # 01                                             clientID  
  72.                 # 05 00 20 e7 df                                 reqFileID
  73.                 # 09 xx xx xx xx xx xx xx xx                     ServerID
  74.                 # 01                                             refTime
  75.                 # 01                                             smlVersion
  76.         # 63 de c8                                             CRC  
  77.         # 00                                                    SMLEndOfMessage
  78.  
  79.     # 76                                                        
  80.         # 05 00 62 b7 a2                                         transactionID (5Byte)
  81.         # 62 00                                                groupNo
  82.         # 62 00                                                 abortOnError
  83.     # 72
  84.             # 63 07 01                                         Nachricht 0701 = SML_GetList.Res
  85.             # 77                                                    
  86.         # 01
  87.                 # 09 xx xx xx xx xx xx xx xx                  Server-ID:
  88.         # 07
  89.         # 01
  90.                 # 00 62 0a     ff ff
  91.     # 72
  92.                 # 62 01                                         secIndex = 1
  93.                 # 65 00 33 5e dd 7d                             Sekunden-Index als unsigned 32  
  94.  
  95.     # 77
  96.                 # 07 81 81 c7 82 03 ff                        objName 129-129:199.130.3*255
  97.                                                             # Herstelleridentifikation
  98.                 # 01                                           status (leer)
  99.                 # 01                                           valTime (leer)
  100.                 # 01                                           unit(leer)
  101.                 # 01                                           scaler (leer)      
  102.                 # 04 49 53 4b                                 Value
  103.                 # 01                                             valueSignature (leer)
  104.  
  105.     # 77  
  106.                 # 07 01 00 00 00 09 ff                         objName 1-0:0.0.9*255
  107.                                                             # Geräteidentifikation
  108.                 # 01                                           status
  109.                 # 01                                           valTime
  110.                 # 01                                           unit
  111.                 # 01                                           scaler
  112.                 # 09 xx xx xx xx xx xx xx xx                     Server-ID:
  113.                 # 01                    
  114.  
  115.     # 77  
  116.                 # 07 01 00 01 08 00 ff                         objName 1-0:1.8.0*255
  117.                                                             # Positive Gesamtwirkenergie (A+)                                                  
  118.             # 65 00
  119.         # 01
  120.         # 01
  121.                 # 82 0    1        
  122.                 # 62 1e                                         unit (unsigned8) 1E = Wh
  123.                 # 52 ff                                         scaler (int8) -1 = *10^-1 = /10
  124.                 # 59 00 00 00 00 00 37 00 e2                     value = 3604706 => 360470,6 = 360,47 kWh
  125.         # 01
  126.  
  127.  
  128.     # 77  
  129.                 # 07 01 00 01 08 01 ff                         objName 1-0:1.8.1*255
  130.                                                             # Positive Wirkenergie Tarif 1 (A+)
  131.         # 01
  132.         # 01
  133.                 # 62 1e                                         unit (unsigned8) 1E = Wh
  134.                 # 52 ff                                         scaler (int8) -1 = *10^-1 = /10
  135.                 # 59 00 00 00 00 00 37 00 e2 01                 value = 3604706 => 360470,6 = 360,47kWh  
  136.  
  137.     # 77  
  138.                 # 07 01 00 01 08 02 ff                         objName 1-0:1.8.2*255
  139.                                                             # Positive Wirkenergie Tarif 2 (A+)
  140.                 # 01                                               status (leer)
  141.                 # 01                                           valTime (leer)                  
  142.                 # 62 1e                                         unit (unsigned8) 1E = Wh
  143.                 # 52 ff                                         scaler (int8) -1 = *10^-1 = /10
  144.                 # 59 00 00 00 00 00 00 00 00                     value 0
  145.         # 01
  146.  
  147.     # 77  
  148.                 # 07 01 00 02 08 00 ff                         objName 1-0:2.8.0*255
  149.                                                             # Negative Gesamtwirkenergie (A-)  
  150.             # 65 00
  151.         # 01
  152.         # 01
  153.             # 82 01
  154.                 # 62 1e                                         unit (unsigned8) 1E = Wh
  155.                 # 52 ff                                         scaler (int8) -1 = *10^-1 = /10
  156.                 # 59 00 00 00 00 00 0c 51 37                     value 807223 = 380722,3 Wh = 80,7223 kWh
  157.         # 01
  158.  
  159.     # 77
  160.                 # 07 01 00 02 08 01 ff                         objName 1-0:2.8.1*255
  161.                                                             # Negative Wirkenergie Tarif 1 (A-)
  162.         # 01
  163.         # 01        
  164.                 # 62 1e                                         unit (unsigned8) 1E = Wh
  165.                 # 52 ff                                         scaler (int8) -1 = *10^-    1 = /10
  166.                 # 59 00 00 00 00 00 0c 51 37                     value 807223 = 380722,3 Wh = 80,7223 kWh
  167.         # 01
  168.  
  169.     # 77
  170.                 # 07 01 00 02 08 02 ff                         objName 1-0:2.8.2*255
  171.                                                             # Negative Wirkenergie Tarif 2(A-)
  172.         # 01
  173.         # 01
  174.                 # 62 1e                                         unit (unsigned8) 1E = Wh
  175.                 # 52 ff                                         scaler (int8) -1 = *10^-1 = /10      
  176.                 # 59 00 00 00 00 00 00 00 00                     value = 0
  177.         # 01
  178.  
  179.     # 77
  180.                 # 07 01 00 10 07 00 ff                         objName 1-0:16.7.0*255
  181.                                                             # Aktuelle Gesamtwirkleistung (P+ - P-)
  182.         # 01
  183.         # 01
  184.                 # 62 1B                                        unit (unsigned8) 1B = W
  185.                 # 52 00                                        scaler (int8) = /1
  186.                 # 55 00 00 08 5e                                 value = 2142 W
  187.         # 01
  188.  
  189.     # 77
  190.                 # 07 01 00 24 07 00 ff                         objName 1-0:36.7.0*255
  191.                                                             # Aktuelle Gesamtwirkleistung (P+ - P-) in der Phase L1
  192.         # 01
  193.         # 01
  194.                 # 62 1B                                        unit (unsigned8) 1B = W
  195.                 # 52 00                                        scaler (int8) = /1
  196.                 # 55 00 00 08 b6                                 value = 2230 W
  197.         # 01
  198.  
  199.     # 77
  200.                 # 07 01 00 38 07 00 ff                         objName 1-0:56.7.0*255
  201.                                                             # Aktuelle Gesamtwirkleistung (P+ - P-) in der Phase L2
  202.         # 01
  203.         # 01
  204.                 # 62 1B                                        unit (unsigned8) 1B = W
  205.                 # 52 00                                        scaler (int8) = /1      
  206.                 # 55 ff ff     ff 9b
  207.         # 01
  208.  
  209.     # 77  
  210.                 # 07 01 00 4c 07 00 ff                         objName 1-0:76.7.0*255
  211.                                                             # Aktuelle Gesamtwirkleistung (P+ - P-) in der Phase L3
  212.         # 01
  213.         # 01
  214.                 # 62 1B                                        unit (unsigned8) 1B = W
  215.                 # 52 00                                        scaler (int8) = /1      
  216.                 # 55 00 00 00 13                                 value = 19 W
  217.         # 01
  218.  
  219.     # 77
  220.                 # 07 81 81 c7 82 05 ff                         objName 129-129:199.130.5*255
  221.                                                             # Public Key des Zählers
  222.                 # 01                                           status (leer)
  223.                 # 01                                          valTime (leer)
  224.                 # 01                                          unit(leer)
  225.                 # 01                                          scaler (leer)
  226.                 # 83 xx xx xx xx x    x xx xx
  227.                    # xx xx xx xx x    x xx xx
  228.                    # xx xx xx xx x    x xx xx
  229.                    # xx xx xx xx x    x xx xx                  
  230.                    # xx xx xx xx x    x xx xx
  231.                    # xx xx xx xx x    x xx xx
  232.                    # xx xx xx xx x    x xx xx
  233.                    # xx xx xx xx x    x xx xx
  234.                    # xx xx xx xx x    x xx xx
  235.                    # xx xx xx xx x    x xx xx
  236.                    # x    x xx
  237.  
  238.             # 63 a2 59                                         CRC
  239.             # 00                                                        
  240.             # 00                                                    
  241.             # 00                                                SMLEndOfMessage      
  242.     # 1b 1b 1b 1b                                             Escape
  243.     # 1a 02 19 49                                             EndeMessage + CRC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement