Ejemplo n.º 1
0
class Printer(models.Model):
    url = models.CharField(max_length=120)
    apikey = models.CharField(max_length=120)
    name = models.CharField(max_length=120)
    IDa = models.CharField(max_length=120)
   
    urlCam = models.CharField(max_length=120)

    client = None

    

    def connect(self):
        #print("conect")
        try:
            self.client = OctoRest(url=self.url, apikey=self.apikey)
        except ConnectionError as ex:
            print("..............Connect error.....................")
            print(ex)


    def waitConnection(self):
        counter = 0
        if(self.getPrinterPowerStatus() == "printer_power_status_off"):           
            return False
        else:            
            self.connect()                       
            while(self.client.connection_info()["current"]["state"] != "Operational" and counter < 40):
                self.client.connect(baudrate=115200)
                counter = counter + 1
                print("conecting..." + self.client.connection_info()["current"]["state"]  + str(counter))
            if counter >= 40:
                return False
            else:
                return True


    def home(self, axes):
        if self.client == None:
            self.connect()
        return self.client.home(axes)

    def extrude(self):
        if self.client == None:
            self.connect()
        return self.client.extrude(25)

    def retract(self):
        if self.client == None:
            self.connect()
        return self.client.extrude(-25)

    def setToolTemp(self, t):
        if self.client == None:
            self.connect()
        return self.client.tool_target(t)
    
    def getToolTemp(self):
        if self.client == None:
            self.connect()
        try:
            if self.client.tool() == {}:
                return {'actual': 0, 'offset': 0, 'target': 0.0}
            else:
                return self.client.tool()["tool0"] 
        except:
            return None

    def setBedTemp(self, t):
        if self.client == None:
            self.connect()
        return self.client.bed_target(t)
    
    def getBedTemp(self):
        if self.client == None:
            self.connect()
        try:
            if self.client.bed() == {}:
                return {'actual': 0, 'offset': 0, 'target': 0.0}
            else:
                return self.client.bed()["bed"] 
        except:
            return None

    def getName(self):
        return self.name
    
    def getId(self):
        return self.IDa
        
    def getUrl(self):
        return self.url
    
    def getApiKey(self):
        return self.apikey

    def getUrlCam(self):
        return self.urlCam
   
        
    def toggleLed(self):
        myobj = {'pin': 'r1', 'command': 'update'}
        url = self.url + "api/plugin/octorelay?apikey=" + self.apikey 
        return requests.post(url, json=myobj)
    

    def getLedStatus(self):
        myobj = {'pin': 'r1', 'command': 'getStatus'}
        url = self.url + "api/plugin/octorelay?apikey=" + self.apikey 
        x = requests.post(url, json=myobj)
        dic = json.loads(x.text)
        return dic['status']

    def getPrinterPowerStatus(self):
        myobj = {'command': 'getPSUState'}
        url = self.url + "api/plugin/psucontrol?apikey=" + self.apikey 
        x = requests.post(url, json=myobj)     
        
        dic = json.loads(x.text)
        print(dic)
        if dic['isPSUOn'] == False:
           return "printer_power_status_off"
        elif dic['isPSUOn'] == True:
           return "printer_power_status_on"
   

    def PrinterPowerOn(self):        
        myobj = {'command': "turnPSUOn"}
        url = self.url + "api/plugin/psucontrol?apikey=" + self.apikey 
        return requests.post(url, json=myobj)
      
        
    def printerPowerOFf(self):
        myobj = {'command': "turnPSUOff"}
        url = self.url + "api/plugin/psucontrol?apikey=" + self.apikey 
        return requests.post(url, json=myobj)
        
        

    def getPrinterInfo(self):
        if self.client == None:
            self.connect()
        try:             
            info = self.client.job_info();       
            #print(info)
            return info
        except Exception as e:
            print(e)

    def getError(self):
        URL = self.TSDurl + "accounts/login/"        
        client = requests.session()
        errorTSD = False
        try:
            client.get(URL, timeout=3)  # sets cookie      
        except:
            errorTSD = True
            
        if(errorTSD):
           print("TSDERROR TIMEOPUT")
           return "TSDerror"
        else:
                   
            csrftoken = client.cookies['csrftoken']       
            post_data = { "csrfmiddlewaretoken": csrftoken, 'login': self.TSDuser, 'password': self.TSDpass}
            headers = {'Referer': URL}
            response = client.post(URL, data=post_data, headers=headers)          
            a = client.get( self.TSDurl + "api/v1/printers/" + self.TSDid )
            client = None        
            data = json.loads(a.text)     
            try:   
                return data["normalized_p"]
            except:
                return "TSDERROR"
            
        
        

    def getAllFilesAndFolders(self):
       
        r = requests.get(self.url + "api/files?apikey=" + self.apikey + "&recursive=true")   
        print(self.url + "api/files?apikey=" + self.apikey + "&recursive=true")
        return r.text

    def getStatus(self):
        #r = requests.get(self.url[:-1]+":7125/server/info")      
        return None

    def selectFile(self, filePath):

        path = "local/" + filePath.replace("@","/")                   
        path = "local/" + filePath.replace("*","/")   
                       
        if(self.client == None):
            self.connect()
        path = path.replace("@","/")
        path = path.replace(" ","_")
        print(path) 
        self.client.select(path)       
        return "done"

    def deleteFile(self, filePath):
        path = "local/" + filePath.replace("@","/")           
        
        if(self.client == None):
            self.connect()
        r = requests.delete(self.url + "api/files/" + path + "?apikey=" + self.apikey )          
        return r.text

    def createFolder(self, folderPath):          
        if(self.client == None):
            self.connect()            
        path = folderPath.replace("@","/")         
        data = {'foldername': path}
        return requests.post(self.url + "api/files/local" + "?apikey=" + self.apikey, data = data)    
        

    def uploadFile(self, filePath, myfile):  
        if(self.client == None):
            self.connect() 
        path = filePath.replace("@","/")    
        if(path != "local"):      
            dataForm = {'path': path}
        else:
            dataForm = {'path': ""}        
        dataFile = {'file': myfile}               
        
        return requests.post(self.url + "api/files/local" + "?apikey=" + self.apikey, data = dataForm, files = dataFile)            
        
         

    def printSelectedFile(self):       
        
        if(self.client == None):
            self.connect()       
        return  self.client.start()
    
        
       
    def print(self, filePath):          
        if(self.client == None):
            self.connect()
        self.selectFile(filePath)
        return self.client.start()
    
        
        
    def toggle(self):          
        if(self.client == None):
            self.connect()       
        return self.client.toggle()
    
        

    def cancel(self):          
        if(self.client == None):
            self.connect()       
        return self.client.cancel()
    
         
   
    def jog(self, x, y, z):
        if(self.client == None):
            self.connect()       
            self.client.jog(x, y, z)
        return "done"

    def moveFile(self, name, path):
        name = name.replace("@","/")  
        path = path.replace("@","/")     
        if(self.client == None):
            self.connect()       
            return self.client.move(name, path)        
        return self.client.move(name, path)  
