Luxeon UPS: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показаны 32 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
[[Категория:Linux]] |
[[Категория:Linux]] |
||
+ | [[Категория:UPS]] |
||
+ | [[Категория:I2C]] |
||
+ | [[Категория:RaspberryPi]] |
||
+ | [[Категория:Monitoring]] |
||
+ | |||
=Мониторинг напряжения на UPS Luxeon= |
=Мониторинг напряжения на UPS Luxeon= |
||
Строка 6: | Строка 11: | ||
К нему подключены 2 батареи по 100 Ач, 12Вб последовательно. RS232 или не работает или использует протокол с которым я не смог разобраться. <BR> |
К нему подключены 2 батареи по 100 Ач, 12Вб последовательно. RS232 или не работает или использует протокол с которым я не смог разобраться. <BR> |
||
Для прогнозирования времени работы единственный способ получить данные - это мониторинг напряжения на аккумуляторах. |
Для прогнозирования времени работы единственный способ получить данные - это мониторинг напряжения на аккумуляторах. |
||
+ | <BR> |
||
+ | <BR> |
||
+ | Вся схема собрана "на коленке" за час, из тех деталей что были в наличии на макетной плате. |
||
+ | <BR> |
||
+ | [[Файл:Luxeon Voltage 1.JPG|200px|thumb|left|Внешний вид, датчики закреплены канцелярскими булавками]] |
||
+ | [[Файл:Luxeon Voltage 2.jpg|200px|thumb|left|Макетная плата, оранжевый - +5в, желтый - земля, Коричневый - SCL, Красный - SDA]] |
||
+ | [[Файл:Luxeon Voltage 3.jpg|200px|thumb|left|RaspberryPi 1, 2011 года]] |
||
+ | =Аппаратная часть= |
||
− | =Решение= |
||
Для мониторинга использую то что есть под рукой а именно |
Для мониторинга использую то что есть под рукой а именно |
||
* Raspberry Pi Model 1 (самая старая, какая есть) |
* Raspberry Pi Model 1 (самая старая, какая есть) |
||
− | * Датчики INA-219 (2шт) <BR> |
+ | * Датчики INA-219 (2шт используются, еще 2 на случай подключения большего числа батарей) <BR> |
− | [[ |
+ | [[Файл:ina219.jpg |200px|ina-219]]<br> |
<BR> |
<BR> |
||
INA-219 подключается по интерфейсу [https://ru.wikipedia.org/wiki/I²C I²C] (2 проводной интерфейс), питание на датчик подается с распберри |
INA-219 подключается по интерфейсу [https://ru.wikipedia.org/wiki/I²C I²C] (2 проводной интерфейс), питание на датчик подается с распберри |
||
+ | <BR> |
||
+ | <BR> |
||
У распберри |
У распберри |
||
* pin 02 - +5В на Vcc датчиков |
* pin 02 - +5В на Vcc датчиков |
||
Строка 19: | Строка 33: | ||
* pin 03 - I<sup>2</sup>C SDA (данные) на SDA датчиков |
* pin 03 - I<sup>2</sup>C SDA (данные) на SDA датчиков |
||
* pin 05 - I<sup>2</sup>C SCL (синхронизация) на SCL датчиков |
* pin 05 - I<sup>2</sup>C SCL (синхронизация) на SCL датчиков |
||
+ | * Напряжение которое требуется измерять подключается на <code>'''+Vin'''</code>, измерение происходит относительно уровня земли |
||
+ | * Датчики и RaspberryPi питаются от тех же 24В через DC-DC преобразователь с выходом USB (преобразователь подключен на клеммы батарей UPSa). |
||
+ | <BR> |
||
+ | Всего на одну шину можно подключить 4 датчика, адрес на шине задается с помошью перемычек (2 перемычки, дают 4 возможных адреса) |
||
+ | </BR> |
||
Другими словами все датчики подключены к 4 пинам распберри, отдельные пины для каждого датчика не нужны |
Другими словами все датчики подключены к 4 пинам распберри, отдельные пины для каждого датчика не нужны |
||
Строка 24: | Строка 43: | ||
=Программная часть= |
=Программная часть= |
||
+ | Требуется включение поддержки I<sup>2</sup>C со стороны линукса<BR> |
||
+ | Самый простой способ - использовать <code>raspi-config</code> <BR> |
||
+ | который пропишет все что надо в <code>/etc/modules-load.d/modules.conf</code> |
||
+ | <BR> |
||
+ | или вручную загрузить нужные модули: |
||
+ | <PRE> |
||
+ | lsmod | grep i2c |
||
+ | i2c_bcm2835 16384 0 |
||
+ | i2c_dev 20480 0 |
||
+ | </PRE> |
||
+ | |||
+ | После загрузки модулей можно просканировать шину на предмет устройств: |
||
+ | <code>i2cdetect 1</code> Параметр <code>1</code> это номер шины I<sup>2</sup>C ( их может быть более чем одна, но в моем случае - одна, с номером 1, <code>/dev/i2c-1</code> |
||
+ | <PRE> |
||
+ | WARNING! This program can confuse your I2C bus, cause data loss and worse! |
||
+ | I will probe file /dev/i2c-1. |
||
+ | I will probe address range 0x03-0x77. |
||
+ | Continue? [Y/n] y |
||
+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f |
||
+ | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- |
||
+ | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
||
+ | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
||
+ | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
||
+ | 40: 40 41 -- -- 44 45 -- -- -- -- -- -- -- -- -- -- |
||
+ | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
||
+ | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
||
+ | 70: -- -- -- -- -- -- -- -- |
||
+ | </PRE> |
||
+ | |||
+ | В этом примере видно что есть устройства на адресах <code>0x40</code>, <code>0x41</code>, <code>0x44</code>, <code>0x45</code><BR> |
||
+ | (У меня фактически включены 4 датчика, но 2 не используются) |
||
+ | |||
+ | |||
+ | Для снятия данных с датчика использую простой скрипт на <code>Python</code>, </BR> |
||
+ | библиотека для работы с ina-219 может быть установлена командой <code>pip3 install pi-ina219</code> |
||
+ | <PRE> |
||
+ | #!/usr/bin/env python3 |
||
+ | |||
+ | from ina219 import INA219 |
||
+ | from ina219 import DeviceRangeError |
||
+ | |||
+ | import time |
||
+ | |||
+ | SHUNT_OHMS = 0.1 |
||
+ | COUNT = 10 |
||
+ | |||
+ | def read(): |
||
+ | V = ina1.voltage() |
||
+ | return V |
||
+ | |||
+ | ina1 = INA219(SHUNT_OHMS,address=0x40) |
||
+ | ina1.configure() |
||
+ | |||
+ | if __name__ == "__main__": |
||
+ | c = 0 |
||
+ | voltage_summ = 0 |
||
+ | while c < COUNT: |
||
+ | try: |
||
+ | current_voltage = read() |
||
+ | if current_voltage < 18: |
||
+ | raise ValueError("Voltage can't be < 18v"); |
||
+ | voltage_summ = voltage_summ + current_voltage |
||
+ | |||
+ | c = c + 1 |
||
+ | time.sleep(0.01) |
||
+ | except: |
||
+ | time.sleep(0.2) |
||
+ | pass |
||
+ | |||
+ | print("{V1:.3f}".format(V1=voltage_summ/COUNT)) |
||
+ | </PRE> |
||
+ | |||
+ | В этом скрипте |
||
+ | * <code>ina1 = INA219(SHUNT_OHMS,address=0x40)</code> - 0x40 это адрес датчика, для снятия данных с нескольких датчиков его можно вынести в параметры или сделать копию скрипта =) |
||
+ | * <code>if current_voltage < 18: raise ValueError("Voltage can't be < 18v");</code> нужна для того что бы игнорировать значения ниже 18Вольт, так как иногда происходит ошибка измерения |
||
+ | * <code>COUNT = 10</code> число измерений, результат берется как среднее значение |
||
+ | |||
+ | |||
+ | =Интеграция с системой мониторинга Zabbix= |
||
+ | Для того что бы избежать возможных проблем данные снимаются регулярно, раз в минуту используя <code>cron</code>: |
||
+ | <code>cat /etc/cron.d/voltage</code><BR> |
||
+ | (за одно не нужно давать <code>sudo</code> пользователю zabbix) |
||
+ | <PRE> |
||
+ | * * * * * root /etc/zabbix/scripts/voltage_0x40.py > /etc/zabbix/scripts/voltage_24v |
||
+ | * * * * * root /etc/zabbix/scripts/voltage_0x41.py > /etc/zabbix/scripts/voltage_12v |
||
+ | </PRE> |
||
+ | Данные по 2 точкам (12В и 24В) сохраняются в тестовые файлы, например <code>/etc/zabbix/scripts/voltage_24v</code> |
||
+ | |||
+ | <code>Zabbix-agent</code> прочто читает эти файлы и отдает как значения ключей |
||
+ | <PRE> |
||
+ | cat /etc/zabbix/zabbix_agentd.conf.d/UserParameter-voltage.conf |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | UserParameter=ups.luxeon.voltage_24v_level,/usr/bin/cat /etc/zabbix/scripts/voltage_24v |
||
+ | UserParameter=ups.luxeon.voltage_12v_level,/usr/bin/cat /etc/zabbix/scripts/voltage_12v |
||
+ | </PRE> |
||
+ | Проверить работу можно командой <code>zabbix_get</code> |
||
+ | <PRE> |
||
+ | zabbix_get -s 192.168.29.29 -k ups.luxeon.voltage_12v_level |
||
+ | 13.698 |
||
+ | </PRE> |
||
+ | * <code>-s 192.168.29.29 </code> - адрес заббикс-агента, IP адрес RaspberryPi куда подключены датчики |
||
+ | * <code>-k ups.luxeon.voltage_12v_level</code> имя ключа |
||
+ | |||
+ | =Zabbix Template= |
||
+ | Темплейт (очень упрощенный) |
||
+ | {{#spoiler:show=Temlate Luxeon Voltage| |
||
+ | <PRE> |
||
+ | <?xml version="1.0" encoding="UTF-8"?> |
||
+ | <zabbix_export> |
||
+ | <version>5.0</version> |
||
+ | <date>2022-12-29T08:09:19Z</date> |
||
+ | <groups> |
||
+ | <group> |
||
+ | <name>Luxeon</name> |
||
+ | </group> |
||
+ | </groups> |
||
+ | <templates> |
||
+ | <template> |
||
+ | <template>Temlate Luxeon Voltage</template> |
||
+ | <name>Temlate Luxeon Voltage</name> |
||
+ | <groups> |
||
+ | <group> |
||
+ | <name>Luxeon</name> |
||
+ | </group> |
||
+ | </groups> |
||
+ | <applications> |
||
+ | <application> |
||
+ | <name>Luxeon</name> |
||
+ | </application> |
||
+ | </applications> |
||
+ | <items> |
||
+ | <item> |
||
+ | <name>ups.luxeon.voltage_12v_level</name> |
||
+ | <key>ups.luxeon.voltage_12v_level</key> |
||
+ | <value_type>FLOAT</value_type> |
||
+ | <units>V</units> |
||
+ | <applications> |
||
+ | <application> |
||
+ | <name>Luxeon</name> |
||
+ | </application> |
||
+ | </applications> |
||
+ | <triggers> |
||
+ | <trigger> |
||
+ | <expression>{max(5)}<11.5</expression> |
||
+ | <name>ups.luxeon.voltage_12v_level is critical low ( <11.5v during last 5 minutes)</name> |
||
+ | <priority>HIGH</priority> |
||
+ | </trigger> |
||
+ | <trigger> |
||
+ | <expression>{max(5)}<12</expression> |
||
+ | <name>ups.luxeon.voltage_12v_level is low ( <12v during last 5 minutes)</name> |
||
+ | <priority>AVERAGE</priority> |
||
+ | </trigger> |
||
+ | <trigger> |
||
+ | <expression>{nodata(15m)}=1</expression> |
||
+ | <name>ups.luxeon.voltage_12v_level NODATA</name> |
||
+ | <priority>HIGH</priority> |
||
+ | </trigger> |
||
+ | <trigger> |
||
+ | <expression>{max(5)}<24</expression> |
||
+ | <name>ups.luxeon.voltage_24v_level is low ( <24v during last 5 minutes)</name> |
||
+ | <priority>AVERAGE</priority> |
||
+ | </trigger> |
||
+ | </triggers> |
||
+ | </item> |
||
+ | <item> |
||
+ | <name>ups.luxeon.voltage_12v_level_5min_avg</name> |
||
+ | <type>CALCULATED</type> |
||
+ | <key>ups.luxeon.voltage_12v_level_5min_avg</key> |
||
+ | <value_type>FLOAT</value_type> |
||
+ | <params>avg(ups.luxeon.voltage_12v_level, 5m)</params> |
||
+ | <applications> |
||
+ | <application> |
||
+ | <name>Luxeon</name> |
||
+ | </application> |
||
+ | </applications> |
||
+ | </item> |
||
+ | <item> |
||
+ | <name>ups.luxeon.voltage_24v_level</name> |
||
+ | <key>ups.luxeon.voltage_24v_level</key> |
||
+ | <value_type>FLOAT</value_type> |
||
+ | <units>V</units> |
||
+ | <applications> |
||
+ | <application> |
||
+ | <name>Luxeon</name> |
||
+ | </application> |
||
+ | </applications> |
||
+ | <triggers> |
||
+ | <trigger> |
||
+ | <expression>{max(5)}<23</expression> |
||
+ | <name>ups.luxeon.voltage_24v_level is critical low( <23v during last 5 minutes)</name> |
||
+ | <priority>HIGH</priority> |
||
+ | </trigger> |
||
+ | <trigger> |
||
+ | <expression>{nodata(15m)}=1</expression> |
||
+ | <name>ups.luxeon.voltage_24v_level NODATA</name> |
||
+ | <priority>HIGH</priority> |
||
+ | </trigger> |
||
+ | </triggers> |
||
+ | </item> |
||
+ | <item> |
||
+ | <name>ups.luxeon.voltage_24v_level_5min_avg</name> |
||
+ | <type>CALCULATED</type> |
||
+ | <key>ups.luxeon.voltage_24v_level_5min_avg</key> |
||
+ | <value_type>FLOAT</value_type> |
||
+ | <params>avg(ups.luxeon.voltage_24v_level, 5m)</params> |
||
+ | <applications> |
||
+ | <application> |
||
+ | <name>Luxeon</name> |
||
+ | </application> |
||
+ | </applications> |
||
+ | </item> |
||
+ | </items> |
||
+ | <screens> |
||
+ | <screen> |
||
+ | <name>Voltage</name> |
||
+ | <hsize>1</hsize> |
||
+ | <vsize>2</vsize> |
||
+ | <screen_items> |
||
+ | <screen_item> |
||
+ | <resourcetype>0</resourcetype> |
||
+ | <style>0</style> |
||
+ | <resource> |
||
+ | <name>UPS Voltage (5min avg)</name> |
||
+ | <host>Temlate Luxeon Voltage</host> |
||
+ | </resource> |
||
+ | <width>1500</width> |
||
+ | <height>300</height> |
||
+ | <x>0</x> |
||
+ | <y>0</y> |
||
+ | <colspan>1</colspan> |
||
+ | <rowspan>1</rowspan> |
||
+ | <elements>0</elements> |
||
+ | <valign>0</valign> |
||
+ | <halign>0</halign> |
||
+ | <dynamic>0</dynamic> |
||
+ | <sort_triggers>0</sort_triggers> |
||
+ | <url/> |
||
+ | <application/> |
||
+ | <max_columns>3</max_columns> |
||
+ | </screen_item> |
||
+ | <screen_item> |
||
+ | <resourcetype>0</resourcetype> |
||
+ | <style>0</style> |
||
+ | <resource> |
||
+ | <name>UPS Voltage</name> |
||
+ | <host>Temlate Luxeon Voltage</host> |
||
+ | </resource> |
||
+ | <width>1500</width> |
||
+ | <height>300</height> |
||
+ | <x>0</x> |
||
+ | <y>1</y> |
||
+ | <colspan>1</colspan> |
||
+ | <rowspan>1</rowspan> |
||
+ | <elements>0</elements> |
||
+ | <valign>0</valign> |
||
+ | <halign>0</halign> |
||
+ | <dynamic>0</dynamic> |
||
+ | <sort_triggers>0</sort_triggers> |
||
+ | <url/> |
||
+ | <application/> |
||
+ | <max_columns>3</max_columns> |
||
+ | </screen_item> |
||
+ | </screen_items> |
||
+ | </screen> |
||
+ | </screens> |
||
+ | </template> |
||
+ | </templates> |
||
+ | <graphs> |
||
+ | <graph> |
||
+ | <name>UPS Voltage</name> |
||
+ | <yaxismin>9</yaxismin> |
||
+ | <yaxismax>30</yaxismax> |
||
+ | <ymin_type_1>FIXED</ymin_type_1> |
||
+ | <ymax_type_1>FIXED</ymax_type_1> |
||
+ | <graph_items> |
||
+ | <graph_item> |
||
+ | <sortorder>1</sortorder> |
||
+ | <color>1A7C11</color> |
||
+ | <item> |
||
+ | <host>Temlate Luxeon Voltage</host> |
||
+ | <key>ups.luxeon.voltage_12v_level</key> |
||
+ | </item> |
||
+ | </graph_item> |
||
+ | <graph_item> |
||
+ | <sortorder>2</sortorder> |
||
+ | <color>F63100</color> |
||
+ | <item> |
||
+ | <host>Temlate Luxeon Voltage</host> |
||
+ | <key>ups.luxeon.voltage_24v_level</key> |
||
+ | </item> |
||
+ | </graph_item> |
||
+ | </graph_items> |
||
+ | </graph> |
||
+ | <graph> |
||
+ | <name>UPS Voltage (5min avg)</name> |
||
+ | <yaxismin>9</yaxismin> |
||
+ | <yaxismax>30</yaxismax> |
||
+ | <ymin_type_1>FIXED</ymin_type_1> |
||
+ | <ymax_type_1>FIXED</ymax_type_1> |
||
+ | <graph_items> |
||
+ | <graph_item> |
||
+ | <sortorder>1</sortorder> |
||
+ | <color>1A7C11</color> |
||
+ | <item> |
||
+ | <host>Temlate Luxeon Voltage</host> |
||
+ | <key>ups.luxeon.voltage_12v_level_5min_avg</key> |
||
+ | </item> |
||
+ | </graph_item> |
||
+ | <graph_item> |
||
+ | <sortorder>2</sortorder> |
||
+ | <color>F63100</color> |
||
+ | <item> |
||
+ | <host>Temlate Luxeon Voltage</host> |
||
+ | <key>ups.luxeon.voltage_24v_level_5min_avg</key> |
||
+ | </item> |
||
+ | </graph_item> |
||
+ | </graph_items> |
||
+ | </graph> |
||
+ | </graphs> |
||
+ | </zabbix_export> |
||
+ | </PRE> |
||
+ | }} |
Текущая версия на 16:52, 2 января 2023
Мониторинг напряжения на UPS Luxeon
Постановка задачи
Есть UPS/инвертор (24В): Файл:Ep3000-pro (1).pdf
К нему подключены 2 батареи по 100 Ач, 12Вб последовательно. RS232 или не работает или использует протокол с которым я не смог разобраться.
Для прогнозирования времени работы единственный способ получить данные - это мониторинг напряжения на аккумуляторах.
Вся схема собрана "на коленке" за час, из тех деталей что были в наличии на макетной плате.
Аппаратная часть
Для мониторинга использую то что есть под рукой а именно
- Raspberry Pi Model 1 (самая старая, какая есть)
- Датчики INA-219 (2шт используются, еще 2 на случай подключения большего числа батарей)
INA-219 подключается по интерфейсу I²C (2 проводной интерфейс), питание на датчик подается с распберри
У распберри
- pin 02 - +5В на Vcc датчиков
- pin 05 - Земля на Gnd датчиков
- pin 03 - I2C SDA (данные) на SDA датчиков
- pin 05 - I2C SCL (синхронизация) на SCL датчиков
- Напряжение которое требуется измерять подключается на
+Vin
, измерение происходит относительно уровня земли - Датчики и RaspberryPi питаются от тех же 24В через DC-DC преобразователь с выходом USB (преобразователь подключен на клеммы батарей UPSa).
Всего на одну шину можно подключить 4 датчика, адрес на шине задается с помошью перемычек (2 перемычки, дают 4 возможных адреса)
Другими словами все датчики подключены к 4 пинам распберри, отдельные пины для каждого датчика не нужны
Программная часть
Требуется включение поддержки I2C со стороны линукса
Самый простой способ - использовать raspi-config
который пропишет все что надо в /etc/modules-load.d/modules.conf
или вручную загрузить нужные модули:
lsmod | grep i2c i2c_bcm2835 16384 0 i2c_dev 20480 0
После загрузки модулей можно просканировать шину на предмет устройств:
i2cdetect 1
Параметр 1
это номер шины I2C ( их может быть более чем одна, но в моем случае - одна, с номером 1, /dev/i2c-1
WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1. I will probe address range 0x03-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: 40 41 -- -- 44 45 -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
В этом примере видно что есть устройства на адресах 0x40
, 0x41
, 0x44
, 0x45
(У меня фактически включены 4 датчика, но 2 не используются)
Для снятия данных с датчика использую простой скрипт на Python
,
библиотека для работы с ina-219 может быть установлена командой pip3 install pi-ina219
#!/usr/bin/env python3 from ina219 import INA219 from ina219 import DeviceRangeError import time SHUNT_OHMS = 0.1 COUNT = 10 def read(): V = ina1.voltage() return V ina1 = INA219(SHUNT_OHMS,address=0x40) ina1.configure() if __name__ == "__main__": c = 0 voltage_summ = 0 while c < COUNT: try: current_voltage = read() if current_voltage < 18: raise ValueError("Voltage can't be < 18v"); voltage_summ = voltage_summ + current_voltage c = c + 1 time.sleep(0.01) except: time.sleep(0.2) pass print("{V1:.3f}".format(V1=voltage_summ/COUNT))
В этом скрипте
ina1 = INA219(SHUNT_OHMS,address=0x40)
- 0x40 это адрес датчика, для снятия данных с нескольких датчиков его можно вынести в параметры или сделать копию скрипта =)if current_voltage < 18: raise ValueError("Voltage can't be < 18v");
нужна для того что бы игнорировать значения ниже 18Вольт, так как иногда происходит ошибка измеренияCOUNT = 10
число измерений, результат берется как среднее значение
Интеграция с системой мониторинга Zabbix
Для того что бы избежать возможных проблем данные снимаются регулярно, раз в минуту используя cron
:
cat /etc/cron.d/voltage
(за одно не нужно давать sudo
пользователю zabbix)
* * * * * root /etc/zabbix/scripts/voltage_0x40.py > /etc/zabbix/scripts/voltage_24v * * * * * root /etc/zabbix/scripts/voltage_0x41.py > /etc/zabbix/scripts/voltage_12v
Данные по 2 точкам (12В и 24В) сохраняются в тестовые файлы, например /etc/zabbix/scripts/voltage_24v
Zabbix-agent
прочто читает эти файлы и отдает как значения ключей
cat /etc/zabbix/zabbix_agentd.conf.d/UserParameter-voltage.conf
UserParameter=ups.luxeon.voltage_24v_level,/usr/bin/cat /etc/zabbix/scripts/voltage_24v UserParameter=ups.luxeon.voltage_12v_level,/usr/bin/cat /etc/zabbix/scripts/voltage_12v
Проверить работу можно командой zabbix_get
zabbix_get -s 192.168.29.29 -k ups.luxeon.voltage_12v_level 13.698
-s 192.168.29.29
- адрес заббикс-агента, IP адрес RaspberryPi куда подключены датчики-k ups.luxeon.voltage_12v_level
имя ключа
Zabbix Template
Темплейт (очень упрощенный)