Skip to content

Commit 8643dc3

Browse files
author
AndyEveritt
committed
get_model()
1 parent 829ebf5 commit 8643dc3

1 file changed

Lines changed: 45 additions & 17 deletions

File tree

DuetWebAPI/DuetWebAPI.py

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)