Использование Python для грубой силы моего инфракрасного пульта дистанционного управления для проектора - PullRequest
2 голосов
/ 26 мая 2020

РЕДАКТИРОВАТЬ: Я думаю, у меня все почти работает. Это просто мой второй l oop продолжает иметь сбой индекса ... Есть идеи, почему мой coms l oop не работает?


В настоящее время я пытаюсь получить ИК-коды для своего HD180x optomoa проектор. Это превращается в действительно сложную проблему.

Мне просто нужно включить питание, и ничего больше.

У меня нет ИК-датчика для прямого считывания кодов, и для меня это вызов - попытаться обойтись без него.

Пока это невозможно. Я пробовал несколько разных подходов к получению ИК-кодов напрямую с пульта с помощью Raspberry Pi, но безуспешно. .

LIR C, который является только программным обеспечением Pi IR, имеет список множества пультов дистанционного управления: http://lirc.sourceforge.net/remotes/

Что я хотел бы попробовать и сделать это создать сценарий python, который просто захватывает все файлы из этого списка, а затем пробует их все. Цель состоит в том, чтобы просто включить проектор, чтобы я мог просто дать ему поработать столько времени, сколько потребуется, и если он включится, я могу узнать, кто это сделал.

Итак, мой псевдокод выглядит следующим образом :

  1. загрузить весь удаленный список.
  2. Индексировать весь удаленный список. = RLISTINDEX [] 2a. Остановите службу LIRCD.
  3. Замените /etc/lirc/lircd.conf на RLISTINDEX [] (перемещайте по одному файлу за раз) 3a. Запустите службу LIRCD (чтобы она могла
  4. получить поле «Имя» из файлов удаленных кодов. = RNAME
  5. Получить список всех возможных кодов в файлах удаленных кодов = IRCODE_ARRAY
  6. Выполните irsend SEND_ONCE RNAME IRCODE_ARRAY [] (циклический переход по массиву кодов)
  7. Вернитесь к шагу 3.

Проблемы, которые я не знаю, как это сделать, - это собрать " Поле «Имя» и поля «Коды» из файлов конфигурации.

Также не уверен, как отправлять команды терминала через python.

Есть идеи?

I смог получить код для начала отправки, и теперь мне просто нужно узнать, как получить "ИК-коды" из файлов conf ...

Я так близко ... Мне просто нужно уметь чтобы сделать "список irsend" "" ">> /home/pi/list.ist", чтобы я мог найти ИМЯ пульта, который в настоящее время активен ....... Я просто не могу понять, как заставить эту команду работать правильно. Я думаю, что кавычки все испортили .....


import os
import shutil
import subprocess
import time
# Using readline() 
count = 0
#os.remove("list.list")
os.system("touch /home/pi/com.list")
os.system("touch /home/pi/list.list")
os.system("systemctl start lircd")
for filename in os.listdir('confs'):
    currconf = "/home/pi/confs/" + filename
    print "**********start*******"
    print "1. ", filename
    #print "2. ", currconf
    #os.system("systemctl stop lircd")
    #subprocess.call('systemctl stop lircd', shell=True)
    shutil.move(currconf, "/etc/lirc/lircd.conf")


    subprocess.call('systemctl reset-failed lircd', shell=True)
    subprocess.call('systemctl restart lircd', shell=True)
    time.sleep(1)
    subprocess.call('systemctl status lircd | tail -3', shell=True)
   # os.system("systemctl start lircd")
   # irlist  = ""
    #print "3. ", irlist
    os.remove("/home/pi/list.list")
    os.remove("/home/pi/com.list")
    os.system('irsend list \"\" \"\" >> /home/pi/list.list')



    qbfile = open("/home/pi/list.list", "r")

    for aline in qbfile:
        values = aline.split()  
        print(values[0])

        rname = values[0].strip('\n')
        print "2. rname", rname
        comlist = 'irsend list ' + rname + ' \"\" >> /home/pi/com.list'
        print "3. comlist", comlist
        os.system(comlist)
        comfile = open("/home/pi/com.list", "r")
        for coms in comfile:
            comvalues = coms.split()  
            comand = comvalues[1]#.strip('\n')
            cmd =  "irsend SEND_ONCE " + rname + " " + comand
            print "4. cmd ", cmd
            time.sleep(.001)
            os.system(cmd)
    print "**********end*******"

1 Ответ

0 голосов
/ 26 мая 2020

У меня все заработало .. вот код

import os
import shutil
import subprocess
import time

#removes files to start fresh
os.system("touch /home/pi/com.list")
os.system("touch /home/pi/list.list")
os.system("systemctl start lircd")

#gets a sorted list of all the configuration files from LIRC remote storage
for filename in sorted(os.listdir('/home/pi/confs')):
    #gets the first file
    currconf = "/home/pi/confs/" + filename
    print "**********start*******"
    print "1. ", filename

 #moves the first config file to lircd.conf so restart can make it show up
    shutil.move(currconf, "/etc/lirc/lircd.conf")

#restarts lircd (the reset-failed is to make sure there are no time outs
    subprocess.call('systemctl reset-failed lircd', shell=True)
    subprocess.call('systemctl restart lircd', shell=True)
    time.sleep(1)
#shows the status of lircd
    subprocess.call('systemctl status lircd | tail -3', shell=True)

#removes files again to make sure it is fresh
    os.remove("/home/pi/list.list")
    os.remove("/home/pi/com.list")
# sends an iresend to get list of all remotes in the remote configuration file that was used and pits it in list.list to be used for configuration later
    os.system('irsend list \"\" \"\" >> /home/pi/list.list')


#opens list.list
    qbfile = open("/home/pi/list.list", "r")
#for all remotes in list.list
    for aline in qbfile:
#this gets the remote names        
        values = aline.split()  
        if values:
            print(values[0])
#removes end of file from remote names
            rname = values[0].strip('\n')
            print "2. rname", rname
#creates command that is going to list all commands of given remote names
            comlist = 'irsend list ' + rname + ' \"\" >> /home/pi/com.list'
            print "3. comlist", comlist
#runs command            
            os.system(comlist)
#opens command list file            
            comfile = open("/home/pi/com.list", "r")
            for coms in comfile:
#gets command name, and not command hex                
                comvalues = coms.split()  

                #makes sure if there is a null value it does not hang the loop
                if comvalues:
                    comand = comvalues[1]#.strip('\n')
                    print "4. cmd ", comand
                    time.sleep(.1)

                    command2 = 'irsend SEND_ONCE ' + rname + " " + comand
                    print "5. command2", command2
                    ppp = subprocess.Popen(command2, universal_newlines=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
                    text = ppp.stdout.read()
                    retcode = ppp.wait()
                    print text


    print "**********end*******"
...