APC + apcupsd или что делать, если случайно удалил EEPROM

Самое главное — не отчаивайтесь, если прочитали статью Сапрыкина и как я, случайно нажали в режиме PROG сочетание клавиш Ctrl+Y (в терминале оно выглядит как ^Y). Если вы такой же лох 🙂 как и я, читайте дальше.

Ничто не предвещало беды, и поиграв до ночи в openttd, а пару часов назад успешно откалибровав APC, я сходил посмотреть изменился ли регистр 0 после калибровки или нет.
Здесь я на этот вопрос конечно же отвечать не буду, поскольку статья не об этом 🙂 , а вот выйти из режима программирования без приключений, на этот раз у меня не получилось. Случайно я нажал на клавиатуре сочетание клавиш Ctrl+Y, и как гласит статья Сапрыкина

^Y—-самая опасная команда, полностью очищает EEPROM. Дальнейшая работа возможна после перешивки EEPROM на внешнем программаторе

Так оно и случилось — очистился EEPROM. Я, поняв, что что-то пошло не так, и эхо в терминале ответило мне не «BYE» а «ОК«, побежал смотреть что же в итоге произошло с APC. Как всегда и везде, в Linux пишутся протоколы, поэтому я покажу вам, дорогие читатели, что я увидел на тот момент: 🙂

1) Query the UPS for all known values
2) Perform a Battery Runtime Calibration
3) Abort Battery Calibration
4) Monitor Battery Calibration progress
5) Program EEPROM
6) Enter TTY mode communicating with UPS
Q) Quit

Select function number: 1

I am going to run through the series of queries of the UPS
that are used in initializing apcupsd.

Simulating UPSlinkCheck …
Wrote: Y Got: SM
Attempting to use smart_poll() …
Sent: Y Got: SM Good — smart_poll() works!.

Going to ask for valid commands…
Wrote: a Got: 3.?=.’)-89@ABDEFGKLMNOPQRSUVWXYZabcdefgjklmnopqrsuxyz~
Protocol version is: 3
Alert characters are: ?=
Command characters are: ^A^N^Z’)-89@ABDEFGKLMNOPQRSUVWXYZabcdefgjklmnopqrsuxyz~

Now running through apcupsd get_UPS capabilities().
NA indicates that the feature is Not Available

UPS Status: 48
Line quality: FF
Reason for last transfer to batteries: S
Self-Test Status: NO
Line Voltage: 117.3
Line Voltage Max: 118.8
Line Voltage Min: 115.2
Output Voltage: 118.0
Batt level percent: 100.0
Batt voltage: 13.36
UPS Load: 000.0
Line freq: 50.00
Runtime left: 0000
UPS Internal temp: NA
Dip switch settings: NA
Register 1: 00
Register 2: 00
Register 3: 00
Sensitivity: H
Wakeup delay: 000
Sleep delay: 060
Low transfer voltage: 106
High transfer voltage: 127
Batt charge for return: 00
Alarm status: 0
Low battery shutdown level: 02
UPS Name:
UPS Self test interval: 336
UPS manufacture date:
UPS serial number:
Date battery replaced:
Output voltage when on batteries: 115
Nominal battery voltage: 012
Percent humidity: NA
Ambient temperature: NA
Firmware revision: 10.1.D
Number of external batteries installed: NA
Number of bad batteries installed: NA
UPS model as defined by UPS: Back-UPS Pro 280
UPS EPROM capabilities string: uD43127130133136uA43108110112114uI43253257261265lD43106103100097lA43092090088086lI43208204200196e44200155090oD13115oA13100oI13230s441HMLLq44202050710p443060180300600k4410TLNr443000060180300E443336168ON OFF
The EPROM string is 205 characters long!
Hours since last self test: 026.8

That is all for now.

Вот такая красота: вместо APC SC420 — Back-UPS Pro 280, процент выходной нагрузки — 0, входное напряжение — 117 вольт, имя УПСа и серийный номер вместе с датой последней замены батарей — затёрлись. «Просто чудо» — подумал я. 🙂 И пошёл спать, утро вечера мудренее.

На следующий день, вооружившись логами «из прошлого», которые запечатлели ещё «счастливые часы» корректной работы APC SC420, начал колдовать над восстановлением затёртого EEPROM. Мне всё-таки не верилось, что придётся выпаивать микросхему и прошивать её на программаторе, как предвещал господин Сапрыкин. И не пришлось!

Орудуя расшифровкой команд из статьи Сапрыкина и своими старыми протоколами, вначале восстановил версию прошивки, а заодно название модель UPS и входное напряжение (оказалось что всё это очень сильно связано между собой, и UPS «знает» какой он модели и на какое входное напряжение рассчитан исходя из выбранной версии прошивки).

