Для тех, кто впервые слышит про ESP32. Разберём, что это за плата, где её взять, как прошить EF-Bridge и как подключить Stream 2 к MQTT, REST API и Home Assistant.
ESP32-C3 — это крошечный микроконтроллер (мини-компьютер размером со спичечный коробок) со встроенными Wi-Fi и Bluetooth. Именно на нём работает прошивка EF-Bridge: плата по Bluetooth связывается с вашим EcoFlow Stream 2, читает телеметрию и отдаёт её в вашу домашнюю сеть в виде веб-панели, REST API и MQTT.
Ничего паять или программировать не нужно. Достаточно одной готовой платы и USB-кабеля — всё остальное делает прошивка.
Плата ESP32-C3 SuperMini — примерно 22×18 мм. Разъём USB-C сверху, по бокам ряды контактов (пинов), рядом с USB — кнопка BOOT и кнопка RST (reset). Именно кнопка BOOT нужна при прошивке.
Подойдёт любая плата на чипе ESP32-C3. Самый популярный и дешёвый вариант — «ESP32-C3 SuperMini», цена примерно 2–4 $. Если планируете разместить плату вдали от Stream 2 или Wi-Fi роутера/точки доступа — берите версию с внешней антенной (разъём IPEX/u.FL и антенна в комплекте): она заметно увеличивает дальность Bluetooth и Wi-Fi.
«Прошить» — значит записать программу EF-Bridge в память платы. Делается это прямо из браузера: не нужны ни Arduino IDE, ни драйверы, ни командная строка.
Wi-Fi и параметры не прописываются в коде — всё через пошаговый мастер при первом запуске:
EF-Bridge отдаёт данные и принимает команды по обычному HTTP — это удобно для скриптов, Node-RED, домашней автоматизации и любых своих интеграций. Базовый адрес — адрес устройства в вашей сети, например http://stream2.local/ или по IP.
Текущая телеметрия Stream 2 в JSON — обновляется каждую секунду.
// GET http://stream2.local/api/telemetry
{
"ready": true, // BLE link to Stream 2 is active
"pv1": 412.0, // PV1, W
"pv2": 386.0, // PV2, W
"gridPower": 640.0, // grid feed-in, W
"vac": 231.4, // grid voltage, V
"iac": 2.77, // current, A
"freq": 50.01, // frequency, Hz
"pv1v": 34.2, // PV1 voltage, V
"pv2v": 33.8, // PV2 voltage, V
"temp": 41, // inverter temperature, °C
"rssi": -58, // Stream 2 Wi-Fi RSSI, dBm
"limit": 650, // current power limit, W
"genToday": 5.812, // generation today, kWh
"genTotal": 128.44, // generation total, kWh
"feedToday": 4.9, // fed to grid today, kWh
"feedTotal": 96.2, // fed to grid total, kWh
"espRssi": -49 // ESP32 Wi-Fi RSSI, dBm
}
Поля, значение которых недоступно, возвращаются как null. Поле ready=false означает, что связь с инвертором по Bluetooth ещё не установлена.
Состояние самого шлюза: аптайм, IP, статусы BLE и MQTT, свободная память.
{
"uptime": 83145, // uptime, s
"wifiRssi": -49, // ESP32 RSSI, dBm
"ip": "192.168.1.42",
"bleConnected": true,
"bleReady": true,
"reconnects": 2,
"mqtt": true,
"freeHeap": 142880,
"name": "stream2",
"apName": "Stream2-Setup-AB12"
}
История генерации: JSON-массив средних значений мощности (Вт) с шагом 5 минут, до 288 точек (24 часа).
Установить лимит мощности (Вт). Простейший способ — обычная ссылка / GET-запрос.
То же самое, тело запроса watts=NNN (или просто число).
# Set the limit to 650 W (GET, simplest)
curl "http://stream2.local/api/setpower?watts=650"
# Same via POST
curl -X POST "http://stream2.local/api/limit" -d "watts=650"
MQTT — это лёгкий протокол «публикация/подписка» для умного дома. EF-Bridge публикует телеметрию в ваш MQTT-брокер (например Mosquitto) и слушает команды на смену лимита. Именно через MQTT работает интеграция с Home Assistant.
Включается в мастере настройки или на странице «Настройки»: укажите адрес брокера, порт (по умолчанию 1883), при необходимости логин и пароль.
| Топик | Напр. | Описание |
|---|---|---|
nodes/<name>/state | pub | Телеметрия в JSON (retained), публикуется периодически. |
nodes/<name>/status | pub | Доступность: online / offline (offline ставится автоматически при обрыве связи — LWT). |
nodes/<name>/limit/set | sub | Команда установки лимита: пришлите число ватт как текст. |
В топиках name — это имя устройства из настроек, приведённое к латинице/цифрам (например stream2). Точное имя видно на странице «Диагностика».
Один retained JSON со всеми показателями:
# topic: nodes/stream2/state (retained)
{
"ready": true,
"gridPower": 640.0,
"pv1": 412.0,
"pv2": 386.0,
"vac": 231.4,
"freq": 50.01,
"temp": 41,
"rssi": -58,
"limit": 650,
"genToday": 5.812,
"genTotal": 128.440,
"feedToday": 4.900
}
Опубликуйте число ватт (0–3000) в топик команды:
# Set the limit to 500 W over MQTT
mosquitto_pub -h 192.168.1.10 -t "nodes/stream2/limit/set" -m "500"
Самый простой путь — через MQTT: EF-Bridge использует авто-обнаружение (MQTT Discovery), поэтому все датчики и регулятор лимита появляются в Home Assistant сами, без правки YAML.
Имена начинаются с имени вашего устройства. Примерный список:
| Home Assistant | Описание |
|---|---|
sensor.*_grid_feed_power | Мощность отдачи в сеть, Вт |
sensor.*_pv1_power / _pv2_power | Генерация по входам PV1 и PV2, Вт |
sensor.*_grid_voltage / _grid_frequency | Напряжение (В) и частота сети (Гц) |
sensor.*_inverter_temp | Температура инвертора, °C |
sensor.*_device_rssi | Уровень Wi-Fi сигнала Stream 2, dBm |
sensor.*_generation_today / _total | Выработка за сегодня и суммарно, кВт·ч |
sensor.*_feed_in_today | Отдано в сеть за сегодня, кВт·ч |
number.*_power_limit | Регулятор лимита мощности (слайдер 0–800 Вт, шаг 10) — им можно управлять из HA |
Например, если умный счётчик на вводе в дом фиксирует избыточную генерацию (отдачу в сеть), можно уменьшить лимит, чтобы обеспечить нулевой экспорт:
# Zero export: reduce feed-in based on a smart meter at the house inlet
# sensor.house_grid_power: >0 = importing, <0 = exporting
automation:
- alias: Stream2 zero export
trigger:
- platform: state
entity_id: sensor.house_grid_power
condition:
- condition: numeric_state
entity_id: sensor.house_grid_power
below: -20 # exporting more than 20 W
action:
- service: number.set_value
target:
entity_id: number.stream2_power_limit
data:
# lower the limit by the amount of excess export
value: "{{ [(states('number.stream2_power_limit')|int
+ states('sensor.house_grid_power')|int), 0] | max }}"