Влажность и температура через 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 запустится некорректно, будьте внимательнее. Теперь перейдём к аппаратной части, у нас это будет отдельное устройство, которое при обращении к нему, будет отдавать температуру и влажность в отдельном формате.

Смотрите также:  Управляем элементом бегущей строки Adafruit с Arduino. Часть 1. Подключение

Датчик 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);

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

Смотрите также:  3д куб

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

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

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

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

  1. Марина

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

Оставьте комментарий