{"id":1258,"date":"2014-05-29T20:58:12","date_gmt":"2014-05-29T18:58:12","guid":{"rendered":"http:\/\/blog.herrwolff.org\/?p=1258"},"modified":"2014-06-06T17:51:14","modified_gmt":"2014-06-06T15:51:14","slug":"diy-drucker-per-ethernet-ein-bzw-ausschalten","status":"publish","type":"post","link":"http:\/\/blog.herrwolff.org\/?p=1258","title":{"rendered":"DIY &#8212; Drucker per Ethernet Ein- bzw. Ausschalten"},"content":{"rendered":"<p>Es ist schon praktisch, wenn man einen Drucker, der im Keller steht per WebSeite ein- bzw. ausschalten kann. In diesem Beitrag m\u00f6chte ich mit Hilfe des Arduino Uno, dem EtherNet-Shield und einem 5Volt-Schaltrelais einen m\u00f6glichen Weg beschreiben. Leider werden Drucker extern mit 230V betrieben, deshalb ist es nicht erlaubt selbst\u00e4ndig ein Schaltrelais in den Stromkreis einzubauen. Hier soll erkl\u00e4rt werden, wie man ein Relais mit Hilfe einer WebSeite zum klicken bringt, mehr nicht. <strong style=\"color: red;\">Es werden\/sind keine Ver\u00e4nderung an der 230V-Elektroinstallationen vorgenommen!<\/strong>. <\/p>\n<p>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\u00e4ndert werden kann, ohne dass im Arduino-Sketch editieret werden muss. (Zumal die Eingabe von HTML-Code f\u00fcr den Arduino sehr umst\u00e4ndlich ist und dadurch der Sketch schon sehr l\u00e4nglich wird). Auf die selbe Weise kann nat\u00fcrlich auch JavaScript-Code mit eingebunden werden, um die Verarbeitung von Events, die ein Mensch ausl\u00f6st zu verarbeiten und an den Arduino zu \u00fcbergeben. So k\u00f6nnte z.B. optisch der Status von verschiedenen Ger\u00e4ten dargestellt werden. Aber das w\u00fcrde den Rahmen dieses BlogArtikels sprengen. <\/p>\n<ol>\n<li>  Die Aufgaben des Arduino sind folgende:<\/li>\n<ul>\n<li> Steuerung der Stromversorgung f\u00fcr den Drucker <\/li>\n<li> Bereitstellen der Internetseite <\/li>\n<\/ul>\n<li> Die Aufgaben des externen WebServers sind folgende:<\/li>\n<ul>\n<li> Bereitstellen des CSS-Files <\/li>\n<li> (Optional) Bereitstellen von JavaScript <\/li>\n<\/ul>\n<\/ol>\n<p><div data-carousel-extra='{\"blog_id\":1,\"permalink\":\"http:\\\/\\\/blog.herrwolff.org\\\/?p=1258\"}' id='gallery-1' class='gallery galleryid-1258 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS.png'><img width=\"150\" height=\"75\" src=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS-150x75.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" loading=\"lazy\" data-attachment-id=\"1644\" data-permalink=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS.png\" data-orig-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS.png\" data-orig-size=\"375,234\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"WebServer_mit_CSS\" data-image-description=\"\" data-medium-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS-300x187.png\" data-large-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS.png\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS.png'><img width=\"150\" height=\"75\" src=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS-150x75.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" loading=\"lazy\" data-attachment-id=\"1645\" data-permalink=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS.png\" data-orig-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS.png\" data-orig-size=\"278,160\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"WebServer_ohne_CSS\" data-image-description=\"\" data-medium-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS.png\" data-large-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS.png\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare.png'><img width=\"150\" height=\"75\" src=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare-150x75.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" loading=\"lazy\" srcset=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare-150x75.png 150w, http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare-572x288.png 572w\" sizes=\"(max-width: 150px) 100vw, 150px\" data-attachment-id=\"1647\" data-permalink=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare.png\" data-orig-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare.png\" data-orig-size=\"572,447\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"HardWare\" data-image-description=\"\" data-medium-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare-300x234.png\" data-large-file=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare.png\" \/><\/a>\n\t\t\t<\/div><\/figure>\n\t\t<\/div>\n<br \/>\n<!--more--><\/p>\n<h2> Der Hardware Aufbau (sehr schnell) <\/h2>\n<p>Da ein Drucker mit einer Spannung von 230V arbeitet, ist es  <strong style=\"color: red;\"> nicht erlaubt selbst\u00e4ndig an der Elektroinstallation \u00c4nderungen vorzunehmen<\/strong>. Vielmehr soll hier nur das Grunds\u00e4tzliche vorgehen erkl\u00e4rt werden, wie Ger\u00e4te mit Hilfe eines Arduino&#8217;s vom Web aus gesteuert werden k\u00f6nnen. Ich selber m\u00f6chte  einen per infrarot ansteuerbaren Netzschalter benutzen. Den ich mit Hilfe eines Arduino&#8217;s steuern m\u00f6chte: <a href=\"https:\/\/github.com\/r10r\/rcswitch-pi\" title=\"RCSwitch implementation for the Raspberry Pi\" target=\"_blank\">RCSwitch implementation for the Raspberry Pi<\/a>. Hier schalte ich ein 5V-Schaltrelais, weil es so sch\u00f6n klickt und ich somit auch Niederstrom-Ger\u00e4te ein und ausschalten kann, ohne deren Netzteil vom Strom zu nehmen.     <\/p>\n<p>Damit es schnell geht, habe ich eine Arduino Uno mit mein <a href=\"http:\/\/store.arduino.cc\/index.php?main_page=product_info&#038;products_id=89http:\/\/\" title=\"TinkerKit Sensor Shield\" target=\"_blank\">TinkerKit Sensor Shield<\/a> mit einem am digtialen Port 6 verbundenen Releis und dem EthernetShield verbunden. So dauert der Aufbau der Schaltung nur Sekunden.<br \/>\n<img src=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/HardWare.png\" alt=\"\" \/><\/p>\n<h2> Arduino Code <\/h2>\n<p>F\u00fcr diese Aufgaben ben\u00f6tigt man neben einem Arduino noch das Ethernet-Shield sowie ein 5V-220V-Schalt-Relais. Es k\u00f6nnen nat\u00fcrlich auch mehrere Relais eingebaut werden, wenn man weite Ger\u00e4te steuern m\u00f6chte.<br \/>\nAls Basis f\u00fcr den Arduino-Sketch dient der Beispiel-Sketch aus der ArduinoIDE: Datei\/Beispiele\/Ethernet\/<strong>WebServer.io<\/strong>:<br \/>\n[js_markieren]<br \/>\n<input type=\"button\" value=\"Markiere Code\" onClick=\"fnSelect('webserver')\"><\/p>\n<div id=\"webserver\" style=\"overflow:auto;height:200px;\">\n<pre>\r\n\/*\r\n  WebServer for turning on\/off the powersupply of a printer via a webside\r\n\r\n Circuit:\r\n * Ethernet shield attached to pins 10, 11, 12, 13\r\n * Relay attached to pin 6\r\n\r\n created 28. May 2014\r\n by Wolfgang Wolff\r\n \r\n *\/\r\n\r\n#include <SPI.h>\r\n#include <Ethernet.h>\r\n\r\n\/\/ Enter a MAC address and IP address for your controller below.\r\n\/\/ The IP address will be dependent on your local network:\r\nbyte mac[] = {\r\n  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED\r\n};\r\nIPAddress ip(192, 168, 178, 177);\r\n\/\/169.254.176.72\r\n\r\n\/\/ Initialize the Ethernet server library\r\n\/\/ with the IP address and port you want to use\r\n\/\/ (port 80 is default for HTTP):\r\nEthernetServer server(80);\r\n\r\n\/\/ define the relay digital pin\r\nconst int relayPin = 6; \r\n\r\nString readString;\r\n\r\nvoid setup() {\r\n  \/\/ define the realyPin as output\r\n  pinMode(relayPin, OUTPUT);\r\n  \r\n  \/\/ Open serial communications and wait for port to open:\r\n  Serial.begin(9600);\r\n  \r\n\r\n\r\n  \/\/ start the Ethernet connection and the server:\r\n  Ethernet.begin(mac, ip);\r\n  server.begin();\r\n  Serial.print(\"server is at \");\r\n  Serial.println(Ethernet.localIP());\r\n}\r\n\r\n\r\nvoid loop() {\r\n  \/\/ listen for incoming clients\r\n  EthernetClient client = server.available();\r\n  if (client) {\r\n    while (client.connected()) {\r\n      if (client.available()) {\r\n        char c = client.read();\r\n \r\n        \/\/read char by char HTTP request\r\n        if (readString.length() < 100) {\r\n \r\n          \/\/store characters to string\r\n          readString += c;\r\n          \/\/Serial.print(c);\r\n        }\r\n \r\n        \/\/if HTTP request has ended\r\n        if (c == '\\n') {\r\n \r\n          \/\/print to serial monitor for debuging\r\n          Serial.println(readString); \r\n \r\n          \/\/ send a standard http response header\r\n          client.println(\"HTTP\/1.1 200 OK\");\r\n          client.println();\r\n          client.println(\"<!DOCTYPE HTML>\");\r\n          client.println(\"<html>\");\r\n          \/\/ the head of the html-file\r\n          client.println(\"<HEAD>\");\r\n          client.println(\"<meta name='apple-mobile-web-app-capable' content='yes' \/>\");\r\n          client.println(\"<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' \/>\");\r\n          client.println(\"<link rel='stylesheet' type='text\/css' href='http:\/\/localhost:3000\/css\/style.css' \/>\");\r\n          client.println(\"<TITLE>Home Automation<\/TITLE>\");\r\n          client.println(\"<\/HEAD>\");\r\n          \/\/ the body of the html-file\r\n          client.println(\"<BODY>\");\r\n          client.println(\"<H1>Home Automation<\/H1>\");\r\n          client.println(\"<hr \/>\");\r\n          client.println(\"<br \/>\");\r\n         \r\n          client.println(\"<a href=\\\"\/?printeron\\\"\\\">Turn On Printer<\/a>\");\r\n          client.println(\"<a href=\\\"\/?printeroff\\\"\\\">Turn Off Printer<\/a><br \/>\");        \r\n \r\n          client.println(\"<\/BODY>\");\r\n          client.println(\"<\/html>\");\r\n          \/\/ give the web browser time to receive the data\r\n          delay(1);\r\n          \/\/ close the connection:\r\n          client.stop();\r\n          Serial.println(\"client disconnected\");\r\n    \r\n          \/\/ control arduino pin\r\n          if(readString.indexOf(\"?printeron\") >0)\/\/checks for on\r\n          {\r\n            digitalWrite(relayPin, HIGH);    \/\/ set relayPin high\r\n            Serial.println(\"Printer On\");\r\n          }\r\n          else{\r\n            if(readString.indexOf(\"?printeroff\") >0)\/\/checks for off\r\n            {\r\n              digitalWrite(relayPin, LOW);    \/\/ set relayPin low\r\n              Serial.println(\"Printer Off\");\r\n            }\r\n          }\r\n          \/\/clearing string for next read\r\n          readString=\"\";\r\n \r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<h3> Die WebSeite ohne CSS-File <\/h3>\n<p><img src=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_ohne_CSS.png\" alt=\"\" \/><\/p>\n<h2> node.js Webserver f\u00fcr die CSS-Style Datei <\/h2>\n<p>Nat\u00fcrlich kann das CSS-File auf jedem beliebigen WebServer zur Verf\u00fcgung<br \/>\ngestellt werden, ich besch\u00e4ftige mich z.Z. viel mit <a href=\"http:\/\/nodejs.org\/\" title=\"Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications.\" target=\"_blank\">node.js<\/a> und deshalb habe ich mich f\u00fcr einen WebServer entschieden, der mit node.js realisiert wird. Einen WebServer mit node.js zu realisieren geht wirklich sehr einfach, der folgende Code muss in einer Datei (z.B. webServer.js gesteichert werden und in diesem Verzeichnis muss eine Unterverzeichnis \/public erstellt werden. Darin liegt dann das CSS-File)<br \/>\n[js_markieren]<br \/>\n<input type=\"button\" value=\"Markiere Code\" onClick=\"fnSelect('areaname')\"><\/p>\n<div id=\"areaname\" style=\"overflow:auto;height:200px;\">\n<pre>\r\nvar express = require('express');\r\nvar app = express();\r\n\r\n\/\/ The number of milliseconds in one day\r\nvar oneDay = 86400000;\r\n\r\n\/\/ Use compress middleware to gzip content\r\napp.use(express.compress());\r\n\r\n\/\/ Serve up content from public directory\r\napp.use(express.static(__dirname + '\/public', { maxAge: oneDay }));\r\n\r\napp.listen(process.env.PORT || 3000);\r\n<\/pre>\n<\/div>\n<p>Den SourceCode f\u00fcr den WebServer mit CSS-File kann hier heruntergeladen werden: <a href=\"http:\/\/blog.herrwolff.org\/?attachment_id=1641\">Node WebServer mit CSS-FIle<\/a>. Wie man node.js verwendet wird werde ich bald in einem weiteren Artikel erkl\u00e4ren. Aber eigentlich gibt es schon unz\u00e4hlige Artikel dar\u00fcber. Wenn man den WebServer verwenden m\u00f6chte muss man folgende Befehle ausf\u00fchren:<br \/>\n<code><br \/>\nnpm install<br \/>\nnode WebServer.js<br \/>\n<\/code><br \/>\nDer erste Befehl installiert alle n\u00f6tigen Anh\u00e4nigkeiten, der zweite Startet den Webserver der dann \u00fcber <a href=\"http:\/\/localhost:3000\" target=\"_blank\">http:\/\/localhost:300<\/a> zu erreichen ist.<\/p>\n<h3> Die WebSeite mit externem CSS-File <\/h3>\n<p><img src=\"http:\/\/blog.herrwolff.org\/wp-content\/uploads\/2014\/05\/WebServer_mit_CSS.png\" alt=\"\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es ist schon praktisch, wenn man einen Drucker, der im Keller steht per WebSeite ein- bzw. ausschalten kann. In diesem Beitrag m\u00f6chte ich mit Hilfe des Arduino Uno, dem EtherNet-Shield und einem 5Volt-Schaltrelais einen m\u00f6glichen Weg beschreiben. Leider werden Drucker extern mit 230V betrieben, deshalb ist es nicht erlaubt selbst\u00e4ndig ein Schaltrelais in den Stromkreis &hellip; <a href=\"http:\/\/blog.herrwolff.org\/?p=1258\" class=\"more-link\"><span class=\"screen-reader-text\">DIY &#8212; Drucker per Ethernet Ein- bzw. Ausschalten<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"spay_email":"","jetpack_publicize_message":""},"categories":[1,26,5,32,16],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/p1ZaWF-ki","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=\/wp\/v2\/posts\/1258"}],"collection":[{"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1258"}],"version-history":[{"count":45,"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=\/wp\/v2\/posts\/1258\/revisions"}],"predecessor-version":[{"id":1728,"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=\/wp\/v2\/posts\/1258\/revisions\/1728"}],"wp:attachment":[{"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1258"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.herrwolff.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}