ik probeer een python script te maken waarmee ik de ir-signalen van een infrarood afstandsbediening kan lezen. Hiervoor gebruik ik een usb dongle (RTL2838).
Het script bestaat uit drie delen:
1. check of de dongle aanwezig is (dit werkt) (regel 9-17)
2. laden van de benodigde protocollen (dit werkt ook) (regel 20-25)
3. het luisteren naar de signalen van de afstandsbediening (hier loop ik vast) (regel 27-38)
Hier is het script:
#!/usr/bin/env python3
# read ir signals from remote
# in-keytable must be installed
from subprocess import Popen, PIPE
print("Script for testing infrared remote controls")
#check if dongle is present
dongle = Popen("lsusb",stdout=PIPE, stderr=PIPE)
stdout=str(dongle.communicate())
check = stdout.find("RTL2838")
if check == -1:
print("Dongle is not present")
print("Script is stopped")
quit()
print("Dongle found!")
#enable all protocolls on dongle
command = "sudo /usr/bin/ir-keytable -p lirc -p rc-5 -p rc-5-sz -p jvc -p sony -p nec -p sanyo -p mce_kbd -p rc-6 -p sharp -p xmp -p imon"
command = command.split()
protocol = Popen(command, stdout=PIPE, stderr=PIPE)
stdout=str(protocol.communicate())
print("Protocols are loaded.")
#start testing remote controls
command = "sudo /usr/bin/ir-keytable -s rc0 -t"
command = command.split()
test = Popen(command,stdout=PIPE, stderr=PIPE, shell=True)
try:
while True:
signal = str(test.communicate())
check = signal.find("lirc")
if check > 0:
print(signal)
except:
print("error")
Als ik de laatste bahs-opdracht in de terminal uitvoer dan zie ik:
sudo /usr/bin/ir-keytable -s rc0 -t
Testing events. Please, press CTRL-C to abort.
Daarna wordt er gewacht op een signaal van de afstandsbediening. Als ik de aan/uitknop indruk dan zie ik:
702.966801: lirc protocol(nec): scancode = 0x4d
702.966817: event type EV_MSC(0x04): scancode = 0x4d
702.966817: event type EV_SYN(0x00).
Andere knoppen geven natuurlijk een andere scancode maar de output is hetzelfde.
Ik doe iets fout bij de Popenopdracht. Er komt geen enkele output. Ook niet als ik de check of 'lirc' aanwezig is weglaat. Ook dan wordt er niets geprint.
Hoe moet ik dit aanpakken??
edit: het script blijft hangen bij de eerste keer dat de regel " signal = str(test.communicate())" (regel 33) wordt uitgevoerd. Daar moet dus de fout zitten. Maar wat???