Влажность и температура через Homebridge (DHT-11)

от автора

в

В прошлый раз мы установили Homebridge, который является мостом между вашими кастомными устройствами умного дома и оболочкой Homekit. Подключаемые устройства работает через плагины, которых уже написано большое количество, но также его можно создать и самому. Сегодня подключим датчик температуры и влажности, работающий на отдельном esp8266 (не провода же тянуть). Можно использовать контроллер и программировать через TTL переходник, либо готовую плату прототипирования (NodeMCU или WEMOS D1)

Зайдём на наш одноплатный компьютер Raspberry PI, с установленным Homebridge (как это сделать, писали в прошлой статье). И через SSH установим следующий плагин, который позволяет выводить иконки температуры и влажности.

sudo npm install -g homebridge-advanced-http-temperature-humidity  --unsafe-perm

Можно зайти на графический интерфейс (если он конечно установлен), в раздел плагинов и убедиться, что плагин установлен.

Теперь настроим файл конфигурации. Если вы добавляли его в автозагрузку, то следует искать его по этому пути.

sudo nano /var/homebridge/config.json

В функцию аксессуаров добавляется следующий блок, где самым важным будет задать адрес устройства (у меня 192.168.1.199), и путь получения конфигурации температуры и влажности (в нашем случае).

"accessories": [
      {
           "accessory": "AdvancedHttpTemperatureHumidity",
           "name": "Living Room",
           "url": "http://192.168.1.199/dht",
           "sendimmediately": "",
           "http_method": "GET"
       }
   ]

Полный файл конфигурации с одним аксессуаром и графическим интерфейсом получился следующего вида.

{
    "bridge": {
        "name": "HomeBridge",
        "username": "Ваш МАК АДРЕС",
        "port": 51826,
        "pin": "928-27-796"
    },
    "description": "Example configuration file for homebridge-httptemperaturehumidity plugin",
    "accessories": [
        {
            "accessory": "AdvancedHttpTemperatureHumidity",
            "name": "Living Room",
            "url": "http://192.168.1.199/dht",
            "sendimmediately": "",
            "http_method": "GET"
        }
    ],
    "platforms": [
        {
            "platform": "config",
            "name": "Config",
            "port": 8080,
            "sudo": true,
            "restart": "sudo -n systemctl restart homebridge",
            "log": {
                "method": "systemd",
                "service": "homebridge"
            }
        }
    ]
}

Главное, чтобы синтаксис этого файла был правильный, одна ошибка и homebridge запустится некорректно, будьте внимательнее. Теперь перейдём к аппаратной части, у нас это будет отдельное устройство, которое при обращении к нему, будет отдавать температуру и влажность в отдельном формате.

Датчик DHT11, я для теста подключил напрямую, но всё таки конечно лучше использовать подтягивающее сопротивление между сигнальным выводом и питанием около 4.7-10 кОм.

Полный код устройства приведён ниже.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#define DHTTYPE DHT11
#define DHTPIN 2
const char* ssid     = "имя сети";
const char* password = "пароль сети вай-фай";
ESP8266WebServer server(80);
DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266
float humidity, temp_c;  // Values read from sensor
// Generally, you should use "unsigned long" for variables that hold time
unsigned long previousMillis = 0;        // will store last temp was read
const long interval = 2000;              // interval at which to read sensor
void handle_root() {
  server.send(200, "text/plain", "Homebridge http Temperature and humidity Sensor, read from /dht");
  delay(100);
}
void setup(void)
{
  Serial.begin(115200);  // Serial connection from ESP-01 via 3.3v console cable
  dht.begin();           // initialize temperature sensor
  // Connect to WiFi network
  WiFi.begin(ssid, password);
  IPAddress ip(192, 168, 1, 199);
  IPAddress gateway(192, 168, 1, 1);
  IPAddress subnet(255, 255, 255, 0);
  WiFi.config(ip, gateway, subnet);
  Serial.print("\n\r \n\rWorking to connect");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("DHT data Reading Server");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  server.on("/", handle_root);
  server.on("/dht", []() {
    gettemperature();
    server.send(200, "text/json", "{\n" "\"temperature\": " + String(temp_c) + ",\n ""\"humidity\": " + String(humidity) + "" "\n}");
  });
  server.begin();
  Serial.println("HTTP server started");
}
void loop(void)
{
  server.handleClient();
}
void gettemperature() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    humidity = dht.readHumidity();          // Read humidity (percent)
    temp_c = dht.readTemperature(false);     // Read temperature as Fahrenheit
    if (isnan(humidity) || isnan(temp_c)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }
  }
}

Обратить внимание нужно на следующие моменты – пин, куда мы подключаем вывод датчика (2, это как на картинке выше, при выборе WEMOS D1 R2 в компиляторе), имя и сеть wi-fi, и статические данные IP адреса. Выше в конфигурации Raspberry PI мы задавали адрес 192.168.1.199/dht, поэтому сделаем здесь такой-же адрес.

#define DHTPIN 2
const char* ssid     = "имя сети";
const char* password = "пароль сети вай-фай";
  IPAddress ip(192, 168, 1, 199);
  IPAddress gateway(192, 168, 1, 1);
  IPAddress subnet(255, 255, 255, 0);

После компиляции проверяем этот путь в браузере, и если видим корректную температуру, значит всё отлично.

Перезагружаем HomeBridge и немного ждём. Во вкладке аксессуары должны появится иконки температуры и влажности.

Так как homebridge у меня уже был добавлен в приложение ДОМ, то дополнительные сенсоры из плагина подгрузились автоматически.

Их легко перенести в другие комнаты и разнести на разные иконки. Теперь легко можно мониторить температуру и влажность в умном доме от Apple (ещё и доступно)


Комментарии

3 комментария на ««Влажность и температура через Homebridge (DHT-11)»»

  1. Аватар пользователя Марина
    Марина

    Всем доброй ночи, никак не могу завести dht11, все время не удается считать показания. Пробовал менять местами пины 5В и вывода иноформации, как советовали выше не помогло. Датчик температуры работает отлично. Дохлый dht 11 попался?

    1. Аватар пользователя lex232
      lex232

      Никогда такой не попадался, советую проверить на другой аппаратной платформе, на arduino например, если пробудете на esp32.

  2. Аватар пользователя Андрей
    Андрей

    Как регулируется частота обновления температуры и влажности хабом?

Добавить комментарий