PJLink Beamer Control

Natürlich ist auch unser Epson EH-TW7300 Beamer in die Smart Home Steuerung eingebunden. Da der Epson Beamer mit dem PJLink Protokoll arbeitet, habe ich eine kleine auf PHP basierte API erstellt. Damit ist dann auch eine Steuerung über den Loxone Miniserver oder eine andere Steuerung möglich. Aus Zeitgründen ist diese aktuell noch ohne eine grafische Benutzeroberfläche (GUI).

PJLink Beamer Control - GUI

PJLink Protokoll

Epson und auch andere Hersteller nutzen das standardisierte PJLink Protokoll. Für alle die es interessiert, im folgenden Link findet ihr die PJLink Class 2 Spezifikationen.

PJLink Specifications (Externer Link)

Durch die Verwendung von TCP Paketen eine nicht gerade schöne Schnittstelle, aber immer noch wesentlich besser als keine. 😉

PJLink Beamer Control

Kommen wir jetzt zur API. Ihr benötigt zur Ausführung einen Webserver mit PHP Support. Den Quellcode habe ich auf Github abgelegt und ist unter dem folgenden Link zu finden.

Github Repository PJLink Beamer Control (Externer Link)

In den Dateien ist zwingend eine Anpassung der config.php an die Umgebung notwendig. Das Backend, also die eigentliche API, ist in der control.php zu finden.

Die Steuerung vom Beamer ist dann ganz einfach über die folgenden Befehle möglich.

http://<IP Webserver>/control.php?power=on
http://<IP Webserver>/control.php?power=off
http://<IP Webserver>/control.php?mute=on
http://<IP Webserver>/control.php?mute=off
http://<IP Webserver>/control.php?input=1
http://<IP Webserver>/control.php?input=2
http://<IP Webserver>/control.php?input=get

Der aktuelle Status (Lampenstunden, Power und Mute) ist über die folgende URL auslesbar.

http://<IP Webserver>/control.php?status=all

Der Webserver liefert als Antwort eine JSON zurück. Diese kann dann von der Steuerung ausgelesen werden.

{"lamp":"920","power":"0"}

Ist der Beamer eingeschaltet, ist zusätzlich der aktuelle Wert für “mute” vorhanden.

Loxone Miniserver

Die Steuerung und die Statusabfrage über den Loxone Miniserver ist identisch zu vielen anderen Beispielen.

Befehle

