Universal Fernbedienung in FHEM

Begonnen von Predictor, 08 Juni 2013, 14:04:53

Vorheriges Thema - Nächstes Thema

Predictor

Ich mache mal einen neuen Thread auf.

Im Topic Fhem -> Samsung TV kam die Idee (und auch schon die umsetzung von UliM) einer Fernbedienung auf.
Da ich zur Zeit ebenfalls für einen Enigma Reciver eine FB umgesetzt habe wäre es doch genial wenn wir ein extra Modul Fernbedienung machen könnten.

Für den Samsung gibt es auch schon eine grafische Umsetzung in Floorplan! => siehe Post von UliM


Meine Idee wäre nun, das alles in ein extra Modul zu packen - ich würde natürlich den Code für Enigma basierende Reciver (Dreambox, VU+, ...) beisteuern.
So mein erster Gedanke wäre, dem Modul mitzugeben was für ein Gerät gesteuert werden soll und als zweiten Parameter was gedrückt werden soll.
Genial wäre es dann (aber bin zu sehr Anfänger um die umsetzbarkeit abzuschätzen) wenn das Modul ja weiß was für ein Gerät bedient werden soll, dann eine andere Grafik oder Tastenanordnung anzuzeigen.

Der Code für die Dream ist bereits fertig und funktioniert -> ich will nur noch etwas optimieren (hash table anstelle given-when usw.).


