Управление техникой по ИК каналу

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Управление техникой по ИК каналу

Сообщение vtec » 27 авг 2015, 09:43

А куда вы выводите кабель? В потолке маленькая дырочка или вообще как? Если например нужно управлять телевизором?

kod.begemot
Сообщения: 400
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 27 авг 2015, 16:50

Я вывожу по-разному, просто чтобы было направление на управляемый объект. Под телевизором у меня стойка с аппаратурой, туда витые и заведены, ИК-диод прилеплю рядом с приемником телевизора, пустив провод по задней стенке ТВ - можно сделать совершенно незаметно.

alexsis_76

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 01 сен 2015, 17:26

kod.begemot а вы делаете передатчик или приемник
это я к тому что у меня принимается какая то ересь при нажатии на кнопку приемник фиксирует два принятых слова второе видимо есть код нажатой кнопки,оно меняется при нажатии разных кнопок, а первое постоянное, причем первое меняется на каждом пульте, иногда приходит а иногда и нет, при включении устройства даже если не было нажатия на пульте в буфере приема находится принятая посылка(одна)причем значение у нее одно и то же :( может быть это из за того что я 5 в приемник питаю от 3в и это ошибки ,но тогда почему коды клавиш приходят без ошибок
кстати пульты оказывается все разные ,те что постарее шлют только код нажатой клавиши(один ), те что поновее шлют несколько кодов (те что у меня один 3 второй 4) некоторые посылают код при отпускании кнопки , некоторые при нажатии
и еще ,как то странно ведет себя приемник , если пошевелить им из стороны в сторону начинают приниматься случайные посылки(или это нормально)

Fox
Сообщения: 153
Зарегистрирован: 05 авг 2014, 11:01

Re: Управление техникой по ИК каналу

Сообщение Fox » 02 сен 2015, 22:17

vtec писал(а):А куда вы выводите кабель? В потолке маленькая дырочка или вообще как? Если например нужно управлять телевизором?
Вариантов много можно придумать :). Например, у меня управление кондиционером выполнено так:
Вложения
cond 008_1.jpg
cond 008_1.jpg (297.6 КБ) 6625 просмотров

kod.begemot
Сообщения: 400
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 04 сен 2015, 12:19

alexsis_76 писал(а):kod.begemot а вы делаете передатчик или приемник
Приемник мне нужен только для получения кодов, которые потом буду отправлять.

alexsis_76

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 04 сен 2015, 14:49

а скажите на сколько у вас различаются коды соседних клавиш например 1 и 2 или 6 и 9 я вроде сделал , работает стабильно,все принимает как надо только вот почему то коды какие то странные , одна клавиша 1263 вторая 336,причем эти коды приходят стабильно, при длинном нажатии постоянно посылается код клавиши, в принципе если плюнуть на значение этих кодов то можно чем нибудь управлять, по крайней мере входы выходы переключает

dnk
Сообщения: 7
Зарегистрирован: 29 сен 2013, 20:06

Re: Управление техникой по ИК каналу

Сообщение dnk » 22 окт 2015, 21:56

Подскажите пожалуйста.
Накопал на али такие передатчики:
http://russian.alibaba.com/product-gs/w ... 49448.html
http://russian.alibaba.com/product-gs/n ... 86917.html
http://russian.alibaba.com/product-gs/n ... 14367.html
Но не могу понять как к ним привязаться по управлению, отправляя команды с сервера. Понятно что с своих программ на телефонах и прочих они управляются. Вообщем надо их API или порекомендуйте похожие. Что нравится, красивое решение, всенаправленность и, у некоторых работа, через вайфай.
Вдруг кто то уже пощупал их или похожие, поделитесь пожалуйста опытом. У меня ядро wiren board и две меги, хочу по ик порулить техникой.

5kull
Сообщения: 55
Зарегистрирован: 19 июл 2015, 17:35

Re: Управление техникой по ИК каналу

Сообщение 5kull » 25 янв 2016, 17:32

dnk писал(а):Подскажите пожалуйста.
Накопал на али такие передатчики:
http://russian.alibaba.com/product-gs/w ... 49448.html
http://russian.alibaba.com/product-gs/n ... 86917.html
http://russian.alibaba.com/product-gs/n ... 14367.html
Но не могу понять как к ним привязаться по управлению, отправляя команды с сервера. Понятно что с своих программ на телефонах и прочих они управляются. Вообщем надо их API или порекомендуйте похожие. Что нравится, красивое решение, всенаправленность и, у некоторых работа, через вайфай.
Вдруг кто то уже пощупал их или похожие, поделитесь пожалуйста опытом. У меня ядро wiren board и две меги, хочу по ик порулить техникой.
Тут есть API и доп. информация: http://rm-bridge.fun2code.de/
Сообщите если что получиться.

dnk
Сообщения: 7
Зарегистрирован: 29 сен 2013, 20:06

