Оглавление:

Интеграция счетчика Гейгера Home Assistant: 8 шагов
Интеграция счетчика Гейгера Home Assistant: 8 шагов

Видео: Интеграция счетчика Гейгера Home Assistant: 8 шагов

Видео: Интеграция счетчика Гейгера Home Assistant: 8 шагов
Видео: Счетчик Гейгера для умного дома в ESPHome и Home Assistant. А так-же отправка значений по mqtt. 2024, Июль
Anonim
Image
Image
Принцип работы
Принцип работы

В этом уроке я собираюсь показать вам, как добавить пользовательские датчики в HASS (домашний помощник), в частности счетчик Гейгера, но процесс аналогичен и для других датчиков.

Мы будем использовать плату NodeMCU, счетчик Гейгера на базе Arduino и уже установленный домашний помощник.

Интеграция будет основана на сервере MQTT (общедоступном или частном), и я собираюсь рассказать вам об этом шаг за шагом.

Если вы не знаете, что такое домашний помощник, посетите их страницу https://www.home-assistant.io/. Это хорошо известная платформа домашней автоматизации, которая очень хорошо обслуживается и легко настраивается.

Вы узнаете о:

- расширенная конфигурация для Home Assistant

- NodeMCU (плата разработки) и как ее программировать с помощью Arduino IDE

- OTA (обновления по воздуху) с использованием Arduino IDE для платы NodeMCU

- как подключить последовательное устройство к NodeMCU

- ручная установка сервера MQTT на linux (необязательно)

Основные предположения:

- у вас есть Home Assistant.

- ты немного разбираешься в электронике

- у вас установлена Arduino IDE

Шаг 1. Детали и инструменты

Части:

1. Плата NodeMCU

2. хлеб

3. Юперовские провода папа-папа и папа-мама

3. Кабель USB - Micro USB

4. счетчик гейгера arduino с последовательным интерфейсом

(выполните поиск на Ebay по запросу "arduino geiger couter")

5. радиоактивный материал (необязательно небольшой тестовый образец)

Инструменты:

1. Arduino IDE

2. Установлен Home Assistant.

Шаг 2: Принцип работы

Наша цель - показать на HomeAssistat (HASS) показания счетчика Гейгера. С одной стороны, у нас есть запущенный и работающий сервер HASS, где-то это может быть Raspberry Pi или другое устройство, а с другой стороны у нас есть счетчик Гейгера.

Счетчик Гейгера имеет последовательный порт, одним из решений будет прямое подключение последовательного порта к RaspberryPi, на котором работает HASS.

Некоторые причины, по которым это может быть не очень хорошая идея:

- там нет физического места

- у нас есть какое-то другое устройство на последовательном порту

- мы хотим прикрепить датчик окружающей среды, который должен быть размещен снаружи, вместо счетчика Гейгера

Итак, мы собираемся изучить еще одну возможность подключения через WIFI:

HASS поддерживает считывание данных датчиков и отображение их через сервер MQTT, этот тип сервера представляет собой соединение с облегченным весом для небольших устройств: одно устройство публикует сообщение по «теме», другое прослушивает эту тему, чтобы получить сообщение. Итак, HASS будет слушать, и нам нужно что-то, что опубликует сообщение.

Наш датчик умеет разговаривать только по последовательной линии, поэтому мы будем использовать плату, которая может читать последовательную линию и которая может подключаться через WIFI и общаться с сервером MQTT. Дешевая плата, которая делает это, - это NodeMCU.

NodeMCU можно запрограммировать с помощью Arduino IDE. Скетч довольно простой, он делает следующее:

- подключается к WIFI

- поддерживает MQTT-соединение с сервером и повторяет попытку соединения в случае сбоя или отключения

- слушает последовательные входящие данные как серию целых чисел

- как только приходит целое число, оно отправляет его через MQTT в определенную тему

Шаг 3: соберите устройство

Соберите устройство
Соберите устройство

Мы будем использовать макеты и провода, так что это довольно просто, у нас есть несколько шагов:

- поместите NodeMCU на макетную плату

- подключите трубку Гейгера к счетчику Гейгера (соблюдайте полярность)

- VIN идет на счетчик Гейгера +

- GND идет на счетчик Гейгера -

- NodeMCU D7 (вывод 13) идет на geiger TX

- NodeMCU D8 (вывод 15) идет на geiger RX

- питание NodeMCU через micro USB от компьютера

Шаг 4. Загрузите код

Загрузите код
Загрузите код
Загрузите код
Загрузите код
Загрузите код
Загрузите код
Загрузите код
Загрузите код

Мы собираемся использовать Arduino IDE, и мы убедимся, что у нас установлена плата NodeMCU и установлена библиотека Adafruit_MQTT.

1. Клонируйте репозиторий github: https://github.com/danionescu0/arduino и скопируйте эскиз из проектов / HASSGeigerIntegration в папку с эскизами Arduino.

2. Откройте Arduino IDE и установите NodeMCU.

