Exemplo n.º 1
0
    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")
Exemplo n.º 2
0
    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")
Exemplo n.º 3
0
 def get_config_hash(self):
     m = hashlib.md5()
     m.update(generate_config_file(self.db).encode("utf-8"))
     return m.hexdigest()