HI,
ich mache genau das mit einem kleinen python-Script, das von AVARDS gefuettert wird und seriell den Beamer steuert.
Da ich nicht weiss, ob es rechtens ist, die Sanyo-Steuerbefehle ungefragt weltweit zu veroeffentlichen (sie stammen aus einer Mail, die mir der Sanyo-Service schickte), habe ich sie in unten angegebenen Code einfach mal durch xxx ersetzt - fuer deinen Zweck muessen da ja eh deine eigenen Codes hin. y bzw. yyy sind entsprechend Rueckgaben des Geraetes. Die xxx ganz zu Beginn sind Initialisierungswerte und koennen so bleiben, die Variablen werden spaeter mit den Rueckmeldungen ueberschrieben.
Weiss nicht, wie fit du mit Python bist, im Grunde ist das Ding aber auch ohne Python-Kenntnisse lesbar. Wichtig bei Python ist die Einrueckung, die ersetzt naemlich die Klammerung.
Aufgerufen wird das ganze dann so:
/usr/local/bin/dvb-aspect -a -p 0.2 -e 10 | /root/aspect/aspect.py &
, wobei dvb-aspect aus AVARDS kommt. Ich glaube, ich hatte da noch irgendwas an der Ausgabe gehackt, aber daran erinnere ich mich nicht mehr, vermutlich ist das bei neueren Versionen auch nicht noetig. Musst halt manuell austesten, welche AVARDS-Ausgabe zu welchem Ergebnis fuehrt.
Mein Beamer hat so eine Art Zwischenmodus fuer 14:9, Vollbild fuer 16:9, Normal fuer 4:3 und Zoom fuer Letterbox. Je nach erkanntem Format und Seitenverhaeltnis werden die betreffenden Kommandos erzeugt und nur ein Befehl gesendet, wenn der Modus nicht schon drin ist.
Hier der Code, viel Spass damit.
Viele Gruesse,
Jan
#!/usr/bin/python
import sys
import string
import serial
import time
c = 'xxx'
alt = 'xxx'
while 1 == 1:
a = sys.stdin.readline()
b = string.split(a[:-1])[0]
if b == '16:9':
format = 'xxx\r'
else:
if int(b) < 157:
format = 'xxx\r'
else:
if int(b) < 167:
format = 'xxx\r'
else:
format = 'xxx\r'
if format != c:
# Aspect umsetzen, falls Ausgabegeraet == 6
ser = serial.Serial('/dev/ttyS0', 19200, timeout=1, xonxoff=0, rtscts=0)
line='?\r'
while line == 'yyy\r':
ser.write('xxx\r')
line = ser.readline()
ser.close()
if line[:-1] == 'yyy':
c = format
ack = 0
while ack == 0:
ser = serial.Serial('/dev/ttyS0', 19200, timeout=1, xonxoff=0, rtscts=0)
ser.write(format)
line = ser.readline()
ser.close()
if line[0] == 'y' and line[1] == '\r':
ack = 1
f=open('/var/log/beamer', 'a')
f.write('Aspect erfolgreich umgesetzt auf ' + format[:-1] + ' fuer ' + b + '\n');
f.close()
else:
f=open('/var/log/beamer', 'a')
f.write('Beamer inaktiv, Umschaltung fuer ' + b + ' nicht ausgefuehrt' + '\n');
f.close()
else:
if alt != b:
f=open('/var/log/beamer', 'a')
f.write('Umschaltung fuer ' + b + ' nicht noetig' + '\n');
f.close()
alt = b
Alles anzeigen