← Расширенные возможности | Содержание
Reference & Troubleshooting — DimmerLink Native Tasmota Driver
Устранение неполадок
Устройство не обнаруживается при загрузке
Симптом: Нет строк DLK: в журнале последовательного порта. DlStatus возвращает {"Command":"Unknown"} или {"Command":"Error"}.
| Проверка | Решение |
|---|---|
| Режим I2C | DimmerLink поставляется с включённым UART. Переключитесь в режим I2C с помощью команды UART SWITCH_I2C (0x5B) перед подключением к шине I2C. |
| Физические соединения | Проверьте подключение SDA, SCL, GND и VCC. SDA и SCL подключаются напрямую (не перекрёстно), в отличие от UART. |
| Подтягивающие резисторы | Добавьте резисторы 4,7 кОм от SDA к 3,3 В и от SCL к 3,3 В. Внутренние подтягивающие резисторы ESP32/ESP8266 недостаточны. |
| Пины I2C в Tasmota | Убедитесь, что GPIO-пины назначены как I2C SDA и I2C SCL в Configuration > Configure Module. |
| Время включения устройства | Устройству требуется ~2 секунды после включения питания для калибровки частоты переменного тока. Перезапустите Tasmota, если она загрузилась раньше готовности устройства. |
USE_DIMMERLINK не определён |
Убедитесь, что определение указано в user_config_override.h и прошивка была пересобрана. |
USE_I2C отсутствует |
Добавьте #define USE_I2C в user_config_override.h при сборке в минимальной конфигурации. |
| Несовпадение версии прошивки | Драйвер требует, чтобы регистр 0x03 возвращал ровно 0x01. Устройства с другими версиями прошивки пропускаются. |
Устройство обнаружено, но команды игнорируются
Симптом: DlStatus возвращает данные, но DlDim не даёт видимого эффекта.
| Проверка | Решение |
|---|---|
| Состояние READY устройства | Проверьте DlStatus — если "Ready": false, устройство ещё калибруется. Подождите и повторите попытку. |
| Код ошибки в статусе | Проверьте поле LastError. 0xFE = параметр вне допустимого диапазона. 0xFC = ошибка записи EEPROM. |
| Тепловое отключение | Если ThermalState равно SHUTDOWN, выходы отключены. Дайте устройству остыть. |
| Подключение нагрузки | Убедитесь, что нагрузка правильно подключена к модулю TRIAC. |
Ошибки I2C или нестабильная связь
Симптом: Устройство обнаружено, но DlStatus показывает устаревшие данные или в журнале появляются ошибки.
| Проверка | Решение |
|---|---|
| Длина провода | Держите провода I2C длиной менее 30 см. Для более длинных проводов требуются более сильные подтягивающие резисторы или буферы I2C. |
| Значение подтягивающего резистора | Более короткие провода с сильными подтягивающими резисторами (2,2 кОм) улучшают целостность сигнала. Не используйте значения ниже 1 кОм. |
| Блок питания | Добавьте конденсатор развязки 100 нФ между VCC и GND вблизи устройства DimmerLink. |
| Конфликт адресов | Используйте I2CScan для проверки наличия устройств с одинаковым адресом. |
| Конфликты GPIO | Не используйте SDA или SCL на GPIO-пинах, применяемых для других целей (ADC, сенсорный ввод, загрузочные пины). |
Калибровка занимает слишком много времени
Симптом: Устройство показывает "Ready": false в течение длительного периода.
| Проверка | Решение |
|---|---|
| Подключение AC | MCU определяет частоту переменного тока от сети. Если нагрузка не подключена, калибровка не может завершиться. |
| Определение частоты | Выполните DlStatus — если ACFreq показывает 0, устройство не определило частоту переменного тока. |
| Принудительная рекалибровка | Отправьте DlRecalibrate для перезапуска цикла калибровки. |
Изменение адреса не работает
Симптом: DlAddress 0x51 возвращает ошибку или устройство исчезает.
| Проверка | Решение |
|---|---|
| Тайм-аут проверки | Драйвер считывает VERSION с нового адреса через 50 мс. Если устройство медленное, проверка может не пройти, даже если адрес изменился. Выполните цикл питания и перезапустите Tasmota. |
| Конфликт по новому адресу | Если целевой адрес уже занят другим устройством, возникнут коллизии. Сначала проверьте шину с помощью I2CScan. |
| Поиск устройства | Выполните I2CScan или перезапустите Tasmota (что выполнит повторное сканирование) для обнаружения текущего адреса. |
Температура не отображается
Симптом: Нет строки температуры на дисплее датчика. Нет Temp или Thermal в MQTT.
| Проверка | Решение |
|---|---|
| Функция прошивки | Прошивка MCU должна включать FEATURE_TEMPERATURE. Уточните у поставщика устройства. |
| Значение регистра | При загрузке драйвер считывает регистр 0x40. Значение 0xFF означает отсутствие датчика. Любое другое значение означает наличие датчика. |
Проблемы при сборке
| Симптом | Решение |
|---|---|
Ошибка неопределённого USE_DIMMERLINK |
Проверьте, что user_config_override.h находится в директории tasmota/, а не в корне проекта. |
| Драйвер отсутствует в бинарном файле | USE_I2C не включён для окружения. |
Предупреждение о конфликте XI2C_100 |
Проверьте I2CDEVICES.md — слот 100 зарезервирован для DimmerLink. |
Ошибка компоновщика по I2cRead8 / I2cWrite8 |
USE_I2C отсутствует. |
Коды ошибок
| Код | Название | Значение |
|---|---|---|
| 0x00 | OK | Нет ошибки |
| 0xF9 | ERR_SYNTAX | Недопустимый адрес регистра |
| 0xFC | ERR_NOT_READY | Ошибка записи EEPROM (сбой записи во флеш-память) |
| 0xFD | ERR_INDEX | Недопустимый индекс канала диммера |
| 0xFE | ERR_PARAM | Parameter value out of range (level > 100, curve > 2, address outside 0x08-0x77) |
Коды ошибок считываются из регистра устройства 0x02 после операций записи. Команда DlStatus отображает последний код ошибки, если он ненулевой, как "LastError":"0xFE". Коды ошибок автоматически сбрасываются после успешного завершения последующей операции.
Карта регистров I2C
| Адрес | Регистр | Доступ | Значения |
|---|---|---|---|
| 0x00 | STATUS | R | Bit 0 = READY, Bit 1 = ERROR |
| 0x01 | COMMAND | W | 0x00=NOP, 0x01=RESET, 0x02=RECALIBRATE |
| 0x02 | ERROR | R | 0x00=OK, 0xF9=SYNTAX, 0xFC=NOT_READY, 0xFD=INDEX, 0xFE=PARAM |
| 0x03 | VERSION | R | 0x01 (firmware version fingerprint) |
| 0x10 | DIM0_LEVEL | R/W | 0-100 |
| 0x11 | DIM0_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x12 | DIM1_LEVEL | R/W | 0-100 |
| 0x13 | DIM1_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x14 | DIM2_LEVEL | R/W | 0-100 |
| 0x15 | DIM2_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x16 | DIM3_LEVEL | R/W | 0-100 |
| 0x17 | DIM3_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x18 | FADE | R/W | 0-255 (x100ms) |
| 0x20 | AC_FREQ | R | 50 or 60 |
| 0x21 | AC_PERIOD_L | R | Half-wave period low byte |
| 0x22 | AC_PERIOD_H | R | Half-wave period high byte |
| 0x23 | CALIBRATION | R | 0=busy, 1=complete |
| 0x30 | I2C_ADDRESS | R/W | 0x08-0x77 |
| 0x40 | TEMP_CURRENT | R | raw-50 = Celsius; 0xFF = no sensor |
| 0x41 | TEMP_STATE | R | 0-5 (thermal state) |
Особенность чтения I2C (требование холостого чтения)
Прошивка MCU требует холостого чтения перед каждым реальным чтением для корректной установки внутреннего указателя регистра. Драйвер обрабатывает это прозрачно:
uint8_t DL_Read8(uint8_t addr, uint8_t reg, uint8_t bus) {
I2cRead8(addr, reg, bus); // Dummy: sets register pointer
return I2cRead8(addr, reg, bus); // Real read
}Это поведение является аппаратным требованием MCU и должно быть сохранено в любом коде, который напрямую взаимодействует с устройством.
Справочник тепловых состояний
| Состояние | Значение регистра | Типичная температура | Поведение |
|---|---|---|---|
| NORMAL | 0 | Ниже ~60 °C | Полная работа |
| WARNING | 1 | ~60–70 °C | Только мониторинг; выходная мощность не изменяется |
| DERATE | 2 | ~70–80 °C | MCU постепенно снижает выходную мощность |
| CRITICAL | 3 | ~80–85 °C | MCU агрессивно снижает выходную мощность |
| SHUTDOWN | 4 | Выше ~85 °C | Все выходы отключены |
| FAULT | 5 | Н/Д | Обнаружена неисправность датчика температуры |