След като преди време направих
управление на климатика си вкъщи, дойде ред и на климатика в офиса. Той е от световно известната марка Chunlan и информация относно IR протокола аз поне не намерих, но затова по-късно.
Първоначално реших, че може да направя нещо просто - например отново с lirc и да ползвам "сървъра", който е включен в офиса. След това обаче на хоризонта се появи мъника esp8266 ... и разбира се защо пък да не пробвам да ползвам него.
Можете да си намерите всякакви модулчета на цени от около 2-3-5 долара. Вероятно щяха да свършат работа, но тъй като не съм кой знае какъв голям фен на запояването и електрониката като цяло предпочетох да си купя ей това чудо от
Олимекс -
MOD-WIFI-ESP8266-DEV. Общо взето всичко, което може да бъде изведено го имате изведено и остава просто да си закачите каквото и където искате.
За да си управлявате климатика обаче няма нужда от кой знае какво. Стига ви един GPIO пин. Ако обаче искате да закачите още нещо, то с модулите, които се продават като WIFI-COM ще ви трябва доста стабилна ръка за да изведете други пинове.
И така задачата беше ясна. Остана реализацията. Доста хора се ограничават просто до използването на esp8266 като wireless модул за връзка към ... например arduino. Този подход разбира се е доста по-лесен, защото има готови библиотеки за IR например. Това обаче означава, че ще ви трябва arduino или клонинг, още няколко левчета и ... още запояване, платки ... esp8266 обаче може да прави доста неща. Проблемът обаче е, че е добре да прочетете какво точно можете да очаквате, а не да се хвърляте с главата напред например (като мен), защото в описанието на esp8266 пише: PWM.
Схемата на свързване не е по-различна от схемата, която използвам за управлението у нас. В случая използвам само частта за изпращане. Аз използвам пин 22 (GPIO4).
И тук ударих на камък. Оказа се, че esp8266 има PWM. Само, че е софтуерен. И ограничен. На 500Hz. Моето дистанционно на климатика обаче ползва 38 KHz. Простото премахване на ограничението в pwm.c не даде резултат и на пина просто не се появи нищо. Звучи странно при положение, че esp8266 работи на 80 MHz да не можете да изкарате 38 KHz, но явно това би изисквало доста ресурс за да бъде ограничено до само 500Hz.
От друга страна обаче нищо не ви пречи да си цъкате пина нагоре надолу колкото пъти искате. Още повече, че като идея IR управленията позволяват доста голяма грешка. Не забелязах голяма разлика ако спирам или не спирам прекъсванията докато пращам, но за всеки случай в кода ги забранявам. Получи се една не много красива функция, но пък работи.
Самия протокол на климатика е доста прост. В
протокола на Дайкин-а имаше три паузи и чексуми, докато в китайското чудо Chunlan няма нищо подобно. Можете да получите цялата информация много лесно, като ползвате mode2 от lirc. Дистанционното праща общо 9 байта, но интересни са само първите 3. Байт едно съдържа информация за включването и изключването, както и за режима. В байт две се намира температурата. Байт три е за режима на вентилатора и клапата. Останалите байтове са за часовника и таймерите, които така и не успях да настроя от самото дистанционно. Явно не е за моята глава, пък и на кого му трябват?
И така описанието:
0 \ 11 Heat | 00 Cool
1 / 10 Dry
2
3 - 1 On | 0 Off
4
5
6
7
8 | Temp 9
9 |
10 |
11 |
12 |
13 |
14
15
16 \ 00 Fan auto | 01 Fan 2
17 / 11 Fan 1 | 10 Fan 3
18
19 - Vane
20
21
22
23
Необозначените битове са нули.
Към температурата се добавя 9.
Лично аз използвам този шаблон:
000000000000000000000000001001001110000000000000000000000000000000110000
в който установявам съответните битове в 0 или 1, според това което искам.
След като можех да пращам сигналите към климатика и съответно да го управлявам дойде ред и на интерфейса.
Както знаете за esp8266 съществува
esp-httpd. Първоначално не разполагаше с HTTP Authentication, но после се сдоби с Basic. WEB сървъра разполага с поддръжка на CGI така, че няма никакъв проблем да се направи "шарен" и "модерен" интерфейс. Аз ползвам jQuery и jQuery Mobile, но поради ограничените ресурси ги зареждам от
Google Hosted Libraries.
Ето и как изглежда WEB интерфейса:
WEB интерфейса е хубаво нещо, но пък е още по-добре, че можете да направите esp8266 да говори mqtt. У нас ползвам
Мosquitto заедно с
Node-Red. За да е по-весело можете да "закачите" няколко Mosquitto-та и да си пращате съобщения между тях. Затова в офиса се появи още едно Mosquitto и така съобщенията си пътуват напред-назад :)
Има няколко налични библиотеки за mqtt, но аз ползвам ето тази:
https://github.com/tuanpmt/esp_mqtt Текущите настройки в JSON формат се получават по HTTP така:
curl -u user:pass http://ip.address/load.tpl
{"power":"on","mode":"heat","temp":"18","fan":"3","swing":"off","dht_temp":"2000","dht_humid":"3900"}
Можете да промените настройките по HTTP така:
curl -u user:pass http://ip.address/save.cgi?power=on&mode=heat
ОК
Почти същото важи и за mqtt:
Ако изпратите settings на /office/service/ac ще получите на /office/service/ac/settings:
{"power":"on","mode":"heat","temp":"18","fan":"3","swing":"off","dht_temp":"2000","dht_humid":"3900"}
За да промените настройките по mqtt просто изпратете в JSON:
{"power":"on"}
или
{"temp":"22","fan":"3"}
или
...
Както и по HTTP така и по mqtt можете да пращате една или повече настройки.
При промяна на някоя настройка независимо дали по HTTP или по mqtt ще получите на /office/service/ac/settings новите настройки.
Настройките се записват и не се губят при рестартиране на esp8266.
Валидните настройки са:
power: on/off
mode: heat/cool
temp: 15-30
fan: 1/2/3/auto
swing: on/off
След като имате изведени всички пинове на esp8266 спокойно можете да закачите DHT22 и да си отчитате температурата и влажността. Ако не държите толкова на точността, то можете да ползвате и DHT11, което е малко по-орязана версия и доста по-евтина, и аз ползвам именно DHT11. Използвам пин 20 (GPIO2).
Ето и как изглежда цялото "нещо":
Изходния код, който движи желязото е тук:
http://jeckyll.net/images/JeckyllNet/esp8266_ac/automation.tgz
напиши нов коментар