Arduino — Datenvisualisierung mit NodeJS

Zusammenfassung

In diesem Beitrag soll erklärt werden, wie mit einem Arduino Uno Daten erfasst werden und mittels JSON an einen WebServer übermittelt werden können. Mit Hilfe von NodeJS wird ein WebSever aufgebaut, der die vom Arduino übermittelten Daten verarbeitet und in einem Diagramm dargestellt. Ich verwende dazu das GitHub Projekt arduino-livechart, bei dem (da in der neuen Version von express.js keine Middleware mehr enthalten ist) einige Anpassungen nötig sind, damit die aktuelle Version von NodeJS verwendet werden kann.


Weiterlesen

DIY — Drucker per Ethernet Ein- bzw. Ausschalten

Es ist schon praktisch, wenn man einen Drucker, der im Keller steht per WebSeite ein- bzw. ausschalten kann. In diesem Beitrag möchte ich mit Hilfe des Arduino Uno, dem EtherNet-Shield und einem 5Volt-Schaltrelais einen möglichen Weg beschreiben. Leider werden Drucker extern mit 230V betrieben, deshalb ist es nicht erlaubt selbständig ein Schaltrelais in den Stromkreis einzubauen. Hier soll erklärt werden, wie man ein Relais mit Hilfe einer WebSeite zum klicken bringt, mehr nicht. Es werden/sind keine Veränderung an der 230V-Elektroinstallationen vorgenommen!.

Da ein Arduino Uno nur begrenzt Speicherplatz hat bietet es sich an das CSS-File von einem externen WebServer einzubinden. Das hat den Vorteil, dass das Aussehen der Seite verändert werden kann, ohne dass im Arduino-Sketch editieret werden muss. (Zumal die Eingabe von HTML-Code für den Arduino sehr umständlich ist und dadurch der Sketch schon sehr länglich wird). Auf die selbe Weise kann natürlich auch JavaScript-Code mit eingebunden werden, um die Verarbeitung von Events, die ein Mensch auslöst zu verarbeiten und an den Arduino zu übergeben. So könnte z.B. optisch der Status von verschiedenen Geräten dargestellt werden. Aber das würde den Rahmen dieses BlogArtikels sprengen.

  1. Die Aufgaben des Arduino sind folgende:
    • Steuerung der Stromversorgung für den Drucker
    • Bereitstellen der Internetseite
  2. Die Aufgaben des externen WebServers sind folgende:
    • Bereitstellen des CSS-Files
    • (Optional) Bereitstellen von JavaScript


Weiterlesen

DIY — AppleTV 2 als Webserver

Auf der Suche nach einem PC der für einen für einen privaten Webserver geeignet ist (niedrige Energiekosten und geringer Kaufpreis) bin ich bei heise.de den Artikel Provider nutzt Apple TV 2 als Webserver gefunden. Da der AppleTV (2. Generation) nur 119Euro kostet, habe ich mir gleich mal einen gekauft.
Im heise.de-Artikle fidet sich folgende Anleitung „Wer das Ganze nachbauen will, findet hier weitere Infos.„.
Es müssen folgende Schritte vollzogen werden:

  1. AppleTV jailbreaken
  2. Konfiguration der LAN oder WLAN Verbindung
  3. Installation des Webservers und der zusätzlich benötigten Software (PHP, Datenbank)

AppleTV jailbreaken

Da ich noch nie ein IOS-Gerät gejailbreakt habe müsste ich mich zuerst über die Jailbreak Thematik informieren was leider gar nicht so einfach ist, da man sehr viele unterschiedliche Informationen dazu im Netz findet.
Eine Web-Recherche hat folgende Möglichkeiten ergeben:

Nach längerem Probieren hat bei mir hat die Methode mit Seas0nPass funktioniert. Das Tool Pwnage 4.3 wäre mir persönlich lieber gewesen, da ich gleich die benötigten Pakete anhand einer Auswahl installieren konnte, leider hat aber der Jailbreak nicht funktioniert. Ich verzichte hier auf eine Beschreibung, da zum einem in den beiden Links das Vorgehen genau erklärt wird und zum anderen, da sich das Vorgehen beim Jailbreaken mit jeder neuen IOS-Version ändern kann. Es bleibt einem nichts anderes übrig als ich selbst in das Web zu stürzen und eine Möglichkeit die bei einem funktioniert zu suchen.

Konfiguration des AppleTVs als Webserver

