@@ -17,30 +17,34 @@ class DuetWebAPI:
1717 import requests
1818 import json
1919 import sys
20+ import logging
2021
2122 pt = 0
2223 _base_url = ''
2324
24- def __init__ (self , base_url ):
25- self ._base_url = base_url
26- try :
27- URL = (f'{ self ._base_url } ' + '/rr_model?type=1' )
25+ def __init__ (self , base_url : str ):
26+ def check_url (url : str ):
2827 r = self .requests .get (URL , timeout = (2 , 60 ))
29- j = self .json .loads (r .text )
30- _ = j ['coords' ]
28+ if str (r .status_code )[0 ] == '2' :
29+ return True
30+ return False
31+
32+ self ._base_url = base_url
33+
34+ URL = (f'{ self ._base_url } ' + '/rr_model?flag=d10vn' )
35+ if check_url (URL ):
36+ self .model_url = URL
3137 self .pt = 2
3238 return
33- except :
34- try :
35- URL = (f'{ self ._base_url } ' + '/machine/status' )
36- r = self .requests .get (URL , timeout = (2 , 60 ))
37- j = self .json .loads (r .text )
38- _ = j ['boards' ][0 ]['firmwareVersion' ]
39- self .pt = 3
40- return
41- except :
42- print (self ._base_url , " does not appear to be a RRF2 or RRF3 printer" , file = self .sys .stderr )
43- return
39+
40+ URL = (f'{ self ._base_url } ' + '/machine/status' )
41+ if check_url (URL ):
42+ self .model_url = URL
43+ self .pt = 3
44+ return
45+
46+ print (self ._base_url , " does not appear to be a RRF3 printer" , file = self .sys .stderr )
47+ return
4448####
4549# The following methods are a more atomic, reading/writing basic data structures in the printer.
4650####
@@ -51,6 +55,22 @@ def printerType(self):
5155 def baseURL (self ):
5256 return (self ._base_url )
5357
58+ def get_model (self , key = None ):
59+ if (self .pt == 2 ):
60+ URL = f'{ self ._base_url } /rr_model'
61+ r = self .requests .get (URL , {'flags' : 'd99vn' , 'key' : key })
62+ j = self .json .loads (r .text )
63+ result = j ['result' ]
64+ elif (self .pt == 3 ):
65+ URL = f'{ self ._base_url } /machine/status'
66+ r = self .requests .get (URL , {'key' : 'move' })
67+ result = self .json .loads (r .text )
68+ else :
69+ self .logging .error (f'{ self ._base_url } does not have an object model' )
70+ raise ValueError
71+
72+ return result
73+
5474 def getCoords (self ):
5575 if (self .pt == 2 ):
5676 URL = (f'{ self ._base_url } ' + '/rr_status?type=2' )
@@ -217,6 +237,7 @@ def getTemperatures(self):
217237 # Given a line from config g that defines an endstop (N574) or Z probe (M558),
218238 # Return a line that will define the same thing to a "nil" pin, i.e. undefine it
219239
240+
220241 def _nilEndstop (self , configLine ):
221242 ret = ''
222243 for each in [word for word in configLine .split ()]:
@@ -250,3 +271,10 @@ def yeetJob(self, filename, file):
250271 ret = self .putFile (path , file )
251272 if ret == 0 :
252273 print ('YAY WE DID THE THING' )
274+
275+
276+ riley = DuetWebAPI ('http://riley' )
277+ force_rig = DuetWebAPI ('http://forcerig' )
278+ force_rig .get_model ()
279+ riley .get_model ()
280+ pass
0 commit comments