- перейдите в File -> Preferences, в URL-адресах Additional Boards Manager добавьте https://arduino.esp8266.com/stable/package_esp8266com_index.json, если у вас уже есть что-то там, поставьте кому-то впереди и нажмите ОК

- в меню Инструменты -> Плата -> Диспетчер досок введите "nodemcu" и выберите запись esp8266 от сообщества ESP8266 и нажмите "Установить".

3. Установите Adafruit_MQTT.

- перейдите в Инструменты -> Управление библиотеками -> найдите «Adafruit_MQTT» и установите «библиотеку Arduino MQTT»

4. Подключите USB-кабель к компьютеру и настройте плату:

- перейдите в Инструменты -> Плата -> выберите NodeMcu 1.0

- Инструменты -> Порт -> ваш USB-порт

- остальные настройки оставьте без изменений

4. В скетче измените свои учетные данные WIFI, чтобы они соответствовали вашим собственным:

#define STASSID "ssid" // Замените на свой WIFI SSID

#define STAPSK "pass" // Замените своим паролем WIFI

5. Загрузите эскиз на свою доску и после загрузки сбросьте доску с помощью кнопки.

6. Откройте монитор последовательного порта, если все прошло хорошо, вы должны увидеть что-то вроде этого:

Загрузка

IP-адрес: 192.168.1.168 OTA включен. Подключение к MQTT… MQTT Подключено! {"излучение": 0,03}..

Шаг 5. Настройте HomeAssistant

Настроить HomeAssistant
Настроить HomeAssistant
Настроить HomeAssistant
Настроить HomeAssistant

Мы предполагаем, что у вас есть домашний помощник. В моей системе установлен HASSOS версии 3.12 на RaspberryPi. Если ваша версия домашнего помощника слишком старая или очень новая, некоторые функции могут отличаться. Этот учебник точно работает с версией 3.12.

Если у вас не установлен Home Assistant, ознакомьтесь с их официальным руководством по установке:

Перед тем, как продолжить установку, убедитесь, что NodeMCU подключен и публикует данные.

Хорошо, у нас здесь тоже будет ряд шагов для настройки:

1. Установите «редактор файлов», если у вас его нет в меню, вот официальное руководство:

2. Отредактируйте файл "/config/configuration.yaml", добавьте следующее и сохраните его.

- раздел mqtt, если у вас его еще нет

mqtt:

брокер: broker.hivemq.com обнаружение: истинный префикс_обнаружения: ha

- секция датчиков

датчик:

- платформа: mqtt name: "Radiation" state_topic: "ha / радиация" unit_of_measurement: 'uSv' unique_id: "radius" value_template: "{{value_json.radiation}}"

3. В разделе «Конфигурация» -> «Управление сервером»: нажмите «Проверить конфигурацию», проверьте файл конфигурации yaml на наличие ошибок, а затем нажмите «перезапуск» и дождитесь его перезапуска.

4. В разделе «Обзор» -> меню в правом верхнем углу -> «Настроить пользовательский интерфейс» -> нажмите кнопку «+» в правом нижнем углу.

5. Выберите «датчик» из списка -> в поле «entity» найдите «sensor.radiation», в поле имени напишите «Radiation» и нажмите ОК, теперь он должен быть на главной странице

Шаг 6. Настройка собственного сервера MQTT [необязательно]

Давайте немного поговорим о MQTT

«MQTT - это транспортный протокол обмена сообщениями публикации / подписки клиент-сервер. Он легкий, открытый, простой и сконструирован таким образом, чтобы его было легко реализовать. Эти характеристики делают его идеальным для использования во многих ситуациях, в том числе в ограниченных средах, например, для связи в контекстах «машина-машина» (M2M) и Интернета вещей (IoT), где требуется небольшой объем кода и / или пропускная способность сети очень высока.”

Цитата из официальной спецификации MQTT 3.1.1.

Таким образом, мы можем опубликовать сообщение где-нибудь с одной стороны, а с другой стороны мы можем прослушивать эти сообщения и что-то делать с данными. MQTT поддерживает «темы», темы - это строки, которые брокер использует для фильтрации сообщений для каждого клиента, поэтому, если мы публикуем сообщение в теме «/ радиация», слушатель должен подписаться на ту же тему, чтобы получать сообщения, которые мы отправляем.

Вот отличный учебник по MQTT в деталях:

Использование бесплатного сервера улья имеет следующие недостатки:

- все, кто слушает вашу тему, будут получать ваши сообщения

- если он выйдет из строя или потребует оплаты позже, вы не сможете его использовать (если не заплатите)

- если кто-то, публикующий сообщения в той же теме, вы также получите их сообщения, они могут опубликовать несовместимые сообщения и нарушить ваши HASS-графики.

Использование частного сервера

Если вы не хотите использовать общедоступный бесплатный сервер, вы можете выбрать частный сервер. Мы собираемся установить Mosquitto MQTT на сервер ubuntu / debian, такой как raspberry pi или компьютер.

