Example #1
0
    def read_and_parse_from_ModbusTCP(self):
        for i in range(0, 2):

            data = MeterData()
            data['time'] = time()
            try:
                if i == 0:
                    res = self.client.read_holding_registers(
                        999, 22, unit=self.AC_Meter_0.unit_id) if not debug else None
                elif i == 1:
                    res = self.client.read_holding_registers(
                        999, 22, unit=self.AC_Meter_1.unit_id) if not debug else None
            except exceptions.ConnectionException:
                self.logger.warning((self.name, ' can not connect'))
                message.put(self.name[-1:])
                return


            real_energy = FloatData()
            real_energy.shorts.s0 = res.registers[1] if not debug else -1
            real_energy.shorts.s1 = res.registers[0] if not debug else -1
            data['real_energy'] = real_energy.float if not debug else randint(1, 100) * 1.2

            real_power = FloatData()
            real_power.shorts.s0 = res.registers[7] if not debug else -1
            real_power.shorts.s1 = res.registers[6] if not debug else -1
            data['real_power'] = real_power.float if not debug else randint(1, 100) * 1.2

            reactive_power = FloatData()
            reactive_power.shorts.s0 = res.registers[11] if not debug else -1
            reactive_power.shorts.s1 = res.registers[10] if not debug else -1
            data['reactive_power'] = reactive_power.float if not debug else randint(1, 100) * 1.2

            voltage_LL = FloatData()
            voltage_LL.shorts.s0 = res.registers[15] if not debug else -1
            voltage_LL.shorts.s1 = res.registers[14] if not debug else -1
            data['voltage_LL'] = voltage_LL.float if not debug else randint(1, 100) * 1.2

            frequency = FloatData()
            frequency.shorts.s0 = res.registers[21] if not debug else -1
            frequency.shorts.s1 = res.registers[20] if not debug else -1
            data['frequency'] = frequency.float if not debug else randint(1, 100) * 1.2
            if res.registers[21] == 0:
                data['frequency'] = 0

            if i == 0:
                self.AC_Meter_0.data.append(data)
            elif i == 1:
                self.AC_Meter_1.data.append(data)

            self.logger.debug(data)
Example #2
0
def cli():
    getchar = None
    if os.name == 'nt':
        try:
            import termios
        except ImportError:
            # Non-POSIX. Return msvcrt's (Windows') getch.
            import msvcrt
            getchar = msvcrt.getwch
    else:
        # POSIX system. Create and return a getch that manipulates the tty.
        import curses
        stdscr = curses.initscr()
        curses.noecho()
        curses.cbreak()
        curses.start_color()
        stdscr.addstr(0, 20, "****************************************************************************",
                      curses.color_pair(1))
        stdscr.addstr(1, 20, "*****************   Welcome to the AC/DC meter data panel  *****************\n",
                      curses.color_pair(1))
        stdscr.addstr(2, 20, "****                    <s> (save) to save data                         ****\n",
                      curses.color_pair(1))
        stdscr.addstr(3, 20, "****                    <c> (clear) to clear previous data              ****\n",
                      curses.color_pair(1))
        stdscr.addstr(4, 20, "****                    <n> (new) to save and start new session         ****\n",
                      curses.color_pair(1))
        stdscr.addstr(5, 20, "****                    <q> (quit) to quit the app                      ****\n",
                      curses.color_pair(1))
        stdscr.addstr(6, 20, "****                                                                    ****\n",
                      curses.color_pair(1))
        stdscr.addstr(7, 20, "****                    < 1, 2, 3, 4, 5, 6, 7, 8 >                      ****\n",
                      curses.color_pair(1))
        stdscr.addstr(8, 20, "****              press number to add/remove corresponding panel        ****\n",
                      curses.color_pair(1))
        stdscr.addstr(9, 20, "****************************************************************************\n",
                      curses.color_pair(1))

        curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)

        def getchar():
            cmd = stdscr.getch()
            return chr(cmd)

    while True:
        cmd = getchar()
        if cmd == 'q':
            # message.put('QUIT')
            raise KeyboardInterrupt

        if cmd == 's':
            message.put('SAVE')
            print('\rSaving current session ...', end='')

        elif cmd == 'c':
            print('\rClear current data ...', end='')
            message.put('CLEAR')

        elif cmd == 'n':
            print('\rSaving current session and start new one ...', end='')
            message.put('NEW')

        elif cmd.isdigit():  # put corresponding panel to list
            message.put(cmd)