所以我有一系列脚本,用于控制我的接收器和电视电源在某些事件,如启动,屏幕保护和远程控制.其中一个是在登录期间执行的,但事情可能是我不希望它在机器计划启动时运行脚本.我有逻辑在执行启动应用程序期间如果blanked = 0则忽略事件,因此它不会在启动或关闭期间发送ir.我怎样才能通过使用cron来实现这一目标?我选择cron是因为这些事件发生在启动应用程序之前.Cron真棒,但据我所知,我只能在开机时或按计划运行,而不是两者兼而有之.我需要编写时间变量的脚本,但我不确定如何.
syson.sh(在登录期间调用为启动应用程序和屏幕状态更改)
#!/bin/sh
cd /home/gilson585/
blanked=`cat blanked`
if [ $blanked -eq 0 ] ; then
blanked=1;echo $blanked > blanked
else
irsend SEND_ONCE VR4085DF KEY_POWER;irsend SEND_ONCE Kenwood_RC-R0813 power;blanked=0;echo $blanked > blanked
sleep 1
irsend SEND_ONCE Kenwood_RC-R0813 cd/dvd
fi
Run Code Online (Sandbox Code Playgroud)
sysoff.sh(在关机期间调用,作为lirc init.d脚本和屏幕状态更改的一部分)
#!/bin/sh
cd /home/gilson585/
blanked=`cat blanked`
if [ $blanked -eq 0 ] ; then
irsend SEND_ONCE Kenwood_RC-R0813 power;irsend SEND_ONCE VR4085DF KEY_POWER;blanked=1;echo $blanked > blanked
fi
Run Code Online (Sandbox Code Playgroud)
xscreensaver.sh(屏幕保护程序看门狗,在登录时调用)
#!/bin/bash
cd /home/gilson585/
xscreensaver-command -watch|
while read STATUS; do
case "$STATUS" in
BLANK*)
/home/gilson585/sysoff.sh;blanked=1;echo …
Run Code Online (Sandbox Code Playgroud) 使用树莓派3和红外线接收器.在一个名为LIRC的库的帮助下,我记录了我的android盒遥控器的信号.
begin remote
name MyRemote
driver devinput
bits 64
eps 30
aeps 100
one 0 0
zero 0 0
pre_data_bits 64
pre_data 0x0
gap 509
toggle_bit_mask 0x0
frequency 38000
begin codes
KEY_1 0x116B000001000268
KEY_2 0x1169000001000267
KEY_3 0x116800000100026E
KEY_4 0x116E00000100025C
KEY_5 0x116C000001000263
KEY_6 0x116800000100024E
KEY_7 0x115D000001000268
KEY_8 0x116E000001000263
KEY_9 0x116B000001000267
KEY_0 0x116F000001000265
KEY_DOWN 0x0360000001000076
KEY_LEFT 0x1167000001000264
KEY_UP 0x117800000100025E
KEY_RIGHT 0x1169000001000266
KEY_BACK 0x1170000001000262
KEY_ENTER 0x1167000001000268
end codes
end remote
Run Code Online (Sandbox Code Playgroud)
问题是我找不到一个可以帮助我编写代码来从我的Note3发送IR信号的库.
我正在尝试配置LIRC以使用我的Raspberry 2B和我使用晶体管和IR发射器构建的电路,如本教程中所述
安装LIRC后,我按照所有步骤操作,并在/ etc/modules中添加了这两行
lirc_dev
lirc_rpi gpio_out_pin=36
Run Code Online (Sandbox Code Playgroud)
然后我在/etc/lirc/hardware.conf中输入了这个
LIRCD_ARGS="--uinput"
LOAD_MODULES=true
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
LIRCD_CONF=""
LIRCMD_CONF=""
Run Code Online (Sandbox Code Playgroud)
重新启动后,我将三星遥控器(BN59-00516A)的配置添加到/etc/lirc/lircd.conf
然后我再次重新启动LIRC,但是当我运行命令发送IR频率时
irsend SEND_ONCE Samsung_BN59-00865A KEY_POWER
Run Code Online (Sandbox Code Playgroud)
它抱怨以下错误:
irsend:无法连接到套接字
irsend:没有这样的文件或目录
我猜这是我的设备套接字的问题,因为在我设置的hardware.conf文件中
DEVICE = "/dev/lirc0"
Run Code Online (Sandbox Code Playgroud)
(只是因为教程说明了),但lirc0文件不在文件夹中.我找不到与此问题相关的任何其他问题,谷歌也没有帮助我.有人对此有任何暗示吗?
我尝试使用我的Raspberry Pi 3和最新的Raspbian创建我自己的通用遥控器.在构建了小接收器和发射器(我遵循的教程)并将所有内容连接起来后,我在尝试接收IR时收到了此消息.
pi@raspberrypi:~ $ sudo modprobe lirc_rpi
pi@raspberrypi:~ $ sudo kill $(pidof lircd)
pi@raspberrypi:~ $ mode2 -d /dev/lirc0
Using driver devinput on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
Partial read 8 bytes on /dev/lirc0pi@raspberrypi:~ $
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
经过大量搜索之后,我对如何为RPi项目设置IR远程控制方面的冲突信息感到惊讶和沮丧。我以为这很容易,但是设置Linux InfraRed Control(LIRC)长期以来一直存在问题
但是随着Raspbian的Buster版本的发布,2019年6月发生了许多变化,使其中的许多教程毫无用处。许多教程都创建了hardware.conf文件,但是LIRC不需要也不需要它,并且lirc-rpi模块已被gpio-ir模块替换。
那么,如何使用Raspbian(Buster)在RPi上设置LIRC?
我正在尝试在我的Raspberry Pi上教lirc我的热泵远程代码 - 三菱电机MSZ-GE60VA(遥控器是SG10A 1833)
我按如下方式运行irrecord:
sudo /etc/init.d/lirc stop
irrecord -d /dev/lirc0 heatpump
Run Code Online (Sandbox Code Playgroud)
我得到了关于推按钮等的常见琐事,并且正确地这样做.
在几个点(不总是相同的数字)之后,irrecord会出现以下错误消息:
irrecord: could not find gap.
irrecord: gap not found, can't continue
Run Code Online (Sandbox Code Playgroud)
现在,我在其他地方发现采样率可能是错误的,并使用xmode2查看波形 - 我已经完成了.我很确定如果能够更快地获取irrecord,我会有更多的运气,就像xmode2一样.
有任何想法吗?(注意:我也使用了force选项,没有区别)
以下是使用xmode2的结果 - 您可以看到5ms样本无法真正产生信号的正面或反面,但2ms样本可以.
5ms样本http://jnawk.net.nz/5ms.png 5ms样本(默认)
我正在尝试为 lirc 进行 Go 绑定:https : //github.com/inando/go-lirc
lirc_init() 和 lirc_deinit() 之类的简单函数可以正常工作。
对于函数“lirc_command_init()”,我需要使用结构类型:https : //github.com/inando/lirc/blob/master/lib/lirc_client.h#L334
typedef struct {
char packet[PACKET_SIZE + 1];
char buffer[PACKET_SIZE + 1];
char reply[PACKET_SIZE + 1];
int head;
int reply_to_stdout;
char* next;
} lirc_cmd_ctx;
Run Code Online (Sandbox Code Playgroud)
我首先尝试了这样的事情:
func lircCommandInit(format string, v ...interface{}) (todoctx string, err error) {
var ctx C.struct_lirc_cmd_ctx
cmd := C.CString(fmt.Sprintf(format, v...))
ok, err := C.lirc_command_init(ctx, cmd)
fmt.Println(ok, err)
return
}
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误:无法确定 C.lirc_command_init 的名称类型。
不确定 struct_ 是否应该用于类型?
ctx 可能需要是一个指针,但我总是得到同样的错误。
然后我尝试使用包装器,但这给了我错误未知类型名称“lirc_cmd_ctx”
// #cgo LDFLAGS: -llirc_client
// …
Run Code Online (Sandbox Code Playgroud)