Script zum deaktivieren des HDMI ports

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo

    ich habe ein Skript benutzt, um den HDMI Port mit einem Bewegungssensor auszuschalten. Jetzt habe ich das RPI mit Bullseye neu installiert. (vorher hatte ich buster)

    und jetzt funktioniert das Skript nicht mehr:

    Starte ich nun das Script, erhalte ich:

    no motion!

    display_power=1

    soweit ok.

    Wenn nun der Sensor eine Bewegung erkennt, erhalte ich

    motion!

    display_power=1

    new motion!

    soweit auch noch ok

    nach 15 Sekunden erhalte ich dann

    no motion!

    display_power=1

    dann passiert nichts mehr, ich sollte aber zum Schluss folgendes erhalten:

    display_power=0

    und nicht

    display_power=1

    HDMI port bleibt nun immer an.

  • Sollte ich damit nicht den HDMI Port ausschalten können?

    Nein, bei aktuellem Bullseye funktioniert das nicht mehr.

    Versuch es mal mit xset -display :0 dpms force on für an, bzw. xset -display :0 dpms force off für aus, erstmal im Terminal! Stell aber vorher sicher, dass Du eine SSH oder VNC Verbindung für den Notfall hast!

  • Nein, bei aktuellem Bullseye funktioniert das nicht mehr.

    Versuch es mal mit xset -display :0 dpms force on für an, bzw. xset -display :0 dpms force off für aus, erstmal im Terminal! Stell aber vorher sicher, dass Du eine SSH oder VNC Verbindung für den Notfall hast!

    Hallo,

    die beiden Befehlen funktionieren bei mir über das Terminal.

    Wie kann ich aber die Befehle in ein Python Skript einbinden?

    Wenn ich den Befehl in das Skript schreib kommt folgende Fehlermeldung: Syntax Error: illegal target for annotation?

    Könnt Ihr mir weiterhelfen?

  • Hallo,

    anbei der Code.

    Das ist ein Test Skript und ich will schauen, dass der Monitor ausgeht.

    Code
    #!/usr/bin/env python3
    
    import os
    import time
    import subprocess 
    print("START")
    time.sleep(10)
    #subprocess.run (["vcgencmd", "display_power", "0"])
    #os.system('vcgencmd display_power o')
    (xset -display :0 dpms force off)
  • Was soll denn Zeile 10 bedeuten? Da fehlt wohl etwas...

    Das war ja der Vorschlag von hyle.

    Nein, bei aktuellem Bullseye funktioniert das nicht mehr.

    Versuch es mal mit xset -display :0 dpms force on für an, bzw. xset -display :0 dpms force off für aus, erstmal im Terminal! Stell aber vorher sicher, dass Du eine SSH oder VNC Verbindung für den Notfall hast!

    da er im Terminal funktioniert, dachte ich das diesere auch in Skript gehen sollte.

    simonz

    Kannst du mir helfen, dass ich den Befehl zum laufen bekomme?

  • MattD Der Vorschlag von hyle ist ein Programmaufruf in der Shell. Den kann man natürlich nicht einfach so in einen Python-Quelltext kopieren als wäre es Python-Code.

    `os.system()` solltest Du am besten gleich wieder vergessen. Dessen Dokumentation verweist auch auf das `subprocess`-Modul. Ungetestet:

    Python
    subprocess.run(["xset", "-display", ":0", "dpms", "force", "off"], check=True)

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Eigentlich war das mit dem vergessen ja an MattD gerichtet, aber im Grunde dann doch auch an Dich, denn wenn da eine schlechte Variante und eine gute Variante zum anpassen zur Verfügung stehen, macht es ja nicht so viel Sinn die schlechte zu nehmen. 😎

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Eigentlich war das mit dem vergessen ja an MattD gerichtet, aber im Grunde dann doch auch an Dich, denn wenn da eine schlechte Variante und eine gute Variante zum anpassen zur Verfügung stehen, macht es ja nicht so viel Sinn die schlechte zu nehmen. 😎

    __blackjack__ Dazu habe ich dann noch eine kleine Frage...

    Das ältere os.system() sieht ja irgendwie "übersichtlicher" aus

    Code
    os.system("xset -display :0 dpms force off")

    als subprocess.run():

    Code
    subprocess.run(["xset", "-display", ":0", "dpms", "force", "off"], check=True)

    Ist es aus Deiner Pythopath-Sicht okay, das folgendermaßen zu formulieren:

    Code
    subprocess.run("xset -display :0 dpms force off".split(), check=True)

    ?

  • Ich möchte mich hier aus aktuellem Anlaß kurz einklinken. Da ich schon ein paar Tage älter bin, wollte ich gerne wieder zurück zu den 'Roots' (C64 - aus den 80ern); in diesem Fall "COMBIAN64". Das ist ein C64-Image, was auf dem Pi lauffähig ist, und bei mir auch sehr gut funktioniert (leider grundsätzlich auf HDMI0 - linker Monitor). Ich hätte die Ausgabe aber lieber auf HDMI1 (rechter Monitor). Dazu habe ich in der zugehörigen 'config.txt' folgendes eingegeben: Video-Output Priorität von HDMI0 » HDMI1: "framebuffer_priority=7". Leider ignoriert der C64-Emulator diese Angabe und gibt immer noch auf HDMI0 (≙ HDMI1 in 'config.txt') aus. In der 'config.txt' habe ich zusätzlich die Angaben zum linken Monitor rausgenommen; dort stehen nur noch Angaben zum rechten Monitor (in 'config.txt' ist das HDMI2). Bringt aber alles nix. Ausgabe bleibt auf linkem Monitor. Hat jemand 'ne Idee, wie man dem Emulator diese Eigenwilligkeit abgewöhnen könnte? :/

    Lernen ist Erfahrung. Alles andere ist einfach nur Information. ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!