Інтеграція для Home Assistant, яка забезпечує локальне керування зарядними станціями Energy Star Pro та Eveus Pro через їхній вбудований веб-інтерфейс (JSON API).
- Відображення статусу зарядної станції
- Сенсори потужності, напруги, струму, температури
- Контроль струму заряду, запуск/зупинка зарядки
- Планування зарядки, таймери
- Підтримка синхронізації часу
- Повна локальна робота без хмари
- UI-конфігурація через Config Flow
- Підтримка Energy Star Pro і Eveus Pro
- Відкрий HACS → "Інтеграції" → "Користувацький репозиторій"
- Встав:
https://github.com/V-Plum/evse_energy_star - Вибери тип:
Integration - Встанови інтеграцію
- Перезапусти Home Assistant
- Скачай ZIP архів або клонуй репозиторій
- Скопіюй папку
evse_energy_starу:config/custom_components/evse_energy_star - Перезапусти Home Assistant
- Перейдіть у
Налаштування→Пристрої та служби→Додати інтеграцію - Знайдіть "EVSE Energy Star"
- Введіть:
- 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 с. Роздільність даних — ваш вибір, а не наш.
Якщо енергія та струм показуються у 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 разів менші. Вони не помилялись — у них інша станція.
Отже будь-який жорсткий вибір ламає половину користувачів. Тому масштаб — налаштування.
Це не здогадка, а те, що робить власний веб-інтерфейс станції (її ж еталонний клієнт, 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— вибір часової зони
- Home Assistant 2023.0 або новіше
- Зарядна станція Energy Star Pro або Eveus Pro з активним web-інтерфейсом
Виправлено баг: час довіри щойно надісланій команді був жорстко 5 секунд. При update_rate = 60 с він протухав задовго до наступного опитування — і перемикач вискакував назад, висячи неправильним до 55 секунд. Рівно та проблема, яку лагодили в 1.3.0, тільки вилазила при повільному опитуванні. Тепер це значення масштабується від update_rate.
Прибрано власні дроселі сенсорів. У 1.3.0/1.3.1 годинник станції та тривалість сесії штучно душилися до однієї події за хвилину. Це нав'язувало всім користувачам роздільність, якої вони не просили.
Тепер частоту задає одна ручка — select.*_update_rate_sec. Хочете секундну телеметрію — отримуєте її. Заважає шум — ставите 60 с і отримуєте одну подію на хвилину з кожного сенсора, а не лише з тих, які ми вирішили придушити.
sensor.*_session_time віддається станцією в секундах — тобто під час зарядки змінюється щосекунди. Це той самий антипатерн, що й годинник станції (виправлений у 1.3.0): тікаючий лічильник як стан сутності.
Він був невидимий, поки авто не заряджалось. На живій зарядці цей сенсор давав 49 подій за хвилину — більше, ніж будь-що інше в домі.
Тепер стан пишеться лише коли змінюється хвилина. Формат HH:MM:SS не змінився, значення чесні (00:58:00, 00:59:00), а подій стало у ~50 разів менше.
Було: вимикаєш «Обмежений режим» → повзунок струму все одно не піднімається вище 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 може один раз показати повідомлення про зміну одиниці для цього сенсора — це очікувано.
Заземлення нарешті стало нормальною сутністю.
Раніше 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лишається (щоб не ламати наявні дашборди), але емодзі замінено на нормальні перекладені стани:Є заземлення/Немає заземлення. Позначений як застарілий — з часом буде прибраний.
- Масштаб телеметрії став опцією (
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 та зірочки — вітаються!
