»Начало 
IR протокол на Daikin


IR протокол на Daikin


След като научих LIRC-а да говори CCF команди дойде време да се захвана с протокола, който "говори" самият Daikin.

На няколко места в Интернет можете да намерите някои от командите, както в RAW формат, така и примерен код, който ги генерира. Мартин Харизанов има код, както и цяло устройство, което предлага за да управлявате климатика си през Интернет. Разглеждайки обаче кода ми направи впечатление, че някои от функциите, които ги има на дистанционното ми, липсваха от неговия код - например при него вентилатора работи на три степени, докато на дистанционното имате пет. Като за начало обаче този код можеше да ми послужи за да генерирам собствени команди през LIRC-а.

Както се вижда от кода на Харизанов, командата която се подава към Daikin-а е с дължина от 26 байта. Тя обаче е разделена на две групи, с две отделни чексуми като групите са отделени една от друга с пауза. И двете групи започват с еднакви водещи импулси.

CCF поредицата трябва винаги да започва с 0000, следва честотата в hex, броя импулси които ще пращаме и броя на повторенията на командата, което би трябвало да симулира натискане на бутон.

Тъй като WEB-а ми щеше да ползва PHP си направих един клас, който генерира въпросните команди. До тук всичко работеше и то правилно и съответно работата беше почти свършена.

Само, че липсващите функции леко ме дразнеха. Нещица, като ECONO, SENSOR и разни други екстри ме накара да ги потърся. Логично беше да ги има някъде из протокола.

И така, писнах mode2 /dev/lirc0 и натиснах произволно копче на дистанционното. В резултат на което получих един хубав dump, който обаче още на пръв поглед изглеждаше доста дълъг. Какво обаче връща mode2?

Много просто поредица от pause и pulse които представляват съответно ниско и високо ниво за определено време. Как да го декодираме? Е, оказа се, че не е толкова трудно, колкото изглежда на пръв поглед.

В началото на dump-а има малко на пръв поглед случайна информация. По-късно се оказа, че не е за пренебрегване, но за това по-късно. Къде обаче започваше важната за мен информация?

Дългия space в самото начело определено беше паузата преди да натисна бутона. Следваха 16 реда, които завършваха с дълга пауза. Същата дълга пауза се намира и на още две места по-назад в dump-а. Игнорирах всичко преди въпросната пауза. След това се намира водещ импулс, който също можете да намерите по-назад във файла. Логично беше това да означава, че следва реалната информация. Бързо подреждане на файла в текстов редактор потвърди съмненията ми, но търсенето на някаква логика по този начин си е хамалогия, затова се роди mode2_decode.

Съмненията ми обаче, че имам работа с нещо различно от декодирания протокол на Харизанов се потвърдиха. Вместо 26 байта аз получавах 35 и вместо две групи информацията беше в три групи съответно с три чексуми.

Интересно е, че климатика работи и с другия протокол от 26 байта, което пък означава, че някъде из хедера на протокола (или пък в импулсите преди информацията) вероятно се съдържа и версията на протокола. Тази информация обаче е трудно да се каже къде точно се съдържа, тъй като не разполагам с различни дистанционни. Все пак е любопитно, че се поддържат няколко протокола.

Последва малко упражнение по натискане на копчета и записване на dump-ве. В крайна сметка ето какво успях да измъкна от протокола:

00 - 0x11 - константа
01 - 0xDA - константа
02 - 0x27 - константа
03 - 0x00 - константа
04 - 0xC5 - константа
05 - 0x00 - константа
06 - 0x00 - комфорт
07 - 0xD7 - чексума
08 - 0x11 - константа
09 - 0xDA - константа
10 - 0x27 - константа
11 - 0x00 - константа
12 - 0x42 - константа
13 - 0xBB - час LSB
14 - 0x01 - час MSB
15 - 0x10 - чексума
16 - 0x11 - константа
17 - 0xDA - константа
18 - 0x27 - константа
19 - 0x00 - константа
20 - 0x00 - константа
21 - 0x49 - включен, таймери, режим
22 - 0x28 - температура
23 - 0x00 - константа
24 - 0xA0 - вентилатор, клапа нагоре/надолу
25 - 0x00 - константа (клапа ляво/дясно)
26 - 0x00 - време включване LSB
27 - 0x06 - време на изключване LSB, време на включване MSB
28 - 0x60 - време изключване MSB
29 - 0x00 - мощен режим, тих режим
30 - 0x00 - константа
31 - 0xC0 - константа
32 - 0x04 - сензор
33 - 0x00 - константа
34 - 0x4D - чексума

