Инструменты пользователя

Инструменты сайта


temp_mon

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
temp_mon [2014/02/06 15:04]
metallic
temp_mon [2023/09/20 15:05] (текущий)
metallic [Подключение датчиков и дисплея]
Строка 8: Строка 8:
   * [[http://amperka.ru/product/temperature-sensor-ds18b20|Температурные датчики DS18B20]] (кол-во на одной шине ограничено 128 штуками, если не ошибаюсь)   * [[http://amperka.ru/product/temperature-sensor-ds18b20|Температурные датчики DS18B20]] (кол-во на одной шине ограничено 128 штуками, если не ошибаюсь)
   * [[http://amperka.ru/collection/display/product/text-lcd-20x4|Текстовый экран 20×4]] (опционально)   * [[http://amperka.ru/collection/display/product/text-lcd-20x4|Текстовый экран 20×4]] (опционально)
 +  * [[http://amperka.ru/collection/power-sources/product/usb-power-plug|Импульсный блок питания с USB-разъёмом (5 В, 1000 мА)]]
   * Резистор 4.7кОм   * Резистор 4.7кОм
   * Развернутая система мониторинга [[https://www.zabbix.com|Zabbix]]   * Развернутая система мониторинга [[https://www.zabbix.com|Zabbix]]
Строка 14: Строка 15:
  
 ===== Подготовка Raspberry Pi ===== ===== Подготовка Raspberry Pi =====
-Для начала нужно установить ОС на флеш-карту, как это сделать подробно описано [[http://forum.cxem.net/index.php?showtopic=114312&#entry1326610|тут]]. После того, как система установлена и загружается нужно ее подготовить для работы. Во-первых, настраивает локальную сеть, дату, время, часовой пояс и т.д. Во-вторых в файл /etc/modules добавляем модули необходимые для работы температурных датчиков и дисплея:+Для начала нужно установить ОС на флеш-карту, для этого используется [[https://downloads.raspberrypi.org/imager/imager_latest.exe|Raspberry Pi Imager]].  
 +После того, как система установлена и загружается нужно ее подготовить для работы. Во-первых, настраивает локальную сеть, дату, время, часовой пояс и т.д. 
  
-  i2c-dev +Во-вторых, нужно включить нужные интерфейсы, раньше это делалось добавлением модулей в файл /etc/modules, теперь это можно сделать утилитой raspi-config(встроена в систему) Interfacing Options -> 1-Wire и Interfacing Options -> I2C 
-  w1-gpio +По сути дела эта утилита просто добавляет нужные параметры в файл /boot/config.txt нужные параметры, например для 1-wire она добавит в конец dtoverlay=w1-gpio, т.е. это можно сделать и вручную.
-  w1-therm +
- +
-  +
 ===== Подключение датчиков и дисплея ===== ===== Подключение датчиков и дисплея =====
 Для подключения температурных датчиков нам понадобится трехжильный кабель(или более), отлично подойдет четырехжильная витая пара. У датчика три пина: земля, пин по которому передаются данные и плюс питания: Для подключения температурных датчиков нам понадобится трехжильный кабель(или более), отлично подойдет четырехжильная витая пара. У датчика три пина: земля, пин по которому передаются данные и плюс питания:
Строка 48: Строка 47:
   10375 / 1000 = 10.375 С   10375 / 1000 = 10.375 С
      
 +Также с датчиками можно работать с помощью библиотеки w1thermsensor для python, устанавливаем:
 +
 +  pip3 install w1thermsensor
 +  
 +Пример кода:
 +
 +  from w1thermsensor import W1ThermSensor
 +  
 +  # Все сенсоры
 +  for sensor in W1ThermSensor.get_available_sensors():
 +  print(f"Сенсон ID {sensor.id} температура {sensor.get_temperature():.2f}")
 +  
 +  # Определенный сенсор
 +  sensor = W1ThermSensor(sensor_id="0000046022cb")
 +  print(f"Температура  {sensor.get_temperature():.2f}")
 +
 Если все работает, переходим к подлючению дисплея. Схема подключения пинов дисплея к пинам GPIO показаны ниже(4х битный режим): Если все работает, переходим к подлючению дисплея. Схема подключения пинов дисплея к пинам GPIO показаны ниже(4х битный режим):
  
Строка 236: Строка 251:
 В результате чего на дисплее появятся показания с трех датчиков(в моем случае). В результате чего на дисплее появятся показания с трех датчиков(в моем случае).
  
-<note>По поводу кирилицы: нельзя просто так взять и написать на русском языке, из-за кодировок дисплей выведет полную ерунду. Чтобы выводить русские символы нужно писать их в hex-формате, т.е. например \xFF. Таблицу самих же символов и их коды можно поглядеть в официальной [[http://files.amperka.ru/datasheets/MT-16S2H.pdf|документации]] к дисплею на странице 8 или на рисунке ниже. Если вы хотите смешивать латиницу и кирилицу(как сделал я), то после кода кирилического символа нужно добавить две кавычки "" и дальше любое кол-во латинских букв или цифр</note>+<note>По поводу кирилицы: нельзя просто так взять и написать на русском языке, из-за кодировок дисплей выведет полную ерунду. Чтобы выводить русские символы нужно писать их в hex-формате, т.е. например \xFF. Таблицу самих же символов и их коды можно поглядеть в официальной [[http://files.amperka.ru/datasheets/MT-16S2H.pdf|документации]] к дисплею на странице 8 или на рисунке ниже. Если вы хотите смешивать латиницу и кирилицу(как сделал я), то после кода кирилического символа нужно добавить две кавычки "" и дальше любое кол-во латинских букв или цифр
  
 {{ :hex_codes_display.png?direct&300 |}} {{ :hex_codes_display.png?direct&300 |}}
 +</note>
 +
 +
  
 Если все отработало корректно, то осталось добавить скомпилированную програму для автовыполнения в скрипт /opt/scripts/gen_temp.sh (в конец): Если все отработало корректно, то осталось добавить скомпилированную програму для автовыполнения в скрипт /opt/scripts/gen_temp.sh (в конец):
Строка 245: Строка 263:
      
  
 +===== Zabbix-агент =====
 +
 +К этому моменту у нас уже показания с датчиков снимаются, на дисплей выводятся, осталось настроить zabbix. Подходящих бинарников для Raspberry Pi нет, поэтому придется собрать из исходников. Качаем [[http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.1/zabbix-2.2.1.tar.gz/download|сорцы]], распаковываем, компилируем и устанавливаем:
 +
 +  # ./configure --prefix=/usr/local/zabbix_agent --enable-agent
 +  # make install
 +  # useradd zabbix
 +  # mkdir /var/run/zabbix
 +  # mkdir /var/log/zabbix
 +  # chown zabbix /var/run/zabbix
 +  # chown zabbix /var/log/zabbix  
 +  
 +Если все прошло успешно, редактируем конфигурационный файл /usr/local/zabbix_agent/etc/zabbix_agentd.conf и приводим его к такому виду:
 +
 +  PidFile=/var/run/zabbix/zabbix_agentd.pid
 +  LogFile=/var/log/zabbix/zabbix_agentd.log
 +  LogFileSize=5
 +  DebugLevel=0
 +  Server=address.of.zabbix.server
 +  
 +  ListenIP=X.X.X.X
 +  Hostname=rfarm-raspberrypi
 +  
 +  ServerActive=address.of.zabbix.server
 +  HostnameItem=system.hostname
 +  
 +  Timeout=10
 +  
 +  UserParameter=custom.temp.rfarm.sensor1,/bin/cat /mnt/tmpfs/0000046022cb
 +  UserParameter=custom.temp.rfarm.sensor2,/bin/cat /mnt/tmpfs/0000045ef9b4
 +  UserParameter=custom.temp.outside.sensor1,/bin/cat /mnt/tmpfs/0000045f1c62
 +  
 +Тут главное указать адрес вашего zabbix-сервера в параметрах Server и ServerActive, IP-адрес на котором агент будет ждать подключения ListenIP и задать имя агента Hostname. И самое главное - задать параметры пользователя UserParameter с помощью которых агент будет считывать показания.
 +
 +Теперь протестируем наши параметры, что они корректно считываются:
 +
 +  # /usr/local/zabbix_agent/sbin/zabbix_agentd -t custom.temp.rfarm.sensor1
 +  custom.temp.rfarm.sensor1                     [t|17.812]
 +  
 +  # /usr/local/zabbix_agent/sbin/zabbix_agentd -t custom.temp.rfarm.sensor2
 +  custom.temp.rfarm.sensor2                     [t|11.812]
 +  
 +  # /usr/local/zabbix_agent/sbin/zabbix_agentd -t custom.temp.outside.sensor1
 +  custom.temp.outside.sensor1                   [t|-5.125]
 +
 +Все нормально, осталось добавить агента в автозагрузку, проще всего добавить в /etc/rc.local такую строку:
 +
 +  /usr/local/zabbix_agent/sbin/zabbix_agentd -c /usr/local/zabbix_agent/etc/zabbix_agentd.conf
 +  
 +
 +===== Zabbix-сервер =====
 +
 +Ну и осталось создать хост и прописать для него итемы и графики в веб-интерфейсе.
 +
 +Создаем хост(наш raspberry pi):
 +{{ :create_host1.png?direct&300 |}}
 +
 +
 +По желанию добавляем ему шаблон "zabbix-агент", чтобы отслеживать состояние хоста:
 +{{ :create_host2.png?direct&300 |}}
 +
 +
 +На каждый датчик создаем свой item(элемент, который будет коллекционировать данные), для каждого датчика у нас заранее на стороне zabbix-агента прописаны наши собственные параметры, ниже пример создания итема:
 +{{ :create_item1.png?direct&300 |}}
 +
 +
 +В итоге у меня получилось три итема, по одному на каждый датчик:
 +{{ :items.png?direct&300 |}}
 +
 +
 +И в конце создаем любое кол-во графиков, какое нужно, хоть по отельному на каждый итем, хоть один для всех сразу. На примере ниже создается один график, на котором будут рисоваться показания всех датчиков:
 +{{ :graph.png?direct&300 |}}
 +
 +
 +На этом все.
 +
 +
 +===== Заключение =====
 +
 +В итоге получили прибор, который в режиме реального времени выводит информацию по температуре с датчиков на дисплей, а также коллекционируется статистика по температуре и строятся графики с помощью zabbix. Ниже можно поглядеть как это выглядит в жизне.
 +
 +{{:temp_mon1.jpg?direct&300|}} {{:temp_mon2.jpg?direct&300|}} {{:temp_mon3.jpg?direct&300|}} {{:temp_mon4.png?direct&300|}}
 +
 +
 +===== Список использованной литературы =====
 +
 +  - [[http://files.amperka.ru/datasheets/MT-16S2H.pdf|Даташит на дисплей]]
 +  - [[http://shabpoint.blogspot.ru/2013/09/lcd-raspberry-pi.html|Подключение LCD дисплея к Raspberry Pi]]
 +  - [[http://wiki.amperka.ru/схемы-подключения:подключение-текстового-экрана|Подключение текстового экрана к Arduino]]
 +  - [[http://wiringpi.com/download-and-install/|GPIO Interface library for the Raspberry Pi]]
 +  - [[http://www.raspberrypi-spy.co.uk/2013/03/raspberry-pi-1-wire-digital-thermometer-sensor/|Raspberry Pi 1- Wire Digital Thermometer Sensor]]
 +  - [[http://habrahabr.ru/post/204478/|Мониторинг температуры гермозоны с помощью 1-wire датчиков и Zabbix 2]]
 +  - [[https://www.zabbix.com/wiki/howto/install/ubuntu/ubuntuinstall|Installing Zabbix on Ubuntu from source files]]
 +  - [[http://forum.cxem.net/index.php?showtopic=114312&#entry1361054|Faq Raspberry Pi - Миникомпьютер С Linux За 25$/35$]]
temp_mon.1391684650.txt.gz · Последнее изменение: 2022/03/25 17:03 (внешнее изменение)