Jump to content

Mehrfachbelegung von Fernbedienungstasten mittels Girder


erwin

Recommended Posts

In einigen Foren wurde die Frage gestellt ob man auf einer X10-Fernbedienung mittels Girder (3.2.9) und X10-Plugin (X10/ATI Remote control interface) kurze Tastendrücke von länger gehaltenen unterscheiden könne und so eine Mehrfachbelegung jeder Taste erreichen könne.

Die Antworten waren unbefriedigend bis hin zu Zitaten von Experten im einschlägigen Girder-Forum das es nicht ginge. Da dies offenbar nicht ganz trivial ist, will ich hier mal ein kurzes How-To skizzieren.

 

Mein Ausgangspunkt ist diese X10-FB (von Pollin).

 

post-2941-1251966353_thumb.jpg

 

Schick, schlank, aufgeräumt, nicht mit Tasten überladen. Die kleine Tastenanzahl ist dann aber auch für manche ein KO-Kriterium. Könnte man nicht mit Girder eine Mehfachbelegung erreichen? Etwa

 

Taste "Power" -> Schließen aktuelles Fenster

Taste "Power" länger gedrückt -> Schließen aktuelle Application

Taste "Shift" + "Power" -> Standby

Taste "Shift" + "Power" länger gedrückt -> Herunterfahren

 

 

Taste "Info" -> Mini-EPG

Taste "Info" länger gedrückt -> Detailinfos zur aktuellen Sendung

Taste "Shift" + "Info" -> OSD-EPG

Taste "Shift" + "Info" länger gedrückt -> das EPG-Fenster

 

 

 

"Shift" soll hierbei eine frei definierte Taste sein, welche vor der eigentlichen Taste gedrückt wird.

 

So gehts.

(Eventuell auch für IR-FBs anpassbar sofern diese "Toogle-Bits" verwenden.)

(Ich beschreib das mal jetzt für _ALLE_ Tasten obwohl die Cursortasten und Volume+/- wohl hier anders behandelt werden sollten)

 

Beim Drücken einer Taste generiert das X10-Plugin für Girder einen Eventstring der Form:

 

X10_DN_*.

* steht hier für die einzelne Taste also X10_DN_One, X10_DN_Two, X10_DN_PLAY... .

DN heist wohl DowN

 

Wird die Taste gleich wieder freigegeben, wird danach

 

X10_UP_* generiert.

 

Wird die Taste länger gehalten, erhalten wir

 

X10_DN_*, X10_RT_*, [X10_RT_*, X10_RT_*, X10_RT_*, ... ] X10_UP_*

 

wobei RT wohl für RepeaT steht. Die ganze Kunst besteht nun darin die Folge

 

X10_DN_*, X10_RT_*

 

von der Folge

 

X10_DN_*, X10_UP_*

 

zu Unterscheiden.

 

 

In Girder:

 

Add MultiGroup mit Namen X10_DN_*. In dieser wird für jede Taste ein EventString angelegt der nach der

Tastenbeschriftung benannt wird und dann angelernt wird. Also z.B.

 

X10_DN_*

Live TV -> X10_DN_Bookmark

Rec TV -> X10_DN_MTAB

....

 

Ähnlich wird für RT und UP verfahren. Allerding bereitet hier das "Anlernen" Probleme, da Girder schon nach dem

DN (Taste gedrückt) das Lernen beendet. Hier helfen ein par Tricks. z.B. Taste schon vor dem "Learn Event"

drücken. Oder man erkennt die Systematik: In X10_DN_Bookmark ersetze DN durch RT bzw. UP usw. Jetzt kann man

direkt im GML-File durch Cope/Paste + Suchen/Ersetzen die EventStrings erzeugen.

 

 

X10_RT_*

Live TV -> X10_RT_Bookmark

Rec TV -> X10_RT_MTAB

....

 

X10_UP_*

Live TV -> X10_UP_Bookmark

Rec TV -> X10_UP_MTAB

....

 

Fehlen noch die "Aktionen".

In X10_DN_* "Add Command" mit Namen "process event". Und als Aktion "Girder/Variable Manipulation Script" mit folgendem Inhalt (Script-Buttton)

 