Re: Управление техникой по ИК каналу

Сообщение dnk » 22 сен 2016, 16:17

Сообщаю. Поздно, согласен, но лучше поздно, чем никогда. К сожалению, как обычно, никогда нет времени, постоянно занят. :)
Купил Broadlink RM Pro, вначале был в ужасе от принципа построить автоматизацию на нем. Управлялся только из своего приложения и в приложении можно настраивать сценарии, скрипты. Спасало то, что и по 433 Мгц он тоже может управлять сторонними приложениями, т.е. худо бедно, но управлять и настраивать сценарии можно. Даже неплохие, например, появился в квартире определенный объект (поймал WiFi сигнал телефон объекта) и запустились определенные сценарии, покинул объект - другие сценарии. Вообщем наигрался. Ясно, что параллельная система мне не интересна, надо делать связку с основной, а основная работает через mqtt, оттуда все читают и пишут состояния, в том числе скрипты автоматики. Но, оказалось протокол RM pro закрыт и никакого API нет, за исключением бриджей (ссылка в посте выше), запускаемых под Андроид. Принцип прост, делается обучение определенной кнопки с пульта и ей присваивается любая команда. Далее на бридж через http посылаем текстовую команду, а он в свою очередь дергает RM Pro, а RM Pro посылает ИК-сигнал и, допустим, кондиционер реагирует. Т.е. можно уже использовать в своих скриптах на основной системе.

Работает? Вроде да. Но получается, что задействуется лишнее устройство на Android, что никак не вносит успокоения и уверенности в стабильности и правильности схемы. Короче - это костыль. Продолжил и нашел решение на форуме посвященному Broadlink.
Суть такова, прослушивается трафик между мобильным приложением и устройством на определенное действие, например, включение кондиционера, и, путем анализа пакетов, извлекается требуемая посылка и записывается в файл данных, которые именуем Cond-on.dat. На форуме даже опубликована консольная утилита (Windows), позволяющая посылать пакет данных RM Pro для управления, и её тоже можно использовать в сценариях, ура!, Android исключен из цепочки. И да, это работает. Там же опубликовали скрипт на PHP который делает тоже самое, т.е. уже кроссплатформенное решение.

Таким образом, я думаю, что задача решена. Не так как хотелось в итоге и не в том объеме, но устраивает.
Список использованной литературы:
http://broadlink.ru/topic/93/upravlenie ... ge/page/5/ - Тема посвященная работе бриджа на андроид (костыль), но в конце уже найдено конструктивное решение.

P.S. Сейчас реализую работу через Apple HomeKit (через эмулятор), надеюсь получится, если помогут чуть чуть. А это работа через Siri (голосовые команды) и прочие фишки и сценарии iOS, а их там множество и выглядит очень презентабельно. Основная система у меня построена на Wirenboard и часть на MegaD, но через эмулятор можно использовать любую систему, если интересно и не читали про это, напишу в отдельной теме.

xsash
Сообщения: 239
Зарегистрирован: 08 авг 2016, 12:27

Re: Управление техникой по ИК каналу

Сообщение xsash » 22 сен 2016, 22:37

Интересно, пишите

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Управление техникой по ИК каналу

Сообщение empenoso » 29 июн 2018, 08:17

А в базе LIRC http://lirc-remotes.sourceforge.net/remotes-table.html нет информации об кондиционерах "LESSAR" (серия COOL+) выбрал его (в первую очередь из-за цены). Методом проб и ошибок можно будет отправлять команды по инструкции https://ab-log.ru/smart-house/ethernet/megad-2561-ir ?

Bonefolder
Сообщения: 617
Зарегистрирован: 30 мар 2017, 11:15
Откуда: г.Севастополь

Re: Управление техникой по ИК каналу

Сообщение Bonefolder » 30 июн 2018, 12:09