Както се вижда някои от някои байтове се ползват определени битове за определени функции.

Комфорт режима се активира като бит четири на байт шест стане единица.

Дали климатика е включен или изключен зависи от бит нула в байт 21.

Режима пък се съдържа в старшите битове на байт 21:

0 - автоматичен
2 - dry
3 - cool
4 - heat
6 - fan

Температурата се намира в байт 28, като е умножена по две.

Режима на вентилатора е в старшите битове на байт 24, като значението им е следното:

 3 - 1
 4 - 2
 5 - 3
 6 - 4
 7 - 5
10 - auto
11 - night

Управлението на клапата в младшите битове на байт 24. Ако всички са единици клапата се движи нагоре надолу. Ако всички са нули, то клапата е неподвижна.

Тихият режим е в бит пет на байт 29.

Мощния решим е в бит нула на байт 29.

Сензора се активира от бит 1 на байт 32.

Икономичният режим е в бит 2 на байт 32.

Не съм си играл да правя функции за управлението на таймерите, защото не ми трябват при положение, че Pi-то ще мисли и ще управлява климатика.

Все пак ако някой се вълнува, времената са разделени на старши и младши битове в байтове 26, 27 и 28, като се подава броя минути от денонощието - умножавате часа на включване или изключване по 60 и добавяте минутите. Получения резултат записвате съответно в младшите и старшите битове на съответните байтове.

Изпращането само на тези 35 байта обаче не даде резултат. Затова трябваше да добавя водещите шест импулса, за които стана дума по-рано и чат тогава да започне изпращането.

Ето и самият клас за протокола, който говори моя Daikin - http://www.jeckyll.net/images/JeckyllNet/daikin/daikin.php.gz

Не може без картинка, затова ето и как изглежда моето управление през Интернет:



А ако някой иска да "усети" и какво е да поцъка по копчетата:

URL: http://automatico.jeckyll.net
Потребител: test
Парола: test

С тези данни, можете само да разглеждате, но не и да управлявате :)

P.S. Климатика ми се нарича Daikin FTXS35D3VMM, а дистанционното е ACR433B50.



Коментари

Все още няма коментари


напиши нов коментар
Какво е това?

Това трябва да бъде нещо като микро блог или просто начин да записвам разни кратки мисли, идеи, линкове и т.н.

Към всеки пост може да има "закачени" следните елементи:

  Линк към страница
  Прикачена картинка
  Прикачен видео файл
Показва времето на публикуването, заедно с линк към страницата с поста и коментарите
2.4HGz OFF / 5GHz Only ON
bye bye Debian ... apt-get dist-upgrade може да деинсталира ядро :) E ... крайно време беше да го разкарам това недоразумение :)
drWEB Live CD е Gentoo базирано - well done!
Като едно време ... 3.11

Linux notebook 3.11.0-gentoo-dr #1 SMP PREEMPT Tue Sep 3 22:17:44 EEST 2013 i686 Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz GenuineIntel
вчера 3.6.4, днеска 3.6.5 ... така е то ...
не искам глупави thumbail-и от firefox ПЪК! browser.pagethumbnails.capturing_disabled = true
... напоследък дори журналистите имат проблем с разбиране на написаното ...
Мързи ме да напиша около 20 реда код вече ... 10 дни ...
noteX31 ~ # uptime
23:12:42 up 1016 days, 14:39, 2 users, load average: 1.45, 0.64, 0.24
4:30 поздрава за всички, които отърваха Ugly Kid Joe :P
нЕкви хора си правят нЕкъв PR ... и разказват, че станали жертви ...
noteX31 ~ # uptime
10:36:05 up 939 days, 2:03, 4 users, load average: 0.11, 0.66, 0.52
... като не си гледаш разните странни E-Mail-и като например hostmaster@... ти изтича SSL сертификата ...
stretch
stretch
stretch
stretch
interoffice
interoffice
interoffice
interoffice