Von der Seite How To Turn an Apple® TV 2G into a 24/7 Web Server kann man sich ein Shellscript herunterladen, das den gesamten Webserver installiert. Ich möchte im Folgenden trotzdem die einzelnen Schritte beschreiben, da man ja eigentlich nicht viel lernt, wenn man ein fertiges Script ausführt. Folgt hier eine Anleitung es per Hand zu machen.

  1. Installation der benötigten Software: dazu muss man sich mittels der Terminal.app und des Befehls ssh auf die Shell des AppleTV schalten:
     ssh root@ipappletv 
    mit Passwort alpine und anschließend folgende Befehle eingeben:
  2. <br />
    apt-get -y install top<br />
    apt-get -y install vim<br />
    apt-get -y install php<br />
    apt-get -y install lighttpd<br />
    apt-get update<br />
    apt-get update<br />
    apt-get -f -y upgrade<br />
    

    Es werden folgende Softwarepakete installiert:

    • top ist ein Befehl. der in den meisten Unix-ähnlichen Betriebssystemen eine ständig aktualisierte Liste der aktuell laufenden Prozesse des Systems ausgibt. Dabei zeigt top auch die Auslastung der CPU, Speicherverbrauch, sowie etliche andere Informationen an.
    • vim ist eine Weiterentwicklung des Texteditors vi. Das freie Open-Source-Programm wurde 1991 von Bram Moolenaar veröffentlicht. Seitdem wird der Editor aktiv weiterentwickelt. Wie vi zeichnet sich Vim durch seine verschiedenen Betriebs-Modi aus, während viele andere gebräuchliche Editoren nur einen kombinierten Modus für Eingabe und Befehle kennen, in dem Befehle über Tastenkombinationen und grafische Oberflächen ausgeführt werden. Alternativ kann auch nano installiert werden.
    • php ist eine Skriptsprache, die hauptsächlich zur Erstellung dynamischer Webseiten oder Webanwendungen verwendet wird.
    • lighttpd (zumeist gesprochen als Lighty) ist ein von Jan Kneschke entwickelter freier Webserver. Er implementiert alle wichtigen Funktionen eines Webservers und kann, ähnlich wie Apache, durch Module erweitert werden.
  3. Jetzt müssen noch ein paar Verzeichnisse erstellt und die Zugriffsrechte gesetzt werden. Im Verzeichnis /private/var/www werden die Daten gespeichert, die der Webserver zur Verfügung stellen wird. Das Verzeichnis /var/log/lighttpd dient zum loggen von Fehlern und Zugangsdaten des Webservers.
  4. <br />
    mkdir /private/var/www<br />
    chown root:wheel /private/var/www<br />
    mkdir /var/log/lighttpd<br />
    chown root:wheel /var/log/lighttpd<br />
    

    • mkdir Unix-Befehl der ein Verzeichnis erstellt.
    • chown root:wheel Unix-Befehl der die Eigentumsrechte für den Benutzer root aus der Gruppe wheel setzt.
  5. Die Konfiguration von lighttpd ist in einer Datei lighttpd.conf zusammengefasst, die im Verzeichnis /private/etc/ gespeichert werden muss.
  6. [js_markieren]

    server.document-root = "/private/var/www/"
    
    server.port = 80
    # server.username = "lighttpd"
    # server.groupname = "lighttpd"
    # richtige IP des Webservers eintragen
    server.bind                = "192.168.0.150" 
    server.tag ="lighttpd"
    
    server.errorlog            = "/var/log/lighttpd/error.log"
    accesslog.filename         = "/var/log/lighttpd/access.log"
    
    server.modules              = (
                "mod_access",
                "mod_accesslog",
    	    "mod_fastcgi",
                "mod_rewrite",
    	    "mod_auth"
    )
    
    # mimetype mapping
    mimetype.assign             = (
      ".pdf"          =>      "application/pdf",
      ".sig"          =>      "application/pgp-signature",
      ".spl"          =>      "application/futuresplash",
      ".class"        =>      "application/octet-stream",
      ".ps"           =>      "application/postscript",
      ".torrent"      =>      "application/x-bittorrent",
      ".dvi"          =>      "application/x-dvi",
      ".gz"           =>      "application/x-gzip",
      ".pac"          =>      "application/x-ns-proxy-autoconfig",
      ".swf"          =>      "application/x-shockwave-flash",
      ".tar.gz"       =>      "application/x-tgz",
      ".tgz"          =>      "application/x-tgz",
      ".tar"          =>      "application/x-tar",
      ".zip"          =>      "application/zip",
      ".mp3"          =>      "audio/mpeg",
      ".m3u"          =>      "audio/x-mpegurl",
      ".wma"          =>      "audio/x-ms-wma",
      ".wax"          =>      "audio/x-ms-wax",
      ".ogg"          =>      "audio/x-wav",
      ".wav"          =>      "audio/x-wav",
      ".gif"          =>      "image/gif",
      ".jpg"          =>      "image/jpeg",
      ".jpeg"         =>      "image/jpeg",
      ".png"          =>      "image/png",
      ".xbm"          =>      "image/x-xbitmap",
      ".xpm"          =>      "image/x-xpixmap",
      ".xwd"          =>      "image/x-xwindowdump",
      ".css"          =>      "text/css",
      ".html"         =>      "text/html",
      ".htm"          =>      "text/html",
      ".js"           =>      "text/javascript",
      ".asc"          =>      "text/plain",
      ".c"            =>      "text/plain",
      ".conf"         =>      "text/plain",
      ".text"         =>      "text/plain",
      ".txt"          =>      "text/plain",
      ".dtd"          =>      "text/xml",
      ".xml"          =>      "text/xml",
      ".mpeg"         =>      "video/mpeg",
      ".mpg"          =>      "video/mpeg",
      ".mov"          =>      "video/quicktime",
      ".qt"           =>      "video/quicktime",
      ".avi"          =>      "video/x-msvideo",
      ".asf"          =>      "video/x-ms-asf",
      ".asx"          =>      "video/x-ms-asf",
      ".wmv"          =>      "video/x-ms-wmv",
      ".bz2"          =>      "application/x-bzip",
      ".tbz"          =>      "application/x-bzip-compressed-tar",
      ".tar.bz2"      =>      "application/x-bzip-compressed-tar" 
     )
    index-file.names = ( "index.html", "index.php" )
    
  7. Mit dem Befehl lighttpd-angel -f /etc/lighttpd.conf wird der Webserver gestartet.

Hintergrund Informationen

Auf den folgenden Seiten findet man zusätzliche Informationen:

Installing and configuring lighttpd webserver – HOWTO

LDAP + Lighttpd :: Easy setup

Apple TV Webserver | Mac Mini Vault