#1 2022-12-29 18:21:14

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Робимо розумною систему резервного живлення

Пропоную вдосконалення для популярної на сьгоднішній день схеми резервного живлення:
ups.jpg
Прошивку в форматі hex можна скачати звідси.
Для роботи з цим USB-пристроєм знадобиться пакет Network UPS Tools (про настройку і команди буде нижче).

В якості "ардуіни" я використав програматор USBasp, це зручна платка для розробки різних USB-пристроїв, на ній вже розпаяна обв'язка для USB, виведено кілька GPIO, один ADC і один апаратний UART і SPI. У мікроконтролера ATmega8A нема апаратного USB, тому використовується програмна емуляція за допомогою бібліотеки VUSB. До UART підключена плата PZEM-004T, яка працює по протоколу ModBus. Ще знадобиться два резистори зі співвідношенням опорів 1:5 для подільника напруги, краще взяти великі номінали, щоб менше садити батарею. Для прошивки USBasp можна використати іншу USBasp, або заздалегідь прошити бутлоадер.

Після підключення пристрій представляється якимось UPS-ом:

# dmesg
usb 2-1: new low-speed USB device number 91 using uhci_hcd
usb 2-1: New USB device found, idVendor=047c, idProduct=ffff
usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1: Product: PZEM-004T
usb 2-1: Manufacturer: arduino.ua
usb 2-1: SerialNumber: 0001
# lsusb
Bus 002 Device 091: ID 047c:ffff Dell Computer Corp. UPS Tower 500W LV

Для настройки NUT треба змінити наступні файли:

# cat etc/nut.conf
MODE=standalone
# cat etc/ups.conf
[pzem]
  driver = usbhid-ups
  port = auto
# cat etc/upsd.conf
LISTEN 127.0.0.1 3493
# cat etc/upsd.users 
[admin]
 password = 123
 actions = SET
 upsmon primary
# cat etc/upsmon.conf
MONITOR pzem 1 admin 123 primary
SHUTDOWNCMD "/usr/sbin/pm-hibernate"

Якщо все правильно настроєно і запущено, то можемо отримати такий результат:

# upsc pzem
battery.charge.low: 1180
battery.voltage: 12.32
device.mfr: arduino.ua
device.model: PZEM-004T
device.serial: 0001
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: MGE HID 1.46
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.20 (API: 0x1000104)
outlet.current: 0.00
outlet.powerfactor: 0.00
outlet.realpower: 0
output.frequency: 49.9
output.voltage: 235.6
ups.mfr: arduino.ua
ups.model: PZEM-004T
ups.productid: ffff
ups.serial: 0001
ups.status: OB
ups.vendorid: 047c

Дані output.*,outlet.* пристрій отримує безпосередньо від PZEM-004T, дані battery.voltage від АЦП, а battery.charge.low - це параметр в пам'яті USB-пристрою, який ми можемо змінювати.

Для зміни параметру використовується команда:

# upsrw -s battery.charge.low=1190 pzem
Username (honey): admin
Password: 123
OK

Для перегляду лише одного параметру можна використати:

# upsc pzem battery.charge.low
1190

Що це за параметр? Число 1190 відповідає напрузі 11.90В, з якою мікроконтролер постійно порівнює напругу акумулятора (battery.voltage), і якщо вона виявиться рівною або нижчою за вказаний поріг, то на виході /BATLOW з'явиться низький рівень (додатково для наглядності ще загориться світлодіод на платі). Тобто низький рівень на цьому виході означає "низька напруга батареї".

Кнопка "Shutdown" надсилає до NUT сигнал, який примушує NUT виконати команду, вказану в SHUTDOWNCMD (в даному прикладі - перейти в гібернацію).

А чи можна використовувати пристрій без встановленого пакету NUT? Так, можна. А як же змінити параметр battery.charge.low ? Записом в перші два байти EEPROM. Кнопка Shutdown не буде працювати? Ні, вона обробляється лише в NUT, але є "план Б".

На схемі ще є дві кнопки "Sleep" і "PwrDown", які генерують натискання відповідних кнопок на ПК, в який підключений USB-пристрій. Наприклад в Windows реакцію на ці кнопки можна призначити в розділі "Параметри"->"Система"->"Живлення і режим сну"->"Додаткові параметри живлення"->"Дія кнопки живлення", наприклад, для "PwrDown" можна призначити "Гібернацію".

Ви вже здогадалися, що вихід /BATLOW можна з'єднувати перемичкою або джампером з одним із входів для кнопок "Shutdown", "Sleep" або "PwrDown" ?

Остання редакція Honey (2023-01-01 15:13:45)

Неактивний

#2 2022-12-29 20:00:24

rain
Учасник
Зареєстрований: 2022-04-15
Повідомлень: 33

Re: Робимо розумною систему резервного живлення

like!
А на отсутствие PZEM'а не будет ругаться? На случай, если высоковольтная часть не планируется.

Неактивний

#3 2022-12-29 20:05:03

Kirill2022
Учасник
Зареєстрований: 2022-02-02
Повідомлень: 66

Re: Робимо розумною систему резервного живлення

Це буде розпізнаватися як УПС?
Хочу зробити по цій інструкції HID-Compliant UPS with Arduino
https://projecthub.arduino.cc/abratchik/3e597a31-9844-4981-bede-fdac7944ad71
(зміни цого хлопця до NUT прийняли на гіт для коректної роботи з НАС Сінолоджи)
мені до НАС Сінолоджи DS218+ треба підключити, щоб він думав що повноцінний УПС, що можно було керувати відключенням.
Тільки в мене БЖ з функцією УПС ds-55a, будуще мониторити напругу та струм на АКБ через єсп з ina219
А плата ХІД УПС потрібна щоб НАС думав що він до УПС підключений і треба знати коли пропадає 220В щоб його вимкнути та він не саджав батарею, бо на ній роутер ще висить.

