コード例 #1
0
 def test_one(self):
     h, m = secs_to_hhmm(0)
     assert h == 0
     assert m == 0
コード例 #2
0
 def test_rounding_1(self):
     h, m = secs_to_hhmm(29)
     assert h == 0
     assert m == 0
コード例 #3
0
 def test_rounding_2(self):
     h, m = secs_to_hhmm(30)
     assert h == 0
     assert m == 1
コード例 #4
0
 def test_5(self):
     h, m = secs_to_hhmm(86400 - 31)
     assert h == 23
     assert m == 59
コード例 #5
0
 def test_4(self):
     h, m = secs_to_hhmm(3600)
     assert h == 1
     assert m == 0
コード例 #6
0
 def test_3(self):
     h, m = secs_to_hhmm(121)
     assert h == 0
     assert m == 2
コード例 #7
0
 def test_two(self):
     h, m = secs_to_hhmm(60)
     assert h == 0
     assert m == 1
コード例 #8
0
    def render_page(self, message=None, console=None):
        logger.info('rendering page')

        try:
            tes = list()
            data = dict()

            # General System Information
            m = Model.instance
            md = m.get_all()
            d = Data(md)

            cloud_log_state = md['cloud']
            serial = d.get('N/A', 'sys-version', 'serial')

            tes.append(TE('System', ''))
            text = nice([('sys', 'System', ''), ('bl', 'Bootloader', ''),
                         ('hw', 'Hardware', '')], md['sys-version'], True)
            tes.append(TE('Version', text))

            dt = d.get('N/A', 'sys-datetime', 'date')
            tes.append(TE('Date', dt))

            ut = d.get('N/A', 'sys-datetime', 'uptime')
            tes.append(TE('Uptime', ut))

            total, free = d.get((0, 0), 'sys-misc', 'mem')
            tes.append(TE('Memory', f'Total: {total} kB<br>Free: {free} kB'))

            wear_slc, wear_mlc = d.get((0, 0), 'sys-disc', 'wear')
            sysroot_info = d.get('N/A', 'sys-disc', 'part_sysroot')
            data_info = d.get('N/A', 'sys-disc', 'part_data')
            tes.append(
                TE(
                    'Disc',
                    f'eMMC Wear Level: SLC: {wear_slc} %, MLC: {wear_mlc} %<br>'
                    f'Root: {sysroot_info}<br>'
                    f'Data: {data_info}'))

            a, b, c = d.get((0, 0, 0), 'sys-misc', 'load')
            tes.append(TE('Load', f'{a}, {b}, {c}'))

            temp = d.get(0, 'sys-misc', 'temp')
            tes.append(TE('Temperature', f'{temp:.0f} °C'))

            v_in = md['sys-misc']['v_in']
            v_rtc = md['sys-misc']['v_rtc']
            tes.append(
                TE('Voltages', f'Input: {v_in:.1f} V, RTC: {v_rtc:.2f} V'))

            # Network Information
            tes.append(TE('', ''))
            tes.append(TE('Network', ''))

            rx, tx = d.get((-1, -1), 'net-wwan0', 'bytes')
            if rx != -1:
                rx = int(rx) / 1000000
                tx = int(tx) / 1000000
                tes.append(TE('wwan0', f'Rx: {rx:.1f} MB<br>Tx: {tx:.1f} MB'))

            # Modem Information
            mi = md['modem']
            if 'modem-id' in mi:
                tes.append(TE('', ''))
                tes.append(TE('Mobile', ''))

                tes.append(TE('Modem Id', mi['modem-id']))

                state = mi['state']
                access_tech = mi['access-tech']
                tes.append(TE('State', f'{state}, {access_tech}'))

                if 'location' in mi:
                    loc_info = mi['location']
                    if loc_info['mcc']:
                        text = nice([('mcc', 'MCC', ''), ('mnc', 'MNC', ''),
                                     ('lac', 'LAC', ''), ('cid', 'CID', '')],
                                    loc_info)
                        tes.append(TE('Cell', text))
                        data.update(loc_info)

                sq = mi['signal-quality']
                tes.append(TE('Signal', f'{sq} %'))

                if access_tech == 'lte':
                    sig = mi['signal-lte']
                    text = nice([('rsrp', 'RSRP', 'dBm'),
                                 ('rsrq', 'RSRQ', 'dB')], sig, True)
                    tes.append(TE('Signal LTE', text))
                elif access_tech == 'umts':
                    sig = mi['signal-umts']
                    text = nice([('rscp', 'RSRP', 'dBm'),
                                 ('ecio', 'ECIO', 'dB')], sig, True)
                    tes.append(TE('Signal UMTS', text))

                if 'bearer-id' in mi:
                    tes.append(TE('', ''))
                    tes.append(TE('Bearer Id', mi['bearer-id']))

                    if 'bearer-uptime' in mi:
                        ut = mi['bearer-uptime']
                        if ut:
                            uth, utm = secs_to_hhmm(ut)
                            tes.append(TE('Uptime', f'{uth}:{utm:02} h'))
                            ip = mi['bearer-ip']
                            tes.append(TE('IP', ip))

                    if 'link' in md:
                        if 'delay' in md['link']:
                            delay_in_ms = md['link']['delay'] * 1000.0
                            tes.append(TE('Ping', f'{delay_in_ms:.0f} ms'))

            else:
                tes.append(TE('', ''))
                tes.append(TE('Modem Id', 'No Modem'))

            # GNSS
            if 'gnss-pos' in md:
                tes.append(TE('', ''))
                tes.append(TE('GNSS', ''))

                pos = md['gnss-pos']
                tes.append(TE('Fix', pos['fix']))
                text = f'Longitude: {pos["lon"]:.9f}, Latitude: {pos["lat"]:.9f}'
                tes.append(TE('Position', text))
                text = nice([('speed', '', 'km/h')], pos)
                tes.append(
                    TE(
                        'Speed',
                        f'{pos["speed"]:.0f} m/s, {pos["speed"]*3.60:.0f} km/h'
                    ))

            self.render('main.html',
                        title=f'{serial}',
                        table=tes,
                        data=data,
                        message=message,
                        console=console,
                        version=version,
                        cloud_log=cloud_log_state)

        except KeyError as e:
            logger.warning(f'lookup error {e}')
            self.render('main.html',
                        title='NG800/VCU Pro',
                        message=f'Data lookup error: {e} not found',
                        table=None,
                        data=None,
                        console=None,
                        version='n/a',
                        cloud_log=False)