diff --git a/apps/main/models.py b/apps/main/models.py index 6436132..52f9f1e 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,4 +1,5 @@ +import requests from datetime import datetime from django.template.base import kwarg_re @@ -138,23 +139,39 @@ class Device(models.Model): def change_ip(self, ip_address, mask, gateway, **kwargs): if self.device_type.name=='dds': - try: - #if True: + try: answer = dds_api.change_ip(ip = self.ip_address, port = self.port_address, new_ip = ip_address, mask = mask, gateway = gateway) if answer[0]=='1': - self.message = 'DDS - {}'.format(answer) + self.message = '25|DDS - {}'.format(answer) self.ip_address = ip_address self.save() else: - self.message = 'DDS - {}'.format(answer) + self.message = '30|DDS - {}'.format(answer) return False except Exception as e: - self.message = str(e) + self.message = '40|{}'.format(str(e)) return False + + elif self.device_type.name=='rc': + payload = {'ip': ip_address, + 'dns': kwargs.get('dns', '8.8.8.8'), + 'gateway': gateway, + 'subnet': mask} + req = requests.post(self.url('changeip'), data=payload) + try: + answer = req.json() + if answer['changeip']=='ok': + self.message = '25|IP succesfully changed' + self.ip_address = ip_address + self.save() + else: + self.message = '30|An error ocuur when changing IP' + except Exception as e: + self.message = '40|{}'.format(str(e)) else: self.message = 'Not implemented' return False diff --git a/apps/main/views.py b/apps/main/views.py index ec22e00..fae7226 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -284,7 +284,8 @@ def device_change_ip(request, id_dev): if request.user.is_staff: device.change_ip(**request.POST.dict()) - messages.success(request, device.message) + level, message = device.message.split('|') + messages.add_message(request, level, message) else: messages.error(request, 'Not enough permission to delete this object') return redirect(device.get_absolute_url()) diff --git a/apps/rc/models.py b/apps/rc/models.py index 8654a11..2f7f362 100644 --- a/apps/rc/models.py +++ b/apps/rc/models.py @@ -236,21 +236,36 @@ class RCConfiguration(Configuration): def get_pulses(self, binary=True): - pulses = [line.pulses_as_points() for line in self.get_lines()] - points = [tup for tups in pulses for tup in tups] - points = set([x for tup in points for x in tup]) + + pulses = [line.pulses_as_points() for line in self.get_lines()] + tuples = [tup for tups in pulses for tup in tups] + points = set([x for tup in tuples for x in tup]) points = list(points) - points.sort() - - line_points = [line.pulses_as_points() for line in self.get_lines()] - #line_points = [[(x, x+y) for x,y in tups] for tups in line_points] - line_points = [[t for x in tups for t in x] for tups in line_points] - states = [[1 if x in tups else 0 for tups in line_points] for x in points] + points.sort() + states = [] + last = [0 for x in pulses] + + for x in points: + dum = [] + for i,tups in enumerate(pulses): + ups = [tup[0] for tup in tups] + dws = [tup[1] for tup in tups] + if x in ups: + dum.append(1) + elif x in dws: + dum.append(0) + else: + dum.append(last[i]) + states.append(dum) + last = dum if binary: - states.reverse() - states = [int(''.join([str(x) for x in flips]), 2) for flips in states] - + ret = [] + for flips in states: + flips.reverse() + ret.append(int(''.join([str(x) for x in flips]), 2)) + states = ret + return states[:-1] def add_cmd(self, cmd): @@ -459,7 +474,9 @@ class RCConfiguration(Configuration): self.device.status = 0 req = requests.get(self.device.url('status')) payload = req.json() - if payload['status']=='ok': + if payload['status']=='enabled': + self.device.status = 3 + elif payload['status']=='disabled': self.device.status = 2 else: self.device.status = 1 @@ -545,35 +562,35 @@ class RCConfiguration(Configuration): values = zip(self.get_pulses(), [x-1 for x in self.get_delays()]) - payload = '' - for tup in values: - vals = pack('0 and tr_ranges[0]!='0': y_win = self.mask_ranges(y_win, tr_ranges) diff --git a/devices/dds/api.py b/devices/dds/api.py index af9a810..173e410 100644 --- a/devices/dds/api.py +++ b/devices/dds/api.py @@ -54,10 +54,10 @@ def reset(): return cmd, payload @eth_device(ID_CLASS) -def change_ip(ip, mask="255.255.255.0", gateway="0.0.0.0"): +def change_ip(new_ip, mask="255.255.255.0", gateway="0.0.0.0"): cmd = CMD_CHANGEIP - payload = ip + '/' + mask + '/' + gateway + payload = new_ip + '/' + mask + '/' + gateway return cmd, payload