Ethersex-Artikel
Ziel ist es einen Artikel für das Embedded Projects Journal zu schreiben. Um Mithilfe wird gebeten.
Inhaltsverzeichnis
Ethersex-Features
- universell und komfortabel konfigurierbar
- Free Software (GPLv3)
- Atmel AVR basierend
- IPv4, IPv6, UDP, TCP
- RFM12 Funk
- Entwicklung unter Linux
- große Zahl an Features
Einleitung
Ethersex beansprucht für sich eine der universellsten Softwareplattformen für AVR-Firmware-Erstellung zu sein. Wenn es darum geht das Steuern diverser Aufgaben im Haus, vom Treppenlicht über die Kaffemaschine bis hin zur Heizung zu übernehmen, kommt Ethersex ins Spiel. Die Heizungssteuerung ist eine relativ beliebte Beschäftigung unter Hardwarebastlern. Auch für solche Aufgaben haben sich die AVR-Mikrocontroller der Firma Atmel zum De-facto-Standard entwickelt. Schuld daran ist nicht zuletzt die Programmierbarkeit in der Hochsprache C mithilfe der freien Software-Werkzeuge AVR-Libc und GCC, welche für alle Computer-Plattformen verfügbar sind.
Oft ist es wünschenswert Daten über einen Zeitraum aufzuzeichnen, zu visualisieren oder die Hardware von überall steuern zu können. Zum Beispiel ist das Fernschalten und Überwachen der heimischen Warmwasserbereitung/Heizung, von der Arbeit, vom internetfähigen Handy oder Netbook aus, eine sehr bequeme Sache. Aber nicht nur das. Praktisch kann eine komplette Hausautomatisierung mittels Ethersex-basierter Mikrocontroller realisiert werden.
Für derart anspruchsvolle Anwendungen wird der Mikrocontroller mit einem Ethernet-Anschluss und/oder einem Funk-Modul verheiratet. So kann dieser Minirechner zu einem universellen (Inter-) Netzgerät ausgebaut werden. Mit Ethersex spricht der 8-Bit AVR-Mikrocontroller das Internetprotokoll (IP) via TCP, UDP und sogar über diverse serielle Verbindungen. Ethersex ist also die AVR-basierte Lösung, die Netzwerk und Low-Level Hardware zusammenbringt. Apropos Zusammenbringen: Der Name "Ethersex" entstand aus der Verbindung von Etherape und IPv6 = Ethersex. Denn Ethersex startete als alternative Firmware für fd0's Etherrape und unterstützt neben IPv4 das Internetprotokoll Version sechs.
Kerntechnik - Der IP Router
Als erstes gab es die Etherrape Hard- und Software von Alexander Neumann, welche den Grundstein für Ethersex darstellt. Der dort unterstützte Enc28j60 bietet ein 10 Mbit Ethernetinterface und wird per SPI an den Mikrocontroller angeschlossen. Der Chip ist eine quasi All-in-One Lösung für die Kommunikation per Ethernet. Man muss nur noch einen Impulsübertrager und eine RJ-45 Buchse verbauen. Um die Integrationsdichte zu erhöhen gibt es auch noch Buchsen mit integriertem Impulsübertrager. Der Kern von Ethersex ist ein deutlich aufgebohrter uIP-Stack, der neben TCP, UDP und IPv4 auch die neuere Version des Internetprotokolls, IPv6, unterstützt, welches 2^128 Addressen unterstützt. Dies gibt uns die Möglichkeit jeden Controller mit einer weltweit eindeutigen Adresse anzusprechen, ohne sich mit NAT-Routern und ähnlichem zu verrenken. Es steht einem also frei sich von überall in der Welt über die Temperatur seines Warmwassers zu Hause zu informieren und gegebenenfalls die Heizung anzuwerfen.
Jedoch unterstüzt Ethersex IP nicht nur über Ethernet als Übertragungsmedium, sondern ebenfalls über serielle Leitungen (RS485, ZBus), Funk in den ISM-Bändern (Transceiver-Modul Typ RFM12) und über USB (mit eigenem TUN Device Treiber). Um IP-Pakete über diese Wege zu transportieren, werden die Pakete in das jeweilige Protokoll eingebettet und als Ganzes übertragen. Es findet also kein Umschreiben der IP-Pakete statt. Dies mag anfänglich als riesiger Ballast erscheinen, allerdings hat man so alle gut erprobten Netzwerktools, vom Sniffer bis zum universellen Netcat zur Hand und braucht nicht seine eigene Werkzeugkiste zu basteln. Dies spart Zeit, vereinfacht die Suche nach Fehlern und reicht für das Steuern und Messdaten sammeln locker aus. Um nun eine Brücke zwischen dem herkömmlichen Ethernet IP-Netzwerk und RFM12 oder ZBus zu schlagen, besitzt Ethersex die Möglichkeit Pakete zwischen diesen Schnittstellen hin und her zu routen. So kann man mit IPv6 selbst einem ATmega8 (8k Flash, 1k RAM) eine weltweit eindeutige IP-Adresse geben. Man verwendet also ein Ethersex, das 2 oder mehr Schnittstellen hat (zum Beispiel Ethernet und RFM12) als Router. Legt man nun die Route für das RFM12 Netz auf das Router-Ethersex, so werden alle Pakete automatisch auf RFM12 und die Antwortpakete zurück geroutet. Möchte man die Verbindung zum Ethersex noch absichern, kann man sich per OpenVPN zum Mikrocontroller verbinden und hat mit ipchair ebenfalls einen Paketfilter zur Hand, der es einem erlaubt zur Kompilierzeit Paketfilterregeln anzulegen und so eine (kleine) Firewall zu realisieren.
282 Optionen - Extrem konfigurierbar
Es gibt in der Konfiguration von Ethersex 282 verschiedene Optionen die man an- und abwählen kann. Daraus und aus der Beschränktheit der Plattform folgt, dass man das Meiste vor dem Kompilieren festlegen und konfigurieren muss. Man aktiviert einfach die Features, die man im aktuellen Fall braucht und lässt den Rest weg. Das kleinste konfigurierbare Ethersex benötigt 400 Bytes an Flashspeicher und besteht nur aus einem Timer, dem sogar jede Netzwerkfähigkeit fehlt. Das größte konfigurierbare Ethersex passt noch nicht einmal in einen ATmega128. Die Vielzahl an Optionen, die sich teilweise gegensetig ausschließen, werden über eine ncurses Oberfläche, dem sogenannten menuconfig (ja das haben wir vom Linux-Kernel "geklaut") konfiguriert. Die meisten der eingebauten Features sind über das ECMD Interface erreichbar. ECMD ist ein text-basiertes Kommandointerface, das über verschiedene Frontends angesprochen werden kann (TCP, UDP, HTTP, Jabber, IRC, I2C, USART). Dadurch, dass ECMD auch für HTTP zur Verfügung steht, hat man Dank JavaScript die Möglichkeit schnell und einfach dynamische HTML-Seiten zu erstellen, die dann den aktuellen Status visualisieren. Die HTML-Seiten werden direkt in die Firmware eingebettet, automatisch. Eine Reihe solcher dynamischen HTML-Seiten steht bereits zur Verfügung, sodass die wichtigen Funktionen von Ethersex auch im Browser angesteuert werden können. Auch können mit Transgraph einfach interaktive SVG-Grafiken erstellt werden, die Javascript enthalten und so automatisch die benötigten Daten nachladen und aktualisieren (siehe Schaubild oben).
Die Möglichkeiten in Ethersex erstrecken sich von seriellen Kommunikationsprotokollen, wie Modbus, über die Ansteuerung bestimmter Webcams (DC3840 und MCA25) bis hin zu Netzwerkprotokollen wie HTTP, SNMP oder MYSQL. Durch die Unterstüzung von DCF77 und NTP, sowie der Implementierung eines Cron Daemons lässt sich einfach eine Zeitschaltuhr implementieren, die sogar ohne Uhrenquarz genau genug für Steuerungsaufgaben arbeitet. Eine vollständigere Liste von Features findet sich auf der Ethersex Projektseite.
Metaschichten
Bei der Programmierung von Mikrocontrollern streiten sich im Programmierer immer 2 Seiten: Auf der einen Seite möchte man alles schön abstrahieren um nicht am Ende vor einem riesigen Haufen unwartbarem Quellcode zu stehen, bei dem das Anpassen an neue Features mehr Zeit braucht als die eigentliche Programmierung des Features. Eine Abstraktion bringt auch eine bessere Konfigurierbarkeit mit sich, da nicht alles so starr gelößt ist.
Auf der anderen Seite bringen einem die meisten Abstraktionen einen größeren Verbrauch an Flashspeicher und/oder RAM ein, was man auf so beschränkter Hardware auf keinen Fall haben möchte. So gibt es zwar für den AVR einen C++ Kompiler, allerdings verliert man damit wohl zu schnell den Bezug zur Hardware und wundert sich, dass der Flashspeicher schon voll ist.
Ethersex versucht in den meisten Fällen einen Mittelweg zwischen beidem zu finden. Die Dynamik der Abstraktion findet zur Kompilierzeit statt. Es wird also durch den C Präprozessor oder M4 (eine sehr mächtige Makrosprache die einmal den C Präprozessor ersetzen sollte) C-Code erstellt, der anschließend kompiliert wird. So kann man in der Pinning Metaschicht mit pin(DECKENLICHT, PD4, OUTPUT) einen Pin definieren, der als Ausgang konfiguriert wird und dann mit PIN_SET(DECKENLICHT) angeschalten werden kann. Will man jetzt sein Deckenlicht auf einen anderen Pin legen, so muss man nur eine Zeile im Pinning ändern, die Firmware neu übersetzen und schon ist alles angepasst. Und das ohne in 10 Dateien nach allen Aufrufen suchen zu müssen!
Mehr Power mit Control6
Da jede Aufgabe andere Anforderungen hat, gibt es mit Control6 eine Art Metasprache, mit der schnell und einfach C-Code entsteht, der neue Funktionen bietet. Der große Charme von Control6 ist die multi-threading Unterstützung und der hohe Abstraktionsgrad. Durch das Multithreading können mehrere Prozesse parallel abgearbeitet werden. Control6 ist genau genommen "nur" ein M4 Makropaket, aber dennoch sehr flexibel und leistungsfähig. Es ersetzt keine andere Sprache, sondern erweitert eine bestehende: C. Control6 ist auch sehr gut geeignet, um schnell aus bestehenden Features Neues zusammenzufügen. So ist es ein leichtes die Tastendrücke einer Infrarot RC5 Fernbedienung mit den Hardware-Ausgängen des Mikrocontrollers zu verbinden oder Temperaturwerte von Onewire-Sensoren zum Beispiel auf einem 2x16 Zeichen Text-LC-Display anzuzeigen.
Verschiedenste Hardware
Wie bereits erwähnt, lässt sich Ethersex für verschiedene AVR Controller kompilieren (vom kleinen ATmega8 bis zum Flaggschiff ATmega128). Der Funktionsumfang ist lediglich von dem im jeweiligen Controller vorhandenen (Flash-)Speicher abhängig. Zudem ist es durch die Pinning-Metaschicht leicht auf neue Ethernet-Boards übertragbar. So werden neben dem Etherrape auch verschiedene Bausätze (u.a. AVR Net-IO und Radig AVR-Webmodul) und eigene Basteleien unterstützt. Eine Selbstbaulösung liegt bei ungefähr 20-25 Euro und ist damit nur eine geringe Einstiegshürde. Mit dem Firmware-Builder gibt es die Möglichkeit Ethersex auch ohne großen Aufwand - auf Fertighardware - auszuprobieren. Die Selbstbauvariante kommt mit 3-4 größeren Bauteilen und einer Hand voll Hühnerfutter aus. Das Ethersex-Projekt selbst bietet keine Hardware oder Schaltungen an, jedoch sehen die meisten Schaltungen mit dem Enc28j60 gleich aus (es wird der SPI-Bus belegt) und können leicht nachgebaut werden (Zu allen Fertiglösungen erhält man die Schaltpläne frei online ).
Entstandene Projekte
Mit Ethersex als Basis sind bereits einige Selbstbauprojekte entstanden. So wurde eine Heizungssteuerung, welche auch die Pumpen regelt, die drahtlose Steuerung einer Güllepumpe in einer Biogasanlage und die Ansteuerung diverser DMX-Fähiger Leuchtmittel realisiert. Das Auslesen und Visualisieren der Messwerte eines verbreiteten Blockheizkraftwerks gehört ebenso zu den Fähigkeiten wie das direkte Steuern von Funksteckdosen (mit dem RFM12 Modul). Und es ist aktuell eine Infrarotfernbedinung für eine B-77 Bandmaschine in Arbeit.
Mitmachen
Jeder ist herzlich eingeladen bei Ethersex mitzumachen. Die Einstiegshürden finanzieller Art sind aktuell ziemlich geschrumpft. Eine Entwicklungsumgebung ist dank freier Software-Werkzeuge problemlos und schnell eingerichtet. Dafür eignet sich auch eine Ubuntu Live CD, die man beispielsweise in Virtualbox laufen lässt. Das Ethersex-Projekt hat ein öffentliches Git-Repository auf github.com, im Wiki ist vieles gut beschrieben und es wird so gut wie jedes Feature aufgenommen. Vielleicht gelingt es uns ja die AVR Plattform endlich ganz auszureizen ;-). Und sollte doch mal etwas unklar sein, so sind die Mailingliste, der Bugtracker, der IRC Channel #ethersex auf irc.freenode.net oder der Silc Channel (silc.brokenpipe.de, #cccrbg) gute Anlaufstellen für Mitmacher und Interessierte.