Diese Fernbedienungsmodule sind schon in Codeschnipsel vorgestellt (könnte man als Anfang integrieren):
    Fernbedienung -> Samsung TV
    Fernbedienung -> Onkyo Receiver
    Fernbedienung -> Enigma Receiver
    Fernbedienung -> iTach IR-Adapter[/list]


    Und gleich noch eine Frage: die FB war bei mir eher ein "Abfallprodukt" das Ziel von mir war mehrere Tastenbefehle nacheinander zu senden (ich kann ein Pluginn nur per FB steuern => da werden nacheinander 7 Befehle gesendet).
    Wäre dies auch eine Idee für das (hoffentlich enstehende) FB-Modul?



    Grüße
    Predi
    FHEM auf Fritz!Box 7390
    FS20 per CUL

    UliM

    Moin,
    generische remote ist in Arbeit.
    Im Fred "fhem->Samsung" wurden weitere icons versprochen, wäre gut die bald zu haben :)
    =8-)
    RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

    UliM

    Hi,
    erste Version fertig - testuser gesucht.
    Bitte Mailadresse per PN an mich - möchte das Teil erstmal noch nicht öffentlich machen.

    LG, Uli

    PS: Hat noch einen kleinen Haken, siehe Link
    RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

    Predictor

    Ich bin leider erst in einem frühem beta Stadium mit dem Code.
    Im Moment funktioniert der Code bereits, das Log wird auch nicht mehr zugemüllt (im Remote Modul - die anderen 2 muss ich noch umbauen).
    Die Fehlerbehandlung habe ich erst angefangen ...

    Was macht denn dein Modul im Moment, es ist ja aus dem Samsung Thread entstanden - ist dann der Code für Samsung TV drinnen?
    Ich gehe mal davon aus - dann kann ich leider noch nicht mit testen, da ich keinen habe.
    Wenn mein Code halbwegs testfähig ist, würde ich den gerne beisteuern.
    FHEM auf Fritz!Box 7390
    FS20 per CUL

    UliM

    Zitat von: Predictor schrieb am Fr, 14 Juni 2013 16:47Ich bin leider erst in einem frühem beta Stadium mit dem Code.
    Was macht denn dein Modul im Moment
    Es ist fertig :)
    Wie oben geschrieben: Wenn Du mir Deine Mailadresse per PN schickst, schick ich's Dir zum Testen.

    Zitat von: Predictor schrieb am Fr, 14 Juni 2013 16:47ist dann der Code für Samsung TV drinnen?
    Nein. Das Modul "remotecontrol" ist der reine Frontend-Teil.
    Hab auch schon überlegt, die Script-Schnispel mit reinzunehmen -
    1. das widerspricht dem modularen Prinzip von fhem
    2. ich habe keins der Geräte Onkyo, Enigma, iTach - kann also nicht testen
    Daher sollten das jeweils separate Module werden.

    Für Samsung kann ich das übernehmen, denn ich habe so ein Gerät und kann testen.
    Das kann dann auch als Vorlage für die anderen Module dienen, vll hilft das ja.

    ok?

    LG, Uli

    PS: Das o.g. Frontend "remotecontrol" ist übrigens extra so gestaltet, dass jedes beliebige andere Modul dort eigene Default-Tastatur-Layouts hinterlegen kann, ohne dass das Modul remotecontrol geändert werden muss :)
    RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

    Predictor

    Zitat von: UliM schrieb am Fr, 14 Juni 2013 17:42Nein. Das Modul "remotecontrol" ist der reine Frontend-Teil.
    Hab auch schon überlegt, die Script-Schnispel mit reinzunehmen -
    1. das widerspricht dem modularen Prinzip von fhem
    2. ich habe keins der Geräte Onkyo, Enigma, iTach - kann also nicht testen
    Daher sollten das jeweils separate Module werden.

    Für Samsung kann ich das übernehmen, denn ich habe so ein Gerät und kann testen.
    Das kann dann auch als Vorlage für die anderen Module dienen, vll hilft das ja.

    Hast PM
    Eine Codevorlage wäre ganz toll da ich bzgl. Perl und FHEM auf "ganz dünnem Eis" stehe  ;-)

    Grüße
    Predi
    FHEM auf Fritz!Box 7390
    FS20 per CUL

    UliM

    Hiho,
    so, commandref-Doku ist auch fertig (grrr, 2 Stunden nur für Doku...)
    Warte noch auf
    a) das feedback der drei Tester
    b) das ok von Rudi zum Einchecken der icons.
    Dann könnte ich's einchecken.
    Gruß, Uli

    RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

    docb

    Hi Leute,
    ich stell mich vermutlich gerade wieder an wie der erste Mensch, aber ich bekomme es nicht hin: ich würde gerne die openautomation bzw. künftig noch ein paar eigene Icons einbauen.
    Ich habe rc_iconprefix auf control_ gesetzt, als rc_iconpath habe ich icons und images/openautomation und noch ein paar kombis versucht - allerdings ohne Erfolg.
    In row00 habe ich (als Beispiel): row00 play:audio_play
    Ich checke die Pfade in fhem nicht so wirklich - müssten unter icons/bildname nicht alle Bilder erreichbar sein?
    Viele Grüße
    doc
    I love FHEM!

    docb

    So, jetzt habe ich es geschafft - habe einfach die svg-dateien in den remotecontrol-ordner kopiert und das prefix geändert. Schon werden sie angezeigt. Allerdings in schwarz und die Größenmanipulation über css greift nicht. Ich nehme an, das liegt daran, dass die svgs nicht wie in fhem üblich als quellcode eingelesen werden, sondern als tatsächliches Bild (<img src="...svg">. Leider weiß ich nicht genau, wie man das lösen könnte, so dass die svgs richtig eingelesen werden. Ich würde mich anbieten und ein Button-Set für die Fernbedienung als svg machen (Vorteil: wir könnten auch die Farben manipulieren), aber vorher müsste jemand (vermutlich Uli) noch die richtige Einbindung der svgs implementieren.
    Viele Grüße
    doc
    I love FHEM!

    betateilchen

    Spricht etwas dagegen, für in Modulen fest definierte StandardLayouts einen Ordner unterhalb von remotecontrol anzulegen, in dem dann genau die Icons liegen, die man für dieses Standardlayout benötigt?

    Sinn dieser Aktion wäre, eine Möglichkeit zu schaffen, dass die Icons sinnvolle Namen bekommen und nicht bla3.png nur weil es schon bla1.png und bla2.png gibt.

    Ich würde z.B. gerne einen Unterordner Xoro anlegen, in dem dann genau die 24 Buttons liegen, die ich für die spezielle Fernbedienung dieses Herstellers benötige.

    -----------------------
    Formuliere die Aufgabe möglichst einfach und
    setze die Lösung richtig um - dann wird es auch funktionieren.
    -----------------------
    Lesen gefährdet die Unwissenheit!

    UliM

    Hi,
    cons:
    - Rudi muss jeden Ordner für update.pm manuell hinzufügen
    - wir vervielfachen dasselbe icon in x Ordner - das schafft ebensoviel Übersichtlichkeit wie es gleichzeitig verhindert - je nach Perspektive

    Siehe auch icons-Fred (neue icons und meine Antwort): Selbst svg-icons, die speziell für rc gebaut sind, würde ich eher im Ordner fhemSVG ablegen als nach default/remotecontrol .
    Wenn ein Standard-Layout gebaut wird, weiss der Autor genau, wo welche icons liegen, dafür ist keine Verfielfachung nötig. Und wenn jemand seine Layouts anpassen möchte, weiss er/sie auch, welche icons verwendet weerden sollen.
    Just my 2 cents.

    Siehe im Ordner frontends eine Version von remotecontrol, die svg kann: Link

    Gruß, Uli
    RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

    betateilchen

    Hallo Uli,

    ok, das sind natürlich Argumente dagegen. Aber ich glaube, ein einzelner Ordner für alle Icons wird sich auf Dauer nicht halten lassen. Warten wir einfach mal ab.
    Was das Duplizieren angeht: wir haben ja jetzt schon identische Icons unter verschiedenen Namen im remotecontrol-Ordner.

    Also gut... kein eigener Ordner => also doch den rc_translate-Layer ins Modul einbauen Über den Icon-Ordner hätte sich das von alleine ergeben, so kam ich eigentlich auf die Idee.. *g*

    -----------------------
    Formuliere die Aufgabe möglichst einfach und
    setze die Lösung richtig um - dann wird es auch funktionieren.
    -----------------------
    Lesen gefährdet die Unwissenheit!

    betateilchen

    Geschafft, das Standardlayout für HMT350 ist fertig.

    (http://up.picr.de/15284966nt.png)

    Wird automatisch vom LISTENLIVE Modul bereitgestellt.
    -----------------------
    Formuliere die Aufgabe möglichst einfach und
    setze die Lösung richtig um - dann wird es auch funktionieren.
    -----------------------
    Lesen gefährdet die Unwissenheit!

    betateilchen

    Konzeptionelle Frage: mehrere Standardlayouts in einem Modul definieren?

    Meine modulinterne Layoutdefinition sieht im Moment so aus:


    sub HMT350_RClayout() {
    my @row;
    my $rownum = 0;

    $row[$rownum]="power:POWEROFF,:blank,:blank,:blank,mute:MUTE"; $rownum++;
    $row[$rownum]="home:HOMEsym,:blank,volplus:VOLUP,:blank,:TVout"; $rownum++;
    $row[$rownum]=":blank,:blank,up:UP,:blank,:blank"; $rownum++;
    $row[$rownum]="rewind:REWIND,left:LEFT,ok:OK,right:RIGHT,forward:FF"; $rownum++;
    $row[$rownum]=":blank,:blank,down:DOWN,:blank,:blank"; $rownum++;
    $row[$rownum]="ret:RETURN,:blank,volmin:VOLDOWN,:blank,stop:STOP"; $rownum++;
    $row[$rownum]=":blank,:blank,:blank,:blank,:blank"; $rownum++;
    $row[$rownum]="raw+PGUP:PAGEUP,:blank,raw+PAUSE:PAUSE,:blank,raw+ITV:ITV"; $rownum++;
    $row[$rownum]="raw+PGDN:PAGEDOWN,:blank,raw+MENU:MENU,:blank,raw+IRADIO:IRADIO"; $rownum++;
    $row[$rownum]=":FAV,:blank,raw+REPEAT:REPEAT,:blank,raw+FMRADIO:FMRADIO"; $rownum++;

    $row[19]="attr rc_iconpath icons/remotecontrol";
    $row[20]="attr rc_iconprefix black_btn_";

    return @row;
    }


    Damit wird von 71_LISTENLIVE das Layout HMT350 bereitgestellt. Nun gibt es natürlich verschiedene Geräte, die mit LISTENLIVE arbeiten, somit gibt es auch mehrere Fernbedienungen.
    Wie würdet Ihr das jetzt innerhalb eines Moduls umsetzen?

    Mein Gedanke ist, die Funktion an sich so auszugestalten, dass ich anhand eines Attributs "model" in der Gerätedefinition arbeite. Das würde auch soweit funktionieren.
    Die gleiche Vorgehensweise kann ich auch für das makenotify aufgerufen. Beide Funktionen werden in der Regel ja nur ein einziges Mal zum Definitionszeitpunkt aufgerufen, soweit ist das alles prima.

    Aber mir stellt sich folgende Frage:

    Wie kann 95_remotecontrol in so einem Fall alle von einem Modul zur Verfügung gestellten Layouts finden, um diese auch alle als verfügbare Layouts anzubieten?


    Viele Grüße
    Udo
    -----------------------
    Formuliere die Aufgabe möglichst einfach und
    setze die Lösung richtig um - dann wird es auch funktionieren.
    -----------------------
    Lesen gefährdet die Unwissenheit!

    UliM

    Zitat von: betateilchen schrieb am Do, 25 Juli 2013 09:43Wie kann 95_remotecontrol in so einem Fall alle von einem Modul zur Verfügung gestellten Layouts finden, um diese auch alle als verfügbare Layouts anzubieten?
    Hi Udo,
    einfach für jedes Layout einen Eintrag unter $data{RC_layout} platzieren.
    Auch hätte ich eine Bitte: Kannst Du Deinen Layout-Namen eine listenlive-Kennung (zB "LL") voranstellen, damit man sie zuordnen kann.
    Ebenso bei allen Subroutinen voranstellen, damit man bei Fehlermeldungen leicht das verursachende Modul finden kann. So beginnen in remotecontrol alle Routinen-Namen mit RC_ , in FHEMWEB mit FW_ , in FLOORPLAN mit FP_  etc

    Also zB
    $data{RC_layout}{LL_Xoro_HMT350} = LL_HMT350_RClayout();
    $data{RC_layout}{LL_Xoro_HMT370} = LL_HMT350_RClayout();
    $data{RC_layout}{LL_Envivo}      = LL_Envivo_RCLayout();


    Dabei kannst Du zB das HMT350 und 370 auf dieselbe Routine verweisen und innerhalb zB nach Model abfragen, oder auf separate Routinen.

    Gruß, Uli
    RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.