Ejemplo n.º 2
0
class Printer:

    def __init__(self, url, apikey):
        try:
            self.client = OctoRest(url=url, apikey=apikey)
        except ConnectionError as ex:
            # Handle exception as you wish
            print(ex)



    def get_printer_info(self):
        try:
            message = ""
            message += str(self.client.version) + "\n"
            message += str(self.client.job_info()) + "\n"
            printing = self.client.printer()['state']['flags']['printing']
            if printing:
                message += "Currently printing!\n"
            else:
                message += "Not currently printing...\n"
            return message
        except Exception as e:
            print(e)

    def home(self):

        self.client.connect()
        self.client.home()

    def setExtruderTemp(self, how):

        self.client.tool_target(how)


    def getExtruderTemp(self):

        dic = self.client.tool()
    
        print(self.client.tool()["tool0"])

    def test(self):
        print(self.client.files_info(location="/"))

    def restartKlipper(self):
        r = requests.post("http://192.168.0.103:7125/machine/services/restart?service=klipper")
        return r.text

    def stuff(self):
        
        #r = requests.post('http://192.168.0.103:7125/machine/device_power/on?printer')
   

        print(self.client.select("local/Test_3_big.gcode"))


    def waitConnection(self):
        counter = 0
        self.client.connect(baudrate = 250000)
        while(self.client.connection_info()["current"]["state"] != "Paused" and counter < 30):
            counter = counter + 1
            print("conecting..." + self.client.connection_info()["current"]["state"]  + str(counter))
        self.client.users
        if counter >= 30:
            print("conection error")
            return False
        else:
            return True

    def disableMotors(self):
        self.client.system_commands
        return True