#!/usr/bin/python # |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| # Copyright (C) 2017 Piotr Murawski # Niniejszy program jest wolnym oprogramowaniem; mozesz go # rozprowadzac dalej i/lub modyfikowac na warunkach Powszechnej # Licencji Publicznej GNU, wydanej przez Fundacje Wolnego # Oprogramowania - wedlug wersji 3-ciej tej Licencji lub ktorejs # z pozniejszych wersji. # Niniejszy program rozpowszechniany jest z nadzieja iz bedzie on # uzyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyslnej # gwarancji PRZYDATNOSCI HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH # ZASTOSOWAN. W celu uzyskania blizszych informacji - Powszechna # Licencja Publiczna GNU. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # Z pewnoscia wraz z niniejszym programem otrzymales tez egzemplarz # Powszechnej Licencji Publicznej GNU (GNU General Public License); # jesli nie - napisz do Free Software Foundation, Inc., 675 Mass Ave, # Cambridge, MA 02139, USA. # Powszechna Licencja GNU dostepna jest rowniez na stronie: # http://www.gnu.org/licenses/licenses.html # nieoficjalne polskie tlumaczenie na # http://www.gnu.org.pl # |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| import time import serial import mbusbase from mbusbase import get16, get8, bytestr, errcode import socket import sys FAILCODE_SOCKET = 1 FAILCODE_CONNECT = 2 FAILCODE_NODATA = 3 FAILCODE_TIMEOUT = 4 FAILCODE_SOCKETSEND = 5 FAILCODE_SOCKETREAD = 6 FAILCODE_LENGTH = 7 FAILCODE_SERIAL = 8 FAILCODE_SERIALWRITE = 9 FAILCODE_SERIALREAD = 10 FAILCODE_TCPSEQUENCE = 11 BIT_RATE = 4800 class MbclientFail(Exception): def __init__(self, message, code): super(MbclientFail, self).__init__(message) self.code = code class mbclient: transportOpen=False TOUTMSG=1.0 TOUTCHAR=6 def __init__(self): pass def getReply(self): bstr=self.transportRead(3,self.TOUTMSG) if bstr != '' and bstr!=None: if len(bstr)<3: raise MbclientFail("Not enough bytes received, <3",FAILCODE_NODATA) bajty=bytearray(bstr) #print(bytestr)(bajty) # find expected length bytescnt=0 if bajty[1]==1 or bajty[1]==2: bytescnt = int(bajty[2]) elif bajty[1]==3 or bajty[1]==4: bytescnt = int(bajty[2]) elif bajty[1]==5: bytescnt = 4 elif bajty[1]==5 or bajty[1]==6: bytescnt = 3 elif bajty[1]==5 or bajty[1]==15 or bajty[1]==16: bytescnt = 4 elif bajty[1]>127: bytescnt = 0 bytescnt+=2 #print('Expected bytes : ' + str)(bytescnt) bstr=self.transportRead(bytescnt,self.charTout * 256) #print('bytes : ',len)(bstr) if bstr != '': if len(bstr)