To  jest mój skrypt na zbieranie danych z licznika OR-WE-504 może cie zainteresuje ja się komunikuje slotem tcp/ip na i z modułu już rs485

#!/bin/bash

czas=`date +"%H:%M:%S"`
dane=`sed 's/^[ ]*//' //mnt/www/dane/wyswietlacz.txt`

if ping -c 1 192.168.1.254 > /dev/null
then

exec 3<> /dev/tcp/192.168.1.254/4001

echo -en "\x01\x03\x00\x00\x00\x0B\x04\x0D" >&3

    head -c 40 <&3 > /mnt/www/header.hex
BYTES=( `hexdump -v -e ' 1/1 "%02X " ' /mnt/www/header.hex` )     
    HEX="${BYTES[0]}${BYTES[1]}${BYTES[2]}${BYTES[3]}${BYTES[4]}${BYTES[5]}${BYTES[6]}${BYTES[7]}${BYTES[8]}${BYTES[9]}${BYTES[10]}${BYTES[11]}${BYTES[12]}${BYTES[13]}${BYTES[14]}${BYTES[15]}${BYTES[16]}${BYTES[17]}${BYTES[18]}${BYTES[19]}${BYTES[20]}${BYTES[21]}${BYTES[22]}${BYTES[23]}${BYTES[24]}${BYTES[25]}${BYTES[26]}${BYTES[27]}"   
    DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[3]}${BYTES[4]}" | bc` 
   # head -v -c "${DATA_LENGTH}" <&3
exec 3>&- # Close for write
exec 3<&- # Close for read                             

#echo adres ${BYTES[0]}

#echo rozkaz ${BYTES[1]}

#echo ilosc danych ${BYTES[2]}

#napiecie
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[3]}${BYTES[4]}" | bc`
DATA_LENGTH=${DATA_LENGTH:0:3}.${DATA_LENGTH:3:1}
echo Napięcie: ${DATA_LENGTH} V
#koniec

#aperaz
DATA_LENGTH=`echo "obase=10000; ibase=16; ${BYTES[5]}${BYTES[6]}" | bc`
DATA_LENGTH=${DATA_LENGTH:0:4}.${DATA_LENGTH:4:1}
echo Amperaz: ${DATA_LENGTH} A
#koniec

#czestotliwosc
DATA_LENGTH=`echo "obase=10000; ibase=16; ${BYTES[7]}${BYTES[8]}" | bc`
DATA_LENGTH=${DATA_LENGTH:0:4}.${DATA_LENGTH:4:1}
echo Czestotliwosc: ${DATA_LENGTH} HZ
#koniec

#Moc czynna
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[9]}${BYTES[10]}" | bc`
echo Moc czynna: ${DATA_LENGTH} W
#koniec

#Moc bierana
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[11]}${BYTES[12]}" | bc`
echo Moc bierna: ${DATA_LENGTH} var
#koniec

#Moc pozorna
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[13]}${BYTES[14]}" | bc`
echo Moc pozorna: ${DATA_LENGTH} va
#koniec

#współczynnik mocy
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[15]}${BYTES[16]}" | bc`
echo Wspolczynik mocy: ${DATA_LENGTH} P
#koniec

#stan licznika
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[17]}${BYTES[18]}${BYTES[19]}${BYTES[20]}" | bc`
DATA_LENGTH=${DATA_LENGTH:0:5}.${DATA_LENGTH:5:1}
echo Stan licznika ${DATA_LENGTH} Kwh
#koniec

#Energia bierna
DATA_LENGTH=`echo "obase=10; ibase=16; ${BYTES[21]}${BYTES[22]}${BYTES[23]}${BYTES[24]}" | bc`
DATA_LENGTH=${DATA_LENGTH:0:5}${DATA_LENGTH:5:1}
echo Bierny stan licznika ${DATA_LENGTH} varh
#koniec
fi