Browse Source

new evdev lib instead of lirc

master
Andreas Demmelbauer 1 year ago
parent
commit
ba526deb8c
1 changed files with 142 additions and 75 deletions
  1. +142
    -75
      discobert.py

+ 142
- 75
discobert.py View File

@@ -6,13 +6,16 @@ import time
from datetime import datetime
from time import sleep

import lirc
from evdev import InputDevice, categorize, ecodes

import random
import mpd

import requests
from xml.etree import ElementTree as ET

import evdev

from pyudmx import pyudmx

import talkey
@@ -33,6 +36,50 @@ class Simple(resource.Resource):
html = '[{"inuse":"%s"}]' % statustext
return html.encode('utf-8')


# Preparing IR Device
def get_ir_device():
devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
for device in devices:
if (device.name == "gpio_ir_recv"):
print("Using device", device.path, "\n")
return device
print("No device found!")

ir_dev = get_ir_device()

remote_keys = {
0x100028: 'mode_disco', # phono start
0x100029: 'mode_work', # phono stop
0x10000f: 'mode_power', # tuner band
0x100000: 'mode_music_play_1', # tuner 1
0x100001: 'mode_music_play_2', # tuner 2
0x100002: 'mode_music_play_3', # tuner 3
0x100003: 'mode_music_play_4', # tuner 4
0x100004: 'mode_music_play_5', # tuner 5
0x100033: 'mode_music_rewind', # tape fast rewind
0x100037: 'mode_music_back', # tape slow rewind
0x100032: 'mode_music_forward', # tape slow forward
0x100034: 'mode_music_fastforward', # tape fast forward
0x100038: 'mode_music_stop', # tape stop
0x100039: 'mode_music_pause', # tape pause
0x10003f: 'mode_music_info', # tape stoprec
0x110032: 'mode_music_play', # cd play
0x110030: 'mode_music_previous', # cd previous
0x110031: 'mode_music_next', # cd next
0x110038: 'mode_music_stop', # cd stop
0x100025: 'mode_news', # source cd
0x10001e: 'mode_play_fm4', # source video 2
0x100022: 'mode_play_oe1', # source video 1
0x100012: 'mode_volume_up', # vol up
0x100013: 'mode_volume_down', # vol down
0x100014: 'mode_music_mute', # vol mute
}


0x100000


# GPIO
pin_kugel = 2 # Input: dico ball + DMX on/off
pin_sun = 4 # Input: light bulb on/off
@@ -86,6 +133,90 @@ dmxStartupScenes = [
[120,0,255,255,0,224]
]


def interpretRemoteInputs():
events = ir_dev.read()

try:
ir_event_list = [event.value for event in events]
print("Received commands:", ir_event_list)
if ir_event_list and len(ir_event_list) > 0:
remote_key = ir_event_list[0]
print(remote_key)
code = None
try:
code = remote_keys[remote_key]
except KeyError:
print('received invalid signal: ' + str(remote_key))

lastUsed = time.time() # user is active!
hadUserInteraction = True
inUse = True
print('received code:', str(code))
if(code == "mode_disco"):
setDiscoMode()
if(code == "mode_work"):
setWorkingMode()
if(code == "mode_power"):
setOnOff()
if(code == "mode_music_play_1"):
startMusic('1')
if(code == "mode_music_play_2"):
startMusic('2')
if(code == "mode_music_play_3"):
startMusic('3')
if(code == "mode_music_play_4"):
startMusic('4')
if(code == "mode_music_play_5"):
startMusic('5')
if(code == "mode_play_fm4"):
startMusic('https://orf-live.ors-shoutcast.at/fm4-q2a')
if(code == "mode_play_oe1"):
startMusic('https://orf-live.ors-shoutcast.at/oe1-q2a')

if(code == "mode_music_previous"):
previousSong()
if(code == "mode_music_next"):
nextSong()
if(code == "mode_music_play"):
playMusic()
if(code == "mode_music_stop"):
stopMusic()
if(code == "mode_music_mute"):
muteMusic()
if(code == "mode_music_pause"):
pauseMusic()
if(code == "mode_music_rewind"):
seek('-30')
if(code == "mode_music_back"):
seek('-5')
if(code == "mode_music_forward"):
seek('+5')
if(code == "mode_music_fastforward"):
seek('+30')
if(code == "mode_volume_up"):
changeVolume(5)
if(code == "mode_volume_down"):
changeVolume(-5)
if(code == "mode_music_info"):
getTrackInfo()
if(code == "mode_record"):
say("I'm sorry, I'm afraid I can't do that!")
if(code == "mode_news"):
oejournalUrl = getNewestPodcastUrl('https://files.orf.at/podcast/oe1/oe1_journale.xml')
startMusic(oejournalUrl)


