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

Смотрите также:  Как стереть память esp8266 на windows 10

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

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

Смотрите также:  Программатор avr spi

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

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

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

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

  1. Марина

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *