Skip to content

Repository files navigation

⚡ EVSE Energy Star

Інтеграція для Home Assistant, яка забезпечує локальне керування зарядними станціями Energy Star Pro та Eveus Pro через їхній вбудований веб-інтерфейс (JSON API).

Logo

Відкрити у HACS


🔧 Можливості

  • Відображення статусу зарядної станції
  • Сенсори потужності, напруги, струму, температури
  • Контроль струму заряду, запуск/зупинка зарядки
  • Планування зарядки, таймери
  • Підтримка синхронізації часу
  • Повна локальна робота без хмари
  • UI-конфігурація через Config Flow
  • Підтримка Energy Star Pro і Eveus Pro

🚀 Встановлення

Варіант 1: через HACS (рекомендовано)

  1. Відкрий HACS → "Інтеграції" → "Користувацький репозиторій"
  2. Встав:
    https://github.com/V-Plum/evse_energy_star
    
  3. Вибери тип: Integration
  4. Встанови інтеграцію
  5. Перезапусти Home Assistant

Варіант 2: вручну

  1. Скачай ZIP архів або клонуй репозиторій
  2. Скопіюй папку evse_energy_star у:
    config/custom_components/evse_energy_star
    
  3. Перезапусти Home Assistant

⚙️ Налаштування

  1. Перейдіть у НалаштуванняПристрої та службиДодати інтеграцію
  2. Знайдіть "EVSE Energy Star"
  3. Введіть:
    • IP-адресу зарядної станції
    • Ім’я користувача
    • Пароль

Опції (Налаштування → інтеграція → Налаштувати)

Опція Типово Навіщо
value_scale 0.1 Масштаб струму та енергії — див. розділ нижче
request_timeout 15 с Тайм-аут запиту до станції
device_type 1_phase Одно- чи трифазна станція

⏱️ Частота опитування — головна ручка

Сутність select.*_update_rate_sec (1, 2, 5, 10, 15, 30, 60 с) задає, як часто інтеграція опитує станцію. Це і є регулятор навантаження на Home Assistant.

Станція не вміє повідомляти про зміни сама — її можна тільки опитувати. Тому кожне опитування, на якому щось змінилось (а напруга й температура «дихають» постійно), породжує подію в HA і рядок у recorder.

update_rate Подій від станції Затримка реакції
1 с ~110/хв миттєва
5 с ~25/хв до 5 с
10 с (типово) ~15/хв до 10 с
30 с ~5/хв до 30 с
60 с ~2/хв до 60 с

Якщо станція «шумить» у логах та історії — просто поставте більше значення. 60 с дає одну подію на хвилину з кожного сенсора.

Інтеграція не дроселює сенсори за вас. Хто хоче секундну телеметрію — отримує її; хто хоче тишу — ставить 60 с. Роздільність даних — ваш вибір, а не наш.


🔢 Масштаб значень (value_scale) — важливо

Якщо енергія та струм показуються у 10 разів більшими або меншими, ніж у веб-інтерфейсі станції — змініть цю опцію.

  • 0.1 — станція віддає значення в десятих (типова прошивка). curMeas1: 151 → 15.1 A, sessionEnergy: 128 → 12.8 кВт·год
  • 1.0 — станція віддає готові одиниці, ділити не треба.

Чому не можна просто «зробити правильно» для всіх

Тому що прошивки різні — і це доведений факт, а не припущення.

Найяскравіший доказ — поле systemTime: одні станції віддають його рядком ("22:36:22"), інші — Unix timestamp. Форки цієї інтеграції розходяться саме тому.

