def _send_commands(self): command = self.db.get_property('RS485_COMMAND') if command == "": return self.db.set_property('RS485_COMMAND_INFO', '') for dev in self.db.controllers: error_text = "Контроллер '%s' не ответил." % dev[1] if command == "SCAN_OW": self._command_info("Запрос поиска OneWire устройств для контроллера '%s'..." % dev[1]) if self.send_pack(dev[0], self.PACK_COMMAND, ["SCAN_ONE_WIRE", ""]): self._command_info("Пауза 3с...") time.sleep(3) self._command_info("Запрос списка найденых на шине OneWire устройств для контроллера '%s'" % dev[1]) is_ok = False for res_pack in self.send_pack(dev[0], self.PACK_COMMAND, ["LOAD_ONE_WIRE_ROMS", ""]): count = 0 allCount = len(res_pack[2][1]) is_ok = True for rom in res_pack[2][1]: rom_s = [] for r in rom: ss = hex(r).upper() if len(ss) == 3: ss = ss.replace("0X", "0x0") else: ss = ss.replace("0X", "0x") rom_s += [ss] rom_s += [", "] self._command_info("".join(rom_s[:-1])) if self.db.append_scan_rom(dev[0], rom): count += 1 self._command_info("Всего найдено устройств: %s. Новых: %s" % (allCount, count)) if is_ok == False: self._command_info(error_text) else: self._command_info(error_text) elif command == "CONFIG_UPDATE": self.serialPort.timeout = 2 time.sleep(0.1) try: self._command_info("CONFIG FILE UPLOAD '%s'..." % dev[1]) #pack_data = self._str_to_hex(generate_config_file(self.db)) pack_data = generate_config_file(self.db) self._command_info(str(len(pack_data)) + ' bytes.') #bts = 512 #bts = 128 bts = 1024 cou = math.ceil(len(pack_data) / bts) is_ok = False c_pack = self.send_pack(dev[0], self.PACK_COMMAND, ["SET_CONFIG_FILE", cou, False], False) if c_pack and self.check_lan_error == False: prev_command = "Начало загрузки..." self._command_info(prev_command) for i in range(cou): t = i * bts s = pack_data[t:t + bts] c_pack = self.send_pack(dev[0], self.PACK_COMMAND, ["SET_CONFIG_FILE", i + 1, s], i == cou - 1) if c_pack != False and self.check_lan_error or (i == cou - 1): is_ok = True if i != cou - 1: #Значит не долили файл self._command_info("ВНИМАНИЕ: Загрузка прервана"); break else: new_command = self._gen_text_progress(i, cou) self._command_info(prev_command, new_command) prev_command = new_command self._command_info(prev_command, self._gen_text_progress(cou, cou)) if is_ok: self._command_info("OK") else: self._command_info(error_text) except: pass self.serialPort.timeout = self.fast_timeput self.check_lan_error = False elif command == "REBOOT_CONTROLLERS": self.serialPort.timeout = 1 self._command_info("Запрос перезагрузки контроллера '%s'..." % dev[1]) if self.send_pack(dev[0], self.PACK_COMMAND, ["REBOOT_CONTROLLER", ""]): self._command_info("OK") else: self._command_info(error_text) self.serialPort.timeout = self.fast_timeput elif command == "GET_OW_VALUES": pass self.db.set_property('RS485_COMMAND', '') self._command_info("Готово.") time.sleep(2) self._command_info("TERMINAL EXIT")
def _send_commands(self): command = self.db.get_property('RS485_COMMAND') if command == "": return self.db.set_property('RS485_COMMAND_INFO', '') for dev in self.db.controllers: error_text = "Контроллер '%s' не ответил." % dev[1] if command == "SCAN_OW": self._command_info("Запрос поиска OneWire устройств для контроллера '%s'..." % dev[1]) if self.send_pack(dev[0], self.PACK_COMMAND, ["SCAN_ONE_WIRE", ""]): self._command_info("Пауза 3с...") time.sleep(3) self._command_info("Запрос списка найденых на шине OneWire устройств для контроллера '%s'" % dev[1]) is_ok = False for res_pack in self.send_pack(dev[0], self.PACK_COMMAND, ["LOAD_ONE_WIRE_ROMS", ""]): count = 0 allCount = len(res_pack[2][1]) is_ok = True for rom in res_pack[2][1]: rom_s = [] for r in rom: ss = hex(r).upper() if len(ss) == 3: ss = ss.replace("0X", "0x0") else: ss = ss.replace("0X", "0x") rom_s += [ss] rom_s += [", "] self._command_info("".join(rom_s[:-1])) if self.db.append_scan_rom(dev[0], rom): count += 1 self._command_info("Всего найдено устройств: %s. Новых: %s" % (allCount, count)) if is_ok == False: self._command_info(error_text) else: self._command_info(error_text) elif command == "CONFIG_UPDATE": self.serialPort.timeout = 2 time.sleep(2) try: self._command_info("CONFIG FILE UPLOAD '%s'..." % dev[1]) #pack_data = self._str_to_hex(generate_config_file(self.db)) pack_data = generate_config_file(self.db) self._command_info(str(len(pack_data)) + ' bytes.') #bts = 512 bts = 1024 cou = math.ceil(len(pack_data) / bts) is_ok = False c_pack = self.send_pack(dev[0], self.PACK_COMMAND, ["SET_CONFIG_FILE", cou, False], False) if c_pack and self.check_lan_error == False: prev_command = "Начало загрузки..." self._command_info(prev_command) for i in range(cou): t = i * bts s = pack_data[t:t + bts] c_pack = self.send_pack(dev[0], self.PACK_COMMAND, ["SET_CONFIG_FILE", i + 1, s], i == cou - 1) if c_pack != False and self.check_lan_error or (i == cou - 1): is_ok = True if i != cou - 1: #Значит не долили файл self._command_info("ВНИМАНИЕ: Загрузка прервана"); break else: new_command = self._gen_text_progress(i, cou) self._command_info(prev_command, new_command) prev_command = new_command self._command_info(prev_command, self._gen_text_progress(cou, cou)) if is_ok: self._command_info("OK") else: self._command_info(error_text) except: pass self.serialPort.timeout = self.fast_timeput self.check_lan_error = False elif command == "REBOOT_CONTROLLERS": self.serialPort.timeout = 1 self._command_info("Запрос перезагрузки контроллера '%s'..." % dev[1]) if self.send_pack(dev[0], self.PACK_COMMAND, ["REBOOT_CONTROLLER", ""]): self._command_info("OK") else: self._command_info(error_text) self.serialPort.timeout = self.fast_timeput elif command == "GET_OW_VALUES": pass self.db.set_property('RS485_COMMAND', '') self._command_info("Готово.") time.sleep(2) self._command_info("TERMINAL EXIT")
def get_config_hash(self): m = hashlib.md5() m.update(generate_config_file(self.db).encode("utf-8")) return m.hexdigest()