čtvrtek 23. února 2017

eQ3-MAX! Komunikace s MAX Cube Gateway v Python

Příklad Python skriptu pro načtení údajů o struktuře místnostní a zařízení z MAX Cube LAN Gateway v lokální síti.



import socket
import base64

def read_line(socket):
 request_line = '';
 while not request_line.endswith('\n'):
  request_line += socket.recv(1).decode('ascii') 
 return request_line

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
sock.connect(('192.168.0.111', 62910));
chunks = []
bytes_recd = 0
request_line = '';

header=read_line(sock);
print(header);

commandM=read_line(sock);
print(commandM);
commandMParameters=commandM[2:].split(',');
mCommandData=base64.decodestring(str.encode(commandMParameters[2]));
numberOfRooms=mCommandData[2];
print('Nubmer of Rooms: ', numberOfRooms);
mRoomData=mCommandData[3:]
mCommandData=mRoomData;
for i in range(1,numberOfRooms+1):
 room = {'id':0,'name':'','groupAddress':0}
 room['id'] = mCommandData[0];
 room['name'] = mCommandData[2:2+mCommandData[1]].decode('utf-8');
 room['grouAddress'] = mCommandData[mRoomData[1]+2:mCommandData[1]+5];
 print(str(room));
 mRoomData=mCommandData[mCommandData[1]+5:]
 mCommandData=mRoomData;
 
numberOfDevices=mCommandData[0];
print('Number of Devices',numberOfDevices); 
mTempData=mCommandData[1:]
mCommandData=mTempData;
for i in range(1,numberOfDevices+1):
 device = {'type' : 0, 'rfAddress' : 0, 'serialNumber' : '', 'name' : '', 'roomId' : 0};
 device['type'] = mCommandData[0];
 device['rfAddress'] = mCommandData[1:4];
 device['serialNumber'] = mCommandData[4:14].decode('utf-8');
 nameLength = mCommandData[14];
 device['name'] = mCommandData[15:15+nameLength].decode('utf-8');
 device['roomId'] = mCommandData[nameLength+15];
 mTempData=mCommandData[nameLength+16:]
 mCommandData=mTempData;
 print(device);
 
print(); 
 
sock.close();


Žádné komentáře:

Okomentovat