except BlockingIOError:
# ir_event_list = None
print("No command received.\n")



# Set a dmx scene by name
def setDmxScene(scene):
# a universe of zeros
@@ -349,7 +480,7 @@ def initService():
try:
client.setvol(defaultvolume)
except Exception:
client.connect("localhost", 6600)
client.connect("0.0.0.0", 6600)
client.setvol(defaultvolume)
volume = defaultvolume
uservolume = defaultvolume
@@ -368,7 +499,7 @@ def say(text, lang="en"):
def setOnOff():
global mode
stopMusic()
if mode is not 'work':
if mode != 'work':
setWorkingMode()
else:
initService()
@@ -395,6 +526,7 @@ dmxScene = 0
bootstrap()
dev = pyudmx.uDMXDevice()
dev.open()
print('dmx device: ' + str(dev))

client = mpd.MPDClient()
client.connect("localhost", 6600)
@@ -426,11 +558,12 @@ setSun('off')

print(timestamp(), "Ready!")

lirc.init("disco", "~/discobert/lircrc", blocking=False)
#lirc.init("disco", "~/discobert/lircrc", blocking=False)

# Main event loop ...
while True:
sleep(0.25)
print("start new loop round")
sleep(0.3)
pirstate = wiringpi.digitalRead(pin_pir)
doorstate = wiringpi.digitalRead(pin_door)
#print('pirstate: ', pirstate)
@@ -454,74 +587,8 @@ while True:
inUse = False



remotesignal = lirc.nextcode()
print('remotesignal: ', remotesignal)

if remotesignal:
lastUsed = time.time() # user is active!
hadUserInteraction = True
inUse = True
for code in remotesignal:
print('received code:', code)
if(code == "mode_disco"):
setDiscoMode()
if(code == "mode_work"):
setWorkingMode()
if(code == "mode_power"):
setOnOff()
if(code == "mode_music_play_1"):
startMusic('1')
if(code == "mode_music_play_2"):
startMusic('2')
if(code == "mode_music_play_3"):
startMusic('3')
if(code == "mode_music_play_4"):
startMusic('4')
if(code == "mode_music_play_5"):
startMusic('5')
if(code == "mode_play_fm4"):
startMusic('https://orf-live.ors-shoutcast.at/fm4-q2a')
if(code == "mode_play_oe1"):
startMusic('https://orf-live.ors-shoutcast.at/oe1-q2a')

if(code == "mode_music_previous"):
previousSong()
if(code == "mode_music_next"):
nextSong()
if(code == "mode_music_play"):
playMusic()
if(code == "mode_music_stop"):
stopMusic()
if(code == "mode_music_mute"):
muteMusic()
if(code == "mode_music_pause"):
pauseMusic()
if(code == "mode_music_rewind"):
seek('-30')
if(code == "mode_music_back"):
seek('-5')
if(code == "mode_music_forward"):
seek('+5')
if(code == "mode_music_fastforward"):
seek('+30')
if(code == "mode_volume_up"):
changeVolume(5)
if(code == "mode_volume_down"):
changeVolume(-5)
if(code == "mode_music_info"):
getTrackInfo()
if(code == "mode_record"):
say("I'm sorry, I'm afraid I can't do that!")
if(code == "mode_news"):
oejournalUrl = getNewestPodcastUrl('https://files.orf.at/podcast/oe1/oe1_journale.xml')
startMusic(oejournalUrl)


interpretRemoteInputs()
if(inUseBefore != inUse):
print(timestamp(), "State change inUse:", inUseBefore, inUse)
if inUse:
@@ -534,7 +601,7 @@ while True:
# Webserver
reactor.iterate()

lirc.deinit() # Clean up lirc
#lirc.deinit() # Clean up lirc


dev.close()
# dev.close()

Loading…
Cancel
Save