Pull to refresh
7
0
Дмитрий Александрович @dimka-exe

web-developer

Send message
Ну лифт который едет с 12(да даже с 20) до 1 этажа можно обогнать, причем в легкую. Вопрос состоит в том, чтобы подняться быстрее, первые 6 этажей — обогнать не проблема, но потом думаю даже самый тормознутый лифт обгонит :)
Тут дело еще во времени затраченном на лифт, 42 все таки не 12, и скоростной лифт туда реально быстрее доставит.
Не много ли внимания для железяки?
Работал с Zalman (200 вроде), как то попался сервак(параметры с ходу не назову) в общем он залман так и не определил — неизвестное устройство. Пришлось по старинке, через флешку
Вероятно у вас опечатка, stdbuf помимо команд что то по итогу должна выполнить, то есть конвейера после нет, awk должно выполнится через stdbuf, по крайней мере так гласит man.
Вчера пытался разобраться с stdbuf, но толком ничего не получилось. Все так и зависло, переменная $c так и не получает никаких данных.
Тут ведь дело не только в буфере. По моему предположению тут не подходит программа cat, она ведь при выводе файла ждет eof, а event не заканчивается.
Но спасибо за полезную информацию в сторону stdbuf, не знал что буфер можно сменить «на лету».
Можете привести пример? В описании программы вроде бы понятно, но ничего не происходит :(
Хотя странно, hexdump то генерирует строку…
В общем до идеи с PHP я копал в эту сторону, Даже пытался сокеты организовать на bash, но мне не понравилось, то что приходилось именно сливать данные в другой файл и уже его перечитывать.
:-) И так я тоже пытался сделать, там вероятно причина в том, что система генерирует не строковую информацию, а awk и tail ждут именно конца строки, чего собственно нет.
Да, я рассматривал такой вариант, но тут беда,
cat event0 | hexdump | awk {'print $6'}

Кто то из этого конвейера врет! То есть переменная $c так и не обретает данные, и последующий код просто не выполняется.
Вот Ваш код, немного дописанный

#!/bin/bash
while [ 1=1 ];do 
	echo "start"
	c=`cat /dev/input/event1 | hexdump | awk {'print $6'}`;
	echo "good"
	echo $c; 
	if [[ "$c" = "0001" ]];then 
		echo "Нажата кнопка А";
	fi; 
	if [[ "$c" = "0002" ]];
		then echo "Нажата кнопка Б";
	fi;
done


Проблема его в том, что на экране появляется «start» и все. что бы я не нажал, чтобы не сотворил, тишина, только [Ctrl]+[C], увы.
Какая хорошая критика, все по пунктам, отлично!

Итак, мои оправдания и/или объяснения:
1) Согласен, если напичкать программу другими возможностями, то вполне возможно будет менее затратным в плане ресурсов способ, хотя тут именно в том и дело, что только читать event, и ничего лишнего.

2) Полностью согласен! Но я не описывал настройку PHP, который урезан по минимуму в системе, ровно как nginx, им не позволительно отдавать много ресурсов.

3) Это в идеале, да, хотелось бы добиться такого же.

4)Ну если утрировать, то да. Изначально хотел сделать нечто такое, что работает только по нажатию кнопки. К примеру зачем гонять систему когда я уехал из дома на выходные, пульт коту оставить? :-)

5) Мне Ваша статья очень понравилась! Жаль только что я на неё наткнулся уже после того как написал решение изложенное в статье. Я собственно хотел в комментариях к Вашей статье описать свой подход, но к сожалению (или наоборот во благо) не мог на тот момент оставлять комментарии, тем самым решил изложить материал отдельной статьей.

6) Продолжаю разбираться с этой крохой, думаю будет продолжение статей.

7) Спасибо!
Как и обещал, скрипт, для создания файла настроек «на лету», по Вашему предложению. Спасибо за идею!
Скрипт создания файла настроек для программы mylirc
#!/usr/bin/php5
<?php
	declare(ticks = 1);
	pcntl_signal(SIGINT,  "signal_handler");
	function signal_handler($signal){
		global $f,$out;
		if($signal==SIGINT){
			fclose($f); 
			exec('echo ?\> >> '.$out);
			exit("\n$out create!\n");
		}
	}
    function AccessFile($file,$access){
        if(file_exists($file)){ //файл существует!
            if($f=@fopen($file,$access)){fclose($f);}else{exit("not have access to $file\n");}
        }else{
            return "$file not found (may not have access to the folder)\n";
        }
    }
    $dev="";
    $out="";
    if(count($argv)==1){
        exit("Use ".dirname( __FILE__ )."/".basename($_SERVER['SCRIPT_FILENAME'])." --device=device --out=config.php\n");
    }else{
        for($i=1;$i<count($argv);$i++){
            $cmd=explode("=",$argv[$i]);
            switch($cmd[0]){
                case "--device": $dev=$cmd[1]; echo AccessFile($cmd[1],"rb"); break;
                case "--out":    $out=$cmd[1]; echo AccessFile($cmd[1],"w"); break;
            }
        }
    }
    if(($dev=="")||($out=="")){
        exit("Use ".dirname( __FILE__ )."/".basename($_SERVER['SCRIPT_FILENAME'])." --device=device --out=config.php\n");
    }
	echo "press [Ctrl]+[C] to stop and press any button on the remote\n";
    $f=fopen($dev, 'rb');
    if($f){
	exec('echo \<?php > '.$out);
	exec('echo "	\$command=array();" >> '.$out);
	$i=0;
	$j=1;
        while (!feof($f)){
            $b=fread($f,32);
			$b=bin2hex($b);
            $b=substr($b,18,8);
            $button	=substr($b,0,4);
            $key	=substr($b,4);
            $i=$i+($j++)%2; //Нумерация кнопок
			$but='$command[]=array("'.$i.'", "'.$button.'","'.$key.'",""); // #'.$i;
			exec('echo \'	'.$but.'\' >> '.$out);
			echo $but."\n"; //Выводим и на экран, чтобы понимать, что кнопки нажимаются и все работает
        }
    }
?>

Понял. Чуть позже добавлю, действительно, будет полезен такой скрипт.
Имеете в виду конкретный пульт, и его кнопки, если не указаны в /etc/mylirc/buttom_avermedia.php? То по сути программа в логи напишет что была нажата кнопка, у которой не назначено действие
if(!$l){ //Если клавиша нажата, но в файле настроек не прописана:
    if($log){exec("echo not buttom $button $key >> $log");}
}

Я думал о том чтобы разграничить пульты. Но практическая необходимость в этом не потребовалась.
По сути, для определения нажатий клавиш достаточно запустить
/usr/sbin/mylirc --device=/dev/input/event1  --log=/var/log/log_lirc_but
И нажимать по порядку клавиши на пульте, получите список кодов клавиш в том же порядке в файле /var/log/log_lirc_but

Information

Rating
Does not participate
Location
Алтайский край, Россия
Date of birth
Registered
Activity