Empenoso, методом проб и ошибок - вряд ли. Проблему передачи ИК команд климатической технике с наскоку не решить. Там в одной команде передаётся пакет параметров. Я немного «покурил» интернет на данную тему. В глубокой теории, вы сможете передать команду Он/Офф для кондея, с «неизвестными» сопутствующими параметрами, по методу описанному Андреем. В моем случае, с кондиционерам ЛЖ, такой номер не прошёл(
вот, что мне удалось нарыть. Правда, на английском. Но здесь объясняется метод передачи пакета. Не совсем улыбается «пристраивать» RM mini в стену. А так же, посылать команды через костыль в виде питоновского скрипта. Возможно, уважаемый Андрей поможет решить данную проблему. Чтобы «раскопанные» команды посылались непосредственно через Мегу, и разработанный им ИК передатчик. Со своей стороны могу помочь покупкой программы реверс инжиниринга ИК команд.
P.S. Андрей, наверное, будет правильнее перенести мои посты, касательно данной темы, из соседнего топика. Просто, не нашёл данную тему изначально(

Bonefolder
Сообщения: 617
Зарегистрирован: 30 мар 2017, 11:15
Откуда: г.Севастополь

Re: Управление техникой по ИК каналу

Сообщение Bonefolder » 30 авг 2018, 13:11

Управлять техникой по ИК каналу мы научились при помощи статьи Андрея и сайта LIRC. Как теперь это превратить в удобоваримый интерфейс? Как мы знаем, ОpenНab нативно не поддерживает мнемонических схем для отрисовки пульта в BasicUI. Чтение иностранных статей и гугль помогают решить эту проблему.
И так, приступим. Создаем Item

Код: Выделить всё

Number	TV_Remote	"IR"
Sitemap (здесь самое интересное. Как наш пульт будет выглядеть на экране нашего телефона)

Код: Выделить всё

Text label="Samsung" icon="television" {
		Switch item=TV_Remote mappings=[7=" On/Off ", 8=" Source "]
		Switch item=TV_Remote mappings=[1=" ◄ ", 2=" ▲ ", 3=" ▼ ", 4=" ► "]
		Switch item=TV_Remote mappings=[5="✅", 6="❌"]
	}
Не удивляйтесь, что видите символы. Да, их можно использовать. И они будут корректно отображаться на экране. К сожалению, у меня отобразились не все символы юникода. А только взятые здесь
Ну, и самое главное, чтобы наш "пульт" работал необходимо создать правило Rules где и применим наши сборки ИК команд:

Код: Выделить всё

rule "remote control"
when
	Item TV_Remote received command
then
	switch (receivedCommand){
		case 1 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E0A659&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 2 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E006F9&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 3 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E08679&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 4 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E046B9&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 5 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E016E9&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 6 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E0B44B&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 7 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E040BF&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
		case 8 : sendHttpGetRequest("http://192.168.1.14/sec/?pt=12&ir=E0E0807F&irp0=4589&irp1=4511&irp2=591&irp3=1664&irp4=536&irp5=2")
	}
	postUpdate( TV_Remote, 0 ) //  выключаем "залипание" кнопки))
end
В результате проделанной работы получаем нечто подобное (Последние 3 строки, с подписью IR):
Samsung_Remote.png
Samsung_Remote.png (71.87 КБ) 2550 просмотров
В моем случае, первые 4 "кнопки" относятся к Samsung TV Binding. Но из-за древности ТВ, пробуждение телевизора из режима сна по HTTP не срабатывало.
P.S. чтобы это работало необходимо иметь установленный HTTP Binding

Bonefolder
Сообщения: 617
Зарегистрирован: 30 мар 2017, 11:15
Откуда: г.Севастополь

Re: Управление техникой по ИК каналу

Сообщение Bonefolder » 03 сен 2018, 17:07

В продолжение темы, выкладываю свое решение по управлению БК марки LG (LSNH096F1LO и ASNH09GB1U2). Посредством пультов LG 6711A900312 & AKB73315608. Возможно, кому-то и пригодится.
В написании данного решения мне очень помогли советы Igor78, статья Andrey_B (+IR receiver), данная статья Guido Ottaviani. За что им огромное спасибо.
В ходе считывания пультов выяснилось, что за 7 лет (разница между покупками кондиционеров) фирма LG не поменяла свой алгоритм пультов. И там и там - 28 битный идентичный код. Пульт от новых кондишек прекрасно управляет старым кондиционером. Поэтому я считывал коды с нового пульта. А в ходе написания кода для ОН тестировал на старом кондее. И тот и другой отрабатывают нормально
Ввиду собственной лени (считывать и записывать коды, а потом все это скармливать ОН) и отсутствием нужды всех режимов количество комманд было ограничено собственными нуждами и опытом использования кондиционера, за долгие годы.
Единственная разница, что и Igor78 и Guido Ottaviani разобрали коды по-битово и потом их собирали. Моих знаний настолько не хватло. Пришлось немного раздуть правило. Второе отступление - мне (вернее, членам моей семьи) не понравилось решение со "сбором" комманды, с последующей оправкой по нажатию на кнопку "send command"
И так, что умеет мой "пульт". Изменять режимы работы кондиционера: Охлаждение (18-24грд), Обогрев (24-30грд), Осушение (24грд), Вентиляция и Авто (22грд). Изменять температуру, в указанных пределах для режимов охлаждения и обогрева. Изменять скорость работы вентилятора на определенных температурах Охлаждение - 24грд, Обогрев - 24грд, Осушение 24грд, Вентиляция. При переключении режимов, ОН устанавливает режимы: Охлаждение (18грд, макс. обороты вентилятора), Обогрев (30грд, макс. обороты вентилятора), Осушение (24грд, ср. обороты вентилятора), Вентиляция (24грд, бриз) и Авто (22грд, макс. обороты вентилятора). А так же, включать функцию JET & A/Clean. Управление закрылками я не делал. Так как на старом кондее их (практически) нет. Более того, как я понимаю, дистанционное включение необходимо, чтобы к возвращению хозяина домой быстро привести помещение к комфортной температуре (охладить/подогреть). Более тонкие настройки можно произвести с пульта кондея.
Items:

Код: Выделить всё

/* Condey Кухня */
Switch	AC_1_Power	"On/Off"		(AC)
Switch	AC_1_Jet	"JET"			(AC)
Number	AC_1_Mode	"Режим"			(AC)
Number	AC_1_Temp	"Temp [%s]"		(AC)
Number	AC_1_Fan	"Скор.Вент"		(AC)
Switch	AC_1_AClean	"Auto Clean"	(AC)
String	AC_1_String "Реж.АС [%s]"	(AC)
String	AC_1_St 	"[%s]" 
Sitemaps:

Код: Выделить всё

Switch item=AC_1_Power icon="ac" label="Кондиционер"
Text item=AC_1_String icon="settings" label="Настройки Конд. [MAP(Condey.map):%s]" valuecolor=[AC_1_Temp>=25="orange", AC_1_Temp==24="green", 0="white", AC_1_Temp<24="blue"] {
Selection item=AC_1_Mode icon="input" mappings=[0="Охлаждение", 1="Осушение", 2="Вентиляция", 3="Авто", 4="Обогрев"] 
Setpoint item=AC_1_Temp minValue=18 maxValue=30 step=1 icon="temperature"
Selection item=AC_1_Fan icon="flow" mappings=[0="Low", 1="Med", 2="Max", 3="Flow"]
Switch item=AC_1_Jet
Switch item=AC_1_AClean
} 
Condey.map

Код: Выделить всё

0_18=18 \❄️
0_19=19 \❄️
0_20=20 \❄️
0_21=21 \❄️
0_22=22 \❄️
0_23=23 \❄️
0_24=24 \❄️
4_24=24 \🌞
4_25=25 \🌞
4_26=26 \🌞
4_27=27 \🌞
4_28=28 \🌞
4_29=29 \🌞
4_30=30 \🌞
1_24=24 \💧
2_24=24 \🌀
3_22=22 \🌼
N/A= \⛄
NULL = \⛄ 
Нуб и конечно же правила. Куда ж без них Rules:

Код: Выделить всё

var ac_mode = 0
var ac_temp = 18
var ac_fan = 2
var ac_state = "0-18-2"
var Timer set_timer = null

// Condey mode:			0="Охлаждение", 1="Осушение", 2="Вентиляция", 3="Авто", 4="Обогрев"
// Condey Fan Speed:	0="Low", 1="Med", 2="Max", 3="Flow"

rule "Condey_1 On/Off" // Кондей на кухне
when
	Item AC_1_Power changed
then
	switch (AC_1_Power.state) {
		case ON: sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8800347&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
		case OFF: sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=88C0051&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
	}
end

rule "Condey_1 JET"  // Кондей на кухне, команда JET
when
	Item AC_1_Jet changed
then
	switch (AC_1_Jet.state) {
		case ON: {
			sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8810089&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
			postUpdate(AC_1_Mode, 0) 
			postUpdate(AC_1_Temp, 18)
			postUpdate(AC_1_Fan, 2)
			set_timer = createTimer(now.plusSeconds(3600))
            		[
                		AC_1_Jet.postUpdate(OFF) // Выключает кнопку JET. Кондишка сама переключиться в режим 18грд охлаждения
                		set_timer = null
            		]
		}
		case OFF: sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880834F&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
	}
end

rule "Condey_1 Auto Clean" // Кондей на кухне, команда AutoClean
when
	Item AC_1_AClean changed
then
	switch (AC_1_AClean.state) {
		case ON: sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=88C00B7&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
		case OFF: sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=88C00C8&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
	}
end

rule "Condey_1 Mode Select"  // Кондей на кухне, Выбор режима
when
	Item AC_1_Mode received command
then
	switch (receivedCommand) {
		case 0: {
			sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880834F&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
			postUpdate(AC_1_Mode, 0) 
			postUpdate(AC_1_Temp, 18)
			postUpdate(AC_1_Fan, 2)
		}
		case 1: {
			sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8809924&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
			postUpdate(AC_1_Mode, 1) 
			postUpdate(AC_1_Temp, 24)
			postUpdate(AC_1_Fan, 1)
		}
		case 2: {
			sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880A352&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
			postUpdate(AC_1_Mode, 2) 
			postUpdate(AC_1_Temp, 24)
			postUpdate(AC_1_Fan, 3)
		}
		case 3: {
			sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880B746&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
			postUpdate(AC_1_Mode, 3) 
			postUpdate(AC_1_Temp, 22)
			postUpdate(AC_1_Fan, 2)
		}
		case 4: {
			sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CF4F&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
			postUpdate(AC_1_Mode, 4) 
			postUpdate(AC_1_Temp, 30)
			postUpdate(AC_1_Fan, 2)
		}
	}
end

rule "AC State" // Кондей на кухне, Состояние ("конструктор" состояния команды для посылки)
when
	Item AC_1_Mode changed or
	Item AC_1_Temp changed or
	Item AC_1_Fan changed
then
	ac_mode=AC_1_Mode.state 
    	ac_fan=AC_1_Fan.state
    	ac_temp=AC_1_Temp.state
	AC_1_String.postUpdate(ac_mode+"_"+ac_temp)
	ac_state=(ac_mode+"-"+ac_temp+"-"+ac_fan)
	AC_1_St.postUpdate(ac_state)
end

rule "Condey_1 Temp Change" // Кондей на кухне, Изменение Температуры и Скорости вентилятора
when
	Item AC_1_Temp received command or
	Item AC_1_Fan received command
then
   	if (ac_state.equals("0-18-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880834F&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    } // Охл - 18 гр - Макс. обороты
   	if (ac_state.equals("0-19-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808440&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    } // Охл - 19 гр - Макс. обороты
  	if (ac_state.equals("0-20-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808541&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    } // Охл - 20 гр - Макс. обороты
    if (ac_state.equals("0-21-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808642&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    } // Охл - 21 гр - Макс. обороты
    if (ac_state.equals("0-22-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808743&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    } // Охл - 22 гр - Макс. обороты
     if (ac_state.equals("0-23-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808844&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    }  // Охл - 23 гр - Макс. обороты
    if (ac_state.equals("0-24-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808945&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    }  // Охл - 24 гр - Макс. обороты
    if (ac_state.equals("0-24-3")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808956&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")	
    }  // Охл - 24 гр - Бриз
    if (ac_state.equals("0-24-0")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808901&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Охл - 24 гр - Мин. обороты
    if (ac_state.equals("0-24-1")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=8808923&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Охл - 24 гр - Сред. обороты
    if (ac_state.equals("4-24-3")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880C95A&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 24 гр - Бриз
    if (ac_state.equals("4-24-0")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880C905&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 24 гр - Мин. обороты
    if (ac_state.equals("4-24-1")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880C927&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 24 гр - Сред. обороты
    if (ac_state.equals("4-24-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880C949&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 24 гр - Макс. обороты
    if (ac_state.equals("4-25-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CA4A&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 25 гр - Макс. обороты
    if (ac_state.equals("4-26-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CB4B&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 26 гр - Макс. обороты
    if (ac_state.equals("4-27-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CC4C&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 27 гр - Макс. обороты
    if (ac_state.equals("4-28-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CD4D&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 28 гр - Макс. обороты
    if (ac_state.equals("4-29-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CE4E&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 29 гр - Макс. обороты
    if (ac_state.equals("4-30-2")) {
    	sendHttpGetRequest("http://192.168.0.14/sec/?pt=12&ir=880CF4F&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Обогрев - 30 гр - Макс. обороты
    if (ac_state.equals("2-24-0")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=880A30D&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Вентиляция - 24 грд - Мин. обороты
    if (ac_state.equals("2-24-1")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=880A32F&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Вентиляция - 24 грд - Сред. обороты
    if (ac_state.equals("2-24-2")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=880A341&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Вентиляция - 24 грд - Макс. обороты
    if (ac_state.equals("2-24-3")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=880A352&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }   // Вентиляция - 24 грд - Бриз
    if (ac_state.equals("1-24-0")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=8809902&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Осушение - 24 грд - Мин. обороты
     if (ac_state.equals("1-24-1")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=8809924&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Осушение - 24 грд - Сред. обороты
    if (ac_state.equals("1-24-2")) {
    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=8809946&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
    }  // Осушение - 24 грд - Макс. обороты
//	else {
//    	sendHttpGetRequest("http://192.168.1.114/sec/?pt=12&ir=880B746&irp0=8900&irp1=4150&irp2=530&irp3=1550&irp4=510&irp5=3")
//  	postUpdate(AC_1_Mode, 3) 
//		postUpdate(AC_1_Temp, 22)
//		postUpdate(AC_1_Fan, 2)
//    }
 end 
К сожалению, я не силен в написании правил. Можно было бы использовать ArrayList, но я этого не осилил. Так же, у меня вышел затык с окончанием кода else. В случае несуществующего конструктива кода переводить кондиционер в режим Auto. Если кто подскажет решение, буду благодарен
Добавлю пару скриншотов. Как это все выглядит в приложении ОН на телефоне.
IMG_3560.jpg
IMG_3560.jpg (27.34 КБ) 2521 просмотр
IMG_3564.jpg
IMG_3564.jpg (62.6 КБ) 2521 просмотр
IMG_3562.jpg
IMG_3562.jpg (38.7 КБ) 2521 просмотр
IMG_3563.jpg
IMG_3563.jpg (27.58 КБ) 2521 просмотр

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Управление техникой по ИК каналу

Сообщение empenoso » 02 май 2019, 14:40

А где можно почитать инструкции по lirc ?
https://ab-log.ru/smart-house/ethernet/megad-2561-ir - здесь краткая версия, но для любителей не подходит :)

Код: Выделить всё

pi@raspberrypi:~ $ mode2 --driver default -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
pulse 8950
space 4500
pulse 550
space 550
pulse 600
space 550
pulse 600
space 1650
pulse 600
space 550
pulse 600
space 500
pulse 600
space 550
pulse 600
space 500
pulse 600
space 550
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 550
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 1700
pulse 600
space 500
pulse 600
space 550
pulse 600
space 500
pulse 600
space 1650
pulse 600
space 550
pulse 600
space 550
pulse 600
space 500
pulse 600
space 550
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 550
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 1650
pulse 600
space 40400
pulse 8800
space 2200
pulse 600
space 96800
pulse 8800
space 2250
pulse 600
space 16777215
^Z
[1]+  Stopped                 mode2 --driver default -d /dev/lirc0
pi@raspberrypi:~ $ mode2 -d /dev/lirc0
Using driver devinput on device /dev/lirc0
Cannot initiate device /dev/lirc0
pi@raspberrypi:~ $ sudo /etc/init.d/lirc stop
sudo: /etc/init.d/lirc: command not found
pi@raspberrypi:~ $ mode2 --driver default -d /dev/lirc0
Using driver default on device /dev/lirc0
Cannot initiate device /dev/lirc0
Не очень понятно как рестартануть lirc на Raspbian Stretch Lite - после остановки выполнения mode2 --driver default -d /dev/lirc0 помогает только перезагрузка - если повторно хочу считывать.

Ну и конечно же как использовать скрипт https://ab-log.ru/files/File/ir-decode.zip ? хотелось бы инструкцию что на входе и какие команды.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Управление техникой по ИК каналу

Сообщение Andrey_B » 02 май 2019, 14:55

Код: Выделить всё

space 16777215
^Z
[1]+  Stopped                 mode2 --driver default -d /dev/lirc0
По команде ^Z в Linux программа не завершается. Выполнение приостанавливается, а программа остается в памяти компьютера, продолжая блокировать устройство /dev/lirc0.
Если вы наберете команду fg (foreground) программа продолжит выполнение. Если bg (background) уйдет в фоновое выполнение.
Завершать, отменять выполнение программы в Linux нужно по команде ^C.

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Управление техникой по ИК каналу

Сообщение empenoso » 05 май 2019, 17:48

Andrey_B писал(а):
02 май 2019, 14:55

Код: Выделить всё

space 16777215
^Z
[1]+  Stopped                 mode2 --driver default -d /dev/lirc0
По команде ^Z в Linux программа не завершается. Выполнение приостанавливается, а программа остается в памяти компьютера, продолжая блокировать устройство /dev/lirc0.
Если вы наберете команду fg (foreground) программа продолжит выполнение. Если bg (background) уйдет в фоновое выполнение.
Завершать, отменять выполнение программы в Linux нужно по команде ^C.
Спасибо за вашу подсказку, но еще глупые вопросы - считываю команды с пультов:

Код: Выделить всё

pi@raspberrypi:~ $ mode2 --driver default -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
pulse 4050
space 3950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1900
pulse 600
space 8300
pulse 4000
space 3950
pulse 600
space 1900
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 8300
pulse 4050
space 3950
pulse 500
space 2000
pulse 550
space 1950
pulse 550
space 1900
pulse 600
space 1900
pulse 550
space 950
pulse 600
space 900
pulse 600
space 1900
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 600
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 1900
pulse 550
space 950
pulse 600
space 1900
pulse 550
space 950
pulse 600
space 1900
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 8350
pulse 4000
space 3950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 500
space 1000
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 500
space 2000
pulse 500
space 1000
pulse 550
space 950
pulse 500
space 1000
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 1950
pulse 500
space 1000
pulse 550
space 1950
pulse 550
Это одна кнопка была, потом очевидно пауза:

Код: Выделить всё

space 16777215
И дальше уже другая кнопка:

Код: Выделить всё

pulse 9050
space 4500
pulse 650
space 500
pulse 600
space 500
pulse 650
space 450
pulse 650
space 500
pulse 650
space 500
pulse 600
space 500
pulse 600
space 550
pulse 600
space 500
pulse 600
space 1650
pulse 650
space 500
pulse 650
space 1600
pulse 650
space 1600
pulse 650
space 1600
pulse 650
space 1650
pulse 600
space 1650
pulse 600
space 1650
pulse 650
space 500
pulse 600
space 1650
pulse 600
space 500
pulse 600
space 550
pulse 600
space 1650
pulse 600
space 550
pulse 600
space 500
pulse 650
space 500
pulse 600
space 1650
pulse 600
space 500
pulse 650
space 1650
pulse 600
space 1650
pulse 600
space 500
pulse 650
space 1600
pulse 650
space 1650
pulse 600
space 1650
pulse 650
space 41250
pulse 9050
space 2200
pulse 600
space 16777215
^C
pi@raspberrypi:~ $ 
А как транcформировать в формат меги?

Команда на скрипт ir-decode.php (https://ab-log.ru/smart-house/ethernet/megad-2561-ir) без указания параметров выдает просто содержимое файла или требует входной файл, но какого формата он должен быть?

Код: Выделить всё

pi@raspberrypi:~ $ whereis php
php: /usr/bin/php7.0 /usr/bin/php /usr/lib/php /etc/php /usr/share/php7.0-json /usr/share/php7.0-readline /usr/share/php7.0-opcache /usr/share/php7.0-xml /usr/share/php7.0-common /usr/share/man/man1/php.1.gz
pi@raspberrypi:~ $ php ir-decode.php
<?
error_reporting(E_ALL & ~E_NOTICE);

$import = file("condey.ir");
...

pi@raspberrypi:~ $ chmod u+x ir-decode.php

pi@raspberrypi:~ $ php ir-decode.php condey.ir
<?
error_reporting(E_ALL & ~E_NOTICE);

$import = file("condey.ir");
...
pi@raspberrypi:~ $ php ir-decode condey.ir
Could not open input file: ir-decode

Код: Выделить всё

    Release = Raspbian GNU/Linux 9 (stretch)
   Kernel = Linux 4.14.98+
    Platform = Raspberry Pi Model B Rev 2

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Управление техникой по ИК каналу

Сообщение Andrey_B » 05 май 2019, 23:25

Нужно вывод программы mode2 для одной (!) команды/кнопки (без крайних space с гигантскими значениями) сохранить в файл "condey.ir".

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Управление техникой по ИК каналу

Сообщение empenoso » 06 май 2019, 08:17

Andrey_B писал(а):
05 май 2019, 23:25
Нужно вывод программы mode2 для одной (!) команды/кнопки (без крайних space с гигантскими значениями) сохранить в файл "condey.ir".
Обработал нужные кнопки lessar_power key.ir, rostelekom_back key.ir, rostelekom_power key.ir, thomson_mute.ir, thomson_power key.ir, thomson_vol +.ir, thomson_vol -.ir, но скрипт https://ab-log.ru/files/File/ir-decode.zip не запускается.

UPD Запустился только после того, как дописал в начале.

UPD2. Все равно на что-то ругается:

Код: Выделить всё

[empenoso@mike-pc MegaD-2561]$ php ir-decode.php
Init pulse: 4000
Init space: 3950
00001101[0d]01011111[5f]00101010[2a]
block 0
total bits: 24
ir: 0d5f2a
avr pulse: 550
avr space1: 950
avr space0: 1950
url: ir=0d5f2a&irp0=4000&irp1=3950&irp2=550&irp3=950&irp4=1950
Init pulse: 4050
Init space: 3900
00001101[0d]01011111[5f]00101010[2a]
block 1
total bits: 24
ir: 0d5f2a
avr pulse: 552
avr space1: 950
avr space0: 1948
url: ir=0d5f2a&irp0=4050&irp1=3900&irp2=552&irp3=950&irp4=1948
Init pulse: 4050
Init space: 3950
00001101[0d]01011111[5f]00101010[2a]
block 2
total bits: 24
ir: 0d5f2a
avr pulse: 552
avr space1: 950
avr space0: 1946
url: ir=0d5f2a&irp0=4050&irp1=3950&irp2=552&irp3=950&irp4=1946
PHP Warning:  Use of undefined constant i - assumed 'i' (this will throw an Error in a future version of PHP) in /home/empenoso/Загрузки/MegaD-2561/ir-decode.php on line 136
PHP Warning:  Use of undefined constant i - assumed 'i' (this will throw an Error in a future version of PHP) in /home/empenoso/Загрузки/MegaD-2561/ir-decode.php on line 136
PHP Warning:  Use of undefined constant i - assumed 'i' (this will throw an Error in a future version of PHP) in /home/empenoso/Загрузки/MegaD-2561/ir-decode.php on line 136
URL (irp5): ir=0d5f2a&irp0=4050&irp1=3950&irp2=552&irp3=950&irp4=1946&irp5=2
[empenoso@mike-pc MegaD-2561]$ 
А под другой системой норм:

Код: Выделить всё

[09:29:48] openhabian@openHABianPi:~/MegaD-2561$ php ir-decode.php
Init pulse: 4000
Init space: 4000
00001100[0c]00000011[03]00111111[3f]
block 0
total bits: 24
ir: 0c033f
avr pulse: 542
avr space1: 950
avr space0: 1818
url: ir=0c033f&irp0=4000&irp1=4000&irp2=542&irp3=950&irp4=1818
Init pulse: 4000
Init space: 3950
00001100[0c]00000000[00]00000111[07]
block 1
total bits: 24
ir: 0c0007
avr pulse: 526
avr space1: 950
avr space0: 1700
url: ir=0c0007&irp0=4000&irp1=3950&irp2=526&irp3=950&irp4=1700
Init pulse: 4050
Init space: 3950
00000000[00]00001000[08]00000000[00]
block 2
total bits: 24
ir: 000800
avr pulse: 516
avr space1: 950
avr space0: 1621
url: ir=000800&irp0=4050&irp1=3950&irp2=516&irp3=950&irp4=1621
URL (irp5): ir=000800&irp0=4050&irp1=3950&irp2=516&irp3=950&irp4=1621&irp5=2
[09:31:38] openhabian@openHABianPi:~/MegaD-2561$

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Управление техникой по ИК каналу

Сообщение empenoso » 06 май 2019, 08:55

Все же есть какая-то проблема - получаю LIRC с пульта, преобразовываю скриптом, формирую ссылку - мега передает, но ТВ не реагирует, а кондиционер например пищит но ничего не делает:
thomson_mute.ir:

Код: Выделить всё

pulse 4000
space 3950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 500
space 1000
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 950
pulse 550
space 8300
pulse 4050
space 3950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 500
space 2000
pulse 500
space 1000
pulse 550
space 950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1950
pulse 550
space 1900
pulse 600
space 950
pulse 550
space 950
pulse 500
space 1000
pulse 550
space 950
pulse 500
space 2000
pulse 550
space 1950
pulse 550
space 950
pulse 550
space 950
pulse 500
space 1000
pulse 550
space 950
pulse 500
space 1000
pulse 550
space 950
pulse 550
Преобразовываю:

Код: Выделить всё

[09:45:04] openhabian@openHABianPi:~/MegaD-2561$ php ir-decode.php
Init pulse: 4000
Init space: 3950
00001100[0c]00001110[0e]00111111[3f]
block 0
total bits: 24
ir: 0c0e3f
avr pulse: 548
avr space1: 950
avr space0: 1877
url: ir=0c0e3f&irp0=4000&irp1=3950&irp2=548&irp3=950&irp4=1877
Init pulse: 4050
Init space: 3950
00000100[04]00001101[0d]00110101[35]
block 1
total bits: 24
ir: 040d35
avr pulse: 540
avr space1: 950
avr space0: 1788
url: ir=040d35&irp0=4050&irp1=3950&irp2=540&irp3=950&irp4=1788
URL (irp5): ir=040d35&irp0=4050&irp1=3950&irp2=540&irp3=950&irp4=1788&irp5=2
[09:50:32] openhabian@openHABianPi:~/MegaD-2561$
Готовая ссылка:

Код: Выделить всё

thomson_mute.ir
http://192.168.48.30/sec/?pt=12&ir=040d35&irp0=4050&irp1=3950&irp2=540&irp3=950&irp4=1788&irp5=2
Обратное получение команды уже с меги:

Код: Выделить всё

pi@raspberrypi:~ $ mode2 --driver default -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
space 8735662
pulse 4150
space 4050
pulse 600
space 1800
pulse 550
space 1850
pulse 550
space 1850
pulse 550
space 1850
pulse 550
space 1850
pulse 550
space 950
pulse 550
space 1850
pulse 550
space 1850
pulse 550
space 1800
pulse 600
space 1800
pulse 550
space 1850
pulse 550
space 1850
pulse 600
space 950
pulse 550
space 950
pulse 550
space 1850
pulse 550
space 1000
pulse 550
space 1850
pulse 550
space 1800
pulse 600
space 950
pulse 550
space 1000
pulse 550
space 1850
pulse 550
space 950
pulse 550
space 1850
pulse 550
space 950
pulse 600
space 5250
pulse 4150
space 4050
pulse 550
space 1850
pulse 550
space 1800
pulse 600
space 1850
pulse 550
space 1800
pulse 550
space 1850
pulse 550
space 1000
pulse 550
space 1800
pulse 600
space 1800
pulse 550
space 1850
pulse 600
space 1800
pulse 550
space 1850
pulse 550
space 1850
pulse 550
space 950
pulse 550
space 1000
pulse 550
space 1850
pulse 550
space 1000
pulse 550
space 1800
pulse 600
space 1800
pulse 550
space 1000
pulse 550
space 1000
pulse 550
space 1800
pulse 550
space 1000
pulse 550
space 1800
pulse 550
space 1000
pulse 600
space 16777215
^C
pi@raspberrypi:~ $

Ответить