Ankündigung

Einklappen
Keine Ankündigung bisher.

Bildschirm schalten/Raspberry

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

    Bildschirm schalten/Raspberry

    Hallo zusammen, ich würde gerne einen Bildschirm, der an einem Raspberry hängt schalten (Nach 5 Minuten sollte der ausgeschaltet werden)
    Die Timings und alles weitere würde ich gerne per Openhab steuern. (Bewegungsmelder in Openhab bereits angebunden)
    Ein Bewegungsmelder am Pi kommt für mich nicht in Frage.

    Der Befehl um einen verbundenen Bildschirm an einem Raspberry zu schalten ist "tvservice -o" bzw "tvservice -p"

    Wie bekomme ich es hin, nach aufruf einer Website den Bildschirm zu schalten?
    Ich kann natürlich Openhab drauf installieren, jedoch bekomme ich Speicherprobleme mit dem Content der auf dem Bildschirm läuft (Smartmirror)
    Möglichst ohne den Benutzer www-data root Rechte zu gewähren

    #2
    Hi Dominic,

    bin zwar nicht der Linux Spezialist - aber ich würde das mit Mr Google versuchen und über einen RemoteProcedureCall auf den Smartmirror PI ein Script Ausführen das den Monitor an bzw aus schaltet.

    Das zumindest schlägt Google vor (http://docs.unity3d.com/Manual/net-RPCDetails.html)

    Grüsse
    Karsten


    Kommentar


      #3
      Hi Dominic,

      alternativ könntest du einen MQTT-Server (z.B: Mosquitto, mosquitto.org) auf dem openHAB Server installieren. Dazu auf dem Smartmirror Pi eine Python oder C/C++ Client (s. https://eclipse.org/paho/ der die Befehle die er über MQTT empfängt lokal ausführt. Ich würde vermuten, dass das entsprechende Python oder C/C++ Skript keinen großen Footprint hat (auf jeden Fall kleiner als eine separate openHab Installation).

      Das wäre aus Openhab-Sicht dann relativ einfach mit nem Item lösbar (z.B.)

      Switch mySwitch {mqtt=">[myMQTTbroker:/myhouse/monitor:command:ON:1],>[myMQTTbroker:/myhouse/monitor:command:OFF:0]"}

      Aufwand wäre dann das Skript für den Smartmirror Pi zu schreiben.
      (Python bzw. C/C++ kann ich aber leider nicht).

      Grüße
      Michael

      Kommentar


        #4
        Ich hab das mit netcat und socat gelöst. Auf dem openHAB-Server reicht eine Zeile in einer Rule:
        Code:
        executeCommandLine("echo "+myState+" | netcat die.ip-addresse.des.clients port")
        wobei ich ein Bash-Script aufrufe, aber so wie hier beschrieben sollte es genauso gut funktionieren..
        Auf der Clientseite reicht es, mit
        Code:
        socat TCP4-LISTEN:port,fork EXEC:/usr/sbin/myscript &
        einen miniserver zu starten, socat lauscht dann auf dem angegebenen Port, und wenn etwas rein kommt (also "ON" oder "OFF") wird das angegebene Script gestartet und der Wert als Parameter übergeben. Das Script selbst muss dann halt so gestrickt sein, dass es den Bildschirm ohne root-Rechte ein-und ausschalten darf.

        Kommentar


          #5
          Hallo Udo1toni, Hallo Mitch77

          Eure Lösungen gefallen mir gut.
          Es gibt leider Probleme bei der Ausführung.
          Das Skript kann ich manuell ausführen
          Jedoch wird es Serverseitig nicht ausgeführt.
          Entweder gibt es einen Fehler bzgl der "unären Operatoren" oder es passiert schlichtweg nichts.

          Client (OH Server)
          Code:
          echo OFF | nc smartmirror 1337
          Server
          Code:
          socat TCP4-LISTEN:1337,fork EXEC:/home/pi/tv.sh &
          Inhalt der tv.sh
          Code:
          #!/bin/bash
          if   [ "$1" = "OFF" ]; then
                  /opt/vc/bin/tvservice -o
          elif [ "$1" = "ON" ]; then
                  /opt/vc/bin/tvservice -p
          fi

          Kommentar


            #6
            Hast Du smartmirror in der hosts-Datei stehen?
            Wie sieht es aus, wenn Du den Befehl direkt an der Kommandozeile eingibst, evtl. direkt mit der ip?
            Wenn Du den Server auf dem Smartmirror gestartet hast, siehst Du den laufenden socat in der Prozessliste?

            Kommentar


              #7
              smartmirror war nun ein Beispiel für einen Hostnamen, es ist in hosts bzw beim Raspberry in hostname eingetragen.
              eventuell ein berechtigungs problem?

              Kommentar


                #8
                Ja, das mit fehlender Berechtigung wäre möglich. Ich lasse socat beim Rechnerstart von einem Miniscript als Dienst starten, da wird es vermutlich von root gestartet. Das ist bei mir kein großes Problem, weil dieser Rechner ein reines RO-Dateisystem hat und ohnehin nur selten eingeschaltet ist (Musik/Lichtsteuerung im Garten, integriert im Gartenmöbel)

                Kommentar


                  #9
                  Hab grad mat Tante Google gefragt, socat without root und gleich der erste Link führt auf eine Seite, in der verschiedene Beispiele gelistet sind. Offensichtlich ist fork der Übeltäter, weshalb erweiterte Rechte benötigt werden.
                  Unter anderem wird aber auch gezeigt, wie zumindest die Rechte für das aufgerufene Script gedropped werden können. socat läuft dann natürlich trotzdem als root.

                  Kommentar


                    #10
                    Hast du dir mal das exec binding angesehen? IMHO man kann damit z.B. bash scripte ausführen.

                    Kommentar


                      #11
                      Ja, das exec binding kenne ich.
                      Problem ist, dass ich auf dem Raspberry ungern OH installieren möchte. Ist eine Ressourcenfrage.
                      In meiner Openhab installation möchte ich lediglich ein Http Request starten und dann auf dem Raspberry den Bildschirm schalten.

                      Leider funktioniert das weiterhin mit netcat nicht.. berechtigungen stimmen eigentlich..
                      Es spielt demnach keine rolle ob als root ausgeführt oder nicht.

                      Hat noch jemand Hinweise?

                      Kommentar


                        #12
                        Leider ist es mir bisher nicht gelungen, eine Lösung zu realisieren.
                        Das Problem mit socat hätte ich gerne gelöst, es funktioniert bisweilen überhaupt nicht den Bildschirm zu triggern.

                        Vielen Dank

                        Kommentar


                          #13
                          Um Programme remote auszuführen bietet sich doch SSH an.

                          Kommentar


                            #14
                            Das Problem ist ja eher, dass das Programm automatisch von openHAB aufgerufen werden soll, und openHAB läuft auf einem anderen Rechner. Man könnte auch ein lighttpd aufsetzen und ein cgi einrichten, oder sowas ähnliches, da hab ich aber keine Ahnung was dazu alles nötig ist.
                            Ärgerlich, dass socat hier Probleme macht, es hätte so einfach sein können...

                            Kommentar


                              #15
                              Das Aufruf kann ja mit dem exec Binding erfolgen.

                              An der OpenHab Installation einen Shell öffnen.
                              Für den User unter dem OpenHab läuft, fall noch nicht existent, einen SSH-Key erzeugen:
                              ssh-keygen
                              Den Publickey auf den Display-Host kopieren:
                              ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
                              Das Display kann dann mit deinem Script tv.sh von der OH Installation mit
                              ssh user@server tv.sh ON
                              ssh user@server tv.sh OFF
                              gesteuert werden.
                              Zuletzt geändert von bernsen; 20.04.2015, 07:07.

                              Kommentar

                              Lädt...
                              X