Brauen mit Linux, web20mash und 1-Wire

Komponenten

Software

Als Software wird Fangobräus Web 2.0 Mash benutzt. Die Software liegt sowohl als Sourcecode als auch als fertiges Paket zur Installation auf verschiedenen Linux-Distributionen und Plattformen vor. Sie besteht im Wesentlichen aus zwei Teilen.

Daemon

Der Daemon wird auf einem Linux-Rechner (normaler PC oder embedded Plattform wie [http://www.raspberrypi.org Raspberry Pi]) installiert und hält die Verbindung zur 1-Wire Peripherie, steuert den Ablauf des Maischprogramms und realisiert einen Webserver zur Kommunikation mit dem Web-Frontend.

Frontend

Das Web-Frontend läuft unabhängig vom Betriebssystem in einem beliebigen Web-Browser und ermöglicht die Bedienung des Systems und das Ablesen des Status. Über das Frontend stellt man die Parameter des Maischprogramms ein und startet den Brauprozess. Während des Programms muss das Frontend nicht verbunden sein; der Daemon wickelt die Steuerung selbständig ab. Zudem ermöglicht das Fronend eine einfache Temperaturregelung und das manuelle Schalten der Aktoren. Unter http://fangobräu.de/mashdemo/ kann man die Software live testen. Die dort „gemessene“ Temperatur ist natürlich simuliert.

Hardware

Steuersystem

Als Steuerungsrechner kommt ein beliebiger Linux-basierter Rechner zum Einsatz. Das kann sowohl ein üblicher PC mit einer der bekannten Linux-Distributionen wie z.B. Ubuntu, Debian, SuSe oder Fedora, als auch ein Linux-fähiger Embedded-Computer wie z.B. Raspberry-Pi oder Iomega Iconnect sein.

Der Rechner muss über einen Netzwerkanschluss und ein Interface für den Anschluss des 1-Wire-Adapters verfügen. Da die 1-Wire Ansteuerung über das Programmpaket owfs erfolgt, werden alle gängigen 1-wire-Adapter unterstützt. Die Software stellt nur geringe Anforderungen an Leistungsfähigkeit und Speicherkapazität des Systems, weil sie in C geschrieben und für den Einsatz in embedded Systemen konzipiert wurde.

Für den Testaufbau wurde ein Desktop-PC mit Intel i3 Prozessor verwendet, der über ein 100Mbit-Ethernet-Interface am Netzwerk angeschlossen ist und ein freies USB-Interface zum Anschluss des 1-Wire Adapters besitzt. Als Betriebssystem wurd Ubuntu 12.10 verwendet.

Später wird das System auf einem Raspberry-Pi laufen.

Bediensystem

Die Software wird über ein Web-Frontend in einem Internet-Browser bedient. Dazu eignet sich (fast) jeder moderne Browser, wie z.B. aktuelle Firefox-, Chrome-, Safari- oder Opera-Browser auf PC-Basis, aber auch Web-Browser auf Android- oder IOS-Tablets oder -Smartphones. Der Browser muss dabei nicht auf dem Steuerungsrechner laufen; man kann sich von beliebigen Computern im lokalen Netz oder, wenn der Internet-Router entsprechend konfiguriert ist, auch vom Internet mit der Steuerung verbinden.

Im Testaufbau wurde mit den aktuellen Linux-Versionen von Chrome und Firefox gearbeitet, die auf dem gleichen Rechner wie das Steuersystem liefen.

Später wird zur Bedienung ein Android-Tablet benutzt werden.

1-Wire Adapter

Ein durch das 1-Wire-Filesystem (owfs) unterstützter Adapter, der den Anschluss des 1-Wire-Bus an den PC ermöglicht.

Im vorliegenden Fall wird ein USB-Adapter DS9490R verwendet (Anbieter z.B. Fuchs-Shop). Der Adapter basiert auf der 1-Wire-USB-Bridge DS2490. Hostseitig wird er an einen beliebigen freien USB-2-Anschluss verbunden; 1-Wire-seitig bietet er eine RJ-11-Buchse.

Datenblatt DS9490R

DS9490R RJ11-Buchse
Pin Belegung
1+5V
2GND
31-Wire Data
41-Wire GND
5USB Suspend
6-

1-Wire Sensor

Geeignet sind alle Sensoren auf Basis des DS1820, DS18S20 oder DS18B20. Die Sensoren können als einzelnes Bauteil im TO92-Gehäuse, das dann selbst in ein geeignetes wasserdichtes Gehäuse eingebaut werden muss, oder in verschiedenen fertigen Bauformen als Kabelsensor benutzt werden.

Bei fertigen Sensoren muss man auf die Pinbelegung des RJ11-Steckers achten. Oft sind die Kabelsensoren nicht pinkompatibel zum RJ11-Anschluss des 1-Wire-USB-Adapters bzw. zum RJ45-Anschluss des I/O-Boards. Dann muss die Schnittstelle entsprechend angepasst werden.

Im vorliegenden Fall wurde ein Kabelsensor mit DS18S20 von Hygrosens (Bezugsquelle: Conrad) mit einem selbstgelöteten RJ11-Adapter benutzt.

Hygrosens RJ11-Stecker
Pin Belegung
1Abschirmung oder unbelegt
2GND
31-Wire Data oder unbelegt
41-Wire Data
5+5V
6-

Besser geeignet ist z.B. der Sensor OW-Temp-B3-12A von EDS

EDS RJ11-Stecker
PinBelegung
1-
2-
31-Wire Data
4GND
5-
6+5V

1-Wire Aktor

Geeignet sind 1-Wire-Relais auf Basis von DS2406, DS2408 oder DS2413 oder externe Relais, die über ein Shell-Kommando geschaltet werden können.

Im vorliegenden Fall wurde ein 8-Channel-I/O-Board von Hobbyboards benutzt. Dieses Board hat den Vorteil, das es zwei 1-Wire-Schnittstellen besitzt - eine zum Anschluss an der Host-Adapter und eine für den Sensor. Somit entfällt ein ansonsten notwendiger 1-Wire-Verteiler.

Zum Anschluss des Boards (RJ45) an den 1-Wire-Adapter (RJ11) wird ein RJ12-auf-RJ45-Adapter benötigt.

Eine Alternative zum recht teuren 8-fach-I/O-Board bietet das 1-Wire 2-fach-Relais im Hutschienengehäuse von Wärme-Fuchs.

I/O-Board RJ45-Buchse
Pin Belegung
1GND
2+5V
3GND
41-Wire Data
5GND
6-
7Power-In oder unbelegt
8GND

Leistungsteil

Die Relais des 1-Wire-I/O-Boards können nur maximal 2A, die des Hutschienensystems 5A bei 250V schalten. Zum Steuern einer Heizung (die bei 2000W rund 8A, bei 3500W rund 14A zieht) ist daher ein zusätzliches Lastrelais nötig. Dafür bietet sich ein Halbleiterrelais (Solid-State-Relais, SSR) an.

Hier wurde ein gebrauchtes SSR benutzt, das mit eingangsseitig 3-32V Gleichspannung ausgangsseitig bis zu 25A bei bis zu 280V Wechselspannung schalten kann. Geeignet ist z.B. auch das unten abgebildete Panasonic-SSR (Bezugsquelle: Völkner oder Conrad).

Hardwareaufbau

Die folgende Abbildung zeigt schematisch den Aufbau des Systems.

Herzstück ist das Steuersystem, auf dem der web20mash-Daemon läuft. Es ist einerseits mit dem Netzwerk (LAN oder WLAN) verbunden, um vom Bediensystem angesprochen werden zu können. Andererseits hat es eine Verbindung zum 1-Wire-Adapter, hier über USB.

Am 1-Wire-Adapter ist über den 1-Wire-Bus das I/O-Board angeschlossen. Der 1-Wire-Bus wird im I/O-Board auf den zweiten Anschluss durchgeschleift, an dem der 1-Wire-Sensor angeschlossen ist.

An einem Relais des I/O-Boards wird eine Kleinspannung geschaltet, die das Lastrelais (SSR) betätigt, das wiederum die Netzspannung für die Heizung schaltet.

Das Bediensystem, ein Web-Browser auf einem PC, Tablet oder Smartphone, kann sich von einem beliebigen Standpunkt im Netz mit dem Steuersystem über das Netzwerk verbinden. Es wird nur zur Einstellung und zum Start des Maischprogramms benötigt und kann danach wieder getrennt werden, da das Maischprogramm vom Daemon selbständig abgespult wird.

Softwareinstallation

Voraussetzungen

Als Bediensystem dient ein Gerät mit einem Web-Browser, der das canvas-Element unterstützt. Das ist bei nahezu allen modernen Browsern der Fall. Als Gerät kommt ein PC, Laptop, Netbook, IOS- oder Android-Tab oder Smartphone in Frage.

Als Steuersystem wird ein Rechner mit einer GNU/Linux Distribution (z.B. Debian/Embedded Debian 6.0.x, Ubuntu 12.10) mit folgenden Paketen vorausgesetzt:

Das 1-Wire-Filesystem muss vor Installation von web20mash konfiguriert und sollte unbedingt ausführlich getestet werden. Eine gute Möglichkeit zum Testen bietet der 1-Wire-Web-Server owhttpd, der die Abfrage aller 1-Wire-Komponenten über einen Web-Browser ermöglicht.

Besonderheiten beim Raspberry Pi

Betriebssystem

Für dieses Projekt wird Raspbian “wheezy” benutzt, das man auf der [http://www.raspberrypi.org/downloads Raspberry Pi Download-Seite] bekommt. Es ist aber auch jede andere Debian-basierte Linux-Distribution geeignet, die die Raspberry Plattform (armv6l) unterstützt.

Beim Entpacken der zip-Datei erhält man eine Image-Datei, die man mittels dd (Linux) oder dem Win32DiskImager (Windows) auf eine mindestens 2GB große SD-Karte überträgt.

Hat man Bildschirm und Tastatur am Pi angeschlossen, kann man die SD-Karte in den RasPi stecken und direkt booten. In diesem Fall kann man das nächste Kapitel überspringen - weiter geht es dann mit dem Punkt „Betriebssystemkonfiguration“.

Betriebssysteminstallation ohne Tastatur und Display

Ohne Bildschirm und Tastatur ist ein weiterer Schritt nötig: der RasPi sollte eine feste IP-Adresse bekommen, damit man ihn von einem anderen System per ssh erreichen kann. Als Standard ist er aber so konfiguriert, dass die Adresse per DHCP eingestellt wird. Das ist unpraktisch, da man dann nach jedem Neustart erst in der einen oder anderen Weise die Adresse ermitteln müsste.

Um eine feste Adresse zu vergeben, muss die SD-Karte in einem laufenden Linux gemounted und in der 1,9GB großen root-Partition die Datei /etc/network/interfaces angepasst werden (mit root-Rechten (sudo) arbeiten - die Datei gehört root). Die Zeile

iface eth0 inet dhcp

muss geändert werden in

iface eth0 inet static
address <Adresse>
netmask <Netzwerkmaske>
gateway <Router-Adresse>
dns-nameservers <DNS-Server-Adresse>

Für <Adresse>, <Netzwerkmaske>, <Router-Adresse>, <DNS-Server-Adresse> müssen die im jeweiligen Netz gültigen Werte eingesetzt werden. Dann die Datei abspeichern, die SD-Karte dismounten, in den RasPi stecken und ihn hochfahren. Nach ca. 30s sollte die Adresse per ping erreichbar sein.

In den neueren wheezy-Images ist der ssh-Server nach dem booten schon aktiviert, so dass man sich direkt per ssh verbinden kann:

ssh -l pi <Adresse>

Initialpasswort des users ist „raspberry“.

Betriebssystemkonfiguration

Zu Beginn sollte man die weitere Konfiguration erledigen:

sudo raspi-config

In dem darauf erscheinenden Menü kann man u.a. das root-Filesystems auf die Größe des SD-Karte anpassen, und Passwort, Locale sowie Zeitzone setzen. Die weitere Konfiguration unterscheidet sich nicht von einem Desktop- oder Server-System.

Installation und Konfiguration des One-Wire-Filsesystems

In wheezy sind wie in den meisten anderen Debian-basierten Linux-Distributionen die Pakete des One-Wire-Filsesystems owfs in den Standard-Paketquellen vorhanden. Die Installation erfolgt mit

sudo apt-get install owfs

Damit wird neben dem owfs-Server (owserver) auch der http deamon (owhttpd) installiert, der gut zum Testen des owfs und der angeschlossenen Sensoren und Aktoren geeignet ist. Nach der Installation muss die Datei owfs.conf angepasst werden:

sudo vi /etc/owfs.conf

Je nach dem Interface, das zum Anschluss des One-Wire-Bus benutzt wird, unterscheidet sich die Konfiguration. Für das USB-Interface sieht sie so aus:

server: usb = all
http: port = 2121
ftp: port = 2120
server: port = localhost:4304

Alle anderen Optionen sollten auskommentiert sein. Schließlich wird, nachdem der One-Wire-Adapter angeschlossen wurde, das owfs restartet:

sudo /etc/init.d/owserver restart

Zur Kontrolle verbindet man sich jetzt mit einem Webbrowser auf die owhttpd-Seite:

http://<Adresse>:2121

Von dieser Seite aus sollte man sich über die Links zu allen angeschlossenen One-Wire-Geräten begeben sowie Sensoren auslesen und Aktoren schalten können.

Installation von web20mash

Fertige Binärpakete (inclusive backports aller notwendigen Bibliotheken) für Debian 6.0, Embedded Debian 6.0 und Ubuntu 12.10 sind einfach per apt-get installierbar. Sie stehen für x86 (32 und 64 Bit) sowie ARM Architekturen (armel) zur Verfügung.

Hierzu trägt man für Debian 6 (squeeze) basierte Systeme folgende URL in /etc/apt/sources.list ein:

deb http://geggus.net/debian squeeze main

Für Debian 7 (wheezy) basierte Systeme wird die folgende URL verwendet (verfügbare Plattformen sind amd64, i386 und armhf für Raspberry Pi*:

deb http://geggus.net/debian wheezy main

Danach kann das Paket web20mash installiert werden

sudo apt-get install web20mash
Konfiguration von web20mash

Nach der Installation muss lediglich noch die Konfigurationsdatei /etc/mashctld.conf anpassen werden.

In jedem Falle müssen die Adressen für 1-wire-Server, Sensor und Aktor definiert werden. Wenn auf dem Steuerrechner schon ein Web-Server auf dem Standardport 80 läuft, muss auch der Port für den web20mash-eigenen Web-Server angepasst werden, z.B. wie hier auf Port 81:

[global]
port = 81

Wenn der owserver auf dem lokalen System mit dem Standardport läuft, sieht die Definition so aus:

[control]
# owfs parameters
owparms=localhost:4304

Die 1-Wire-Adressen der Komponenten kann man mit dem web20mash-daemon auslesen:

$ mashctld -l
sensors:
DS18S20: 10.B063BC000800
actuators:
DS2408: 29.E50308000000/PIO.0 29.E50308000000/PIO.1 29.E50308000000/PIO.2 29.E50308000000/PIO.3 29.E50308000000/PIO.4 29.E50308000000/PIO.5 29.E50308000000/PIO.6 29.E50308000000/PIO.7
$

Diese Adressen werden in der Konfigurationsdatei eingetragen:

# 1-wire temperature sensor ID
sensor=10.B063BC000800
# actuator to use
# this can be either a supported 1-wire device
# (currently DS2406, DS2408 and DS2413) ID/PIO.X or "external"
actuator=29.E50308000000/PIO.1

Als Aktuator wird hier das zweite Relais des I/O-Boards benutzt.

Die Kommentare in der Konfigurationsdatei erläutern die restlichen Parameter, die nur bei Bedarf angepasst werden müssen.

Start

Der Daemon läuft unter dem Nutzer webmash. Falls er noch nicht existiert, muss er angelegt werden:

sudo useradd webmash

Zum Testen kann man den daemon auf der Kommandozeile im debug-Modus starten:

$ sudo mashctld -d
OK, found sensor of type DS18S20 (id 10.B063BC000800)...
OK, found actuator of type DS2408 (id 29.E50308000000/PIO.1)...
running as root, switching to user >webmash<
clock: 0.72 temp: must:  0.0 cur: 21.4 (relay:0, control:0)
clock: 3.96 temp: must:  0.0 cur: 21.4 (relay:0, control:0)
...

Im Regelbetrieb sollte der Start des Daemons automatisch beim Systemstart erfolgen. Dafür trägt man folgende Zeile in /etc/rc.local ein:

/usr/bin/mashctld -db

=Betrieb= Zunächst muss das 1-Wire-Filesystem (owserver) und der Mash Control Daemon (mashctld) gestartet werden. Wenn das schon beim Systemstart getan wird, muss beachtet werden, dass der 1-Wire-Adapter, Sonsor und Aktuator bereits beim Systemstart angeschlossen sein müssen, sonst bricht der mashctld beim Start ab.

Um sich mit dem Frontend zu verbinden, ruft man mit dem Browser das Steuersystem mit dem mashctld-Port auf:

http://<Adresse>:<Port>

<Adresse>:<Port> ist mit dem Namen oder der Adresse und dem in mashctld.conf konfigurierten Port des jeweiligen Steuersystems zu ersetzen, also z.B. „localhost:81“, wenn web20mash lokal auf Port 81 läuft.

Es erscheint die web20mash-Homepage:

Ein Klick auf „Temperaturregelung“ ruft eine Seite auf, mit der man die aktuelle Temperatur ablesen, den Aktuator manuell schalten oder die Temperatur um einen Sollwert regeln lassen kann. Man kann sowohl eine Heizung, z.B. für die Nachgusswassererwärmung, als auch ein Kühlgerät, z.B. für Gärung oder Lagerung, schalten lassen.

Hinter „Brausteuerung“ verbirgt sich die Maischprogrammsteuerung. Es erscheint zunächst die Anzeige des aktuellen Status. Wurde das Brauprogramm noch nicht gestartet, sieht sie wie folgt aus:

Nach dem Klick auf das Werkzeugsymbol unten rechts erscheint ein Konfigurationsfenster, in dem man Temperaturen und Zeiten der jeweiligen Maischschritte einstellen und mit „OK“ übernehmen kann.

Zurück im Hauptfenster, startet man das Maischprogramm mit der Schaltfläche „Prozess Starten“. Es werden dann alle Prozessschritte automatisch durchfahren, auch wenn man nicht mehr mit dem Browser verbunden ist. Hier z.B. beim Aufheizen zur Eiweißrast:

Drucken/exportieren
QR-Code
QR-Code Brauen mit Linux, web20mash und 1-Wire (erstellt für aktuelle Seite)
*
^