Контроллеры работающие с ESPHome:
ESP32: http://alii.pub/67hfo2
ESP8266: http://alii.pub/67hfq7
M5stack из фото в начале статьи: http://ali.pub/4snj9n
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Сейчас будет короткая статья на тему получения времени с сервера Home Assitant в ESPHome.
Речь пойдет вот о чем. В одной из прошлых статей, я описал как получать информацию с сервера Home Assitant в ESPHome ( хотя обычно происходит на оборот). Эту статью можно прочесть тут:
Вывод информации из Home Assistant на дисплей контроллера esp8266/esp32 в ESPHome.
Я рассказал там, как получить информацию с разных сенсоров. Которые имеются в Home Assitant.
Но вот со временем немного по другому все и не так очевидно. Опять же когда я узнал способ вывода информации из Home Assitant на дисплей ESPHome, я первым же делом попытался вывести время и у меня не получилось.
И информацию подходящую в интернатах не нашел. Потом случайно наткнулся на один проект и оттуда это подчеркнул.
В общем делается это так:
time:
- platform: homeassistant
id: ntp
Согласитесь, все очень просто. Но не очевидно совершенно.
причем id здесь используется, чтоб дальше по этому id выводить значение на дисплей. например.
А если зять строчку, которая будет выводить время на дисплей, то она уже будет выглядеть так ( на примере дисплея illi9143 m5stack):
it.strftime(it.get_width() / 2, 11, id(font_roboto_medium22), WHITE, TextAlign::CENTER, "%X", id(ntp).now());
Где “&X” – это как-раз вывод времени в формате часы/минуты/сеунды. Но так-же можно выводить и число месяц год и дни недели. Все обозначения можно увидеть в таблице:
Директива | Значение | Пример |
%a |
Сокращенное название дня недели | Понедельник |
%A |
Полное название дня недели | Суббота |
%w |
День недели в виде десятичного числа, где 0 — воскресенье, а 6 — суббота. | 6 |
%d |
День месяца в виде десятичного числа, дополненного нулями | 01, 02, …, 31 |
%b |
Сокращенное название месяца | авг |
%B |
Полное название месяца | август |
%m |
Месяц как десятичное число с нулями | 01, 02, …, 12 |
%y |
Год без века в виде десятичного числа с нулями | 00, 01, …, 99 |
%Y |
Год с веком в виде десятичного числа | 2018 |
%H |
Час (24-часовой формат) в виде десятичного числа, дополненного нулями. | 00, 01, …, 23 |
%I |
Час (12-часовой формат) в виде десятичного числа, дополненного нулями. | 00, 01, …, 12 |
%p |
обозначение AM или PM | ДО ПОЛУДНЯ ПОСЛЕ ПОЛУДНЯ |
%M |
Минуты в виде десятичного числа с нулями | 00, 01, …, 59 |
%S |
Секунда как десятичное число с нулями | 00, 01, …, 59 |
%j |
День года в виде десятичного числа с нулями | 001, 002, …, 366 |
%U |
Номер недели года (воскресенье как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей. | 00, 01, …, 53 |
%W |
Номер недели года (понедельник как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей. | 00, 01, …, 53 |
%c |
Представление даты и времени | Сб Авг 18 16:31:42 2018 |
%x |
Представление даты | 18.08.18 |
%X |
Представление времени | 16:31:42 |
%% |
Буквальный % персонаж |
% |
Ну и так-же это описано на официальном сайте ESPHome: https://esphome.io/components/time.html#strftime
Ну вот и все. А если Вам интересен код из скрина который в начале статьи. Там у меня вывод температуры и влажности из датчика температуры и влажности xIaomi взятые с сервера Home Assitant. Так-же построены 2 графика один показывает изменения температуры, второй влажности. Ну и собственно время показывается в самом верху. Вобщем этот код оставлю тут. Вдруг кому-то пригодится. И он переделает под себя. Ведь в ESPHome переделать все очень просто.
captive_portal:
time:
- platform: homeassistant
id: ntp
spi:
clk_pin: 18
mosi_pin: 23
miso_pin: 19
i2c:
sda: 21
scl: 22
scan: true
sensor:
- platform: homeassistant # Cpu temperature
id: temp_balkon
entity_id: sensor.ble_temperature_balkon
- platform: homeassistant # Cpu temperature
id: humidity_balkon
entity_id: sensor.ble_humidity_balkon
- platform: homeassistant # Cpu temperature
id: esptime
entity_id: sensor.time
font:
- file: "fonts/Roboto-Medium.ttf"
id: font_roboto_medium22
size: 22
color:
- id: RED
red: 100%
green: 0%
blue: 0%
- id: BLUE
red: 0%
green: 0%
blue: 100%
- id: WHITE
red: 100%
green: 100%
blue: 100%
graph:
# Show bare-minimum auto-ranged graph
- id: single_temperature_graph
sensor: temp_balkon
duration: 8h
width: 151
height: 51
# Show multi-trace graph
- id: single_temperature_humidity
sensor: humidity_balkon
duration: 8h
width: 151
height: 51
display:
- platform: ili9341
id: m5stack_display
model: M5Stack
# model: TFT 2.4
cs_pin: 14
dc_pin: 27
led_pin: 32
reset_pin: 33
rotation: 0
lambda: |-
it.rectangle(0, 0, it.get_width(), it.get_height(), WHITE);
it.rectangle(0, 22, it.get_width(), it.get_height(), WHITE); // header bar
it.print(11, 33, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Temperature");
it.print(11, 55, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pressure");
it.printf(it.get_width() - 11, 33, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.1f°C ", id(temp_balkon).state);
it.printf(it.get_width() - 11, 55, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.1f%% ", id(humidity_balkon).state);
it.graph(11, 99, id(single_temperature_graph));
it.graph(11, 160, id(single_temperature_humidity));
it.strftime(it.get_width() / 2, 11, id(font_roboto_medium22), WHITE, TextAlign::CENTER, "%X", id(ntp).now());