Остання редакція Kirill2022 (2022-12-29 20:10:07)

Неактивний

#4 2022-12-29 20:38:05

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Re: Робимо розумною систему резервного живлення

rain пише:

like!
А на отсутствие PZEM'а не будет ругаться? На случай, если высоковольтная часть не планируется.

Так, буде працювати і без PZEM.

Неактивний

#5 2022-12-29 20:45:24

rain
Учасник
Зареєстрований: 2022-04-15
Повідомлень: 33

Re: Робимо розумною систему резервного живлення

Спасибо за проект. А исходники будут выложены?

Неактивний

#6 2023-01-01 13:32:22

rain
Учасник
Зареєстрований: 2022-04-15
Повідомлень: 33

Re: Робимо розумною систему резервного живлення

Отписал на почту.

Неактивний

#7 2023-01-01 14:55:28

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 412

Re: Робимо розумною систему резервного живлення

Kirill2022 пише:

А плата ХІД УПС потрібна щоб НАС думав що він до УПС підключений і треба знати коли пропадає 220В щоб його вимкнути та він не саджав батарею, бо на ній роутер ще висить.

Єдиний варіант дізнатися - випробувати. Я реалізував випадкову модель UPSа з тих, які підтримує NUT. Які UPSи підтримує Ваш NAS - невідомо, якщо співпаде, матимете безкоштовне готове рішення. Якщо ні - можу реалізувати іншу модель UPSа за Вашим замовленням.

rain пише:

Спасибо за проект. А исходники будут выложены?

Ні, не будуть. Можу реалізувати всі ті побажання, які Ви виклали в листі. Насправді можна дуже багато чого реалізувати, для деяких речей є підтримка в NUT, для інших і її можна доробити. Ось деякі:
* повне вимкнення навантаження після заданого з хоста таймаута (в NUT підтримується);
* робота з зарядним пристроєм від мережі 220, фактично це online-ups (в NUT повна підтримка);
* робота з зарядним пристроєм з прив'язкою до часу доби (в NUT додати кілька нових параметрів);
* робота з кількома акумуляторними батареями (в NUT лише з однією, але можна розширити);
* робота з сонячними панелями (в NUT такого нема взагалі, зробити можна, але вже виходить за межі філософії NUT).
Звичайно, в серйозних проектах не буде використовуватись USBasp з mega8a)

Неактивний

#8 2023-01-01 15:36:29

rain
Учасник
Зареєстрований: 2022-04-15
Повідомлень: 33

Re: Робимо розумною систему резервного живлення

> Ні, не будуть.

А можно узнать - почему? Зачем всем каждый раз изобретать велосипед?
Задача в любом случае решаема разными путями.

> Можу реалізувати всі ті побажання, які Ви виклали в листі

Хорошо, спасибо.

Неактивний

#9 2023-01-02 16:33:37

Kirill2022
Учасник
Зареєстрований: 2022-02-02
Повідомлень: 66

Re: Робимо розумною систему резервного живлення

Honey пише:
Kirill2022 пише:

А плата ХІД УПС потрібна щоб НАС думав що він до УПС підключений і треба знати коли пропадає 220В щоб його вимкнути та він не саджав батарею, бо на ній роутер ще висить.

Єдиний варіант дізнатися - випробувати. Я реалізував випадкову модель UPSа з тих, які підтримує NUT. Які UPSи підтримує Ваш NAS - невідомо, якщо співпаде, матимете безкоштовне готове рішення. Якщо ні - можу реалізувати іншу модель UPSа за Вашим замовленням.

rain пише:

Спасибо за проект. А исходники будут выложены?

Ні, не будуть. Можу реалізувати всі ті побажання, які Ви виклали в листі. Насправді можна дуже багато чого реалізувати, для деяких речей є підтримка в NUT, для інших і її можна доробити. Ось деякі:
* повне вимкнення навантаження після заданого з хоста таймаута (в NUT підтримується);
* робота з зарядним пристроєм від мережі 220, фактично це online-ups (в NUT повна підтримка);
* робота з зарядним пристроєм з прив'язкою до часу доби (в NUT додати кілька нових параметрів);
* робота з кількома акумуляторними батареями (в NUT лише з однією, але можна розширити);
* робота з сонячними панелями (в NUT такого нема взагалі, зробити можна, але вже виходить за межі філософії NUT).
Звичайно, в серйозних проектах не буде використовуватись USBasp з mega8a)

Спробую HID UPS та потім то що ви виклали smile

Неактивний

#10 2023-01-10 23:35:16

alex_dol
Учасник
Зареєстрований: 2015-12-28
Повідомлень: 196

Re: Робимо розумною систему резервного живлення

Не зрозумів цілі даного проекту. Автоматично вимкнути комп'ютер? Це можна зробити руками якщо людина за компом, достатньо вольтремра. Як на мене треба додати зарядний пристрій та функцію автоматичного вмиканя компа при появі світла.

Неактивний

#11 2023-01-11 00:32:02

rain
Учасник
Зареєстрований: 2022-04-15
Повідомлень: 33

Re: Робимо розумною систему резервного живлення

> Це можна ... якщо

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму