Подключение BME280 к Orange Pi PC Plus
Подключение BME280 к Orange Pi PC Plus
У меня есть датчик BME280 с помощью которого можно измерять температуру, влажность и атмосферное давление. И так как сервер Home Assistant собранный на Orange Pi PC Plus находится у меня в одной из комнат квартиры было бы целесообразно подключить датчик BME280 к Orange Pi PC Plus через I2C интерфейс. К сожалению разработчики Home Assistant летом 2022 года решили отказаться от GPIO (General Purpose Input Output — интерфейс ввода/вывода общего назначения). Пишут, что использование интеграций через GPIO устарело и удалено начиная с версии 2022.6.Х, подробно тут.
Подключаем BME280 к Orange Pi PC Plus
Поддержка шины I2C в Armbian
Так как сервер Home Assistant установлен на Orange Pi PC Plus с установленым на него Armbian для активации поддержки шины I2C нужно зайти в утилиту конфигурации.
Если нет прямого доступа к консоли, то подключаемся с помощью терминального клиента по SSH. Для подключения я пользуюсь программой Putty. В терминале вводим команду
armbian-config
В утилите :
- выбираем Hardware затем жмем Ok
- выбираем пункт System затем жмем Ok
- ставим звездочку напротив i2c0
- ставим звездочку напротив i2c1
- ставим звездочку напротив i2c2
- нажимаем Save и затем Back
- В выпавшем окне жмем Reboot
Ждем пока система перезагрузится с новыми установленными програмными модулями.
Заходим в консоль и проверяем загрузку модулей GPIO
lsmod | grep gpio
Устанавливаем утилиты I2C
sudo apt-get install -y i2c-tools
Смотрим доступные шины
i2cdetect -l
Смотрим адреса устройств на шине 1
sudo i2cdetect -y 1
MQTT и MQTT-IO
Устанавливаем MQTT брокер Mosquitto по этой инструкции.
Далее устанавливаем дополнение MQTT-IO, тоже в терминале:
- зайти под пользователем homeassistant
- активировать виртуальное окружение homeassistant
- выполнить команду установки MQTT-IO
sudo -u homeassistant -H -s
source /srv/homeassistant/bin/activate
python3 -m pip install mqtt-io
Создаем конфигурационный файл MQTT-IO
sudo nano /home/homeassistant/.homeassistant/mqtt-io.yml
Записываем в него следующие строки
mqtt:
host: localhost
port: 1883
user: !secret mqtt_login
password: !secret mqtt_password
protocol: 3.1
topic_prefix: home_mqii-io
client_id: home_mqtt-io
ha_discovery:
enabled: yes
sensor_modules:
- name: BME280_sensor
module: bme280
i2c_bus_num: 1
chip_addr: 0x76
sensor_inputs:
- name: BME280_pressure
module: BME280_sensor
interval: 120
digits: 1
type: pressure
Закрываем текстовой редактор “Ctrl-X”, подтверждаем сохранение “Y” и жмем Enter.
Запускаем дополнение MQTT-IO
/srv/homeassistant/bin/python3 -m mqtt_io /home/homeassistant/.homeassistant/mqtt-io.yml
Видим что модуль запустился, подключился к брокеру MQTT и считал данные с датчика.
Останавливаем запущенный процесс нажатием комбинации клавиш “Ctrl-Z”
Выходим из учетной записи пользователя homeassistant
exit
Создаем файл для запуска сервиса при старте системы:
sudo nano /etc/systemd/system/home-assistant@mqtt-io.service
Вставляем в него следующие строки:
[Unit]
Description=MQTT-IO
After=mosquitto.service
[Service]
Type=simple
User=homeassistant
ExecStart=/srv/homeassistant/bin/python3 -m mqtt_io /home/homeassistant/.homeassistant/mqtt-io.yml
RestartForceExitStatus=100
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Закрываем текстовой редактор “Ctrl-X”, подтверждаем сохранение “Y” и жмем Enter.
Включаем MQTT-IO в качестве сервиса::
sudo systemctl --system daemon-reload
sudo systemctl enable home-assistant@mqtt-io
sudo systemctl start home-assistant@mqtt-io
Проверяем работу
sudo systemctl status home-assistant@mqtt-io.service
:
Добавляем датчик на панель Home Assistant
В Home Assistant идем в Настройки -> Устройства и службы. Находим карточку с интеграцией MQTT
Кликаем по надписи “1 устройство” и на следующей странице находим карточку “Сенсоры” и жмем там “Добавить на панель”
В новом окне подтверждаем свой выбор нажав на надпись “Добавить на панель”
Датчик давления сенсора BME280 добавлен на панель
hPa преобразуем в mmHg
Данные об атмосферном давлении поступают в гектопаскалях (hPa) но мне привычней когда данные указываются в миллиметрах ртутного столба (mmHg).
Если нет прямого доступа к консоли, то подключаемся по SSH. Открываем файл configuration.yaml :
sudo nano /home/homeassistant/.homeassistant/configuration.yaml
Добавляем в него такую строчку
sensor: !include_dir_merge_list include/sensors
Перемещаемся в домашнюю директорию Home Assistant в папку “include”
cd /home/homeassistant/.homeassistant/include/
Создаем папку “sensors”
sudo mkdir sensors
В папке “sensors” создадим текстовой документ “pressure.yaml”
sudo nano /home/homeassistant/.homeassistant/include/sensors/pressure.yaml
В который вставим такие строки
- platform: template
sensors:
pressure_cal:
value_template: "{{ '%.1f' | format(states('sensor.bme280_pressure') | float * 0.75006375541921) }}"
unit_of_measurement: mmHg
availability_template: "{{ states('sensor.bme280_pressure') not in ['unavailable', 'unknown', 'none'] }}"
Закрываем текстовой редактор “Ctrl-X”, подтверждаем сохранение “Y” и жмем Enter.
Перезагружаем Home Assistant
Добавляем сенсор на панель “Обзор”
- В Home Assistant идем на вкладку “Обзор”
- В правом верхнем углу кликаем по трем точкам и далее жмем “Изменить панель”
- В правом нижнем углу нажимаем “Добавить карточку”
- Находим карточку “Объект” и жмем на нее
- в выпавшем окне слева вверху в поле обьект выбираем объект “pressure_cal”
- Подтверждаем картоку нажав справа внизу “сохранить”
- На панеле справа вверху жмем “Готово”
Карточка с данными атмосферного давления в миллиметрах ртутного столба теперь на панеле в Home Assistant.