Спасибо участникам чата AUX-based air conditioner (ESPHome) в Telegram за идеи, логи, обратную связь.
Отдельная безмерная благодарность Brokly. Без него значительная часть протокола долго бы оставалась загадкой.
Скорость: 4800
Формат: 4800/8-E-1
Описание: один стартовый 0
, 8 бит данных, один бит четности (равен 1
, если в битах данных нечетное количество единиц) и одна стоповая единица, передача на скорости 4800 бод.
Каждое сообщение, передаваемое по UART, имеет:
- заголовок: 8 байт;
- тело: от 0 до X байт;
- контрольную сумму: 2 байта, CRC16.
Примечание Максимальная длина пакета для известных команд составляет 34 байта. Единственное исколючение - кондиционеры
Royal Clima
(как минимум, модель CO-D xxHNI). Для них длина большого пакета включая заголовки и CRC составляет 35 байт (в конец тела добавлен нулевой байт). Остальные пакеты по длине и структуре полностью соответствуют стандарту.
Это обязательная часть пакета длиной 8 байт:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x01 |
3 | wifi? | 0x00 |
4 | ? | 0x00 |
5 | ? | 0x00 |
6 | LEN | 0x00 |
7 | ? | 0x00 |
Стартовый байт. Всегда равен 0xBB
.
Не расшифрован. Во всех встреченных пакетах был равен 0x00
.
Тип пакета. Подробнее в соответсвующем разделе.
Скорее всего признак пакета wifi-модуля.
Для всех сообщений, посылаемых модулем, этот байт равен 0x80
.
Для всех сообщений, посылаемых сплитом, этот байт равен 0x00
.
Не расшифрован. Встречаются значения 0x00
и 0x01
.
0x01
встречается только в исходящих пакетах (которые отправляет wifi-модуль кондиционеру) и только для пакетов с TYPE равным0x01
и0x09
.0x00
встречается в исходящих пакетах с TYPE равным0x06
и0x0b
. А также во всех входящих пакетах (TYPE =0x01
,0x07
,0x09
)
Не расшифрован. Во всех встреченных пакетах был равен 0x00
.
длина тела пакета в байтах.
Длина тела разная для пакетов разных типов:
TYPE | направление | длина пакета |
---|---|---|
0x01 |
[=>] | 8 байт |
0x01 |
[<=] | 0 байт |
0x06 |
[=>] | 2 или 15 байт; подробнее в описании пакета TYPE = 0x06 |
0x07 |
[<=] | 4, 15 или 24 байта; подробнее в описании пакета TYPE = 0x07 |
0x09 |
[=>] | 0 байт |
0x09 |
[<=] | 1 байт |
0x0B |
[=>] | 2 байта |
Не расшифрован. Во всех встреченных пакетах был равен 0x00
.
Это необязательная часть пакета. Длина тела указана в байте 6 (LEN) заголовка. Структура тела зависит от типа пакета, переданного в заголовке.
Это CRC16 для заголовка + тела пакета.
Расчет CRC производится по следующему алгоритму:
- Если длина данных в байтах нечетная, то данные дополняются в конце нулевым байтом. Каждая пара байт данных берется для расчета как 16-битное число.
- Последовательно суммируем все 16-битные числа. Важно помнить, что сумма вполне может быть 32-разрядной.
- К младшим 16 битам получившейся суммы прибавляются старшие 16 бит (сумма возвращается к исходному 16-битному формату, но данные в старших разрядах не теряются).
- Дальше полученное значение побитово инвертируется. В итоге получаются 2 байта чексуммы для пакета.
Встречались только эти:
-
0x01
(направление: входящий, исходящий); подробнее.
ping-пакет. Пакеты этого типа идут от кондиционера автоматически каждые 2,963 сек. Wifi-модуль отвечает на них пакетами того же типа. Без входящего дежурного пакета wifi-модуль пакеты такого типа не рассылает. -
0x06
(направление: исходящий); подробнее.
команда сплиту на выполнение. Отправляется wifi-модулем, когда это необходимо. Тип команды зашит в теле пакета. Длина тела - 2 байта. -
0x07
(направление: входящий); подробнее.
информационный пакет. Бывает 4 видов. Один из них рассылается кондиционером самостоятельно раз в 10 мин.
Отправляется кондиционером в адрес wifi-модуля. Может быть как ответом на запрос wifi-модуля, так и быть отправленным кондиционером без каких-либо запросов. -
0x09
(направление: входящий, исходящий); подробнее.
инициирование WiFi модуля. Отправляется кондиционером, когда кнопка HEALTH нажимается 8 раз за 10 сек. В работе самодельного wifi-модуля не используется, так как в этом нет необходимости. Скорее всего, нужно на этапе настройки оригинального донгла (задание ему сети wifi, паролей и т.п.).
Wifi-модуль на неё отвечает пакетом того же типа.
Для входящего пакета длина тела пакета всегда 1 байт. Этот байт всегда был равен0x02
.
Для исходящего пакета тело отсутствует. -
0x0b
(направление: исходящий); подробнее.
Какой-то странный пакет. Посылка с такой командой отправляется wifi-модулем, если он не получает ping-пакетов кондера. Также wifi-модуль посылает такие пакеты в каких-то случаях, но в логике этого процесса разобраться не удалось. Вроде бы иногда при включени пиания... Но это не точно =) При этом кондиционер на такие пакеты никак не реагирует. Самодельный wifi-модуль успешно работает и без этой команды.
Длина тела пакета всегда 2 байта.
Первый байт тела - какой-то счетчик. То ли счетчик попыток, то ли что-то подобное. Встречались значения0x01
,0x02
и0x03
.
Второй байт тела пакета всегда0x00
.
Пакеты этого типа идут от кондиционера автоматически примерно каждые 3 секунды. Wifi-модуль отвечает на них пакетами этого же типа.
Стандартный вид входящего ping-пакета:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x01 |
3 | wifi? | 0x00 |
4 | ? | 0x00 |
5 | ? | 0x00 |
6 | LEN | 0x00 |
7 | ? | 0x00 |
8 | CRC1 | 0x43 |
9 | CRC2 | 0xFF |
Стандартный вид исходящего ping-пакета:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x01 |
3 | wifi? | 0x80 |
4 | ? | 0x01 |
5 | ? | 0x00 |
6 | LEN | 0x08 |
7 | ? | 0x00 |
8 | 0x1C |
|
9 | 0x27 |
|
10 | 0x00 |
|
11 | 0x00 |
|
12 | 0x00 |
|
13 | 0x00 |
|
14 | 0x00 |
|
15 | 0x00 |
|
16 | CRC1 | 0x1E |
17 | CRC2 | 0x58 |
Иногда встречалось такое, что младший байт CRC у входящего пакета (0xFF
) отсутствует. Это “битый” пакет. Чаще всего wifi-модуль на такой не отвечает. Но тоже не всегда :) В общем, “всё гибко” :)
Входящий ping-пакет всегда одинаков (за исключением битых пакетов с отсутствующим 0xFF
в CRC). Ответ wifi-модуля тоже одинаков. По крайней мере никаких вариаций за всё время наблюдений не встретилось.
Есть предположение насчет отсутствия 0xFF
в конце.
Похоже, такое встречается, когда пинг-пакет совпадает по таймингу с дежурным информационным пакетом (TYPE=0x07
, CMD=0x2x
). В этом случае в кондее происходит какой-то баг, и два пакета “слипаются”. Пакет TYPE=0x07
прилипает к ответу на пинг между первым и вторым байтом CRC. То есть положенная последняя 0xFF
в ответе на пинг прилетает уже после пакета TYPE=0x07
.
Это всегда исходящий пакет. В нем wifi-модуль передаёт команды кондиционеру или же запрашивает информацию о состоянии.
Тело пакета имеет длину 2 или 15 байт. Причем для любого тела первые два байта будут командой и каким-то флагом.
Примеры пакетов для разных команд:
Исходящий пакет:
# | NAME | вар.1 | вар.2 | NAME | вар.3 | |
---|---|---|---|---|---|---|
0 | START | 0xBB |
0xBB |
START | 0xBB |
|
1 | ? | 0x00 |
0x00 |
? | 0x00 |
|
2 | TYPE | 0x06 |
0x06 |
TYPE | 0x06 |
|
3 | wifi? | 0x80 |
0x80 |
wifi? | 0x80 |
|
4 | ? | 0x00 |
0x00 |
? | 0x00 |
|
5 | ? | 0x00 |
0x00 |
? | 0x00 |
|
6 | LEN | 0x02 |
0x02 |
LEN | 0x0F |
|
7 | ? | 0x00 |
0x00 |
? | 0x00 |
|
8 | CMD | 0x21 |
0x11 |
CMD | 0x01 |
|
9 | ?X | 0x01 |
0x01 |
?X | 0x01 |
|
10 | CRC1 | 0x1B |
0x2B |
0x97 |
||
11 | CRC2 | 0x7E |
0x7E |
0x00 |
||
12 | ? | 0x02 |
||||
13 | ? | 0x60 |
||||
14 | ? | 0x00 |
||||
15 | ? | 0x20 |
||||
16 | ? | 0x00 |
||||
17 | ? | 0x00 |
||||
18 | ? | 0x00 |
||||
19 | ? | 0x00 |
||||
20 | ? | 0x00 |
||||
21 | ? | 0x00 |
||||
22 | ? | 0x00 |
||||
23 | CRC1 | 0x94 |
||||
24 | CRC2 | 0xFD |
одна из следующих команд кондиционеру:
-
0x01
- команда управления.Тело команды имеет тот же состав и структуру, что и тело пакета TYPE =
0x07
, CMD =0x11
на 25 байт. В ответ на команду приходит входящий пакет TYPE =0x07
, CMD =0x01
на 14 байт. -
0x11
- запрос информации о работе внутреннего блока сплит-системы.В ответ приходит пакет TYPE =
0x07
на 25 байт. Они появились уже после подключения модуля к WiFi. Идут периодически сами по себе (без запроса). -
0x21
- запрос информации о работе внешнего блока сплит-системы.В ответ приходит пакет TYPE =
0x07
на 34 байта. Такие запросы модуль делал и до подключения к WiFi. Идут периодически сами по себе (без запроса).
непонятен.
Есть предположение, что этот же байт возвращается во воходящем пакете TYPE = 0x07
в байте 8.
Предположение №1: это может быть ID запроса или порядковый номер запроса. Если будет тяга к экспериментам, то надо попробовать передать подряд две команды, для первой указать
0x01
, для второй0x02
. И посмотреть на ответы.
Предположение №2: Стоит попробовать в исходящем пакете в этом месте передать отличный от
0x01
байт. И посмотреть, вернётся он в восьмом байте ответа или нет. Тогда по крайней мере станет понятно, связан этот байт с байтом 8 воходящего пакета TYPE =0x07
.
присутствуют только в пакетах TYPE = 0x06
для команды CMD = 0x01
. Их значение идентично телу пакета TYPE = 0x07
, CMD = 0x11
(описание смотри там же).
Пакетом данного типа кондиционер информирует wifi-модуль о результатах выполнения команды либо сообщает статус внутреннего или внешнего блока.
Этот пакет отправляется сплитом в дежурном режиме каждые 10 минут. Wifi-модуль на него не отвечает.
В пакете содержится информация о работе внешнего блока сплит-системы. Значение байтов тела пакета такое же, как для входящего пакета CMD = 0x21
со статусом внешнего блока сплит-системы (см. ниже).
Отличия только в байте 9 (CMD):
-
Когда модуль wifi не подключен к кондиционеру, в этом байте сплит может передавать значения от
0x20
до0x2F
. После0x2F
идет опять0x20
.Что это за счетчик, не особо понятно.
Значение счетчика меняется, если сплиту отправить какой-нибудь левый пакет с компьютера. Учитываются как минимум 8*HEALTH (результат в виде команды
0x09
в линии), а также передаваемые сплиту по USART команды с CMD=0x02
. -
Когда wifi-модуль подключен к сплиту, в этом байте возвращается модулю код команды CMD, полученный от модуля в пакете с TYPE=
0x06
. -
Важно! При подключенном модуле тоже есть дежурные пакеты, присылаемые каждые 10 минут. При этом код в байте 9 может быть любой из интервала
0x20
..0x2F
.
В пакете содержится информация о работе внешнего блока сплит-системы.
Пакет отправляется кондиционером в ответ на команду wifi-модуля с TYPE = 0x06
и CMD = 0x21
.
Входящий пакет:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x07 |
3 | wifi? | 0x00 |
4 | ? | 0x00 |
5 | ? | 0x00 |
6 | LEN | 0x18 |
7 | ? | 0x00 |
8 | ?X | 0x01 |
9 | CMD | 0x21 |
10 | CONF | 0xC0 |
11 | MODE | 0x3D |
12 | FRST | 0x00 |
13 | FSPD | 0x02 |
14 | FPWM | 0x54 |
15 | Tint | 0x3A |
16 | ? | 0x00 |
17 | To | 0x29 |
18 | ? | 0x00 |
19 | ? | 0x00 |
20 | iT | 0x00 |
21 | ? | 0x00 |
22 | TCMP | 0x00 |
23 | ? | 0x00 |
24 | iPwr | 0x00 |
25 | ? | 0x00 |
26 | ? | 0x00 |
27 | ? | 0x00 |
28 | ? | 0x00 |
29 | ? | 0x00 |
30 | ? | 0x00 |
31 | Tid | 0x05 |
32 | CRC1 | 0x10 |
33 | CRC2 | 0x36 |
Не понятно, что это. Всегда встречался только 0x01
.
Есть предположение, что это тот же байт 0x01
, который передает wifi-модуль в пакете TYPE = 0x06
в байте 9 (?x).
В описании к пакету TYPE = 0x06
(см. тут) описана пара возможных экспериментов с этим байтом.
возвращает wifi-модулю код типа команды CMD, полученный в пакете TYPE = 0x06
.
По сути для ответов на запросы wifi-модуля тут всегда 0x21
.
Для пакетов, рассылаемых кондиционером в автоматическом режиме, тут может быть любое значение в интервале 0x20
..0x2F
.
До конца не расшифрован.
Есть предположение, что этот байт информирует о типе кондиционера. Как минимум, инверторный он или on-off.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | ? | ? | INV | X | X | iPRD | X | X |
Бит 7: не известно, для всех моделей был 1
.
Бит 6: не известно, для всех моделей был 1
.
Бит 5 (INV): тип кондиционера - 1
для инверторных сплитов, 0
для сплитов on-off.
Бит 4: не известно, для всех моделей был 0
.
Бит 3: не известно, для всех моделей был 0
.
Бит 2 (iPRD): как-то связан с автоматической рассылкой информации кондиционером. Причем встречается только для инверторых кондиционеров. При ответах на запросы wifi-модуля тут 0
, для автоматически рассылаемых пакетов тут 1
. Отправляется кондиционером примерно раз в 10 минут.
Бит 1: не известно, для всех моделей был 0
.
Бит 0: не известно, для всех моделей был 0
.
Получается такое:
0xC0
(1100 0000) - обычный on-off сплит;0xE0
(1110 0000) - инверторный сплит, пакет с ответом на запрос wifi-модуля;0xE4
(1110 0100) - инверторный сплит, пакет дежурного информирования. Встречается в логах с периодом порядка 10 минут.
Байт режимов работы внутреннего блока.
Функции iCLEAN, HEALTH, ANTIFUNGUS на данный байт не влияют.
В мультисплитсистемах для каждого внутреннего блока значения этого байта независимы, друг на друга не влияют.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | MD3 | MD2 | MD1 | LON | HL | VL | SLP | PWR |
Биты 7, 6, 5 (MD3..MD1): режим работы кондиционера.
Определили такие варианты:
0x00
(000x xxx0) - OFF0x01
(000x xxx1) - AUTO. Для режима AUTO нет отдельного бита. То есть если кондиционер включен (бит PWR установлен в1
) и все биты MDx сброшены в0
, значит AUTO.0x21
(001x xxx1) - COOL0x41
(010x xxx1) - DRY0x81
(100x xxx1) - HEAT0x80
(100x xxx0) - тоже допустимый режим; хоть бит PWR и установлен в0
, но кондиционер еще не выключился и остывает. Это переход из HEAT в OFF.0xC1
(110x xxx1) - FAN
Бит 4 (LON): Louvers_on. Если жалюзи включены, то тут 1
, иначе 0
.
Бит 3 (HL): horizontal_louver. Если горизонтальные жалюзи включены, то тут 1
, иначе 0
.
Бит 2 (VL): vertical_louver. Если вертикальные жалюзи включены, то тут 1
, иначе 0
.
ВАЖНО! Обнаружил в логах на Rovex ALS, что бит вертикальных жалюзи для этого кондиционера инвертирован! То есть тут 1
, когда вертикальные жалюзи выключены и 0
, когда вертикальные жалюзи включены!
Бит 1 (SLP): sleep_mode. Если включен режим SLEEP, то тут 1
, иначе 0
.
Бит 0 (PWR): power. Если кондиционер включен, то тут 1
, иначе 0
.
Вроде бы расшифрован. Требуется проверка. Говорит о процессе разморозки внешнего блока.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | CL | X | DF | NDF | ? | X | X | X |
Бит 7 (CL): cleen. Включена функция очистки (iCLEAN).
Бит 6: не известно, для всех моделей был 0
.
Бит 5 (DF): defrostMode. Режим разморозки внешнего блока (прогрев испарителя).
Бит 4 (NDF): needDefrost. начало разморозки (накопление тепла). У KapSoft тут всегда 0
. У кого иначе пока не ясно. У Андрея Александровича тут 0
, но при разморозке включается бит 3. Надо разбираться.
Бит 3 (?): не известно, для всех моделей был . У Андрея Александровича тут 0
1
при включении разморозки. Надо разбираться.
Бит 2: не известно, для всех моделей был 0
.
Бит 1: не известно, для всех моделей был 0
.
Бит 0: не известно, для всех моделей был 0
.
fanSpeed
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | X | X | X | X | X | FS3 | FS2 | FS1 |
Биты 0..2 (FS1..FS3): реальная скорость вентилятора.
Возможны следующие значения:
OFF = 0x00
(0000 0000)
LOW = 0x02
(0000 0010)
MID = 0x04
(0000 0100)
HIGH = 0x06
(0000 0110)
TURBO = 0x07
(0000 0111)
режим CLEAN = 0x01
(0000 0001)
Но это при ответах на запросы wifi-модуля (TYPE=0x06
CMD=0x21
). В дежурных пакетах тут какие-то совсем другие значения.
Примечание: Это реальная скорость вентилятора. Не заданная пользователем, а которая в данный момент. Например может быть установлен нагрев со скоростью вентилятора HIGH, но кондей еще не произвел достаточно тепла, и крутит на LOW, И тогда тут будет отображаться LOW.
скорость шима вентилятора
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | FP7 | FP6 | FP5 | FP4 | FP3 | FP2 | FP1 | ? |
Бит 0 (?): не понятно, что за бит. Как минимум в Rovex ALS встречалась тут 1
. Надо изучать.
Биты 1..7 (FP1..FP7): значение ШИМ вентилятора.
Примерное соответствие:
126...128 - turbo
100...113 - hi
84...85 - mid
59...62 - low
0 - off
TODO: Нужно уточнить у Brokly, как он получил эти значения. По логам Rovex ALS у меня не получилось соответствие указанным значениям.
Из сообщества: В мультисплитсистеме на 2 внутренних блока здесь встречались самые разные значения. У выключенного сплита тут
0x00
. В мульти-сплите у каждого внутреннего блока изменения тут независимые (при выключенном одном из блоков и включенном втором у выключенного ничего тут не меняется). Когда работает, значения меняются почти каждую посылку.
целая часть температуры внутреннего датчика.
Перевод в градусы цельсия по формуле: T = Тint - 0x20
+ Tid/10.
Где Tid - дробная часть температуры (лежит в байте 31).
не расшифрован.
В Rovex ALS
встречался только 0x00
.
Brokly: В ВЫКЛЮЧЕНОМ СОСТОНИИ значение байт 15, 16, 17, 18 равны! А значит это термодатчики внутри внутреннего блока!
Из сообщества: В мультисплитсистеме на 2 внутренних блока здесь встречались самые разные значения. Для этой системы байты 16, 17 и 18 имели всегда одинаковые значения. На разных внутренних блоках эти значения были разные и при поочередном включении блоков вроде как значения этих байтов для разных блоков не особо коррелировали.
Из сообщества: на других инверторных системах тут тоже были значения, но разные для байт 16, 17 и 18.
Для сплитов on-off похоже на температуру теплообменника во внешнем блоке. Но адекватную формулу определить не получилось.
На температуру внешнего блока очень похоже, так как характер изменений значения в течение суток при выключенном кондиционере, соответствует изменению температуры уличного воздуха. Если кондиционер работает, то при изменении режимов его работы (обогрев, охлаждение) эта температура очень сильно и быстро меняется.
Для инверторов температура внешнего блока в байте 20 (iT) (см. ниже). Для мультисплитсистем и инверторов тут какие-то свои значения.
Наблюдения. При -7..-5 градусах на улице в этом байте у меня
0x33
. При дальнейшем понижении температуры до -9..-7 градусов этот байт не изменился (остался0x33
). Так что либо там какое-то ограничение по нижней температуре, либо что-то еще. Пока сложно понять, как высчитывать температуру.
Brokly: скорее всего это действительно какая то температура или дельта температур СКОРЕЕ ВСЕГО ЭТО ТЕМПЕРАТУРА ПОДАЧИ !!!!!! При охлаждении - холодная, при нагреве теплая холоднее или горячее температуры в команте. В выключеном состоянии стремится к комнатной темп. у меня на трех инверторных кондиционерах Energolux серии Bern в выключеном состоянии значение этого байта находится на уровне 57-68 (мощность 0%) зависит от мощности работы компрессора (измерения при 12гр на улице) в режиме охлаждения уменьшается и при мощности 47% = 40 / 73% = 38 в режиме нагрева увеличивается и при мощности 47% = 70 / 73% = 75 / 84% = 84 изменение этого значения более вялое, с западыванием относительно изменения мощности видимо является реакцией (следствием работы) на изменение мощности инвертора учитывая стиль записи температур имеет смысл рассматривать это значение как увеличенное на 0x20
этот байт как-то связан с температурой во внешнем блоке. Требуются дополнительные исследования. При выключенном сплите характер изменения значения примерно соответствует изменению температуры на улице. При включенном сплите значение может очень сильно скакать. По схеме wiring diagram сплит-системы, во внешнем блоке есть термодатчик, отслеживающий температуру испарителя. Возможно, этот байт как раз и отражает изменение температуры на испарителе. Но я не смог разобраться, как именно перевести эти значения в градусы. Кроме того, зимой даже в минусовую температуру этот байт не уходит ниже 0x33 по крайней мере для температур в диапазоне -5..-10 градусов Цельсия.
не расшифрован. В Rovex ALS
встречался только 0x00
. Для мультисплитсистем и инверторов тут есть значения.
Brokly: полностью повторяет значение 17 байта
не расшифрован.
В Rovex ALS
и Royal Clima 18HNI
встречался только 0x00
.
Для многих других тут всегда 0x64
(100).
Что означает - не ясно. Но это точно не связано с инвертором, т.к. Rovex ALS
и Royal Clima 18HNI
имеют тут оба 0x00
, но при этом один on-off, а второй - инвертор.
температура внешнего блока, если там есть термодатчик.
У Rovex ALS
встречались только 0x00
.
ВАЖНО: когда кондиционер выключен, обновление температурного датчика наружного воздуха происходит очень редко - раз в 6-7 часов. Это ограничения железа кондиционера.
Если температура воздуха требуется чаще, то можно вручную корректировать температуру по динамике датчика обратки (байт 17). Температура обратки при работе кондиционера значительно отклоняется от температуры наружного воздуха, но при выключенном кондиционере стремится к уличной температуре. Стоит иметь ввиду, что напрямую использовать значение обратки не стоит, так как показания этих датчиков в покое могут отличаться на 1-2 градуса и на графике температуры будут резкие изменения при переходе с одного датчика на другой. А вот использовать динамику температуры обратки при выключенном кондиционере для корректировки значения уличной температуры можно (если температура обратки увеличилась на 1 градус, то к начению уличной температуры тоже +1 градус; если температура обратки уменьшилась, то и уличную -1).
Brokly Energolux Bern: Внешняя температура формула T-
0x20
Датчик на радиаторе внешнего блока, доступен для пользователя без разборки блока температура внешнего теплообменника влияет на это значение (при работе на обогрев - понижает, при охлаждении или при разморозке - повышает)
Из сообщества: В мультисплитсистеме на 2 внутренних блока здесь самые разные значения. Причем для обоих внутренних блоков они одинаковы! Значит, это какие-то параметры внешнего блока.
Из сообщества: Для RoyalClima18HNI в байте 20 (oT) температура внешнего блока.
не расшифрованы. У Rovex ALS
встречались только 0x00
.
Из сообщества: Для RoyalClima18HNI в байте 21 всегда значение
0x20
.
Brokly Energolux Bern: похоже на какой-то Термодатчик T-
0x20
При охлаждении растет, при нагреве падает, можно делать вывод о режиме COOL или HEAT ПОХОЖЕ НА ТЕМПЕРАТУРУ ОБРАТКИ !!!
Температура компрессора инверторного кондиционера.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | ? | TCMP7 | TCMP6 | TCMP5 | TCMP4 | TCMP3 | TCMP2 | TCMP1 |
Биты 0..6 (TCMP1..TCMP7): температура компрессора.
Могут быть следуюжщие варианты:
- Для on-off кондиционеров эта часть байта всегда равна
0x00
. - Может быть вариант, что в этой части байта всегда значение
0x20
(замечено как минимум наRoyal Clima 18HNI
). Предположительно, так бывает у инверторов, у которых датчик температуры отсутствует. - Если датчик температуры установлен, то показывает температуру компрессора. Расчет температуры по формуле: T-
0x20
.
Бит 7 (?): не понятно, что за бит. Зимой на инверторых системах бывает 1
. Предположительно, это запрос подогрева внешнего блока. ВАЖНО! Не все инверторы так себя ведут. На сплитах новых поколений изменение старшего бита не замечено. Причем пользователи сообщали о том, что отличия замечены даже для разных поколений сплит-систем Energolux SASxxBN1-AI
(один и тот же бренд, семейство и модель, но разное время приобретения). Отличия системные: у 2 из 4 сплитов старший байт меняется, для другой пары — нет. Надо изучать.
не расшифрован.
Как-то связан с многоголовостью сплита.
Что встречали:
Rovex ALS
- всегда0x00
(0000 0000)Royal Clima 18HNI
- всегда0x00
(0000 0000)Energolux SASxxBN1
- всегда0x39
(0011 1001)AUX AMWM
(мультисплит) - было разное:0x1C
(0001 1100)0x20
(0010 0000)0x1D
(0001 1101)0x1F
(0001 1111)
IGC RAK-07NH
(мультисплит) - было разное:0x27
(0010 0111)0x2B
(0010 1011) ..0x2F
(0010 1111)0x30
(0011 0000) ..0x3A
(0011 1010)
В сплитах on-off встречался только 0x00
. Для инверторов тут мощность работы внешнего блока в процентах.
Из сообщества: для инвертора RoyalClima18HNI, в этом байте точно указывается мощность внешнего блока в % от 0 до 100 (
0x00
..0x64
). например, разморозка внешнего блока происходит при 80%
Из сообщества: В мультисплитсистеме на 2 внутренних блоках здесь какие-то значения. По логу примерно через 35 сек после включения внутреннего блока тут начинают меняться цифры, и где-то через 56 сек. они устаканиваются на значении
0x1E
(0001 1110) и не меняются до конца работы. Примерно через 35 сек после выключения внутреннего блока тут устанавливается0x00
. Цифры с работой второго блока не связаны. В логе включались и выключались сплиты последовательно. При этом для блока №1 до установки0x1E
потребовалось 35 секунд. А для блока №2, который был включен уже при работающем блоке №1, значение0x1E
появилось через 12 сек (через одну посылку пакета TYPE=0x07
CMD=0x21
). Возможно потому, что внешний блок уже был на режиме?
не расшифрован. У Rovex ALS
встречался только 0x00
.
Из сообщества: В мультисплитсистеме на 2 внутренних блока этот байт видимо как-то связан с работой внешнего блока. В логе внутренние блоки включались в последовательности
[#1 OFF; #2 OFF]
=>[#1 ON; #2 OFF]
=>[#1 ON; #2 ON]
=>[#1 OFF; #2 ON]
=>[#1 OFF; #2 OFF]
. При этом когда оба блока не работали, в этом байте было0x00
. Когда же хоть один из блоков работал, тут встречались значения от0x02
до0x09
.
Brokly Energolux Bern: полное наложение на показания инвертора (от 0 до 22, когда инвертор отключен и тут 0 при включении инвертора плавно растет, при выключении резко падает в 0, форма графика достаточно плавна
не расшифрован. У меня встречался только 0x00
.
Из сообщества: В мультисплитсистеме на 2 внутренних блока здесь какие-то значения. Они меняются и при выключенных внутренних блоках. Для обоих внутренних блоков значение этого байта меняется примерно синхронно (чаще всего одинаково; иногда есть такое, что для одного из блоков тут какая-то отличающаяся цифра, но это можно объяснить не одновременным считыванием значения).
Brokly Energolux Bern: наложение на показания инвертора (от 144 до 174, когда инвертор отключен показания немного скачут в районе 149...154, при включении инвертора быстро растет, при выключении моментально падает до 149...154, бывают опускания ниже этих значений до 144, чаще в момент первоначального включения инвертора, а потом вверх, не всегда. При включении уходит в 0 на одну посылку
не расшифрован. У меня встречался только 0x00
.
Из сообщества: В мультисплитсистеме на 2 внутренних блока в этом байте
0x02
пока внутренний блок не включен и значения0x0E
,0x1E
,0x20
,0x22
,0x24
,0x26
,0x28
,0x2A
,0x2C
,0x2E
,0x30
,0x32
,0x36
,0x38
,0x3C
.
Значения для разных блоков не общие (когда блок не работает, у него в этом байте
0x02
для любых значений этого байта у второго блока). При выключении блока №1 (блок №2 работал) значение сменилось на0x02
через 5 пакетов. При выключении блока №2 (блок №1 уже не работал) значение сменилось на0x02
через 18 пакетов.
Brokly Energolux Bern: включение 144 -> 124 -> 110 далее все время держим 110
не расшифрован. У меня встречался только 0x00
.
Из сообщества: В мультисплитсистеме на 2 внутренних блока в логе здесь встречаются значения
0x00
..0x0B
. Когда оба внутренних блока выключены, тут значение0x00
. После включения блока №1 через 3 пакета тут появляется ненулевое значение. Причем у обоих блоков. Но при этом сами значения у блока №1 и №2 могут быть не равны. После выключения блока №1 (блок №2 продолжает работать) у обоих блоков тут продолжают меняться значения. После выключения и блока №2 у обоих блоков этот байт обнуляется.
Brokly Energolux Bern: полное наложение на показания инвертора (от 0 до 45, когда инвертор отключен и тут 0 при включении инвертора плавно растет, при выключении резко падает в 0, форма графика дрожащая нестабильная колебания в районе +-2...4 единицы
не расшифрован. Встречался только 0x00
.
не расшифрован. Встречался только 0x00
.
десятые доли градуса для внутренней температуры. Меняется и при выключенном сплите, и при включенном. Хранятся в прямом виде. Целую часть температуры искать в байте 15 (Tint).
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | X | X | ? | X | T4 | T3 | T2 | T1 |
Биты 0..3 (T1..T4): дробная часть комнатной температуры воздуха с датчика на внутреннем блоке сплит-системы, подробнее смотреть байт 15.
Биты 5 (?): для Royal Clima 18HNI
в этом бите 1
. Не понятно, что это значит. У других сплитов такое не встречалось. Нужно больше данных.
Отправляется сплитом в ответ на команду модуля wifi с TYPE = 0x06
и CMD = 0x11
.
Входящий пакет:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x07 |
3 | wifi? | 0x00 |
4 | ? | 0x00 |
5 | ? | 0x00 |
6 | LEN | 0x0F |
7 | ? | 0x00 |
8 | ?X | 0x01 |
9 | CMD | 0x11 |
10 | TS | 0x97 |
11 | SL | 0x00 |
12 | Td | 0x01 |
13 | SP+TH | 0x60 |
14 | TB | 0x00 |
15 | MO | 0x20 |
16 | ? | 0x00 |
17 | ? | 0x00 |
18 | EN | 0x20 |
19 | ? | 0x00 |
20 | FL | 0x00 |
21 | PWR_LIM | 0x00 |
22 | Tsd | 0x00 |
23 | CRC1 | 0x00 |
24 | CRC2 | 0x00 |
не понятно, что это. Всегда встречался только 0x01
. Есть предположение, что это тот же байт 0x01
, который передает wifi-модуль в пакете TYPE = 0x06
в байте 9 (?x).
В описании к пакету TYPE = 0x06
описана пара возможных экспериментов с этим байтом.
возвращает wifi-модулю код типа команды CMD, полученный в пакете TYPE = 0x06
.
байт хранит целую часть целевой температуры, а также положение вертикальных шторок.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | T5 | T4 | T3 | T2 | T1 | UD3 | UD2 | UD1 |
Биты T1-T5 - целая часть целевой температуры. Биты UD1-UD3 - положение вертикальных шторок.
Целевая температура в градусах определяется так:
8 + (байт10 >> 3) + (0.5 * (байт12 >> 7))
>> - это двоичный сдвиг вправо на указанное количество порядков.
(1000 0111 >> 3) = 0001 0000
Биты UD1-UD3 - положение вертикальных шторок.
Возможные значения:
0bXXXXX000
- старт в режиме качания (swing up-down)0bXXXXX001
- фиксация в верхнем положении0bXXXXX010
- второе сверху положение0bXXXXX011
- среднее положение0bXXXXX100
- положение ниже среднего0bXXXXX101
- самое нижнее положение0bXXXXX111
- остановка шторок (жалюзи остаются в том положении, в каком находятся на момент поступления команды).
Важно! Вариант
0bXXXXX110
протестирован. Ничего не даёт.
часть байта хранит горизонтальное положение шторок. Остальная часть байта непонятно для чего.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | LR3 | LR2 | LR1 | X | X | X | X | X |
Для Rovex и Royal Clima: Если LR1 = LR2 = LR3 = 0
, то включается качание шторок SWING_LR (лево-право). Если эти биты установлены в 1
, то SWING_LR отключен.
Для AUX и большинства других систем: LR2 = LR3 = 0
для любого режима шторок. LR1 = 0
для включенного качания шторок SWING_LR (лево-право). LR1 = 1
для выключенного качания шторок SWING_LR.
Версия: В разных кондеях есть кроме свинга и другие режимы. Например, повернуть только влево, повернуть только вправо, раздвинуть в стороны (левую часть влево, правую часть вправо), направить по центру… и т.п. Скорее всего протоколом предусмотрены такие режимы. Но кондей может их и не поддерживать. Стоит поэкспериментировать.
полностью не расшифрован. Часть значения - целевая температура.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | TD | X | TMR6 | TMR5 | TMR4 | TMR3 | TMR2 | TMR1 |
Бит 7 (TD) показывает, есть ли у целевой температуры дробная часть в виде 0,5 градуса (дополнительно см. байт 10 (TS)).
Бит 6 не расшифрован. Возможно, всегда равен 0
, т.к. других вариантов я не встретил.
Биты 0..5 (TMR1..TMR6) - это счетчик минут, прошедших с последней команды ИК-пульта. Каждая новая команда с ИК-пульта обнуляет счетчик. Команды от wifi-донгла счетчик не обнуляют (ни наш на базе aux_ac
, ни официальный стик от производителя кондиционера).
Проверка по имеющимся логам показала, что значение счетчика меняется от 0
(0x00
) до 59
(0x3B
), после чего опять стартует с нуля.
скорость вращения вентилятора сплита.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | SP3 | SP2 | SP1 | TH5 | TH4 | TH3 | TH2 | TH1 |
Биты TH1..TH5 задают часы таймера выключения (возможно, и включения тоже) кондиционера. Максимальное значение тут 23 (0b10111
), хотя для числа в 5 бит можно засунуть и 31. Что при этом получится - не известно, надо проверить :)
ВАЖНО: Хотя в 5 бит вполне влезает значение 24, но для установки 24 часов нужно обнулить минуты таймера в байте 14 и часы здесь!
Биты SP1..SP3 задают скорость вращения вентилятора.
Значения следующие:
- AUTO: SP3=1, SP2=0, SP1=1 (
0xA0
если биты 0-4 сброшены в 0) эта скорость поддерживается сплитом в режиме COOL, но отсутствует в режиме FAN; - LOW: SP3=0, SP2=1, SP1=1 (
0x60
если биты 0-4 сброшены в 0) - MEDIUM: SP3=0, SP2=1, SP1=0 (
0x40
если биты 0-4 сброшены в 0) - HIGH: SP3=0, SP2=0, SP1=1 (
0x20
если биты 0-4 сброшены в 0)
специальные режимы скорости вентилятора, а также минуты таймера выключения (возможно и включения тоже) кондиционера.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | MT | TB | X | TM5 | TM4 | TM3 | TM2 | TM1 |
Биты TM1..TM5 задают минуты таймера выключения (возможно, и включения тоже) кондиционера. Максимальное значение для числа в 5 бит - 31 минута. Но примет ли его кондиционер - пока не понятно. Надо проверять.
Проверить! С ИК-пульта можно установить только значение 30, возможно пройдут и другие, нужно пробовать.
Бит TB активирует интенсивный режим работы (TURBO). Если TB=1, то функция включена. Если TB=0, то функция выключена. Функция доступна в режимах COOL и HEAT. Суть: вентилятор начинает вращаться на максимальной скорости для того, чтобы обогреть или охладить помещение как можно скорее.
Проверить: В инструкции заявлено, что переключение режимов сплита или увеличение/уменьшение скорости вращения вентилятора автоматически отключает функцию TURBO. Но не понятно, эта логика реализована в пульте или в кондее. Наверное, в кондее. Но стоит проверить.
Функция TURBO комбинируется в режиме COOL со скоростями LOW, MEDIUM, HIGH. Сделано так, чтобы отмена функции TURBO возвращала установленную ранее скорость вентиляторов. Комбинацию со скоростью AUTO проверить забыл. Режим HEAT не проверял, но должно быть аналогично COOL.
Бит MT активирует тихий режим работы (MUTE). Если MT=1, то функция включена. Если MT=0, то функция выключена.
В режиме COOL функция не срабатывает: сплит команду принимает, но в дежурных пакетах в бите MT значение не появляется (остается 0).
В режиме FAN сработало.
режим работы сплита.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | MD3 | MD2 | MD1 | X | iFL | SLP | FH | X |
Биты MD1-MD3 задают режим работы сплита:
- AUTO: MD1=0, MD2=0, MD3=0
- COOL: MD1=1, MD2=0, MD3=0 (
0x20
если биты 0-4 сброшены в 0) - DRY: MD1=0, MD2=1, MD3=0 (
0x40
если биты 0-4 сброшены в 0) - HEAT: MD1=0, MD2=0, MD3=1 (
0x80
если биты 0-4 сброшены в 0) - FAN: MD1=0, MD2=1, MD3=1 (
0xC0
если биты 0-4 сброшены в 0)
Бит FH указывает, в каких единицах должна отображаться температура на дисплее кондиционера. Если FH=1, то на дисплее температура будет отобрадаться в градусах Фаренгейта. Если FH=0, то будут использоваться градусы Цельсия.
Бит SLP устанавливает функцию “работа в режиме ночного времени”. Если SLP=1, то функция включена. Если SLP=0, то функция выключена.
Функция доступна только в режиме COOL и HEAT. Выключение сплита функцию сбрасывает. Также функция автоматически сбрасывается через 7 часов.
Принцип работы в каждом из режимов:
- в режиме COOL температура повысится автоматически на 1 градус каждый час в первые два часа работы функции; функция автоматически выключится через 7 часов (по инструкциям не понял, при автоматическом выключении целевая температура возвращается ли к исходной, т.е. -2 градуса).
- в режиме HEAT температура повысится автоматически на 2 градуса каждый час в первые два часа работы функции; функция автоматически выключится через 7 часов (будет ли при этом возврат к исходной целевой температуре - ХЗ).
Бит iFL сигнализирует о включении режима iFeel на кондиционере. В этом режиме температура поддерживается около пульта, а не в месте установки кондея.
Если iFL=1
, то функция включена. Если iFL=0
, то функция выключена.
Для управления через wifi данная функция недоступна. Включение возможно только с ИК-пульта. По крайней мере нам не удалось её запустить через wifi. Ниже лог с попыткой включения функции:
[=>] [BB 00 06 80 00 00 0F 00] 01 01 97 20 00 40 00 20 00 00 20 00 10 00 00 [66 FD]
[<=] [BB 00 07 00 00 00 0F 00] 01 11 97 20 00 40 00 28 00 00 20 00 10 00 00 [66 65]
Поэтому пока записываем её в бесполезные.
не расшифрован, встречался только 0x00
.
не расшифрован, встречался только 0x00
.
говорит о том, в каком режиме включен сплит.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | X | TMR | POW | X | X | iCL | HL2 | HL1 |
Если байт 18 (EN) равен 0x00
, то сплит выключен (POWER OFF).
Бит TMR. Это бит активации функции таймера.
Установка 1
в этом бите активирует таймер. При этом задержка таймера устанавливается в байте 13 и байте 14 этого же пакета.
Проверить! По сообщению Brokly, таймер включается только при включенном кондее. Но мне казалось, что на включение таймер тоже можно было ставить... В общем, этот момент надо изучить.
Бит POW = 1 говорит о том, что сплит работает в обычном режиме, когда можно выбирать охлаждение, нагрев и прочие режимы работы.
Бит iCL = 1 при POW = 0 говорит о том, что сплит включен в режиме самоочистки iCLEAN. Этот режим запускается (или должен запускаться) при выключенном сплите (т.е. байт 18 (EN) должен быть установлен целиком в 0x04
).
Режим iCLEAN - это функция продувки испарителя (самоочистка внутреннего блока). В этом режиме вентилятор внутреннего блока автоматически вращается на низкой скорости, жалюзи открыты. Функция удаляет влагу с поверхности испарителя и внутренних полостей внутреннего блока кондиционера (предотвращает появление и рост бактерий, а также образование плесени внутри блока). После установки функции очистки для запуска кондиционера и отключения этой функции необходимо повторно нажать на пульте кнопку iCLEAN или кнопку ON/OFF. Функция iCLEAN прекратится автоматически по истечении 35 минут работы.
Как я понимаю, это что-то похожее на “антиплесень”, но включается редко, вручную и надолго. Антиплесень работает автоматически после каждого выключения кондея и не так долго.
Бит HL2 при POW = 1
активирует функцию HEALTH (ионизатор воздуха).
Функция HEALTH проверена пользователями с ионизатором.
При активации функции HEALTH модуль передаёт команду 0x06
с установленными в 1
битами POW и HL2 байта 18 (EN). При этом бит POW уже был ранее установлен, т.к. сплит работал в обычном режиме; байт 18 (EN) равен 0x22
.
Независисмо от наличия или отсутствия ионизатора в сплитке, после установки в 1
бита HL2 переданной командой, сплит самостоятельно поднимает в 1
бит HL1 в пакетах TYPE = 0x07
CMD = 0x11
. Далее пока функция работает, оба бита HL1 и HL2 остаются равными 1
, до выключенния функции.
Выключение функции происходит сбросом в 0
бита HL2. Бит HL1 в данной команде также не трогаем. Сплит рулит им самостоятельно.
Особенности поведения функции:
- включается только при включенном кондее
- при включении всегда переводит ifeel в режим ROOM
- при выключении переводит всегда ifeel в режим SET
Бит HL1 - назначение бита не понятно. Возможно, это бит статуса ионизатора. Появление в этом бите 1
связано с включением ионизатора (функция HEALTH
), но что именно этот бит обозначает - не понятно.
не расшифрован, встречался только 0x00
.
флаги включенных функций (дисплей, антиплесень).
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | X | X | X | DS | MD | X | X | X |
Бит DS (display) отвечает за включение и выключение дисплея. Если тут 0, то дисплей погашен, если бит сброшен в 1, то дисплей светится при работе сплита.
ВАЖНО! Есть несоответствие работы с дисплеем на разных моделях кондиционеров. См. issue #31 "особенности работы дисплея" к компоненту
aux_ac
. Поэтому в компоненте ввел параметрdisplay_inverted
для корректной работы с кондиционерами Rovex (возможно, есть и другие производители с инвертированным управлением дисплеем).
Бит MD (mildew) отвечает за работу функции “антиплесень”. Если тут 1, то функция включена, если бит сброшен в 0, то функция выключена.
В чем заключается функция "антиплесень", детально не изучал. В сети встретил такое:
“После отключения кондиционера, вентиляторы внутреннего блока продолжают свою работу при закрытых жалюзи. Это дает возможность быстро и качественно просушить все внутренние компоненты устройства, удалив избыточную влагу. Положительным следствием такой сушки является удаление посторонних, зачастую неприятных запахов.”
В общем, он типа сушит теплообменник и прочие внутренности.
По факту протестировал: после выключения сплита он оставляет минут на 5 открытые жалюзи и глушит вентилятор. Уличный блок при этом гудит и тарахтит. Возможно, прогревается теплообменник для высыхания. Через некоторое время внешний блок замолкает и сплит закрывает жалюзи.
Устанавливает ограничение мощности инвертора для инверторного кондиционера.
Минимальное значение ограничения мощности - 30%. По крайней мере в приложении AC Freedom так.
Если правильно понимаем, то в случае установки ограничения, кондиционер не будет работать на мощности выше заданной. Ниже может, выше - нет. Но это надо проверять.
Если ограничение мощности установлено, это повлияет на нагрев и охдлаждение. В частности, кондиционеру может при некоторых условиях не хватать мощности для достижения заданной температуры и он будет молотить без выключения. Так что с ограничением мощности стоит играться аккуратно.
# бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
имя | LIM_EN | LIM7 | LIM6 | LIM5 | LIM4 | LIM3 | LIM2 | LIM1 |
Бит LIM_EN указывает, включено ограничение или нет. Если тут 0
, то ограничение мощности инвертора выключено. Если значение этого бита 1
, то ограничение включено.
Биты LIM1-LIM7 устанавливают само значение ограничения, обычная двоичная кодировка. То есть ограничение 30%
будет равно 0b001 1110
, 47%
= 0b010 1111
, 51%
= 0b011 0011
, 100%
= 0b110 0100
.
При включении лимита мощности на 100% wifi-модуль в байте 21 (PWR_LIM) передаст значение 0xE4
(0b1110 0100
). При выключении лимита, если он перед этим был установлен на 100%, wifi-модуль в байте 21 (PWR_LIM) передаст значение 0x64
(0b0110 0100
), а сплит-система в следующей посылке сбросит этот байт (вернёт 0x00
).
десятые доли градуса целевой температуры.
Встречались только значения 0x00
и 0x05
. Причем в передаваемой команде 0x06
этот байт всегда 0x00
и десятые доли передаются в байте 12. Но после установки температуры пакетом 0x06
сплит начинает в пакетах 0x07
в этом байте давать десятые доли. Не очень понятно, зачем такая логика работы. Может, чтобы это могли расшифровать тупые устройства и вывести на экран?
Отправляется сплитом как подтверждение получения (или выполнения) команды. В ответ на пакет wifi-модуля с TYPE = 0x06
и CMD = 0x01
.
Входящий пакет:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x07 |
3 | wifi? | 0x00 |
4 | ? | 0x00 |
5 | ? | 0x00 |
6 | LEN | 0x04 |
7 | ? | 0x00 |
8 | ?X | 0x01 |
9 | CMD | 0x01 |
10 | sm1 | 0x94 |
11 | sm2 | 0xFD |
12 | CRC1 | 0xA4 |
13 | CRC2 | 0x00 |
не понятно, что это. Всегда встречался только 0x01
. Есть предположение, что это тот же байт 0x01
, который передает wifi-модуль в пакете TYPE = 0x06
в байте 9 (?x).
В описании к пакету TYPE = 0x06
описана пара возможных экспериментов с этим байтом.
возвращает wifi-модулю код типа команды CMD, полученный в пакете TYPE = 0x06
.
Соответствует байту CRC1 поступившего от wifi-модуля пакета с командой (TYPE = 0x06
, CMD = 0x01
).
Соответствует байту CRC2 поступившего от wifi-модуля пакета с командой (TYPE = 0x06
, CMD = 0x01
).
Этот пакет может быть как исходящим, так и входящим. Пакет отправляется сплитом, если при работающем сплите 8 раз за 10 сек. нажать на пульте кнопку HEALTH. В ответ wifi-модуль отправляет исходящий пакет того же типа.
Входящий пакет:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x09 |
3 | wifi? | 0x00 |
4 | ? | 0x00 |
5 | ? | 0x00 |
6 | LEN | 0x01 |
7 | ? | 0x00 |
8 | 0x02 |
|
9 | CRC1 | 0x38 |
10 | CRC2 | 0xFF |
не расшифрован. Всегда 0x02
.
Исходящий пакет:
# | NAME | значение |
---|---|---|
0 | START | 0xBB |
1 | ? | 0x00 |
2 | TYPE | 0x09 |
3 | wifi? | 0x80 |
4 | ? | 0x01 |
5 | ? | 0x00 |
6 | LEN | 0x00 |
7 | ? | 0x00 |
8 | CRC1 | 0x3A |
9 | CRC2 | 0x7F |
Входящий пакет всегда одинаков. Исходящий пакет (ответ wifi-модуля) тоже всегда один и тот же. По крайней мере за всё время наблюдений вариации не встречались.
Смысл этого пакета не понятен. Модуль такие пакеты рассылает, но сплит на это никак не реагирует.
Пока что есть ощущение, что wifi-модуль отправляет такие пакеты, когда проходит инициализация или что-то такое. Типа только подали питание… Или нажали 8 раз кнопку HEALTH на пульте.
Такие пакеты всегда идут тройками. Модуль отправляет три таких пакета с интервалом между ними порядка 24 мсек. Иногда таких троек несколько (встречал до трёх троек подряд). В этом случае три пакета передаются с интервалами примерно 24 мсек, потом пауза порядка 35 мсек, потом еще три пакета с паузами 24 мсек, еще пауза 35 мсек, еще три пакета с паузами 24 мсек.
Когда логгировал внешнюю температуру, пакеты TYPE = 0x0B
за 2 с лишним часа записи встретились только раз (традиционная пачка из 3 пакетов), в самом начале записи. Скорее всего потому, что при отключенном ноутбуке висящие на линиях USB-UART переходники глушат сигналы и не дают модулю работать. Он включается при подключении к компу и начинает судорожно слать такие команды.
Встреченные варианты пакета:
# | NAME | вар.1 | вар.2 | вар.3 | вар.4 |
---|---|---|---|---|---|
0 | START | 0xBB |
0xBB |
0xBB |
0xBB |
1 | ? | 0x00 |
0x00 |
0x00 |
0x00 |
2 | TYPE | 0x0B |
0x0B |
0x0B |
0x0B |
3 | wifi? | 0x80 |
0x80 |
0x80 |
0x80 |
4 | ? | 0x00 |
0x00 |
0x00 |
0x00 |
5 | ? | 0x00 |
0x00 |
0x00 |
0x00 |
6 | LEN | 0x02 |
0x02 |
0x02 |
0x02 |
7 | ? | 0x00 |
0x00 |
0x00 |
0x00 |
8 | 0x00 |
0x01 |
0x02 |
0x03 |
|
9 | 0x00 |
0x00 |
0x00 |
0x00 |
|
10 | CRC1 | 0x37 |
0x36 |
0x35 |
0x34 |
11 | CRC2 | 0x7F |
0x7F |
0x7F |
0x7F |
не расшифрован. Возможно, это какой-то счетчик попыток. По крайней мере когда wifi-модуль отправляет серию из пачек по три пакета такого типа, этот байт в пачках может увеличиваться. Внутри одной пачки из трёх пакетов этот байт всегда одинаков. Между пачками может отличаться.
Wifi-модуль для работы и корректного отображения информации в приложении все команды отрабатывает не одиночными пакетами, а последовательностями.
Например, для выключения кондиционера модуль выполняет такую последовательность команд:
- Перед выключением кондиционера wifi-модуль запрашивает у него статус внутреннего блока (TYPE =
0x06
, CMD =0x11
) - Сплит отвечает пакетом статуса внутреннего блока (TYPE =
0x07
, CMD =0x11
) - Wifi-модуль из тела полученного пакета формирует команду на выключение сплита (правит байт 18) и отправляет получившийся пакет кондиционеру (TYPE =
0x06
, CMD =0x01
) - Сплит отвечает подтверждением выключения, в теле которого два байта равны CRC16 пакета, полученного на шаге 3. Команда имеет TYPE =
0x07
и CMD =0x01
. - Wifi-модуль запрашивает статус внутреннего блока для отображения в приложении (TYPE =
0x06
, CMD =0x11
) - Сплит отвечает статусом внутреннего блока (TYPE =
0x07
, CMD =0x11
). Байт 18 пакета будет соответствовать выключенному сплиту.
Между командами 4 и 5 могут быть другие команды. Команды 5 и 6 привел просто для иллюстрации изменений.