В прошлый раз мы установили 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 (ещё и доступно)
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.