Mosquitto - это бесплатный сервер, реализующий протокол MQTT.

Чтобы установить его, войдите в свой raspnerry pi или другой сервер на базе Debian и запустите:

sudo apt update

sudo apt install -y mosquitto mosquitto-clients sudo systemctl enable mosquitto.service

Это обновит репозиторий, установит сервер и клиент mosquiito и включит службу для запуска при запуске.

Чтобы получить IP-адрес сервера:

имя хоста -I

и он выведет что-то вроде:

192.168.1.52 172.17.0.1 172.18.0.1

Итак, мой ip - 192.168.1.52, в приведенных ниже командах замените его своим собственным ip.

Вы можете протестировать сервер MQTT, опубликовав сообщение и получив его с помощью консольного инструмента, для этого должны быть открыты два терминала: один, который прослушивает сообщение, другой, который опубликует сообщение.

Сначала запустите эту команду в терминале, чтобы прослушать сообщение на тему "/ some-topic"

mosquitto_sub -h 192.168.1.52 -t / какая-то тема

Откройте другой терминал и опубликуйте сообщение в этой теме:

mosquitto_pub -h 192.168.1.52 -t / some-topic -m '{"влажность": 74.0}'

В первом терминале вы должны увидеть распечатанное '{"влажность": 74.0}'.

Особое внимание:

- эта настройка предполагает, что HASS, Mosquitto и NodeMCU подключены к одной и той же сети WIFI, нет правил брандмауэра и они могут свободно обмениваться данными

- у сервера Mosquitt MQTT нет имени пользователя / пароля, если вы хотите настроить учетные данные, проверьте это: https://www.steves-internet-guide.com/mqtt-username-password-example/ Также вам потребуется настроить учетные данные в Home Assistant и в скетче Arduino

Шаг 7: OTA (обновления по воздуху) для NodeMCU

Обновления по беспроводной сети означают, что плата разработки может быть обновлена по беспроводной сети без использования физического кабеля.

Arduino IDE поддерживает эту функцию для серии ESP8266 и некоторых других плат:

- требуется начальная прошивка через USB-кабель

- создает виртуальный порт через WIFI, и он виден только из Arduino IDE

- нет информации о последовательной отладке

- поддерживает защиту паролем

Чтобы включить OTA в эскизе ESP8266, сначала включите библиотеку:

#include "ArduinoOTA.h"

Также определите эту константу пароля эскиза:

#define SKETCHPASS "some_password"

В разделе настройки добавьте эти строки:

while (WiFi.waitForConnectResult ()! = WL_CONNECTED) {

Serial.println («Ошибка подключения! Перезагрузка…»); задержка (5000); ESP.restart (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {String type; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "filesystem";} Serial.println ("Начать обновление "+ тип);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nEnd");}); ArduinoOTA.onProgress ( (беззнаковое целое число, беззнаковое целое число) {Serial.printf ("Прогресс:% u %% / r", (прогресс / (всего / 100)));}); ArduinoOTA.onError ( (ошибка ota_error_t) {Serial.printf ("Ошибка [% u]:", ошибка); if (error == OTA_AUTH_ERROR) {Serial.println ("Auth Failed");} else if (error == OTA_BEGIN_ERROR) {Serial.println ("Begin Failed");} else if (error == OTA_CONNECT_ERROR) {Serial.println ("Connect Failed");} else if (error == OTA_RECEIVE_ERROR) {Serial.println (" Ошибка приема ");} else if (error == OTA_END_ERROR) {Serial.println (" End Failed ");}}); ArduinoOTA.begin (); Serial.print ("IP-адрес:"); Serial.println (WiFi.localIP ());

И в разделе цикла добавьте эту строку:

ArduinoOTA.handle ();

После начальной загрузки кода после загрузки платы вы должны увидеть в Arduino IDE в разделе Tools-> Port два типа портов:

Последовательные порты: / dev / ttyUSB0 (например)

Сетевые порты: esp8266-xxxxx в 192.168.1.xxx

Теперь вы можете выбрать сетевой порт и загрузить удаленный скетч, вам будет предложено ввести пароль скетча (тот, который вы определили в константе выше).

Шаг 8: выводы, дальнейшая работа

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

- если ваш датчик напрямую поддерживается NodeMCU через библиотеку, просто объедините данные с датчика и напрямую отправьте их через MQTT

- если библиотека датчиков не работает с NodeMCU, но только для Arduino, тогда загрузите свой код в Arduino, выведите значение через последовательную линию, прочтите его в NodeMCU и отправьте (точно так же, как мы это сделали со счетчиком Гейгера)

Мы даже можем изменить его для отправки данных с нескольких датчиков, например:

- подключите свои датчики к NodeMCU

- данные опроса с каждого датчика

- для каждого датчика публиковать данные в отдельной теме

- в HASS определите несколько датчиков (как мы это сделали с гейгером), которые будут прослушивать разные темы

Рекомендуемые: