Ви не увійшли.
Для підключення теплового насосу до системи home-assistant чи MQTT брокеру.
необхідно:
1додати ESPome до системи.
2 додати MQTT до системи.
3 створити новий пристрій.
матеріали:
плата esp-01s
програматор
https://arduino.ua/ru/prod3262-usb-perehodnik-dlya-programmirovaniya-i-otladki-modylei-esp-01-i-esp-01s
код програми я даю повний але вам треба залишити власні ключи ota та інше
фактично ви можете копіювати код починаючи зUART
також можете використовувати api чи mqtt За бажанням.
Данні будуть оновлюватись але вимикач та перемикач режимів працювати не будуть. необхіно замінити мікроконтроллер ТН заертайтесь на електронку вона активна.
Як прошити:
1 вставляєте есп у програматор антеною до юсб роз'єму не переплутайте
2 вставляєте програматор у комп вірогідно треба буде знайти драйвер під нього, як що вставите у распбері драйвер не потрібен.
3 встановлюєте кнопкою install та обираєте спосіб завантаження.
4 міняєте штатний локальний Wi-fi модуль на той що прошили. на платі намальовано антенку не переплутайте якою стороною вставляти модуль.
тепловий насос раз на 10 секунд публікує данні виду
$1 0 0 0 0 0 0 0 0;rn - це данні по стану реле
$2 64 213 309 154 436;rn - це данні по температурі
$3 14 1 8 0 5 50 6 0;rn - пакет основних налаштувань (відправляє рідко раз на 10 хвилин при завантаженні чи при зміні)
спосіб розшифрування видно у коді программи далі
де перша цифра номер пакету далі данні.
ТН приймає пакет основних налаштувань
$1 14 1 8 0 5 50 6 0;rn - це основні налаштування. (як розшифрувати видно у коді)
$2 1;rn - увімкнення вимкнення ТН (не працює без заміни мк)
$3 3;rn - перемикання режиму ТН (не працює без заміни мк)
оновлений код опублікую після повного тестування.
також вона може працювати з іншими mqtt брокерами наскільки я розумію.
esphome:
name: tn-steel
friendly_name: TN_steel
esp8266:
board: esp01_1m
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
#api:
# encryption:
# key: "uXYp2/3SlC38i/Cxg/7DjXYwRf/5T7G9i89drS/Xciw="
mqtt:
id: TN_STEELMQTT
broker: !secret mqtt_host
username: !secret mqtt_username
password: !secret mqtt_password
ota:
- platform: esphome
password: "7e3b09c29591a4ec725addad6dcf4204"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Tn-Steel Fallback Hotspot"
password: "JsvITClu5byI"
# UART
uart:
- id: uart_1
tx_pin: 1
rx_pin: 3
baud_rate: 115200
debug:
direction: BOTH
dummy_receiver: true
after:
delimiter: ";rn"
sequence:
- lambda: |-
UARTDebug::log_string(direction, bytes);
int sensorID = 0;
float sensor1 = 0, sensor2 = 0, sensor3 = 0, sensor4 = 0, sensor5 = 0, sensor6 = 0, sensor7 = 0, sensor8 = 0;
std::string str(bytes.begin(), bytes.end());
if (sscanf(str.c_str(), "$%d %f %f %f %f %f %f %f %f",
&sensorID, &sensor1, &sensor2, &sensor3, &sensor4, &sensor5, &sensor6, &sensor7, &sensor8) >= 6) {
if (sensorID == 2) {
id(temp_ulica).publish_state(sensor1 * 0.1);
id(temp_dom).publish_state(sensor2 * 0.1);
id(temp_pod).publish_state(sensor3 * 0.1);
id(temp_hlad).publish_state(sensor4 * 0.1);
id(temp_celevaya).publish_state(sensor5 * 0.1);
} else if (sensorID == 1) {
id(rele_kompressora).publish_state(sensor1>0.5);
id(rele_4x_wey).publish_state(sensor2);
id(rele_fan).publish_state(sensor3);
id(rele_heat_kab).publish_state(sensor4);
id(rele_ten2kw).publish_state(sensor5);
id(rele_TEN4kW).publish_state(sensor6);
id(rele_gazkot).publish_state(sensor7);
id(rele_nasos).publish_state(sensor8);
} else if (sensorID == 3) {
id(ftzad).publish_state(sensor1*0.5+15);
id(p_kotla).publish_state(sensor2*2);
id(gradtn).publish_state(sensor3*1-20);
id(vspom).publish_state(sensor4);
id(regim).publish_state(sensor5);
if (sensor5 == 1) {
id(select_option).publish_state("TN");
} else if (sensor5 == 2) {
id(select_option).publish_state("TN+EK");
} else if (sensor5 == 3) {
id(select_option).publish_state("EK");
} else if (sensor5 == 4) {
id(select_option).publish_state("TN+GAZ");
} else if (sensor5 == 5) {
id(select_option).publish_state("GAZ");
}
id(koeffb).publish_state(sensor6);
id(rleto).publish_state(sensor7);
id(all_stop).publish_state(sensor8);
id(on_off_button).publish_state(sensor8 == 1); // Синхронизация кнопки
}
}
# Captive Portal
captive_portal:
# Датчики
sensor:
- platform: template
name: "T заданная"
id: "ftzad"
device_class: temperature
unit_of_measurement: °C
- platform: template
name: "power_EK"
id: "p_kotla"
- platform: template
name: "minimalno_TN"
id: "gradtn"
- platform: template
name: "vspomog_mochnost"
id: "vspom"
- platform: template
name: "Regim_raboty"
id: "regim"
- platform: template
name: "koeficent_b"
id: "koeffb"
- platform: template
name: "leto_zima"
id: "rleto"
- platform: template
name: "T_ulica"
id: "temp_ulica"
device_class: temperature
unit_of_measurement: °C
- platform: template
name: "T дом"
id: "temp_dom"
device_class: temperature
unit_of_measurement: °C
- platform: template
name: "T подача"
id: "temp_pod"
device_class: temperature
unit_of_measurement: °C
- platform: template
name: "T хладагент"
id: "temp_hlad"
device_class: temperature
unit_of_measurement: °C
- platform: template
name: "T целевая"
id: "temp_celevaya"
device_class: temperature
unit_of_measurement: °C
# Бинарные датчики
binary_sensor:
- platform: template
name: "Включен ТН"
id: "all_stop"
- platform: template
name: "Kompressor"
id: "rele_kompressora"
- platform: template
name: "Fan_TN"
id: "rele_fan"
- platform: template
name: "4_x_wey_walwe"
id: "rele_4x_wey"
- platform: template
name: "Heater_outdor"
id: "rele_heat_kab"
- platform: template
name: "Heater1_indor"
id: "rele_ten2kw"
- platform: template
name: "Heater2_ind"
id: "rele_TEN4kW"
- platform: template
name: "Pomp_cirk"
id: "rele_nasos"
- platform: template
name: "Gas_heater"
id: "rele_gazkot"
# Выключатель
switch:
- platform: template
name: "Выключатель ТН"
id: on_off_button
optimistic: true
on_turn_on:
- uart.write:
id: uart_1
data: "$2 1;rn"
on_turn_off:
- uart.write:
id: uart_1
data: "$2 0;rn"
# Выпадающий список
select:
- platform: template
name: "Режим"
id: select_option
options:
- "TN"
- "TN+EK"
- "EK"
- "TN+GAZ"
- "GAZ"
optimistic: true
on_value:
- lambda: |-
if (x == "TN") {
id(uart_1).write_str("$3 1;rn");
} else if (x == "TN+EK") {
id(uart_1).write_str("$3 2;rn");
} else if (x == "EK") {
id(uart_1).write_str("$3 3;rn");
} else if (x == "TN+GAZ") {
id(uart_1).write_str("$3 4;rn");
} else if (x == "GAZ") {
id(uart_1).write_str("$3 5;rn");}
# Скрипты
script:
- id: send_interval
then:
- uart.write:
id: uart_1
data: "$2 1;rn"
- delay: 1s
- uart.write:
id: uart_1
data: "$2 0;rn"
- id: send_uart_command
then:
- lambda: |-
if (id(select_option).state == "TN") {
id(uart_1).write_str("$3 1;rn");
} else if (id(select_option).state == "TN+EK") {
id(uart_1).write_str("$3 2;rn");
} else if (id(select_option).state == "EK") {
id(uart_1).write_str("$3 3;rn");
} else if (id(select_option).state == "TN+GAZ") {
id(uart_1).write_str("$3 4;rn");
} else if (id(select_option).state == "GAZ") {
id(uart_1).write_str("$3 5;rn");}
# Интервалы
#interval:
# - interval: 55s
# then:
# - script.execute: send_interval
#
# - interval: 60s
# then:
# - script.execute: send_uart_command
Остання редакція daniil (2024-11-20 18:26:41)
Неактивний