{"id":381,"date":"2017-06-26T16:46:37","date_gmt":"2017-06-26T14:46:37","guid":{"rendered":"https:\/\/www.pingu-mobil.de\/iot\/?p=381"},"modified":"2021-05-14T10:07:50","modified_gmt":"2021-05-14T08:07:50","slug":"smartmirror-einfache-realisierung-mit-php","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2017\/smart-mirror\/smartmirror-einfache-realisierung-mit-php\/","title":{"rendered":"SmartMirror: Einfache Realisierung mit PHP"},"content":{"rendered":"<p>Nachdem endlich ein <a href=\"https:\/\/www.pingu-mobil.de\/iot\/2017\/06\/16\/html-ui-der-durchbruch\/\">einfacher Webbrowser<\/a> auf unserem Raspberry Pi gestartet werden kann, fehlt nur noch ein Webserver. Urspr\u00fcnglich war es geplant, die noch ausstehende Aufgabe \u00fcber Node.js zu realisieren. Schlussendlich ergab sich allerdings eine L\u00f6sung, die wesentlich einfacher und dennoch f\u00fcr unsere Zwecke ausreichend ist. Unsere PHP-Dateien k\u00f6nnen ganz einfach durch das<a href=\"https:\/\/www.pingu-mobil.de\/iot\/2017\/06\/19\/php-auf-dem-raspberry-pi-genial-einfach\/\"> PHP-Package von Buildroot<\/a> zum Laufen gebracht werden. Dieses Package hatten wir zuvor schon eingef\u00fcgt und kompiliert. Allerdings mit dem CGI-Interface, anstelle des ben\u00f6tigten CLI-Interface. Wir erhofften uns, durch das nachtr\u00e4gliche Einf\u00fcgen des CLI-Package, einen laufenden Webserver zu erhalten. Leider machte uns Buildroot an dieser Stelle einen Strich durch die Rechnung. \ud83d\ude09<\/p>\n<p>Durch folgenden Befehl versuchten wir den Webserver zu starten:<\/p>\n<pre>php -t \/srv\/www -S 0.0.0.0:80<\/pre>\n<p>Leider kam an dieser Stelle folgende (wenig aussagende) Fehlermeldung zur\u00fcck:<\/p>\n<pre>php: command not found<\/pre>\n<p>Nach langen \u00dcberlegungen und unz\u00e4hligen erstellten Images, kamen wir auf die Idee, ausschlie\u00dflich PHP aus dem Cache von Buildroot zu entfernen. Ein komplettes (oft hilfreiches) &#8222;make clean&#8220; w\u00fcrde allerdings wieder eine ganze Nacht in Anspruch nehmen. Durch folgenden Befehl und anschlie\u00dfendem neuen kompilieren, brachten wir den Webserver zum Laufen.:<\/p>\n<pre>make php-dirclean<\/pre>\n<p>Allerdings ben\u00f6tigte es viele Anl\u00e4ufe um auf diese (im Nachhinein) simple L\u00f6sung zu kommen. Immerhin wurde ein &#8222;make clean&#8220; erfolgreich umgangen und so wahrscheinlich dennoch Stunden gespart. \ud83d\ude09 Geschickt w\u00e4re es nat\u00fcrlich wenn dieser Webserver im Hintergrund starten k\u00f6nnte. Durch folgenden Befehl konnten wir dies realisieren:<\/p>\n<pre>php -t \/var\/www\/html -S 0.0.0.0:8080 &amp;<\/pre>\n<p>Durch das &#8222;&amp;&#8220; wird der Befehl im Hintergrund ausgef\u00fchrt. Allerdings scheint dies nicht mit einer Passwort-Abfrage durch sudo zu funktionieren. Daher entschieden wir uns f\u00fcr den h\u00f6heren Port 8080 f\u00fcr den kein sudo ben\u00f6tigt wird. Nun sollte unsere PHP-Datei aufgerufen werden k\u00f6nnen:<\/p>\n<pre>qt-webkit-kiosk --uri 127.0.0.1:8080\/SmartMirror.php<\/pre>\n<p>Leider bekamen wir nur einen wei\u00dfen Bildschirm zu sehen. \ud83d\ude41 Durch wget bekamen wir beim Versuch die Datei aufzurufen zwei Laufzeitfehler. Es scheint in der PHP-Datei auf nicht vorhandene Dateien referenziert zu werden. Ob dies die Ursache des Problems ist?<\/p>\n<p><a href=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/IMG-20170626-WA0003.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-382\" src=\"https:\/\/www.pingu-mobil.de\/iot\/wp-content\/uploads\/2017\/06\/IMG-20170626-WA0003-300x169.jpg\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/IMG-20170626-WA0003-300x169.jpg 300w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/IMG-20170626-WA0003-1024x576.jpg 1024w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/IMG-20170626-WA0003-768x432.jpg 768w, https:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/IMG-20170626-WA0003.jpg 1152w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Trotz der Schwierigkeiten ist es uns heute gelungen ein Webserver auf unserer Firmware zum Laufen zu bringen. Leider konnten wir dennoch (noch) nicht unsere PHP-Dateien aufrufen. Auf einem Windows-PC mit einem Apache-Webserver scheint dies allerdings problemlos zu funktionieren&#8230;. Eine weitere Aufgabe, die noch get\u00e4tigt werden muss, ist das <strong>automatische Starten des Webservers<\/strong> beim Booten des Raspberry Pi&#8217;s. Hierzu muss ein entsprechender Eintrag in der inittab-Datei vorgenommen werden. Schlussendlich soll nach dem Booten des Raspberry Pi&#8217;s die Oberfl\u00e4che unseres SmartMirrors angezeigt werden. \u00dcber eine Konfigurationsoberfl\u00e4che, die man beispielsweise mit einem Smartphone im gleichen Netzwerk erreicht, k\u00f6nnen dann \u00c4nderungen (Arbeitsplatz, Wohnort, Name etc&#8230;) vorgenommen werden.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem endlich ein einfacher Webbrowser auf unserem Raspberry Pi gestartet werden kann, fehlt nur noch ein Webserver. Urspr\u00fcnglich war es geplant, die noch ausstehende Aufgabe \u00fcber Node.js zu realisieren. Schlussendlich ergab sich allerdings eine L\u00f6sung, die wesentlich einfacher und dennoch<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/381"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/comments?post=381"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/381\/revisions"}],"predecessor-version":[{"id":571,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/381\/revisions\/571"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/media?parent=381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/categories?post=381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/tags?post=381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}