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)
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)