Zur Steuerung wird zuerst ein “Virtueller Ausgang” angelegt und dort die Adresse vom Webserver (http://<IP Webserver>) eingetragen.

Für jeden Befehl wird jetzt ein “Virtueller Ausgang Befehl” angelegt und dort der entsprechende Befehl (/control.php?<cmd>=<value> also zum Beispiel /control.php?power=on) unter “Befehl bei EIN” eingetragen.

Status

Für die Statusabfrage wird ein “Virtueller HTTP Eingang” mit der vollständigen URL (http://<IP Webserver>/control.php?status=all) erstellt.

Mit dem “Virtueller HTTP Eingang Befehl” werden dann die einzelnen Informationen aus dem JSON Response ausgelesen. Dazu wird unter Befehlserkennung z. B. "power":\v oder "lamp":\v eingetragen.

Sollte etwas fehlen oder unklar sein, meldet euch einfach!

14 Gedanken zu „PJLink Beamer Control“

  1. Sehr cool… ich bin damals daran gescheitert und habe den Beamer per RS232 eingebunden… danke, damit werde ich es nochmal versuchen… hast du auch Quellen umschalten?

    1. Hallo Nico,

      ich habe Source Code im GitHub um die Auswahl der Quelle (Input) erweitert. Teste mal wenn der Beamer an ist, was mit dem input=get Befehl zurückkommt. Es müssten für die Eingänge mehrere Werte zwischen 11 und 59 angezeigt werden. Diese musst du dann im switch case Konstrukt unter input einbauen, ein Beispiel mit Eingang 1 und 2 bzw. 31 und 32 ist vorhanden. Meld dich dann gerne nochmal!

      Viele Grüße
      Stefan

  2. Hallo Stephan,

    irgendwas läuft nicht ganz rund….
    Zwar kann ich den Beamer einschalten, Quelle abfragen, Quelle setzen, super!!!!
    Aber ich bekomme immer auch eine PHP Fehlermeldung mit ausgegeben, hier mal ein paar Beispiele

    http://localhost/pjlink/control.php?input=get
    Notice: Undefined variable: pwtoken in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 71
    %1INPT=32
    Notice: Undefined index: status in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 85
    []

    http://localhost/pjlink/control.php?status=all
    Notice: Undefined variable: pwtoken in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 87

    Deprecated: Function split() is deprecated in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 102

    Notice: Undefined variable: pwtoken in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 87

    Notice: Undefined variable: pwtoken in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 87
    {“lamp”:1460,”power”:1,”mute”:30}
    http://localhost/pjlink/control.php?input=11
    Notice: Undefined variable: pwtoken in C:UsersnhownCloudAppsxampp5htdocsPJLinkcontrol.php on line 71
    OK: Successful execution

    1. Hallo Nico,

      ich habe im Github Repository die control.php angepasst, probiere es gerne damit nochmal. Die PHP Version mit der ich den Code verwende, ist etwas veraltet.

      Würde mich über ein kurzes Feedback freuen! Danke!

      Viele Grüße
      Stefan

  3. hey Stefan,

    herzlichen Dank für die Bereitstellung des Codes und die herrliche Erklärung dazu!
    Läuft bestens.

    Wenn es dich mal in den Süden Deutschlands verschlägt, meld Dich! Dann geb’ ich ein Kaltgetränk aus

    Viele Grüße
    Stef

  4. kleiner Nachtrag…
    Ich habe einen BenQ Beamer (W5700S). Hier musste ich dein PHP Skript leicht anpassen, damit alles funktioniert. Habe aber nur den md5 entfernt und somit command blank mitgegeben 😉

  5. Hello
    Am actually have the same case to control my beamer with Pjlink using loxone.
    you are saying that web server is needed? how are you including config.php in loxone ?
    sorry am a beginner with this enivrement.

    Thanks

    1. Hallo Joe,

      i think there is a misunderstanding. I wanted to say that a separate webserver is needed. You need something like a NAS or Raspberry Pi with a PHP ready webserver running on it. This then acts as a bridge between the Loxone Miniserver and the beamer.

      Best regards
      Stefan

  6. Hallo Stefan,
    nachdem ich deinen Ikea-Ivar-Hack mit den Einschlagmuttern schon erfolgreich einsetze, habe ich mich mit dem PJlink für meinen Projektor befasst. PHP läuft, aber ich bekomme nur Fehler zurück. Es handelt sich um einen JVC X35 Beamer, irgendwie hat da bislang wohl kaum jemand versucht so ein Ding per LAN zu steuern. Folgende Beispiele für Fehler:
    Bei Power=on: Warning: Undefined array key “status” in /code/control.php on line 86
    []
    Bei status=all: Warning: Undefined array key 1 in /code/control.php on line 103
    {“lamp”:0,”power”:0,”mute”:0}

    Hast du eine Idee, wie man das gute Stück doch noch integrieren kann?

    VG
    Harald

    1. Hallo Harald,

      kann es sein, dass du Power wie im Kommentar groß geschrieben hast? Die Parameter sind leider case sensitive. Eine Verbindung zum Beamer scheint ja schonmal zu funktionieren, sonst würde es eine Meldung direkt zu Anfang geben. Es könnte noch am Passwort vom Beamer liegen, bei einem falschem Passwort bekommt man aber leider keine Fehlermeldung. Versuche sonst mal in Zeile 75 (power) oder 91 (status) ein “echo $result;” einzubauen und schau dir die Ausgabe im Browser an.

      Viele Grüße
      Stefan

      1. Hallo Stefan,
        den power=on habe ich klein geschrieben, dachte mir schon, dass das case-sensitive ist (so wie sich das gehört 😉 ). Leider hat das “echo” vor dem $result auch keine Änderung gebracht. Ein Passwort kann man im Menü des JVC X35 nicht vergeben, hier kann man nur LAN aktivieren. In der Doku zu dem Gerät findet sich leider kein Hinweis, hab auch schon die spezielle JVC Doku gefunden und mit dem dort empfohlenen “Hercules SETUP Utility” mein Glück versucht. Es kommt zur Verbindung, aber ich krieg keinen Befehl an den Beamer gesendet.
        Hast du noch eine Idee?
        VG
        Harald

  7. Guten Tag,
    Kann man den Beamer auch ohne Webserver zwischen Loxone und Beamer ansteuern?
    Also sprich Loxone direkt zu Beamer?

    vielen Dank
    Eric Sturm

    1. Hallo Eric,

      wenn dann nur über ein Pico C Programm. Dazu müsste man versuchen, den Code in der Pico C Sprache umzusetzen.

      Viele Grüße
      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert