The example can easily be adapted to other air conditioner manufacturers by decoding their IR protocol.
I had a NaNode laying around, so the hardware part was pretty much figured out. Just needed an 940nm IR diode, couple resistors, a transistor and I was all set.
Next, I had to decode the IR protocol of Daikin air condifioners. That was quite a challenge as it turned out. To do this I needed to capture the IR signal and reverse-engineer it. Since I have no oscilloscope, I used my sound card as described in this article. I used audacity and spent few days poking by eyes analyzing the waveform. There are few articles on the Internet that helped me also, but none was about the IR protocol for my specific Daikin model. As it seems, there are at least three protocols used by that manufacturer.
The IR frame is split in two parts 3000us apart. Quite strange approach, I think it it done to confuse universal IR learning devices. In fact I also tried to learn the codes using a SilverCrest universal remote, but it fails due to the gap between transmissions.
So after I had the IR protocol figured out, I had to put up the software. I used Ken Shirriff’s IR library and modified it so that it takes Daikin’s protocol.
* IPv4 only supported; IP, Gateway and DNS configurable via the web UI.
* The module responds to ICMP (ping)requests
* Option to reset to default values via a button press during start up (use in case you forget the network settings)
* HTTP server
* Web UI, optimized for use via mobile phone by using JQuery;
* HTTP listen port is configurable
* Basic HTTP authenticatication can be enabled for password protection of the web UI. Useful to prevent unauthorized access to the module
* Manual remote control
* Set On/Off state
* Set temperature
* Set mode (heat, cool, dry, auto)
* Set aux functions (Powerful, Silent, Normal operation)
* Set fan (1 bar, 3 bars,5 bars, night mode, auto)
* Schedule timers – 10 user configurable timers via the UI; This is something quite useful because my Daikin doesn’t have scheduler built in.
* Day(s) to activate Monday-Friday, Weekends,Every day, individual day of week
* Minute (in 15 min intervals)
* Time synchronization via NTP (Network Time Protocol; Time is needed if using the schedule. I use NTP because I don’t have a * RTC on the NaNode plus seems less hassle to maintain.
* NTP server configurable (as IP or site)
* Timezone takes positive and negative values
* Support for DynDNS dynamic DNS service. This is a bit of feature creep, but wanted to give it a try. So I have a fully functional DynDNS client now
* The module can be controlled with HTTP GET requests. In combination with JSON feedback, you can use the module from your own web scripts
You may browse my code at github. It is quite dirty because I had quite some hard time to deal with the limited RAM after the TCP buffer ate 1100 bytes out of it..