Найти в Дзене
K12 :: О ESP32 и не только

Термостат на ESP32 с удаленным управлением. Часть 10. Индикация состояния нагрузки на MQTT DASH

Оглавление

Добрый день, уважаемые читатели! В одной из прошлых статей я рассказывал, как управлять нагрузкой с помощью класса rLoadController. В этой статье я расскажу, как сделать очень удобную индикацию состояния этой самой нагрузки в популярном MQTT клиенте MQTT DASH. Про него я тоже как-то писал статью. На одной плитке можно разместить "светодиод" разного цвета, сведения о последнем времени включения и выключения, а также общее время работы и потраченные киловатты за период. Примерно так:

Индикация состояния освещения
Индикация состояния освещения

Пакет JSON с данными о состоянии нагрузки

rLoadController для публикации на MQTT-брокере генерирует довольно большой JSON примерно следующего вида:

{
"
status": 0,
"
timestamp": {"on": "14.09.2023 08:57:12","off": "14.09.2023 09:00:54"},
"
durations": {"last": 222,"total": 294082,"today": 496,"yesterday": 10225,"week_curr": 25321,"week_prev": 46427,"month_curr": 84044,"month_prev": 160548,"period_curr": 102201,"period_prev": 2177,"year_curr": 294072,"year_prev": 0},
"
counters": {"total": 775,"today": 2,"yesterday": 30,"week_curr": 69,"week_prev": 132,"month_curr": 243,"month_prev": 438,"period_curr": 310,"period_prev": 9,"year_curr": 771,"year_prev": 0}
}

Из этой структуры можно извлечь следующие данные:

  • status - текущее состояние нагрузки: 0 - отключена, 1 - включена
  • timestamp - время последнего включения (on) и выключения (off) нагрузки
  • durations - длительность нахождения нагрузки во включенном состоянии в секундах; она доступна для нескольких временных интервалов: last - последнее включение, total - общее время за все время работы устройства, today - за сегодняшний день, yesterday - за вчерашний день, week_curr - за текущую неделю, week_prev - за предыдущую неделю, month_curr - за текущий месяц, month_prev - за предыдущий месяц, period_curr - за текущий учетный период (период это интервал с 25 числа по 25 число следующего месяца), period_prev - за предыдущий период, year_curr - за текущий год, year_prev - за предыдущий год
  • counters - счетчики включения нагрузки за те же временные интервалы, что и длительность.

Извлекая данные из JSON-пакета с помощью MQTT DASH, можно отображать эти данные на смартфоне или планшете управления.

Отображение данных в MQTT клиенте

Конечно, можно не парится со скриптами, а сделать "по простому" - на одной плитке разместить поле status, на другой - timestamp, на третьей - какой-нибудь из durations. Все инструменты в MQTT DASH для извлечения полей из JSON пакета уже есть. Но такой подход не очень удобен - занимает три плитки и не нагляден.

Воспользуемся скриптами JavaScript и сделаем более наглядную плитку, в которой будет отображаться сразу вся необходимая информация:

-2
  • В первой строке расположена виртуальная имитация светодиода, можно использовать желтый, красный, зеленый и синий цвета. Сделано это с помощью стандартных еmoji. Стоит только учитывать, что на древних версиях Android пиктограммы выглядят не так красиво.
  • При изменении состояния нагрузки цвет текста изменяется с серого на красный, то так же обозначает то, что нагрузка включена.
  • Во второй строчке отображается время последнего переключения нагрузки - во включенном состоянии это есть время включения, иначе - время выключения
  • В третьей строке отображается длительность работы нагрузки и затраченные киловатт-часы. При этом во включенном состоянии можно отображать длительность текущего сеанса, а в выключенном -= общее время наработки за учетный период и ли месяц (впрочем можно выбрать любой доступный интервал времени - день, неделю и т.д.).

Делается это с помощью скрипта on display, написанного на JavaScript и расположенного в плитке.

Создайте новую плитку с типом "текст" и с самым мелким шрифтом. Заполните поле "топик" и "имя", поле "Извлечь из json" при этом заполнять не нужно. Затем прокрутите настройки плитки вниз и найдите кнопки, ведущие к редакторам скриптов, на нужен ON DISPLAY:

-3

Не буду тянуть кота за фаберже и описывать работу скрипта, думаю и так все понятно:

-4

Скрипт может быть и не оптимален, знатоки JavaScript могут меня поправить. Но работает.

Что здесь можно и нужно изменить:

  • в строке 10 укажите мощность нагрузки в ваттах для расчета потраченной мощности
  • в строке 30 выберите emoji для индикации включенной нагрузки. В современных версиях Android можно выбрать синий, красный, желтый и зеленый светодиоды. Но ничто вас не ограничивает - можно использовать радостную мордочку, например.
  • в строках 32, 33 выберите временные интервалы для индикации включенной нагрузки
  • в строках 39, 40 выберите временные интервалы для индикации выключенной нагрузки
  • цвета текста задаются в строках 34 и 41 соответственно, выбрать обозначение можно например здесь
  • можно включить мигание плитки во включенном состоянии, слегка подправив строчку 35

Не забудьте сохранить скрипт и настройки плитки перед выходом.

________

На этом пока всё, до встречи на сайте и на dzen-канале! Всем добра!

✉️ Ссылка на telegram-канал: https://t.me/kotyara12

👍 Понравилась статья? Поддержите её лайком или комментарием!

🔶 Полный архив статей вы найдете здесь