models.py
184 lines
| 5.5 KiB
| text/x-python
|
PythonLexer
|
r0 | from django.db import models | ||
|
r6 | from apps.main.models import Configuration | ||
|
r261 | from apps.main.utils import Params | ||
|
r4 | from django.core.validators import MinValueValidator, MaxValueValidator | ||
|
r172 | from .files import read_json_file | ||
|
r208 | import requests | ||
|
r43 | # Create your models here. validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)] | ||
|
r4 | |||
|
r6 | class CGSConfiguration(Configuration): | ||
|
r172 | |||
|
r245 | freq0 = models.PositiveIntegerField(verbose_name='Frequency 0 (Hz)',validators=[MaxValueValidator(450e6)], default = 60) | ||
freq1 = models.PositiveIntegerField(verbose_name='Frequency 1 (Hz)',validators=[MaxValueValidator(450e6)], default = 60) | ||||
freq2 = models.PositiveIntegerField(verbose_name='Frequency 2 (Hz)',validators=[MaxValueValidator(450e6)], default = 60) | ||||
freq3 = models.PositiveIntegerField(verbose_name='Frequency 3 (Hz)',validators=[MaxValueValidator(450e6)], default = 60) | ||||
|
r172 | |||
|
r31 | def verify_frequencies(self): | ||
|
r172 | |||
|
r31 | return True | ||
|
r172 | |||
|
r59 | def status_device(self): | ||
|
r172 | |||
|
r59 | ip=self.device.ip_address | ||
port=self.device.port_address | ||||
|
r172 | |||
|
r248 | route = "http://" + str(ip) + ":" + str(port) + "/status/" | ||
|
r59 | try: | ||
|
r248 | r = requests.get(route, timeout=0.7) | ||
|
r215 | except Exception as e: | ||
|
r59 | self.device.status = 0 | ||
self.device.save() | ||||
|
r215 | self.message = 'Could not read CGS status: ' + str(e) | ||
|
r207 | return False | ||
|
r172 | |||
|
r248 | response = r.json() | ||
self.device.status = response['status'] | ||||
self.message = response['message'] | ||||
self.device.save() | ||||
|
r172 | |||
|
r248 | if response['components_status']==0: | ||
|
r220 | return False | ||
|
r172 | |||
|
r207 | return True | ||
|
r172 | |||
|
r208 | def start_device(self): | ||
ip=self.device.ip_address | ||||
port=self.device.port_address | ||||
|
r249 | #---Device must be configured | ||
if not self.device.status == 2: | ||||
self.message = 'CGS Device must be configured.' | ||||
return False | ||||
|
r208 | #---Frequencies from form | ||
|
r249 | post_data = self.parms_to_dict() | ||
route = "http://" + str(ip) + ":" + str(port) + "/write/" | ||||
|
r208 | |||
try: | ||||
r = requests.post(route, post_data, timeout=0.7) | ||||
|
r249 | except Exception as e: | ||
self.message = "Could not start CGS device. "+str(e) | ||||
return False | ||||
response = r.json() | ||||
if response['status']==1: | ||||
self.device.status = 1 | ||||
self.device.save() | ||||
self.message = response['message'] | ||||
|
r208 | return False | ||
|
r249 | self.device.status = response['status'] | ||
self.device.save() | ||||
self.message = response['message'] | ||||
return True | ||||
|
r208 | |||
def stop_device(self): | ||||
ip=self.device.ip_address | ||||
port=self.device.port_address | ||||
|
r248 | if self.device.status == 2: #Configured | ||
self.message = 'CGS device is already stopped.' | ||||
return False | ||||
post_data = {"freq0":0, "freq1":0, "freq2":0, "freq3":0} | ||||
route = "http://" + str(ip) + ":" + str(port) + "/write/" | ||||
|
r208 | |||
try: | ||||
r = requests.post(route, post_data, timeout=0.7) | ||||
|
r248 | except Exception as e: | ||
self.message = "Could not write CGS parameters. "+str(e) | ||||
self.device.status = 0 | ||||
self.device.save() | ||||
|
r208 | return False | ||
|
r248 | response = r.json() | ||
status = response['status'] | ||||
if status == 1: | ||||
self.device.status = status | ||||
self.device.save() | ||||
self.message = 'Could not stop CGS device.' | ||||
return False | ||||
|
r208 | |||
|
r248 | self.message = 'CGS device has been stopped successfully.' | ||
self.device.status = 2 | ||||
self.device.save() | ||||
|
r208 | |||
|
r248 | return True | ||
|
r208 | |||
|
r59 | def read_device(self): | ||
|
r172 | |||
|
r59 | ip=self.device.ip_address | ||
port=self.device.port_address | ||||
|
r172 | |||
|
r246 | route = "http://" + str(ip) + ":" + str(port) + "/read/" | ||
|
r59 | try: | ||
|
r208 | frequencies = requests.get(route,timeout=0.7) | ||
|
r59 | except: | ||
self.message = "Could not read CGS parameters from this device" | ||||
return None | ||||
|
r172 | |||
|
r59 | frequencies = frequencies.json() | ||
|
r246 | if frequencies: | ||
frequencies = frequencies.get("Frequencies") | ||||
freq0 = frequencies.get("freq0") | ||||
freq1 = frequencies.get("freq1") | ||||
freq2 = frequencies.get("freq2") | ||||
freq3 = frequencies.get("freq3") | ||||
parms = {'freq0': freq0, | ||||
'freq1': freq1, | ||||
'freq2': freq2, | ||||
'freq3': freq3} | ||||
self.message = "CGS parameters have been successfully read" | ||||
return parms | ||||
else: | ||||
self.message = "Error reading CGS parameters" | ||||
return None | ||||
|
r172 | |||
|
r59 | def write_device(self): | ||
|
r172 | |||
|
r59 | ip=self.device.ip_address | ||
port=self.device.port_address | ||||
|
r172 | |||
|
r59 | #---Frequencies from form | ||
|
r261 | parms = self.parms_to_dict()['configurations'] | ||
for parm in parms['allIds']: | ||||
byid = parm | ||||
frequencies = parms['byId'][byid] | ||||
|
r247 | post_data = {} | ||
for data in frequencies: | ||||
if data in ['freq0','freq1','freq2','freq3']: | ||||
post_data[data] = frequencies[data] | ||||
route = "http://" + str(ip) + ":" + str(port) + "/write/" | ||||
|
r261 | print post_data | ||
|
r172 | try: | ||
|
r208 | r = requests.post(route, post_data, timeout=0.7) | ||
|
r59 | except: | ||
self.message = "Could not write CGS parameters" | ||||
|
r247 | self.device.status = 0 | ||
self.device.save() | ||||
|
r207 | return False | ||
|
r172 | |||
|
r247 | response = r.json() | ||
self.message = response['message'] | ||||
self.device.status = response['status'] | ||||
self.device.save() | ||||
|
r172 | |||
|
r247 | if self.device.status==1: | ||
return False | ||||
|
r248 | |||
|
r247 | return True | ||
|
r172 | |||
|
r59 | |||
|
r6 | class Meta: | ||
db_table = 'cgs_configurations' | ||||