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 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!
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?
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
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
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
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
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 😉
Hallo Stef,
Danke für die Info! Diese Info ist für andere Nutzer sicherlich hilfreich.
Viele Grüße
Stefan
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
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
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
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
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
Guten Tag,
Kann man den Beamer auch ohne Webserver zwischen Loxone und Beamer ansteuern?
Also sprich Loxone direkt zu Beamer?
vielen Dank
Eric Sturm
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