NEWS
HDMI ausgang am Raspberry Pi 5 schalten per exec
-
Hallo zusammen,
ich komme gerade leider nicht weiter mein Display, das an dem Raspi angeschlossen ist, auf dem auch iobroker läuft per exec an und abzuschalten. ich benutze die Befehle <WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --on> und <WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --off> die in der Konsole am Raspi oder per ssh (putty) auch funktionieren. beim starten des Scripts mit dem exec-Block in iobroker passiert allerdings einfach nichts. Ich habe Blockly dafür genutzt. kann mir hier jemand weiterhelfen?
-
Hallo zusammen,
ich komme gerade leider nicht weiter mein Display, das an dem Raspi angeschlossen ist, auf dem auch iobroker läuft per exec an und abzuschalten. ich benutze die Befehle <WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --on> und <WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --off> die in der Konsole am Raspi oder per ssh (putty) auch funktionieren. beim starten des Scripts mit dem exec-Block in iobroker passiert allerdings einfach nichts. Ich habe Blockly dafür genutzt. kann mir hier jemand weiterhelfen?
auch funktionieren.
Funktionieren die auch, wenn der user 'iobroker' diese Befehle ausführt?
-
auch funktionieren.
Funktionieren die auch, wenn der user 'iobroker' diese Befehle ausführt?
@Thomas-Braun ich hatte es schon mal mit dem sudo -u iobroker versucht, da kam allerdings ein Fehler raus. Müsste noch mal morgen abend schauen welcher genau. Es hat aber eher das sudo die Probleme gemacht. Ich hatte auch einfach mal ein sudo vor die oben beschriebenen Befehle in der Konsole gehängt und es kam der selbe Fehler raus. Hat sich also nicht nach einem Berechtigungsproblem angehört (wie gesagt, morgen mehr dazu).
Grundsätzlich bin ich sonst auch für andere Lösungen offen mein Display zu schalten. Eine schaltbar Steckdose ist jedoch keine Option für mich.
Gruß
Jannik -
Also jetzt noch mal mit dem Update: sowohl
sudo WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --off
als auch
sudo -u iobroker WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --off
liefern beide den Fehler:
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
failed to connect to display
Wie schon beschrieben, funktioniert es nur ohne das Sudo über SSH oder direkt am Pi, aber nicht über iobroker. Leider bin ich noch blutiger Anfänger was die Befehle am Pi oder auch iobroker betrifft. -
Also jetzt noch mal mit dem Update: sowohl
sudo WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --off
als auch
sudo -u iobroker WAYLAND_DISPLAY="wayland-0" wlr-randr --output HDMI-A-1 --off
liefern beide den Fehler:
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
failed to connect to display
Wie schon beschrieben, funktioniert es nur ohne das Sudo über SSH oder direkt am Pi, aber nicht über iobroker. Leider bin ich noch blutiger Anfänger was die Befehle am Pi oder auch iobroker betrifft.@Jannik1808
In meiner Doku habe ich ein Script gefunden.
Habe es aber nie gebraucht. Weiß also nicht ob es funktioniert.#!/bin/bash export XDG_RUNTIME_DIR=/run/user/1000 WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --off -
@mrjeschke
Leider das selbe Erfgebnis. In Putty funktioniert es, sobald ich jedoch ein Javascript ausführe über IObroker passiert gar nichts. Hier noch der Code den ich ins Script gepackt habe:exec('export XDG_RUNTIME_DIR=/run/user/1000');
exec('WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --off');noch zur info: der Javascript Instanz habe ich selbstverständlich "Kommando "setObject" erlauben" und "Kommando "exec" erlauben" aktiviert. Hat noch jemand eine Idee?
-
@mrjeschke
Leider das selbe Erfgebnis. In Putty funktioniert es, sobald ich jedoch ein Javascript ausführe über IObroker passiert gar nichts. Hier noch der Code den ich ins Script gepackt habe:exec('export XDG_RUNTIME_DIR=/run/user/1000');
exec('WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --off');noch zur info: der Javascript Instanz habe ich selbstverständlich "Kommando "setObject" erlauben" und "Kommando "exec" erlauben" aktiviert. Hat noch jemand eine Idee?
Ich mach das bei mir mit raspi 5 und wayland über den linux-control adapter mit den Befehlen:
export WAYLAND_DISPLAY=wayland-0; export XDG_RUNTIME_DIR=/run/user/1000; wlopm --on HDMI-A-1und
export WAYLAND_DISPLAY=wayland-0; export XDG_RUNTIME_DIR=/run/user/1000; wlopm --off HDMI-A-1
und per Typescript mit einem Hue Motion Detector:
// Konfiguration der Datenpunkte const idMotion = "hue.0.Motion_Stairs.presence"; const idDisplayOn = "linux-control.0.raspi2.Display_On"; const idDisplayOff = "linux-control.0.raspi2.Display_Off"; // Konfiguration der Zeiten const lockDuration = 3 * 60 * 1000; // 3 Minuten an const periodicInterval = 30 * 60 * 1000; // Alle 30 Minuten // Interne Variablen für die Steuerung let isLocked: boolean = false; let periodicTimer: any = null; let offTimer: any = null; /** * Hauptfunktion zum Einschalten des Displays * @param reason Grund für das Einschalten (für das Log) */ function activateDisplay(reason: string) { if (isLocked) return; log(`Display wird eingeschaltet (Grund: ${reason})`); isLocked = true; setState(idDisplayOn, true); // Falls noch ein alter Off-Timer läuft, löschen if (offTimer) clearTimeout(offTimer); // Timer für das Ausschalten nach 3 Minuten offTimer = setTimeout(() => { log("3 Minuten um: Schalte Display AUS."); setState(idDisplayOff, true); isLocked = false; offTimer = null; }, lockDuration); // Wichtig: Den periodischen 30-Minuten-Timer neu starten startPeriodicInterval(); } /** * Startet oder resettet den 30-Minuten-Timer */ function startPeriodicInterval() { if (periodicTimer) { clearTimeout(periodicTimer); } periodicTimer = setTimeout(() => { activateDisplay("Periodische Aktivierung (30min)"); }, periodicInterval); } // Event-Handler: Bewegungsmelder on({ id: idMotion, change: "ne", val: true }, (obj) => { if (!isLocked) { activateDisplay("Bewegung erkannt"); } else { log("Bewegung ignoriert, da Display bereits aktiv ist.", "debug"); // Optional: Auch bei Bewegung während das Display an ist, // könnte man den Timer resetten, damit die 30min erst danach starten. startPeriodicInterval(); } }); // Initialer Start des periodischen Timers beim Script-Start startPeriodicInterval(); log("Display-Steuerung mit Anti-Burn-In (30min Intervall) gestartet.");Funktioniert bei mir einwandfrei
-
@mrjeschke
Leider das selbe Erfgebnis. In Putty funktioniert es, sobald ich jedoch ein Javascript ausführe über IObroker passiert gar nichts. Hier noch der Code den ich ins Script gepackt habe:exec('export XDG_RUNTIME_DIR=/run/user/1000');
exec('WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --off');noch zur info: der Javascript Instanz habe ich selbstverständlich "Kommando "setObject" erlauben" und "Kommando "exec" erlauben" aktiviert. Hat noch jemand eine Idee?
@mrjeschke
Leider das selbe Erfgebnis. In Putty funktioniert es, sobald ich jedoch ein Javascript ausführe über IObroker passiert gar nichts. Hier noch der Code den ich ins Script gepackt habe:exec('export XDG_RUNTIME_DIR=/run/user/1000');
exec('WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --off');noch zur info: der Javascript Instanz habe ich selbstverständlich "Kommando "setObject" erlauben" und "Kommando "exec" erlauben" aktiviert. Hat noch jemand eine Idee?
1 zeig bitte mal die komplette Shell Ausgabe (inklusive prompt und deiner Befehlszeile) wenn du das auf der Shell machst, da funktioniert es ja wohl.
2) jeder einzelne exec Befehl öffnet eine eigenständige in sich geschlossene Shell, die nach Abschluss auch wieder geschlossen wird.
Da du 2x exec hintereinander ausführst, könnte es sein das der erste Export nicht mehr im Environment der 2. Session vorhanden ist. Entweder du verbindest beide Befehle mit && oder du erstellst ein shellscript das du dann aufrufst. -
@icebear Vielen Dank für diesen sehr hilfreichen Beitrag. Mit etwas Abwandlung hat es funktioniert (die Steuerung mach ich nun über meinen HMIP Bewegungsmelder per Blockly-Skript). Zu meinem Vorgehen:
Ich habe mein Raspi als Host festgelegt (nicht Iobroker) und Sudo benutzen aktiviert. anschließend habe ich meine oben genannten Befehle angelegt (mit den von dir vorgeschlagenen bekomme ich den Fehler: ERROR: Output 'HDMI-A-1' does not exist.). Somit funktioniert jetzt endlich alles wie gewünscht :)
-
@icebear Vielen Dank für diesen sehr hilfreichen Beitrag. Mit etwas Abwandlung hat es funktioniert (die Steuerung mach ich nun über meinen HMIP Bewegungsmelder per Blockly-Skript). Zu meinem Vorgehen:
Ich habe mein Raspi als Host festgelegt (nicht Iobroker) und Sudo benutzen aktiviert. anschließend habe ich meine oben genannten Befehle angelegt (mit den von dir vorgeschlagenen bekomme ich den Fehler: ERROR: Output 'HDMI-A-1' does not exist.). Somit funktioniert jetzt endlich alles wie gewünscht :)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden