🌡️

Termostat DIY z ESP8266 i Home Assistant

📅 18 września 2025 ⏱ 12 min czytania 🏷️ Dom inteligentny 👁 10 odsłon
← Dom inteligentny
← Dom inteligentny

Termostat pokojowy z dotykowym ekranem kosztuje 150–400 zł. Wersja DIY z ESP8266 i DS18B20 wychodzi ok. 35 zł, mierzy temperaturę z dokładnością ±0,5°C i integruje się z Home Assistant przez MQTT.

Lista elementów

ElementCena
Wemos D1 Mini (ESP8266)~12 zł
Czujnik DS18B20 (wodoodporny z kablem)~8 zł
Rezystor 4,7 kΩ (pull-up dla 1-Wire)~0,50 zł
Moduł przekaźnika 5 V~6 zł
Wyświetlacz OLED 128×64 SSD1306 (I2C)~12 zł

Schemat

⚠️ Przekaźnik steruje napięciem 230 V AC kotła. Takie prace wykonuj przy wyłączonym bezpieczniku i z zachowaniem zasad bezpieczeństwa elektrycznego.

Kod ESP8266

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define PIN_DS18B20 D4
#define PIN_RELAIS  D1

const float TEMPERATURA_DOCELOWA = 21.0;
const float HISTEREZA = 0.5;

OneWire ow(PIN_DS18B20);
DallasTemperature sensor(&ow);
WiFiClient espClient;
PubSubClient mqtt(espClient);
bool ogrzewanie = false;

void setup() {
    pinMode(PIN_RELAIS, OUTPUT);
    sensor.begin();
    WiFi.begin("SSID", "HASLO");
    while (WiFi.status() != WL_CONNECTED) delay(500);
    mqtt.setServer("192.168.1.100", 1883);
    mqtt.connect("termostat");
    mqtt.subscribe("dom/termostat/ustaw");
}

float docelowaTemp = TEMPERATURA_DOCELOWA;

void callback(char* topic, byte* payload, unsigned int len) {
    docelowaTemp = String((char*)payload).substring(0, len).toFloat();
}

void loop() {
    mqtt.loop();
    sensor.requestTemperatures();
    float temp = sensor.getTempCByIndex(0);

    if (temp < docelowaTemp - HISTEREZA) { ogrzewanie = true;  digitalWrite(PIN_RELAIS, HIGH); }
    if (temp > docelowaTemp + HISTEREZA) { ogrzewanie = false; digitalWrite(PIN_RELAIS, LOW); }

    mqtt.publish("dom/termostat/temp",    String(temp).c_str());
    mqtt.publish("dom/termostat/status",  ogrzewanie ? "ON" : "OFF");
    delay(10000);
}

Konfiguracja w Home Assistant

# configuration.yaml
climate:
  - platform: generic_thermostat
    name: "Salon"
    heater: switch.kociol
    target_sensor: sensor.termostat_temp
    min_temp: 15
    max_temp: 25
    target_temp: 21

mqtt:
  sensor:
    - name: "Termostat temp"
      state_topic: "dom/termostat/temp"
      unit_of_measurement: "°C"
  switch:
    - name: "Kociol"
      command_topic: "dom/termostat/ustaw"
      state_topic: "dom/termostat/status"
✅ Harmonogram ogrzewania: w HA Scheduler Card możesz ustawić, że w tygodniu o 6:30 termostat podnosi temperaturę do 22°C, a o 23:00 opuszcza do 18°C – tak jak drogi termostat Nest.