Tell us about yourself!

Complete Your Profile
  • Reverse Engineering Air Conditioner IR Remote Control Protocol

    @ScottV44,I posted some python code to decode input from the mode2 command. Dont know if this helps. I had problems with the new irrecord command, but I would think on/off would be pretty easy to figure out....

    correction. my code was backwards. the second part of the code should have been:01000000000001000000011100100000000000001001000001010100000000010100010100110000000000000111000000000111000000000000000010000001000000000000000001101011Hex: 4004072000905401453000700700008100006BBig string. I'd say you have your hands full!

    @SamP182,I havent tried temperatures yet. But I can tell you my remote only allows 'sleep' settings in increments of 1 hour.After decoding, though, I found it sends "60 minutes" instead of 1 hour. So I tried sending smaller values (5, 10, 30, 45 minutes) and it worked fine.I suspect tho that there is a limit on what it will accept for temps.

    @psylo24I have been gone for some time, but came back because I got a new air conditionerYou are probably long since gone, but on the off chance that you are getting email alerts, or that it helps someone else....I did a quick check of your results, and all 3 samples were actually the same.Remember, the numbers from lirc are (I think) the milliseconds of off and on time. A bit is a 1 if the off and on are the same, a 0 if they are not.Looking at each of your results, they start with roughly a 3500 and a 1700. These are the 'sync bits' and you can toss them out. You will also notice that the sequence is repeated part way through each sample, indicating the end of one command, and the beginning of another.Your 'baseline' is about 500. looking at the first few lines, you have the sync ...

    see more »

    @psylo24I have been gone for some time, but came back because I got a new air conditionerYou are probably long since gone, but on the off chance that you are getting email alerts, or that it helps someone else....I did a quick check of your results, and all 3 samples were actually the same.Remember, the numbers from lirc are (I think) the milliseconds of off and on time. A bit is a 1 if the off and on are the same, a 0 if they are not.Looking at each of your results, they start with roughly a 3500 and a 1700. These are the 'sync bits' and you can toss them out. You will also notice that the sequence is repeated part way through each sample, indicating the end of one command, and the beginning of another.Your 'baseline' is about 500. looking at the first few lines, you have the sync times of 3500 and 1650. Easy to spot, because the second is half of the first. The next two numbers are 500 and 400, roughly equal, so a '0'. Next two numbers are 500 and 1200, definitely different, so a '1'. It probably wont show up well here, but for the first part of your sequence, for all 3 samples, I get:0100000000000100000001110010000000000000000000000000000001Then about a third of the way through, you come to a:450 450 450 400 450 99503450 1700 450 450 450 1250That 9950, 3450 and 1700 are sync bits again. I toss them out and start decoding the rest of the message. For all three samples, I get:10111111111110111111100011011111111111110110111110101011111111101011101011001111111111111000111111111000111111111111111101111110111111111111111110010100You may have a remote that is sending multiple codes, or whatever, but if you want a starting point, I think you have consistent results.I wrote a python program to read my codes in hex, since the irrecord lirc command seems to have lost the '-m' option that I used to use....Nothing more than:#!/usr/bin/python2import subprocess, timewhile True: ct=0 code="" raw_input("press key to start") p = subprocess.Popen('timeout 5 mode2 -H default -d /dev/lirc0', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): ct=ct+1 if (ct>7): x=line.split() if (x[0]=="pulse"): val=int(x[1]) else: if (abs(int(x[1])-val)>300): code=code+"1" else: code=code+"0" retval = p.wait() print str(temp) + " " + hex(int(code,2))you'll have to fix the indents.....

    View Instructable »