Для этого мы заходим в терминал, входим в 6 пункт apctest’а, далее в режим PROG и нажимаем «b», вывалится нам текущая версия прошивки — 10.1.D. Щёлкаем на цифровой клавиатуре большую кнопку «плюс», заодно проверяя версию прошивки, нажимая «b», как дойдём до нужной нам из списка официальной документации — в моём случае 725.1.I — останавливаемся. Теперь UPS «знает» что он — снова SC420 и благодаря букве I на конце номера прошивки — что он — модель на 220В.

Далее, обращаясь в официальную документацию, восстановим регистры 4, 5, 6 и 0 (если у вас где-то ранее записан собственное значение нулевого регистра после калибровки UPS — устанавливаем его). Здесь тоже всё просто — в режиме PROG нажимаем 4, и «плюсиком» «дотягиваем» HEX значение до нужного из таблички, с 5, 6 и 0 регистрами всё аналогично.

Отлично, регистры выставили, теперь восстановим имя УПСа, его серийный номер, дату изготовления и дату последней замены батарей. У меня это всё было в старых протоколах, которые так и валялись не особо нужными до сегодняшнего дня. Покажу как восстановить на примере своих значений: в режиме PROG для дальнейшего восстановления:
серийного номера — нажимаем «n», затем «плюсик» и вводим серийный номер до того момента, пока APC не пискнет, а на экране не отобразится «ОК», в моём случае я ввожу «3S0713X14717»
даты изготовления прибора — аналогично — нажимаем «m», затем «плюсик» и вводим дату изготовления в формате MM/DD/YY (и только так!!! иначе если у вас параллельно есть windows и там установлен powerchute — он в этом поле покажет полную чепуху)
даты последней замены батарей — аналогично — нажимаем «x», затем «плюсик», всё остальное аналогично

Теперь всё основное мы восстановили, но параметр UPS Load (или по-другому LOADPCT) у нас находится в значении 0%, хотя выходная нагрузка есть. Здесь тоже всё просто, обнулив EEPROM вы затёрли и это значение. Восстанавливается аналогично регистрам 4, 5, 6, 0, только в режиме PROG нужно нажать «P» и откорректировать «плюсом» или «минусом» эталонное значение выходной нагрузки.
Здесь мне не помогли даже мои unix протоколы, поскольку HEX значений EEPROM они не содержат. Помог мне параллельно установленный Powerchute на винде и его протоколы выходной нагрузки. Поэтому значение мощности я выставил не точно, «на глазок» ориентируясь по выходной мощности всё того же подключённого оборудования. Для APC SC420I значение «P» получилось примерно равным «E7«.
Аналогично нужно поступить с измерением входного напряжения, значение «L». Я просто измерил напряжение в розетке мультиметром и записал в EEPROM значение «B5«.

После таких операций восстановления внимательно проверьте остальные значения других менее важных параметров! Вот что получилось у меня после полного восстановления:

UPS Status: 08
Line quality: FF
Reason for last transfer to batteries: S
Self-Test Status: NO
Line Voltage: 220.3
Line Voltage Max: 226.0
Line Voltage Min: 216.0
Output Voltage: 220.3
Batt level percent: 066.0
Batt voltage: 13.36
UPS Load: 044.2
Line freq: 50.00
Runtime left: 0030
UPS Internal temp: NA
Dip switch settings: NA
Register 1: 00
Register 2: 00
Register 3: 00
Sensitivity: M
Wakeup delay: 000
Sleep delay: 060
Low transfer voltage: 204
High transfer voltage: 253
Batt charge for return: 00
Alarm status: T
Low battery shutdown level: 02
UPS Name: UPS_IDEN
UPS Self test interval: 336
UPS manufacture date: 03/27/07
UPS serial number: 3S0713X14717
Date battery replaced: 10/15/16
Output voltage when on batteries: 230
Nominal battery voltage: 012
Percent humidity: NA
Ambient temperature: NA
Firmware revision: 725.1.I
Number of external batteries installed: NA
Number of bad batteries installed: NA
UPS model as defined by UPS: Smart-UPS SC420
UPS EPROM capabilities string: uD43127130133136uA43108110112114uI43253257261265lD43106103100097lA43092090088086lI43208204200196e44200155090oD13115oA13100oI13230s441HMLLq44202050710p443060180300600k4410TLNr443000060180300E443336168ON OFF
The EPROM string is 205 characters long!
Hours since last self test: 000.0

That is all for now.

На этом всё, если возникнут вопросы — вы всегда можете написать мне на почту gladsas@yandex.ru и я постараюсь вам помочь. 🙂

Добавить комментарий