STATE = 1

theEventString = EventString

 

Die globale Variable STATE merkt sich mit dem Wert 1 dass soeben eine Taste DowN-gedrückt wurde.

Die globale Variable theEventString merkt sich welche Taste es denn war (also z.B. X10_RT_Bookmark)

 

In X10_RT_* "Add Command" mit Namen "process event". Und als Aktion "Girder/Variable Manipulation Script" mit

folgendem Inhalt (Script-Buttton)

 

if STATE == 1 then
 if SHIFT == 1 then
SHIFT = 0
TriggerEvent( "SHIFT_HOLD_"..theEventString, 62, "" )
 else
TriggerEvent( "HOLD_"..theEventString, 62, "" )
 end
end

STATE = 2

 

Beim ERSTEM RT nach DN (DN hat STATE auf 1 gesetzt), also nur wenn die Sequenz "DN RT" erkannt wurde (in der

Sequenz "RT RT" hat hier STATE den Wert 2) werden die folgenden Kommandos ausgeführt. Man beachte das die

Sequenz "DN RT" den frühstmöglichen Zeitpunkt markiert an dem ein "gehaltener Tastendruck" erkannt wurde.

TriggerEvent( "HOLD_"..theEventString, 62, "" ) feuert hier ein neues Event für Girder mit dem EventString der

sich aus "HOLD_"..theEventString - der Aneinanderkettung der Strings "HOLD_" und dem in X10_DN_* gemerkten

nativen Eventstring ergibt, also z.B. "HOLD_X10_DN_Bookmark". Dieses Event wird in Girder eingesteuert als wäre

es ein eigenes Device (virtuell) mit der Device-ID 62. Die SHIFT-Variable verfeinert das Konzept hier nur noch

etwas. Sie wird von einer frei definierten Taste gesetzt.

 

Analog für X10_UP_*:

 

if STATE == 1 then
 if SHIFT == 1 then
SHIFT = 0
TriggerEvent( "SHIFT_"..theEventString, 62, "" )
 else
TriggerEvent( "KEY_"..theEventString, 62, "" )
 end
end

 

"if STATE == 1" unterscheidet hier zwischen den Sequenzen "DN UP" und "RT UP" also dem Freigeben der Taste nach

einem kurzem Druck oder dem Freigeben nach einem gehaltenem Tastendruck, denn die RT-Behandlung wird auf jeden

Fall mit STATE == 2 verlassen. Der gehaltene Tastendruck wurde schon behandelt.

 

"process event" triggert also Events eines virtuellen Devices:

 

KEY_X10_DN_*

KEY_X10_DN_BOOKMARK

KEY_X10_DN_MTAB

...

 

SHIFT_X10_DN_*

SHIFT_X10_DN_BOOKMARK

SHIFT_X10_DN_MTAB

...

 

HOLD_X10_DN_*

HOLD_X10_DN_BOOKMARK

HOLD_X10_DN_MTAB

...

 

 

SHIFT_HOLD_X10_DN_*

SHIFT_HOLD_X10_DN_BOOKMARK

SHIFT_HOLD_X10_DN_MTAB

...

 

 

und genau hier (und nur hier) bringen wir die eigentlichen Action-Handler unter.

 

Es ist angeraten auch andere Device-Events z.B. von einer IR-FB zunächst auf dieses virtuelle Device umzuleiten.

So machen sich Änderungen die alle FB's betreffen sollen nur an dieser einen Stelle bemerkbar. Beispiel der * soll auf ALLEN FB's einen neue Funktion erhalten.

 

 

Hier mein Beispiel GML-File:

 

DVBViewer.zip

 

Wirkliche Aktionen sind hier noch nicht eingebaut. Aber ein OSD-Popup zeigt die gewälte Aktion. Shift ist das blaue Bullet in der Mitte.

 

mfg erwin

Link to comment
  • 2 months later...

Genau das suche ich, aber für meine FB Technisat TS35i. Habe leider keine X10-Fernbedienung. In wie weit ist es möglich, das Konzept für meine TS-FB zu übernehmen?

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...