Тема: Irreco
Настройка Irreco или как я обучал мобилку управлять телевизором и тп.
Началось все с покупки n900 Когда я только осваивался с ним я установил половину пакетов с репов и обнаружил программу irreco с помощью которой можно управлять чем попало через ir порт. Черт! это же давняя мечта, ну может не мечта но я всегда думал классно будет с телефона управлять всякой всячиной! Тем более сейчас инфрокрасные приемники пихают куда надо и не надо, кроме теликов и dvd в ноуты, кондиционеры, вентиляторы. С предыдущими нокиями как-то не срослось но тут, это ж n900 на нем можно все, что позволяют железяки.
Можно скачать готовый конфиг прямо из этой программы, но для моего [s]лампового[/s] кубического небольшого телика у них конфига не нашлось, для вентилятора тем более, а др. техники не имеем) , ну и не надо :-P самому даж интереснее.
Можно для этого всего использовать http://www.lirc.org/html/irrecord.html но я о нем узнал слишком поздно
Что понадобится?
Девайс с ик портом, на который можно поставить irreco и lircd (здесь, естественно, n900)
Пульт от теливизора/холодильника или чем вы управлять будите
Комп с любой звуковой картой
Провода; 3,5 штекер, как от наушников.
Какой-нибудь аудио редактор
Терпения понадобится много...
Что будем делать?
Подключим пульт к компу, запишем его команды в звуковой файл, переведем в формат, который съедобен для irreco.
Вперед!
Подключаем пульт к звуковой карте.
Очевидных варианта лишь два:
Проводами
С помощью фотодиода или чего-то подобного
Проводами это значит вскрыть пульт, параллельно ик диоду припаять/примотать провода, другие их концы припаять их к миниджеку.
С помощью фоточегото: припаять фотодиод к миниджеку, а потом "светить" икдиодом пульта в фотодиод.
В обоих случаях миниджек в микрофонный вход звуковой карты.
Никаких навыков не надо абсолютно, справится даже ребенок.
Я сначала сделал первым способом, работало)
Ну а когда нашел подходящий приемник, переделал. Он, кажется, был выдран из мыши.
как это выглядит:
просто работает)
Все элементарно: первый контакт штекера (самый большой) к одной ножке, второй и третий можно спаять вместе и подсоединить ко второй ножке.
Я справился почти без опыта.
В случае с проводами все аналогично: первый контакт штекера к одному контакту диода в пульте, второй и третий ко второму контакту диода.
Запись
Будем считать что у вас все получилось подключить. Теперь нужен звуковой редактор. Главное чтоб умел рисовать так:
Циферки вверху обязательны
Я сижу под убунтой так что [s]у меня нет выбора[/s] использую audacity. Под виндой есть soundforge, впрочем audacity кроссплатформенный можете установить и его.
Процесс записи затруднений не должен вызвать. Только с фотодиодом нужно метко целится пультом прям в него :-)
Я нарисовал примерное расположение кнопок пульта на бумажке и пронумировал их, записал все подряд.
Даже не знаю как назвать aka распознование
Эт очень долгая часть, но никто не заставляет записывать сканкоды всех кнопок пульта, можно обойтись standby, громкостью и каналами(следующий, предыдущий).
Общий вид конфига irreco такой:
# комментарий
begin remote
name samsung
flags RAW_CODES
eps 0
aeps 0
ptrail 0
repeat 0 0
gap 35714
begin raw_codes
name POWER
900 900 1770 900 900 900
900 900 900 900 900 900
900 900 900 900 900 1770
900 900 1770 900 900
name команда
коды коды
коды коды
end raw_codes
end remote
бывают другие в шестнадцатеричном виде, но это головная боль, они генерятся автоматически с помощью irrecord (можете поискать), давно еще пробовал но что то не получилось.
Подробнее про конфиг тут
нас интересуют "коды" ну и название команды.
В примере фигурирует число 900 и 1770, что почти 1800 (900*2). Догадливые уже все поняли.
На самом деле 900 это что то от 890 до 920, но 900 мой теливизор тоже с удовольствием съел. Получается точность не кретична
Эти самые коды записываются в виде
длинна_единичного_сигнала длинна_нулевого_сигнала длинна_1_сигнала длинна_0_сигнала(пауза)
их число должно быть нечетное, т.к. бес толку в конце дописывать нулевой сигнал.
Как определить длину элементарного сигнала?
Для каждого девайса и пульта эта характеристика разная (ну или для каждого производителя).
К счастью как выяснилось на моем опыте жуткая точность не нужна.
Открываю записанный аудиофайл в audacity и добавляю зумма:
Принцип понятен.
Еще зумм к любой одиночной единичке (чтобы определить длительность):
так.
начало где-то на 2.84465 конец примерно на 2.84557
длительность:
2.84557-2.84465=0,00092 сек = 0,92 мс = 920 мкс
выходит в конфиге записывается длительность в микросекундах.
так. теперь переведем единички/нули в длительности.
советую использовать блокнот или что-то вроде того.
если вам до сих пор не понятно как все это устроено, то представляйте, что программа думает когда читает такой конфиг
name POWER
900 900 1770 900 900
ага, команда называется POWER.
шлю сигнал 900мкс, жду 900мкс, шлю 1700мкс, жду 900мкс, шлю 900мкс, все.
Когда ваш конфиг, пусть только с одной командой, готов, кидайте его в /home/user/MyDocs/irreco/InternalLircDevices/
затем нужна указать lirc'y где брать конфиг (irreco - лишь интерфейс для lirc, а сам lirc есть и под nix и под винду(WinLirc)), для этого в файл
/etc/lircd.conf добавьте строчку
include "/home/user/MyDocs/irreco/InternalLircDevices/smsng"
где smsng - имя конфига.
после этого в irreco > edit remote > add new button должны появится эти команды
Если все сделано, но телевизор не реагирует, то можно записать сигнал n900 и пульта и сравнить их в аудио редакторе , чтобы понять увеличить длительность или же уменьшить. Так же для повышения точности можно измерить длительность, например десять сигналов, и поделить ее на 10.
У лирка есть консольный интерфейс, так что можно творить и творить c desktop-cmd-exec-widget пока не кончится место на раб столах
[s]но я и так тут нахреначил огого, так что в другой раз. и да, мне нечем заняться.[/s]
на самом деле все было проделано ради интереса, пользуюсь редко. но метров с пять телевизором можно управлять, вентилятором, почемуто немного дальше.
мое:
прилепил мой файл. телик самсунг на кинескопе ск-14с8хр
Подробно про конфиг (теперь в hex на примере вентилятора)
Чтобы разобраться с hex скачал конфиг от какого-то пульта (наугад).
begin remote
name JvcDishPlayer500
bits 13
flags SPACE_ENC|NO_HEAD_REP
eps 30
aeps 100
header 750 6000
one 624 2600
zero 624 1500
ptrail 624
gap 6000
toggle_bit 0
begin codes
power 0x0000000000001EFC
recent 0x00000000000016FC
tvWeb 0x0000000000001A7C
scrollUp 0x000000000000137C
и тд.
end codes
end remote
По порядку.
name - имя
bits - количество бит
flags - флаги их много про них по ссылке дальше.
eps - относительная терпимость к ошибки для принятого сигнала в процентах (конфиг один для приемника и передатчика, нам не надо)
aeps - абсолютная терпимость к ошибке в микросекундах
header - прибавляется к каждому сигналу в начале записывается в виде <единичный_сигнал> <пауза>
one - единичный сигнал тоже в виде <единичный_сигнал> <пауза>
zero - нулевой сигнал тоже в виде ...
ptrail - чтобы не соврать говорю честно это я не допонял
gap - пауза после всего сигнала
toggle_bit - тоже не знаю
подробнее все там же
Для начала удаляем все левое.
begin remote
name myRemote
bits 40 #с запасом xD
eps 30 #оставлю, вдруг потом придется скормить конфиг лирку приемнику.
aeps 100
one 624 2600
zero 624 1500
gap 6000
toggle_bit 0
begin codes
power 0x0000000000001EFC
end codes
end remote
Теперь надо определиться какой сигнал обозначить нулем, а какой единичкой. Подразумевается что вы определили длительность элементарного сигнала.
Это не всегда возможно, скорей всего есть еще какаято хитрость, которую я не понимаю.
вот сигнал пульта от телика:
я не придумал, что тут как обозначить. пробовал так: элементарный ноль - ноль, элементарная единица - единица (one 900; zero 0 900) но lirc'y не понравилось.
С вентилятором повезло:
длинна одного сигнала здесь 440
быстро делим сигнал на единички и нули:
mad gimp skillz)
получается, что:
one 1320 440
zero 440 1320
а сам код в двоичном виде:
110110000001
открываем калькулятор, включаем режим с разними системами счисления или программиста(в винде кажется так называлось)
как-то так:
жмем hex и получается D81
получившийся конфиг:
begin remote
name 100331-AA
bits 30
eps 30
aeps 100
one 1320 440
zero 440 1320
gap 6000
begin codes
power 0x000000000D81
end codes
end remote
Оказалось с hex-представлением сигнала даже проще, только надо было разобраться
про управление лирком из терминала в комментариях.
вопросы, пожелания, исправления в комментарии.