Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Monitor an raspi über smarthomeNG-Item einschalten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Monitor an raspi über smarthomeNG-Item einschalten

    Hallo zusammen,

    ich nutze einen Touch-Monitor an einem Raspi für die VISU (smartVISU). Der Monitor ist aktuell so konfiguriert, dass er sich bei Touch einschaltet und nach einer gewissen Zeit der Inaktivität wieder ausschaltet. Leider dauert es einige Sekunden, bis der Monitor bei Berührung an ist. Deshalb möchte ich, dass der Monitor bereits eingeschaltet wird, wenn die Präsenzmelder im Flur die Anwesenheit einer Person erkennen. Dafür müsste also irgendwie das Item für Präsenz von meinem smarthomeNG-Server zum Raspi gelangen, auf dem per Browser die VISU angezeigt wird.

    Könnt Ihr mir ein paar Hinweise geben, wie ich das am besten angehen kann?

    Systeminformationen smarthomeNG-Server:
    - SmartHomeNG Version 1.9.3-master
    - SmartHomeNG Plugins 1.9.3-master
    - Python 3.9.2
    - Debian bullseye
    - smartVISU-Version 3.2.2

    Auf dem Raspi läuft auch bullseye.
    Cheers
    Art Mooney

    #2
    Ich würde mal Tante Google fragen: "touch monitor raspi ein und ausschalten per skript"
    je nachdem was genau für einen Monitor Du da dran hast wird es wohl unterscheidliche Ansätze geben...

    Kommentar


      #3
      Ich habe einen iiyama Prolite T2255MSC-B1. Das Abschalten bei idle funktioniert auch.

      Auf dem Raspi nutze ich dafür untenstehenden Code, der mittels systemd beim Systemstart geladen wird.

      Code:
          if [ "$IDLE_TIME" -gt "$IDLE_LIMIT" ]; then
            xrandr --output "$OUTPUT" --off
          else
            xrandr --output "$OUTPUT" --auto
          fi
      ​
      Damit kann ich den Monitor also abschalten, derzeit noch zeitabhängig. Ich möchte nun irgendwie von dem Rechner, auf dem smarthomeNG läuft den Wert eines Items auf den Raspi schreiben, damit der abhängig von dem Item den Monitor schalten kann, also nicht mehr zeitabhängig.
      Cheers
      Art Mooney

      Kommentar


        #4
        Eine simple Variante wäre, per ssh (mit Key ohne Passwort) auf dem raspi das Kommando "xrandr --output "$OUTPUT" --auto" auszuführen. Du müsstest $OUTPUT ersetzen und schauen, dass die Pfade und Rechte passen... ggf. mit sudo.

        Kommentar


          #5
          Danke, das hört sich einfach an. Mir ist dennoch nicht ganz klar, wie ich das umsetze. Würde ich in einer Logik, wenn z.B. das Item für die Anwesenheit auf True springt, eine ssh-Session aufbauen und den Befehl schreiben?

          So etwa? Erstellt mithilfe von ChatGPT.

          Code:
          import paramiko
          
          HOST = "192.168.1.50"
          USER = "pi"
          KEY_FILE = "/home/userx/.ssh/id_rsa"
          OUTPUT = "HDMI-1"
          
          CMD_ON  = f'xrandr --output "{OUTPUT}" --auto'
          CMD_OFF = f'xrandr --output "{OUTPUT}" --off'
          
          
          def run_ssh(cmd):
              client = paramiko.SSHClient()
              client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
              try:
                  client.connect(
                      hostname=HOST,
                      username=USER,
                      key_filename=KEY_FILE,
                      look_for_keys=False,
                      allow_agent=False
                  )
                  stdin, stdout, stderr = client.exec_command(cmd)
                  out = stdout.read().decode().strip()
                  err = stderr.read().decode().strip()
                  if err:
                      logger.warning(f"SSH-Error: {err}")
                  return out
              finally:
                  client.close()
          
          
          value = sh.raspi_monitor()
          
          if value:
              logger.info("Monitor EIN")
              run_ssh(CMD_ON)
          else:
              logger.info("Monitor AUS")
              run_ssh(CMD_OFF)
          ​
          Cheers
          Art Mooney

          Kommentar

          Lädt...
          X