Willkommen! Melden Sie sich an oder registrieren Sie sich.

Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.

Anmelden - oder - Benutzerkonto erstellen

Wie kann man ein Menüpunkt in ein Skript einbauen?

  • Nicht gleich steinigen, ich habe die Frage gestern auch schon im IHAD gestellt, aber leider Antwort erhalten und es brennt mir ein kleines bißchen unter den fingern, daher meine Frage auch nochmal hier im Board:


    Ich möchte mir ein Skript bauen welches folgende Auswahl toggelt:


    1) Hauptmenü -> Einstellungen -> System -> A/V Einstellungen -> Bildwiederholrate -> 50Hz


    2) Hauptmenü -> Einstellungen -> System -> A/V Einstellungen -> Bildwiederholrate -> 60Hz


    Meine Frage ist nun: Wie greife ich aus dem Skript heraus auf den jeweiligen Pfad/Befehl zu?
    Kann mir da einer der Experten helfen?

  • Mir fallen da 3 Lösungen ein:
    1. Bau Dir ein Plugin
    2. Hinterlege das Script und führe es mit dem Dream-Explorer aus
    3. Gab es da nicht ein Plugin, dem man Scripts hinterlegen konnte? Oldboke weiß das bestimmt noch :)

    Boxen: DM7080HD, DM820HD, DM8000, DM900ultraHD

    In 50% sitzt das Problem vor dem Gerät und bei den anderen 50% hab ich mich geirrt, dass es nicht davor sitzt :cocksy:

  • Bei OoZooN gibt es das userscripts-plugin.
    Aber dreamexplorer tut's ja auch. :)


    Ich verstehe nur nicht, wo da der Sinn liegt.
    Bildwiederholrate multi ist doch eigentlich Standard. :think:


    Panasonic TX50-EXW784
    Panasonic SC-ALL70TEGK / SC-ALL2 wireless 5.1 Soundbar

    dm8000, dm7080, dm800sev2, dm900-dvb-s2-unicable, dm900-dvb-s2-multisat


    Synology DiskStation

  • Ein Plugin möchte ich ja bauen, dazu habe ich alles notwendige, was mir aber fehlt, ist der Code wie ich den Aktion:
    "Hauptmenü -> Einstellungen -> System -> A/V Einstellungen -> Bildwiederholrate -> 50Hz"
    überhaupt aufrufe. An der Stelle benötige ich die Hilfe.



    Der Grund warum ich das brauche ist folgender:
    Ich habe einen neuen SAMSUNG TV und der bekommt es nicht auf die Reihe den Ton wiederzugeben wenn die DM schon vor dem TV an war!?!?
    Wenn also eine Aufnahme läuft und der TV erst nachträglich eingeschaltet wird, dann gibt es zwar ein Bild aber kein Ton. Das gilt bis zum reboot der Box. Da dies aber keine gültig Lösung für mich ist, habe ich gesucht und herausgefunden: Wenn ich die Bildwiederholfrequenz ändere, dann gibt es wohl ein Signal über das HMDI Kabel an die Glotze die sie dazu bewegt den Ton zu aktivieren ohne die ganze Box zu booten.
    Daher mein Wunsch mit einem Tastendruck o. g. Aktion durchzuführen und nicht jedesmal durch ganze Menü zu müssen ... besonders für die Dame des Hauses unzumutbar ;-)

    Grüße Attila

    Dieser Beitrag wurde bereits 3 Mal editiert, zuletzt von AttilaE () aus folgendem Grund: Nachtrag

  • wie schaltest du 50/60MHz um?


    Ein Plugin, dass per Tastendruck (Quickbutton) oder Menüeintrag das Script ohne OSD Meldung ausführt, habe ich schon ein paar mal verwendet
    als Vorlage kannst du dir ja das Oledtoggle Plugin ansehen <jump to DMM Board>


    Du kannst entweder den Befehl oder das Script über das os im Plugin ausführen. Das Script ausführen hat den Vorteil, dann man nicht nach jeder Änderung des Scriptes die GUI neu starten muss.
    Wenn du den Befehl zum Umschalten direkt im Plugin ausführst, musst du jedes mal die GUI neu starten, damit die .pyo neu geschrieben wird

  • Einfach daran denken, dass da je nachdem noch weitere werte mitangepasst werden müssen. Aber das siehst du ja, wenn du im gui den wert änderst. Wobei die bildwiederholrate glaub eh irgendwo reingeschrieben wird. Du könntest also auch gleich das machen. Alles auf eigene gefahr.

  • Im Plugin wird das so gemacht:

    Code
    1. mode_50 = modes.get(50) mode_60 = modes.get(60) if mode_50 is None or force == 60: mode_50 = mode_60 if mode_60 is None or force == 50: mode_60 = mode_50 try: open("/proc/stb/video/videomode_50hz", "w").write(mode_50) open("/proc/stb/video/videomode_60hz", "w").write(mode_60) except IOError: try: # fallback if no possibility to setup 50/60 hz mode open("/proc/stb/video/videomode", "w").write(mode_50) except IOError: print "setting videomode failed." try: open("/etc/videomode", "w").write(mode_50) # use 50Hz mode (if available) for booting except IOError: print "writing initial videomode to /etc/videomode failed." self.updateAspect(None)


    Den Wert schreiben geht auch auf der Console


    z.B.

    Code
    1. echo 50 /proc/stb/video/videomode_50hz

    Boxen: DM7080HD, DM820HD, DM8000, DM900ultraHD

    In 50% sitzt das Problem vor dem Gerät und bei den anderen 50% hab ich mich geirrt, dass es nicht davor sitzt :cocksy:

  • Super Klasse! Ich danke Euch für die Lösungsansätze, da werde ich mal probieren was mir am Besten gefällt bzw. was ich mit meinem "Nicht-Wissen" am einfachsten realisieren kann.


    Das "Plugin" muß ja nicht wirklich die 50Hz <> 60Hz schalten. Es reicht völlig aus wenn im Screen der Wert geändert wird, egal von wo nach wo. Das reicht wohl aus um das notwendige Signal über das HDMI Kabel an den TV zu senden.

  • Im Plugin wird das so gemacht:


    marthom ,
    ich habe versucht das Plugin zu bauen, aber leider sagt mir die Box:
    Error in Zeile 14: "unexpected indent": mode_60 = modes.get(60)
    hast Du eine Idee, was da nicht stimmt?

  • Der Code ist ein Auszug der VideoHardware.py


    Wollte Dir nur aufzeigen wo Du suchen musst.



    Dein Plugin kenne ich nicht und gepostet hast Du es auch nicht. Wie soll man Dir dann helfen?

    Boxen: DM7080HD, DM820HD, DM8000, DM900ultraHD

    In 50% sitzt das Problem vor dem Gerät und bei den anderen 50% hab ich mich geirrt, dass es nicht davor sitzt :cocksy:

  • Ach so, dann habe ich verstanden wo das Problem liegt.
    Wie gesagt, ich versuche es mit meinem "Nichtwissen" zu basteln. Ich dachte, ich könnte den Code den Du geposted hattest in ein Plugin einbetten und gut ist. Sorry, das war mein Fehler. Dann werde ich wohl doch besser auf das Plugin "oled toggle" umsteigen und dort mein zu-Fuss-Skript einbauen. Für das andere fehlt mir dann doch das notwendige know-how.
    Vielen Dank fürs schnelle Feedback!

  • Hallo
    Python mag es nicht, wenn man Tab und Leerstellen mischt und ist bei Einrückungen doch sehr empfindlich. Diese Fehler können einen Anfänger doch fast in den Wahnsinn treiben (unexpected indent).


    Vielleicht wäre es ein Ansatz, erstmal auszulesen, was in der Datei drin steht, dann etwas anderes reinschreiben, kurz danach wieder das, was dringestanden hatte wieder reinschreiben - dann bleibt der ursprüngliche Wert erhalten - an der ursprünglichen Einstellung wird nichts geändert.
    Das Plugin dann auf (mit Quickbutton?) auf eine Taste gelegt, einfacher geht dann nicht mehr - IMHO.

  • Der Code, den marthom raus gesucht hat, greift ja im Wesentlichen nur auf das /proc/ Interface zu. Das kann man auch sehr gut aus einem Shell-Script machen, falls dir das mehr liegt. Das Shell-Script musst/kannst du dann eben mit Userscripts-Plugin oder DreamExplorer ausführen. Evtl. kann man im GP3 Quickbutton oder MultiQuickbutton auch direkt ein Shell-Script ausführen und braucht kein Python?

  • Fred ,
    ich glaube, ich brauche nochmal kurz Deine Hilfe. Ich habe versucht Dein "oledtoggle_1.0" Plugin so umzubauen, daß es einfach mein Skript aufruft und ausführt. Aber leider wird dies nicht ausgeführt?!?!
    Wenn ich mein Skript über den Dream-Explorer starte, dann läuft es einwandfrei. Ich glaube, ich habe da noch den ein oder anderen Bug im Plugin Coding:


    Code
    1. # SAMSUNG TV Bug work around# Version 1.0from Plugins.Plugin import PluginDescriptorimport osdef main(session, **kwargs): os.system("$(/media/hdd/skripte/Samsung.sh &)")def Plugins(**kwargs): return [PluginDescriptor(name='SAMSUNG Bug', description=_('toggle 50Hz/60Hz'), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main), PluginDescriptor(name='SAMSUNG Bug', description=_('toggle 50Hz/60Hz'), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)]


    Im Skript selbst steht auch nur eine Zeile:

    Shell-Script
    1. #!/bin/sh
    2. ebox exit exit exit exit menu 6 2 1 down down right exit ok exit exit exit


    Kannst Du (oder auch gerne jemand anderes) mir bitte jemand auf die Sprünge helfen?


    Vielen Dank im Voraus!

  • $() brauchst du bei os.system nicht. Zumindest hab ich noch nie sowas verwendet.

  • Ich würde das Skript ganz anders aufbauen. Statt Tastendrücke auszuführen, was nicht wirklich Update-sicher (was ist, wenn sich mal ein Menüpunkt verschiebt) und auch generell einfach kein guter Stil ist, würde ich wie oben gesagt direkt die Funktion des Menü-Eintrags nachbauen.


    z.B.:

    Code
    1. echo "50" > /proc/stb/video/videomode_50hzecho "60" > /proc/stb/video/videomode_60hz


    Evtl. brauchst du auch /proc/stb/video/videomode ? Und probier auch mal 50 bei 60 reinzuschreiben und umgekehrt.


    Die Zeilen kannst/solltest du natürlich vorher per Telnet auf der Konsole testen ;)
    Im Menü kannst du auch mal Einstellungen verändern und in der Konsole dann auslesen, was da geändert wird:

    Code
    1. cat /proc/stb/video/videomode_50hz
    2. cat /proc/stb/video/videomode_60hz
    3. /proc/stb/video/videomode
  • Hallo m0rphU,
    das werde ich natürlich auch ausprobieren. Ich bin jetzt nur schon total happy, daß ich überhaupt eine Lösung mit "Einem-Tastendruck" habe, vor allem für die Dame des Hauses sehr wichtig ;-)


    Ich melde mich wenn ich das Plugin umgebaut habe so (erfolgreich) oder auch so (nicht erfolgreich) und dann ganz bestimmt ... ;-)