#-*-coding:UTF-8-*-
from datetime import datetime
import time
import socket
class dp_send():
def __init__(self):
self.__sock = None
self.host = HOST
self.port = PORT
self.addr = (self.host,self.port)
def connect(self):
#def connect(self,host='10.10.30.54',port=30245):
#ADDR = (host, port)
try:
self.__sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.__sock.connect(self.addr)
except socket.error:
print 'connect error!'
return
def send_auth(self,device_code):
r = self.__sock.recv(1024)
print datetime.now(), 'from server:', r
message = ';' + device_code + '016011*af.'
print('%s\r\n' % message)
self.__sock.sendall(message)
def send_number(self,device_code,channel_number=1):
#发送通道数
data1 = ';' + device_code + '023170cr' + str(channel_number) + '000' + str(channel_number) + '*af'
print('%s\r\n' % data1)
self.__sock.sendall('%s\r\n' % data1)
def send_data(self,channel,channel_number=1,watermeter_number=3,reading=[]):
#发送每个通道的信息及通道下的水表数据
st = ''
for i in reading:
st = st + i
data2 = ';' + channel + '023170crc' + str(channel_number) + '0' + str(channel_number) + '00' + str(watermeter_number) + '*af'
print('%s\r\n' % data2)
self.__sock.sendall('%s\r\n' % data2)
#message = ';'+channel+ '561310db003' + reading[0] + reading[1] + reading[2] + '*af'
message = ';'+channel+ '561310db00' + str(watermeter_number) + st + '*af'
print('%s\r\n' % message)
self.__sock.sendall('%s\r\n' % message)
def send_end(self,device_code):
message = ';' + device_code + '024170cre10001*af'
print('%s\r\n' % message)
self.__sock.sendall(message)
def disconnect(self):
try:
self.__sock.close()
except socket.error:
print 'close socket error!'
return
HOST = '10.10.30.54'
PORT = 30245
#PORT = 10000
devicecode = '042005'
channel_n = 1
#水表数据,要录几个就写几个
readings1 = ['033','022','023']
readings2 = []
readings3 = []
dp = dp_send()
dp.connect()
#device_code:通讯机号
dp.send_auth(device_code = devicecode)
#device_code:通讯机号,channel_number:通道数量
dp.send_number(device_code = devicecode ,channel_number=channel_n)
#channel:通道号,channel_number:通道数(为1),water_meter_number:每个通道下的水表数量,reading:水表数据,为list类型
dp.send_data(channel='620051',channel_number=1,watermeter_number=3,reading=readings1)
#dp.send_data(channel='620031',channel_number=1,watermeter_number=3,reading=readings2)
#dp.send_data(channel='620031',channel_number=1,watermeter_number=3,reading=readings3)
#device_code:通讯机号
dp.send_end(device_code = devicecode)
print 'end'
dp.disconnect()
网友评论