Перейти к содержимому

← Расширенные возможности | Содержание

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 требует холостого чтения перед каждым реальным чтением для корректной установки внутреннего указателя регистра. Драйвер обрабатывает это прозрачно:

c
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 Н/Д Обнаружена неисправность датчика температуры