Так само з масштабом: автори ababak та pirelly незалежно один від одного прибрали ділення на 10 (issue #7) — бо в них воно давало значення у 10 разів менші. Вони не помилялись — у них інша станція.

Отже будь-який жорсткий вибір ламає половину користувачів. Тому масштаб — налаштування.

Звідки взявся дефолт 0.1

Це не здогадка, а те, що робить власний веб-інтерфейс станції (її ж еталонний клієнт, js/script-min.js):

sessionEnergyValue.textContent = (e.sessionEnergy / 10).toFixed(1)
totalEnergyValue.textContent   = (e.totalEnergy / 10).toFixed(1)
EVSE.curMeas1                  = (e.curMeas1 / 10).toFixed(1)

Підтверджується й фізикою: curMeas1: 151 під час зарядки на 16 А — це 15.1 A, а не 151 A. І sessionEnergy: 128 — це 12.8 кВт·год, а не 128 (більше за батарею більшості електромобілів).

Напруга і температури не масштабуються — вони сирі в усіх прошивках.


🖥️ Платформи

  • sensor — станція, напруга, струм, потужність, температура, енергія
  • switch — перемикач режиму, заземлення, розклад
  • number — обмеження струму/напруги
  • button — ручний запуск зарядки, синхронізація часу
  • select — вибір часової зони

📷 Скриншоти

Dashboard example


🛠️ Вимоги

  • Home Assistant 2023.0 або новіше
  • Зарядна станція Energy Star Pro або Eveus Pro з активним web-інтерфейсом

📋 Зміни у 1.3.2

⏱️ Частота опитування стала єдиною ручкою

Виправлено баг: час довіри щойно надісланій команді був жорстко 5 секунд. При update_rate = 60 с він протухав задовго до наступного опитування — і перемикач вискакував назад, висячи неправильним до 55 секунд. Рівно та проблема, яку лагодили в 1.3.0, тільки вилазила при повільному опитуванні. Тепер це значення масштабується від update_rate.

Прибрано власні дроселі сенсорів. У 1.3.0/1.3.1 годинник станції та тривалість сесії штучно душилися до однієї події за хвилину. Це нав'язувало всім користувачам роздільність, якої вони не просили.

Тепер частоту задає одна ручка — select.*_update_rate_sec. Хочете секундну телеметрію — отримуєте її. Заважає шум — ставите 60 с і отримуєте одну подію на хвилину з кожного сенсора, а не лише з тих, які ми вирішили придушити.


📋 Зміни у 1.3.1

📊 Тривалість сесії більше не засмічує історію

sensor.*_session_time віддається станцією в секундах — тобто під час зарядки змінюється щосекунди. Це той самий антипатерн, що й годинник станції (виправлений у 1.3.0): тікаючий лічильник як стан сутності.

Він був невидимий, поки авто не заряджалось. На живій зарядці цей сенсор давав 49 подій за хвилину — більше, ніж будь-що інше в домі.

Тепер стан пишеться лише коли змінюється хвилина. Формат HH:MM:SS не змінився, значення чесні (00:58:00, 00:59:00), а подій стало у ~50 разів менше.


📋 Зміни у 1.3.0

🔧 Режим 16 А більше не блокує сам себе

Було: вимикаєш «Обмежений режим» → повзунок струму все одно не піднімається вище 16 А. Тільки рідний веб-інтерфейс станції дозволяв підняти до 32.

Чому так було: режим ВИВОДИВСЯ зі струму на кожному оновленні:

self._restricted_mode = float(current) <= 16      # ← замкнене коло
return 16 if self._restricted_mode else design_max

Вимикаєш режим → виставляється струм 16 → «16 ≤ 16, отже режим увімкнено» → стеля знову 16. Вирватись неможливо.

Стало: режим — це стан, а не здогадка. Рівно як у веб-інтерфейсі станції, де він живе звичайною змінною сторінки. Стеля тепер береться зі станції — з поля curDesign (у більшості це 32 А).

Важливо: поведінка точно повторює рідний веб-інтерфейс, включно з тим, що виглядає дивно:

  • увімкнення режиму → струм стає 12 А (так, 12, а не 16 — це реальна поведінка станції)
  • вимкнення → струм стає 16 А, а стеля піднімається до curDesign

Струм не стрибає на 32 А сам собою — його піднімає користувач повзунком. Подвоювати струм зарядки від одного кліку було б небезпечно.

Якщо підняти струм вище 16 (з HA, зі станції чи з її веб-інтерфейсу) — режим знімається автоматично. Це теж правило станції.

⏱️ Перемикачі більше не «вискакують назад»

Станція застосовує команду не миттєво: наступні 1–2 відповіді ще містять старе значення. Рідний веб-інтерфейс через це просто ігнорує дві наступні відповіді (ignoreCount = 2).

Інтеграція цього не робила — тому ви натискали перемикач, а він за секунду повертався у старе положення. Тепер щойно надіслана команда «памʼятається», поки станція її не підтвердить.

📊 Годинник станції більше не засмічує історію

sensor.*_system_time тікає щосекунди, тобто його значення змінюється завжди. Захист від спаму був зламаний: він пропускав запис при різниці ≤ 2 с, але не оновлював опорне значення — тому різниця накопичувалась і кожні ~3 секунди все одно відбувався запис. 20 подій за хвилину з одного годинника.

Тепер стан пишеться не частіше ніж раз на хвилину. Годинник лишається корисним (він показує, чи не збився час станції, від якого залежить розклад зарядки), але перестає забивати recorder.

🔌 Одиниця витоку виправлена

Було мА кирилицею — Home Assistant такої одиниці не знає, тому статистика по витоку не працювала. Тепер mA + device_class: current.

Після оновлення HA може один раз показати повідомлення про зміну одиниці для цього сенсора — це очікувано.


📋 Зміни у 1.2.2

Заземлення нарешті стало нормальною сутністю.

Раніше sensor.*_ground_status показував емодзі або . З такого стану неможливо ні побудувати автоматизацію, ні зібрати історію: для Home Assistant це просто рядок з картинкою.

  • Новий binary_sensor.*_ground з device_class: safety — канонічний спосіб показати небезпеку. Потрапляє в картки «Проблеми», має автоматичну іконку й переклад, а в автоматизації достатньо to: "on".

    Семантика safety інвертована (так визначено в Home Assistant): on = НЕБЕЗПЕЧНО (заземлення немає), off = безпечно.

    Приклад автоматизації:

    triggers:
      - trigger: state
        entity_id: binary_sensor.eveus_pro_ground
        to: "on"
        for: "00:00:10"
    actions:
      - action: notify.mobile_app
        data:
          message: "⚠️ У розетці зарядної станції немає заземлення!"
  • Старий sensor.*_ground_status лишається (щоб не ламати наявні дашборди), але емодзі замінено на нормальні перекладені стани: Є заземлення / Немає заземлення. Позначений як застарілий — з часом буде прибраний.


📋 Зміни у 1.2.1

  • Масштаб телеметрії став опцією (value_scale). Раніше ділення на 10 було жорстко зашите, а потім так само жорстко прибране — обидва варіанти ламали частину користувачів. Тепер це налаштування, дефолт 0.1 (див. розділ вище).
  • Виправлено струм фаз 2 і 3 — вони не масштабувались узагалі, тому у трифазних станцій показувались у 10 разів завищеними.
  • Прибрано витік пароля Wi-Fi у логи. POST /init повертає ssidPassword і httpPassword відкритим текстом, а інтеграція логувала кожне поле на рівні DEBUG — тобто пароль потрапляв у home-assistant.log, який користувачі прикладають до баг-репортів. Тепер із /init беруться лише часовий пояс і розклад.
  • Збої станції більше не мовчазні. Раніше при помилці поверталися порожні дані, і Home Assistant вважав, що все гаразд: сутності виглядали доступними, але були порожні. Тепер станція, яка не відповідає, чесно позначається як недоступна.
  • Тайм-аут став опцією (типово 15 с замість жорстких 5 с). При короткому тайм-ауті станція, яка «задумалась», роняла всі сутності в unavailable і назад.
  • Прибрано зайве створення HTTP-сесій — при опитуванні раз на секунду інтеграція створювала ~86 000 з'єднань на добу.

👤 Автор

@V-Plum
Pull requests, issues та зірочки — вітаються!


📝 Ліцензія

MIT License

About

Eveus (Energy Star) EVSE Home Assistant Custom Integration (HACS)

Topics

Resources

Stars

17 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages