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.
| Element | Cena |
|---|---|
| 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ł |
#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);
}
# 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"