diff --git a/devapp/dev_types.py b/devapp/dev_types.py index 8730ea1..d241bf2 100644 --- a/devapp/dev_types.py +++ b/devapp/dev_types.py @@ -8,7 +8,7 @@ from transliterate import translit from django.utils.translation import gettext_lazy as _, gettext from django.conf import settings -from djing.lib import RuTimedelta, safe_int +from djing.lib import RuTimedelta, safe_int, safe_float from devapp.expect_scripts import register_f601_onu, register_f660_onu, ExpectValidationError, OnuZteRegisterError from .base_intr import ( DevBase, SNMPBaseWorker, BasePort, DeviceImplementationError, @@ -181,14 +181,14 @@ class OLTDevice(DevBase, SNMPBaseWorker): for nm in nms: n = int(nm) status = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.26.%d' % n) - signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % n) + signal = safe_float(self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % n)) onu = ONUdev( num=n, name=self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % n), status=True if status == '3' else False, mac=self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % n), speed=0, - signal=int(signal or 0), + signal=signal / 10 if signal else '—', snmp_worker=self) res.append(onu) except EasySNMPTimeoutError as e: @@ -262,17 +262,16 @@ class OnuDevice(DevBase, SNMPBaseWorker): return try: status = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.26.%d' % num) - signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % num) + signal = safe_float(self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % num)) distance = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.27.%d' % num) mac = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % num) if mac is not None: mac = ':'.join('%x' % ord(i) for i in mac) # uptime = self.get_item('.1.3.6.1.2.1.2.2.1.9.%d' % num) - signal = safe_int(signal) if status is not None and status.isdigit(): return { 'status': status, - 'signal': signal / 10 if signal != 0 else 0, + 'signal': signal / 10 if signal else '—', 'name': self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % num), 'mac': mac, 'distance': int(distance) / 10 if distance.isdigit() else 0 @@ -369,7 +368,7 @@ class EltexSwitch(DLinkDevice): return DevBase.reboot(self, save_before_reboot) -def conv_signal(lvl: int) -> float: +def conv_zte_signal(lvl: int) -> float: if lvl == 65535: return 0.0 r = 0 if 0 < lvl < 30000: @@ -394,7 +393,7 @@ class Olt_ZTE_C320(OLTDevice): onu_types = self.get_list_keyval('.1.3.6.1.4.1.3902.1012.3.28.1.1.1.%d' % fiber_num) onu_ports = self.get_list('.1.3.6.1.4.1.3902.1012.3.28.1.1.2.%d' % fiber_num) - onu_signals = self.get_list('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%d' % fiber_num) + onu_signals = safe_int(self.get_list('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%d' % fiber_num)) # Real sn in last 3 octets onu_sns = self.get_list('.1.3.6.1.4.1.3902.1012.3.28.1.1.5.%d' % fiber_num) @@ -402,7 +401,7 @@ class Olt_ZTE_C320(OLTDevice): onu_list = ({ 'onu_type': onu_type_num[0], 'onu_port': onu_port, - 'onu_signal': conv_signal(safe_int(onu_signal)), + 'onu_signal': conv_zte_signal(onu_signal), 'onu_sn': onu_prefix + ''.join('%.2X' % ord(i) for i in onu_sn[-4:]), # Real sn in last 4 octets, 'snmp_extra': "%d.%d" % (fiber_num, safe_int(onu_type_num[1])), } for onu_type_num, onu_port, onu_signal, onu_sn, onu_prefix in zip( @@ -494,7 +493,7 @@ class ZteOnuDevice(OnuDevice): fiber_num, onu_num = int(fiber_num), int(onu_num) fiber_addr = '%d.%d' % (fiber_num, onu_num) status = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.1.%s.1' % fiber_addr) - signal = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%s.1' % fiber_addr) + signal = safe_int(self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.10.%s.1' % fiber_addr)) distance = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.12.1.1.18.%s.1' % fiber_addr) ip_addr = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.16.1.1.10.%s' % fiber_addr) vlans = self.get_item('.1.3.6.1.4.1.3902.1012.3.50.15.100.1.1.7.%s.1.1' % fiber_addr) @@ -507,8 +506,8 @@ class ZteOnuDevice(OnuDevice): return { 'status': status, - 'signal': conv_signal(safe_int(signal)), - 'distance': safe_int(distance) / 10, + 'signal': conv_zte_signal(signal), + 'distance': safe_float(distance) / 10, 'ip_addr': ip_addr, 'vlans': vlans, 'serial': sn,