Files
hass.fnv/esphome/settings/coffee-philips-5400.yaml
T
2026-08-10 19:42:19 +00:00

318 lines
11 KiB
YAML

sensor: []
substitutions:
board_name: Coffee Philips 5400
node_name: coffee-philips-5400
esphome:
name: ${node_name}
friendly_name: coffee-philips-5400
comment: ESP32 Coffee Philips 5400
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
#Журналирование
logger:
level: INFO #NONE
baud_rate: 0
# Enable Home Assistant API
api:
web_server:
port: 80
ota:
platform: esphome
password: "S/6VwLrSJ+vRfPKWYzbg+iasPO6h3sXm3jY9Ko1YCOo="
#Учетные данные Wi-Fi для подключения платы к домашней сети
wifi:
ssid: "MonsterFNV"
password: "7065485qwe"
fast_connect: off
reboot_timeout: 15min
#Если не будет связи с WiFi, то поднимется точка доступа
ap:
ssid: ESP SmartCoffeePhilips
password: ap_esp_password
uart:
#UART подключение к панели управления. Считываем данные которые приходят от материнской плате в панель управления
- id: uart_display
rx_pin: GPIO16 #Считываем данные с панели управления
tx_pin: GPIO17 #Посылаем данные в панель управления
baud_rate: 115200
stop_bits: 1
data_bits: 8
parity: NONE
rx_buffer_size: 256
- id: uart_mainboard
rx_pin: GPIO14 #Считываем данные с материнской платы
tx_pin: GPIO5 #Посылаем данные в материнскую плату
baud_rate: 115200
stop_bits: 1
data_bits: 8
parity: NONE
rx_buffer_size: 256
external_components:
- source:
type: local
path: ./components
saeco_series_6000:
id: saeco_series_6000_component
uart_display: uart_display
uart_mainboard: uart_mainboard
debug: true
state_sensor:
name: Work State
id: idControlSensor
internal: True #Скрыть - True \показать - False
on_value:
then:
- lambda: |-
//Статус состояния кофемашины, включена или выключена
if(x==2){
id(idPowerStatus).publish_state(false);
} else if(id(idPowerStatus).state==false){
id(idPowerStatus).publish_state(true);
}
//AA:AA:AA:B0 "Системные сенсоры"
if(x==21){
id(idStatus).publish_state("Выберите напиток");
id(idWater).publish_state("Вода есть");
id(idPallet).publish_state("Вставлен");
id(idGrainTray).publish_state("Зерна есть");
id(idCoffeeGroundsContainer).publish_state("Пустой");
}
//AA:AA:AA:B0 "Статусы"
else if(x==1){id(idStatus).publish_state("Что-то (07 01 00)");}
else if(x==2){id(idStatus).publish_state("Выключено");}
else if(x==3){id(idStatus).publish_state("Наливаем молоко");}
else if(x==4){id(idStatus).publish_state("Наливаем кофе");}
else if(x==5){id(idStatus).publish_state("Предварительное дозирование");}
else if(x==6){id(idStatus).publish_state("Создание пара для молока");}
else if(x==7){id(idStatus).publish_state("Заварочный узел в положение заваривания");}
else if(x==8){id(idStatus).publish_state("Наслаждайтесь");}
else if(x==9){id(idStatus).publish_state("Нагрев воды");}
else if(x==10){id(idStatus).publish_state("Перемалываем зерна");}
else if(x==11){id(idStatus).publish_state("Промывка");}
else if(x==12){id(idGrainTray).publish_state("Зерна закончились");}
else if(x==13){id(idStatus).publish_state("Что-то (07 08 14)");}
else if(x==14){id(idStatus).publish_state("Нагревание");}
else if(x==15){id(idStatus).publish_state("Наслаждайтесь");}
else if(x==16){id(idStatus).publish_state("Что-то (07 0C 02)");}
else if(x==17){id(idWater).publish_state("Вода есть");}
else if(x==18){id(idPallet).publish_state("Вставлен");}
else if(x==20){id(idCoffeeGroundsContainer).publish_state("Опорож. контейнер для коф. гущи");}
else if(x==22){id(idWater).publish_state("Воды нет");}
else if(x==23){id(idPallet).publish_state("Извлечен");}
else if(x==24){id(idPallet).publish_state("Очистка от накипи. Шаг 1");}
else if(x==25){id(idPallet).publish_state("Очистка от накипи. Шаг 2");}
//AA:AA:AA:B5 "Error Code"
else if(x==30){id(idErrorCode).publish_state("00");}
else if(x==31){id(idErrorCode).publish_state("0B");}
else if(x==32){id(idErrorCode).publish_state("E6");}
else if(x==33){id(idErrorCode).publish_state("80");}
else if(x==34){id(idErrorCode).publish_state("CB");}
else if(x==35){id(idErrorCode).publish_state("FF");}
else if(x==36){id(idErrorCode).publish_state("A0");}
#####################################################################################
################################## Бинарный сенсор ##################################
#Статус кофемашины: включена или выключена
binary_sensor:
- platform: template
name: "Power Status"
id: idPowerStatus
icon: mdi:power
#####################################################################################
################################### Текстовый сенсор ################################
text_sensor:
- platform: template
name: "Status"
id: idStatus
icon: mdi:coffee-to-go
update_interval: never
- platform: template
name: "Water"
id: idWater
icon: mdi:cup-water
update_interval: never
- platform: template
name: "Coffee Pallet"
id: idPallet
icon: mdi:spirit-level
update_interval: never
- platform: template
name: "Grain Tray"
id: idGrainTray
icon: mdi:grain
update_interval: never
- platform: template
name: "Coffee Grounds Container"
id: idCoffeeGroundsContainer
icon: mdi:train-car-centerbeam-full
update_interval: never
- platform: template
name: "Error Code"
id: idErrorCode
icon: mdi:alert-circle-outline
update_interval: never
select:
- platform: template
name: "Тип напитка"
id: coffee_type
options:
- "Эспрессо"
- "Американо"
- "Капучино"
- "Латте"
- "Кофе с молоком"
- "Молочная пена"
- "Горячая вода"
initial_option: "Эспрессо"
optimistic: true
- platform: template
name: "Крепость"
id: coffee_strength
options:
- "Мягкий"
- "Обычный"
- "Крепкий"
- "Молотый"
initial_option: "Обычный"
optimistic: true
- platform: template
name: "Чашки"
id: coffee_cups
options:
- "1"
- "2"
- "3"
- "4"
initial_option: "1"
optimistic: true
number:
- platform: template
name: "Объем кофе (мл)"
id: coffee_volume
min_value: 20
max_value: 250
step: 10
initial_value: 100
unit_of_measurement: "ml"
optimistic: true
- platform: template
name: "Объем молока (мл)"
id: milk_volume
min_value: 0
max_value: 250
step: 10
initial_value: 0
unit_of_measurement: "ml"
optimistic: true
#Тестовый стенд: произвольный hex-пакет(ы) для отправки в материнскую плату.
#Можно указывать несколько пакетов через разделитель ";".
text:
- platform: template
name: "Test Hex"
id: test_hex
mode: TEXT
optimistic: true
max_length: 255
initial_value: "AA AA AA FE 00 00 C8 87 1B 40 55"
button:
- platform: template
name: "SEND Test"
on_press:
then:
- lambda: |-
{
std::string str = id(test_hex).state;
std::vector<std::string> pkts;
size_t pos = 0;
while (pos <= str.size()) {
size_t sep = str.find(';', pos);
if (sep == std::string::npos) sep = str.size();
std::string part = str.substr(pos, sep - pos);
while (!part.empty() && std::isspace(part.front())) part.erase(part.begin());
while (!part.empty() && std::isspace(part.back())) part.pop_back();
if (!part.empty()) pkts.push_back(part);
pos = sep + 1;
}
id(saeco_series_6000_component)->send_packets_to_mainboard(pkts, 50);
}
- platform: template
name: "SEND Test RAW"
on_press:
then:
- lambda: |-
id(saeco_series_6000_component)->send_raw_to_mainboard(id(test_hex).state, 300);
- platform: template
name: "Включение (FE 00 01)"
on_press:
then:
- lambda: |-
id(saeco_series_6000_component)->send_packets_to_mainboard(
std::vector<std::string>{
"AA AA AA FE 00 01 5E B7 1C 37 55"
}, 50);
- platform: template
name: "Американо"
on_press:
then:
- lambda: |-
id(saeco_series_6000_component)->send_packets_to_mainboard(
std::vector<std::string>{
"AA AA AA 93 0E 01 01 8B BD 33 EA 55",
"AA AA AA 90 0F 0A 00 02 00 03 02 00 B4 00 00 00 67 48 E4 4B 55",
"AA AA AA 91 10 01 03 56 9A 8C B8 55"
}, 50);
- platform: template
name: "Выключение"
on_press:
then:
- lambda: |-
id(saeco_series_6000_component)->send_packets_to_mainboard(
std::vector<std::string>{
"AA AA AA FE 00 00 C8 87 1B 40 55"
}, 50);
- platform: template
name: "Приготовить напиток"
icon: mdi:coffee
on_press:
- lambda: |-
{
uint8_t type = id(coffee_type).index_of(id(coffee_type).state).value_or(0); // 0..6
uint8_t bean = id(coffee_strength).index_of(id(coffee_strength).state).value_or(0); // 0..3
uint8_t cups = id(coffee_cups).index_of(id(coffee_cups).state).value_or(0) + 1; // 1..4
uint16_t vol = (uint16_t) id(coffee_volume).state;
uint16_t milk = (uint16_t) id(milk_volume).state;
id(saeco_series_6000_component)->coffee_build(type, bean, cups, vol, milk);
}
#[20:45:34][I][saeco_series_6000:079]: Packet from Display: AA AA AA 93 0A 01 01 57 15 3A ED 55
#[20:45:34][I][saeco_series_6000:079]: Packet from Display: AA AA AA 90 0B 0A 05 03 00 02 00 00 64 00 00 00 39 BF 5B 74 55
#[20:45:35][I][saeco_series_6000:079]: Packet from Display: AA AA AA 91 0C 01 03 42 C0 B0 AD 55"