Arduino HomeMatic Tutorial

HomeMatic – Sauna 3.0 Aufguss Automatik

Wie bereits in den ersten beiden Artikeln zu meinem Saunaprojekt „HomeMatic – Sauna 2.0“ und „HomeMatic – Sauna 2.1“ angedeutet, folgt nun eine Beschreibung der automatischen Aufguss- und Lüftungsfunktion, die auf das bisherige Projekt aufsetzt, sich im Grunde aber auch autark umsetzen lassen sollte. In jedem Fall empfiehlt es sich, vor einem eventuellen Nachbau, zusätzlich die oben genannten Artikel durchzulesen, da einige Funktionen aufgrund der Abhängigkeiten sonst vielleicht etwas schwierig nachvollziehbar sind.

Funktionalität

  • „Aufguss-Feeling“, das dem mit einer klassischen Schöpfkelle sehr nahekommt
  • Vier verschiedene Aromen zur Auswahl
  • Vorwählbarer Zeitpunkt des Aufgusses
  • Aufrühren der Aufgussmischung
  • Spülung und Belüftung des Schlauchsystems
  • Automatisierter Lüftungsschieber
  • Fächer zum „Wedeln“
  • Anzeige des gewählten Aromas und eines Countdowns bis zum Aufguss in der Kabine
  • Optional abschaltbar
  • Geringer Wartungsaufwand
  • Volle Integration in HomeMatic und die Mediola aio NEO App

Impression

Um das Ergebnis schon mal etwas vorweg zu nehmen, hier ein kurzes Video…

Komponenten

Folgende Hardware wurde verbaut:

Steuerung und Spannungsversorgung

Während zur Steuerung des Lüftungsschiebers zwei Ports des bestehenden Sauna-Homeduinos Verwendung finden, habe ich mich bei der Aufgussautomatik für ein HomeMatic Sendemodul HM-MOD-EM-8 entschieden, dessen acht Kanäle unmittelbar die Relais eines Arduino 8-fach Relaismoduls triggern. Die Kanäle sind wie folgt belegt:

Kanal 1Membranpumpe Aroma Typ 1
Kanal 2Membranpumpe Aroma Typ 2
Kanal 3Membranpumpe Aroma Typ 3
Kanal 4Membranpumpe Aroma Typ 4
Kanal 5Rührmotoren
Kanal 6Fächerantrieb
Kanal 7Schlauchpumpe Wasser (Spülung)
Kanal 8Luftpumpe (Belüftung/Trocknung)

Die Relais für die vier Membranpumpen können über jeweils einen Taster in der Saunakabine überbrückt werden, um spontan oder bei einem Systemausfall ohne große Umstände einen Aufguss nach Wahl manuell durchführen zu können. Außerdem lassen sich so, zusätzlich zur voreingestellten Automatik, bei Bedarf weitere Aufgüsse durchführen…

Den Aromen ist jeweils eine bestimmte Farbe zugeordnet, die durchgängig identisch bleibt, aktuell – und hier im Artikel – sind das…

rotSaunamed
gelbCypresse-Rosmarin
grünGrüntee-Avocado
blauWaldfrüchte

Für das Öffnen und Schließen des Lüftungsschiebers zeichnet ein über einen Arduino UNO angesteuerter Schrittmotor verantwortlich. Aufgrund der Einbaulage werden die beiden Geräte von einem separaten Netzteil betrieben. Die Anbindung an die beiden Homeduino-Steuerports…

D62Sauna Steuerung Lüftungsklappe AufDigital-Out
D63Sauna Steuerung Lüftungsklappe ZuDigital-Out

…wurde daher vorsorglich galvanisch über Relais getrennt. Zwei Reedkontakte erkennen den Endanschlag der Klappe. Versuche mit Mikrotastern haben gezeigt, dass die Kraft des kleinen Schrittmotors nicht für ein Betätigen der Taster ausreicht. Dazu hätte man wohl den Schieber leichtgängiger machen müssen.

Auf dem Foto sieht man den kleinen Kabelkanal, den ich überwiegend als zerstörungsfreie „Schnittstelle“ in die Kabine nutze. Nur am Rande sei vermerkt, dass es sich – auch wenn die zum Teil verwendeten Leitungen etwas anderes vermuten lassen könnten – hierbei ausschließlich um Kleinspannungssteuer- und Versorgungsleitungen sowie Lautsprecherkabel handelt, die ausschließlich im unteren, kühleren Teil der Saunakabine verlegt sind. Alle Leitungen zu 230/400 Volt Geräten sind mittels der vorgeschriebenen hitzebeständigen Silikonleitungen geführt.

Das nachfolgende Schaltbild zeigt das System aus dem Beitrag „HomeMatic – Sauna 2.0„, ergänzt um die Hardware der Projekte „HomeMatic – Sauna 2.1“ und dem hier beschriebenen Homeduino-Anteil…

Drei Netzteile und ein regelbarer Spannungswandler dienen der Spannungsversorgung. Während die 5 Volt Versorgungsspannung für Steuertechnik und Rührwerke permanent anliegt, wird die 12 Volt Spannung für Pumpen und Fächer sowie eine 7,5 Volt Versorgung für den Lüftungsschieber bedarfsorientiert über ein HM-ES-PMSw1-DR zugeschaltet. Der Spannungswandler ermöglicht die Feinabstimmung der Membranpumpen.

Lagerung und Aufbereitung der Aufgussflüssigkeit

Handelsübliche professionelle Aufgussanlagen mischen die Aufgussflüssigkeit meist unmittelbar vor dem Aufguss an, indem frischem Leitungswasser über Schlauchpumpen das Aromakonzentrat beigemischt wird.

Dieses Vorgehen wäre zwar sicher auch umsetzbar gewesen, der technische Aufwand für eine exakte Dosierung der erforderlichen Kleinstmengen an Konzentrat und einen Wasserleitungsanschluss war mir aber dann doch zu hoch. Mit einem Frischwasserkanister zu arbeiten, erschien mir nicht wirklich als optimale Lösung. Außerdem sind mit diesem Verfahren – bei Verwendung bestimmter Konzentrate – zur Brandvermeidung technische Vorkehrungen zu treffen, damit das Konzentrat nicht ohne Wasser auf dem Ofen landen kann.

Ich habe daher schon zu Beginn der Umsetzung entschieden, ausschließlich vorab angemischte Aufgussflüssigkeiten zu verwenden.

Zur Anmischung, Lagerung und Nutzung diverser Flüssigkeiten in Verbindung mit verschiedenen Wasserarten existieren unzählige Philosophien und Meinungen, die in den einschlägigen Sauna-, Aqua- und Terraristikforen lebhaft diskutiert werden. Diese werden hier bewusst nicht thematisiert. Wer sich damit auseinandersetzen will, findet mit einer einfachen Internetsuche viel Lesestoff.

Aus Gründen der Haltbarkeit sowie des intensiven und unterschiedlichen Eigengeruchs der verschiedenen Aufgussmischungen stand es für mich aber außer Frage, eine Lagerung in fest verschließbaren Behältern vorzusehen und das Schlauchleitungssystem insgesamt dichtzuhalten. Dabei war es unabdingbar, dass die Flüssigkeiten bequem und ohne großen Aufwand nachgefüllt werden können und die „Tankanlage“ für uns optisch stimmig aussieht…

Sie misst schlanke 40 x 15 x 25 Zentimeter und könnte zusätzlich noch mit einer Abdeckhaube, einem Vorhang oder ähnlichen Verschönerungen ausgestattet werden.

Bei unserem Saunaverhalten stellen 1 Liter Kanister die optimale Größe dar, die für ca. fünf bis sechs Aufgüsse (=Saunagänge) reichen. Für die vier Lieblingsaromen, die wir in der Regel reihum wechseln, ist jeweils ein Kanister vorhanden. Somit schaffen wir mit einer vollständigen Füllung über 20 Aufgüsse, ein für uns optimaler Kompromiss zwischen Nachfüllaufwand und Lagerzeit.

Ein fünfter Kanister enthält klares Wasser zum Spülen der Leitungen und ist vom Volumen mehr als ausreichend.

Der Hersteller unseres Konzentrats schreibt ein Aufrühren der Mischung unmittelbar vor dem Aufguss vor. Auf die Deckel der Kanister wurden Capstanmotoren, aufgeschraubt…

Die Motoren sind mit drei Kunststoffschrauben von unten befestigt und deren Achsen mit Klebedichtungen, die Deckel mit O-Ringen abgedichtet…

Mit „geschälten“ Lüsterklemmen sind passend zugesägte und -gebogene Schaschlikspieße aus Edelstahl befestigt, die als Rührstäbe dienen.

Damit diese nicht an die Kanisterwand anschlagen und weil das Gemisch gerührt, nicht geschäumt werden soll, werden die 12 Volt Motoren gemächlich mit den stets verfügbaren 5 Volt der Steuerung betrieben. Einer der Motoren war dennoch etwas zu schnell, hat im Vergleich zu seinen Kollegen kein Geschwindigkeitspotentiometer und daher noch einen 33 Ohm Vorwiderstand erhalten.

Zusätzlich zum Aufrühren kurz vor dem Aufguss, werden die Mischungen zweimal täglich für 60 Sekunden umgerührt. Ob das zwingend erforderlich ist, weiß ich nicht, schaden wird es aber sicher nicht. Hier das zugehörige Programm (die Heizperiode ist als Bedingung mit eingebaut, weil unsere Sauna im Sommer nicht genutzt wird und die Kanister somit leer sind)…

Wenn die Motoren entsprechend einstellbar sind, kann man sie auch mit den 12 oder 7,5 Volt betreiben, müsste in dem o.a. Programm dann aber ggf. noch die Pumpenspannung zu und wieder abschalten.

Alternativ zu einer Einhausung des gesamten Kanistersystems könnten auch ggf. die Motoren mit einer individuellen Abdeckung versehen werden.

Die Ansaugschläuche aus Silikon wurden durch Löcher bis zum Kanisterboden geschoben, die im Durchmesser etwas kleiner als der Schlauchaußendurchmesser sind und sich somit von selbst abdichten…

Um zu vermeiden, dass sich die Kanister beim Abpumpen zusammenziehen, wurden Rückschlagventile für Aquarien-Luftpumpen eingesetzt und mit passenden Kabeltüllen abgedichtet.

Durch die Position der Löcher auf der Griffoberseite stehen die Dichtungen nicht in der Flüssigkeit, was die Ansprüche an die Dichtigkeit reduziert.

Das Nachfüllen der Aromakonzentrate geschieht mit Pipetten, zu deren Aufbewahrung am Regal passende Ösen aus Edelstahl angebracht sind…

Das Wasser wird mit einem Messbecher nachgefüllt, ohne dass die Kanister entnommen werden müssen. Zum Abschrauben der Verschlüsse können die Rührmotoren mit Steckverbindungen bequem von der Versorgung gelöst werden…

Damit die Flüssigkeit vollständig abgepumpt werden kann – vor einem erneuten Befüllen leeren wir die Behälter vollständig, ggf. durch einen ergänzenden manuellen Aufguss mit den Tastern, sind die Kanister durch eine flache Holzleiste an der Vorderseite des passend hergestellten Regalbretts leicht angehoben…

Theoretisch könnte auch die (oder eine weitere) Luftpumpe genutzt werden, um die Aufgüsse „durchzusprudeln“, dann bräuchte man ggf. ein zusätzliches (Magnet-)Ventil am Ausgangsschlauch zum Saunaofen. In der hier gewählten Kombination aus Luftpumpe und Kanistern konnte in Versuchen kein zufriedenstellendes Ergebnis erzielt werden, die verwendete Vakuumpumpe ist dafür zu schwach.

Pumpen und Flüssigkeitstechnik

Bei der Auswahl der Pumpen war es mir wichtig, ein Aufgussverhalten zu erzeugen, das dem (m)einer „Kelle“ möglichst nahekommt. Zum Testen habe ich folgende Pumpentypen besorgt, jeweils in der Variante 12 Volt DC, die alle über mindestens 1,5 Meter selbst ansaugen können:

  • Membranpumpe (1500-2000 ml/min)
  • Schlauchumpe (0-150 ml/min)
  • Kreiselpumpe (Pumpe für Scheibenwischwasser)

Die Kreiselpumpe habe ich sofort verworfen, da ich sie als sie viel zu „aggressiv“ und viel zu laut empfand.

Die Membranpumpe ist sehr leise, aber mit ihrer Pumpleistung ebenfalls recht „quirlig“. Sie schafft es problemlos, die für eine „Kelle“ erforderliche Menge in entsprechender Zeit auf die Steine zu bekommen. Nachteilig ist, dass diese Pumpen „durchlässig“ sind. Um zu vermeiden, dass das jeweils gewählte Aroma in die anderen Kanister gepumpt wird, sind Rückschlag- oder Magnetventile notwendig.

Die Schlauchpumpe ist teurer, etwas lauter und pumpt für mein angestrebtes „Aufgusskellenfeeling“ zu wenig Flüssigkeit in angemessener Zeit. Diese Pumpenart hat aber einen konstruktionsbedingten Rückflussschutz.

Letztlich habe ich mich für die Membranpumpen entschieden, betreibe diese aber nicht mit 12, sondern 7,5 Volt, was längere Einschaltdauern ermöglicht. Zur Feinabstimmung dient der Spannungsregler. Die Pumpen arbeiten ab ca. 5 Volt zuverlässig, saugen die Aufgüsse aus den jeweiligen Kanistern von der Montagehöhe aus problemlos an und leiten sie über Rückschlagventile und Schlauchverteiler zum Saunaofen.

Die Schlauchpumpe aus dem Test nutze ich für die Spülung des Zulaufschlauchs, die verhindert, dass sich die Aromen zu sehr vermischen. Sie wird für volle Leistung mit 12 Volt betrieben. In der Praxis hat sich gezeigt, dass durch diese Spülung am Ende der Aufgussprozedur (dritte „Kelle“) nochmals ein angenehmer Hitzeeffekt entsteht.

Eine 12 Volt Luftpumpe bläst vor und nach der Saunasitzung die Verteiler und den Zulaufschlauch einmal durch. Um den Schlauch ganz trocken zu kriegen, ist die Pumpleistung zu schwach. Aber auf alle Fälle wird die möglicherweise seit dem letzten Saunagang inzwischen etwas „abgestandene“ Luft ordentlich herausgeblasen. Auch diese Pumpe – im folgenden Foto links oben – benötigt ein Rückschlagventil. Dieses ist von der Bauart her identisch mit denen auf den Kanistern. Das gleiche Ventil am Verteiler ganz unten dient lediglich der Abdichtung des nicht benötigten Schlauchanschlusses. Die Schlauchverläufe erklären sich von selbst, die Ansaugschläuche und der Schlauch zum Ofen sind im Bild noch nicht angeschlossen…

Die Konstruktion ist auf einem Brett montiert und in der Lücke zwischen Sauna und Wand unsichtbar untergebracht…

Auch hier könnte man eine Abdeckung vorsehen, z.B. in Anlehnung an eine Schranktür, sollte zur Vermeidung von Feuchtigkeitsproblemen aber beachten, dass hinreichend Luft zirkulieren kann.

Durch eine Steckklemme kann das System leicht entfernt werden, z.B. zur turnusmäßigen Reinigung…

Der Schlauch zum Saunaofen zumindest sollte aus Silikon und damit hitzebeständig sein. Ich nutze für das gesamte System Silikonschläuche. Der Schlauch reicht längenmäßig bis über den Ofen…

Die Ofenbrause besteht aus einem Stahlrohr, das hier noch von einem Möbelstück vorhanden war und in dem auf der Ober- und Unterseite in regelmäßigen Abständen ca. vier Millimeter große Löcher eingebracht sind. Die Löcher in der Oberseite sind nicht störend, ich finde sogar, dass die Brause dadurch besser trocknet…

Das Rohr ist leicht nach unten geneigt, damit die Flüssigkeit langsam abfließt und sich möglichst durch alle relevanten Löcher der Unterseite auf die Saunasteine ergießt. Zur Feineinstellung ist die Brause mit einer Kette fixiert, man kann sie aber auch fest an der Wand anbringen.

Das Rohrende ist mit einem Metallverschluss abgedichtet, der aus einer Unterlegscheibe und einem metallenen Hohlraumdübel besteht…

Zum Schutz vor Verbrennungen beim versehentlichen Berühren könnte man die Ofenreling erhöhen und die Kette – sofern man sie verwendet – Hitze-isolierend ummanteln.

Be- und Entlüftung der Kabine

Ich habe in Anlehnung an Umwälzventilatoren zur Zirkulation der Luft in Wohnräumen Versuche durchgeführt, um ein spürbares „Wedeln“ zu erzeugen und hierzu unter anderem einen 12 Volt PC-Ventilator in der Kabinenecke am Boden positioniert, der die Luft nach oben bläst und so für den erwünschten Umwälzeffekt sorgt.

Der Effekt ist zwar keinesfalls mit einem „Handtuchwedeln“ zu vergleichen, wurde – je nach Position in der Kabine – subjektiv empfunden hier aber als sehr gut bis zufriedenstellend bewertet. Definitiv störend ist jedoch das Geräusch der Ventilatoren, insbesondere, wenn keine Musik abgespielt wird.

Daher war die Überlegung, das „Wedeln“ alternativ mit oszillierenden Fächern zu realisieren. Die Lösung ist leise und funktioniert prima, wenngleich auch sie nicht mit einem „Handtuchwedeln“ zu vergleichen ist, aber auch nicht schlechter als der Ventilator. Wie im Video zu sehen, ist sie ein echter Hingucker 😉 …

Ich betreibe das Ganze mit einem Schrittmotor in Verbindung mit einem Arduino UNO, die beide hier noch vorhanden waren.

Man kann aber natürlich auch einen Getriebemotor nehmen. Welche Variante leiser bzw. hitzefester ist, habe ich nicht getestet.

Hier der verwendete Ardunio-Minisketch, der sich die Stepper-Library zum Bewegen des Motors zunutze macht…

#include <Stepper.h>
int SPU = 2048;
Stepper Motor(SPU, 3,5,4,6);

void setup()
{
Motor.setSpeed(15);
}

void loop() {
  Motor.step(-1);
}

Klar kann man die „Scheibenwischerfunktion“ auch softwareseitig mit dem Arduino programmieren. Da ich den Motor aber mit Zuschaltung der Spannungsversorgung einfach nur laufen lassen will, die aktuelle Lage der Fächer im Einschaltmoment unbekannt ist und über Endabschalter o.ä. kalibriert werden müsste, war die mechanische Variante wesentlich einfacher und kostengünstiger zu realisieren.

Die Mechanik ist recht simpel mit Holzresten umgesetzt…

Die Leiste, an der die Fächer montiert wurden, ist oben mit einem sehr dünnen Nagel gelagert…

…unten ruht sie auf einer Unterlegscheibe aus Metall, die als Gleitlager dient…

Der Fächer wurde so befestigt, dass er ohne sichtbare Schäden wieder demontiert werden kann.


Die optimale Lüftung innerhalb einer Saunakabine ist ein viel diskutiertes Thema, das gar nicht so einfach zu beherrschen ist.

Die Be- und Entlüftung der Kabine habe ich bisher immer klassisch, wie bei diesem Kabinentyp vorgesehen und jahrzehntelang bewährt, über den eingebauten „manuellen“ Lüftungsschieber eingestellt. Die beste Öffnungsposition während des Saunaganges ist längst ermittelt, jedoch gehöre ich zu den Vertretern der Ansicht, dass der Lüftungsschieber beim Anheizen und in den Pausen zum Energiesparen besser geschlossen sein sollte, während des Saunaganges und danach aber offen sein muss.

Da es mich allerdings immer genervt hat, dies manuell vornehmen zu müssen und der Schieber auch des Öfteren vergessen wurde, ist das Öffnen und Schließen der Lüftungsklappe nunmehr automatisiert möglich.

Über die Position der Magnete lässt sich eine Feinabstimmung des jeweiligen Anschlags und somit der Lüftung insgesamt vornehmen…

Der Arduino Sketch für die Lüftungsschiebersteuerung basiert ebenfalls auf der Stepper-Library und ist in Verbindung mit dem o.a. Schaltbild selbsterklärend…

#include <Stepper.h>
int SPU = 2048;
Stepper Motor(SPU, 3,5,4,6);

int EndanschlagAuf=8;
int EndanschlagZu=9;
int SteuerungAuf=10;
int SteuerungZu=11;
int EndanschlagAufStatus=0;
int EndanschlagZuStatus=0;

void setup()
{
Motor.setSpeed(2);
pinMode(EndanschlagAuf, INPUT);
pinMode(EndanschlagZu, INPUT);
pinMode(SteuerungAuf, INPUT);
pinMode(SteuerungZu, INPUT);
digitalWrite(EndanschlagAuf, HIGH);
digitalWrite(EndanschlagZu, HIGH);
digitalWrite(SteuerungAuf, HIGH);
digitalWrite(SteuerungZu, HIGH);
}
void loop() {
  if (digitalRead(SteuerungAuf) == 0) {
    while (digitalRead(EndanschlagAuf) == 1) {
      EndanschlagAufStatus=digitalRead(EndanschlagAuf); 
      Motor.step(-1);
      }
    }
  if (digitalRead(SteuerungZu) == 0) {
    while (digitalRead(EndanschlagZu) == 1) {
    EndanschlagZuStatus=digitalRead(EndanschlagZu); 
    Motor.step(1);
    }
  }
} 

Nach dem Triggern der jeweiligen Steuerung (auf oder zu) fährt der Schieber zum korrespondierenden Endanschlag und verweilt dort, bis er einen Trigger in die andere Richtung erhält. Dann fährt er zum anderen Endanschlag und agiert entsprechend. Mit der relativ kleinen Geschwindigkeit…

Motor.setSpeed(2);

…bei 2048 Schritten pro Umdrehung ist der Motor optimal für den vorliegenden Anwendungsfall eingestellt.

In der CCU wurde eine Systemvariable für den Zustand der Klappe angelegt, damit in der aio NEO App eine Anzeige möglich ist…

Programmierung und Bedienung

Wie erwähnt, setzt die Aufgussautomatik auf die Projekte „HomeMatic – Sauna 2.0“ und und „HomeMatic – Sauna 2.1“ auf. Folgende Systemvariablen sind zusätzlich erforderlich…

Sauna Aufguss TypWertelisteaus;Typ1;Typ2;Typ3;Typ4
Sauna LüftungsklappeLogikwertwahr = zu
falsch = auf
Sauna SystemLogikwertwahr = hochgefahren
falsch = heruntergefahren
Sauna Timer Aufguss CountdownZahlMinimalwert: 0
Maximalwert: 30
Sauna Timer Aufguss TriggerLogikwertwahr = Aufguss gestartet
falsch = Aufguss nicht gestartet
Sauna Timer Aufguss VorwahlZahlMinimalwert: 0
Maximalwert: 30

Bedient wird die Aufgussautomatik über die Saunasteuerungsseite der aio NEO App…

Die beiden Programme zum Hoch- bzw. Herunterfahren des Systems wurden entsprechend angepasst…

Nach dem Einschalten der Spannungsversorgung der Pumpen werden die Ofensteuerung für maximal drei Stunden eingeschaltet, die Beleuchtung auf Standardwerte gesetzt und die Audioanlage gestartet. Der Aufgussschlauch wird durchgeblasen und die Aufgussmischungen umgerührt.

Schließlich werden standardmäßig der Aufgusstyp auf „aus“ (=kein Aufguss) und die Zeit des Aufgusses auf acht Minuten nach Beginn des Saunagangs gesetzt.

Das erste Skript ist das Einschaltskript zur Berechnung der Saunagangdauer, siehe Artikel „HomeMatic – Sauna 2.1„.

Mit dem zweiten und dritten Skript wird über den Homeduino Port 63 die Lüftungsklappe zugefahren…

string setpin = "D63:0";
string IP = dom.GetObject("homeduino_sauna_IP").Value();
var send_data = "http://" + IP + "/?" + setpin;
string stdout;
string stderr;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#send_data#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
string setpin = "D63:1";
string IP = dom.GetObject("homeduino_sauna_IP").Value();
var send_data = "http://" + IP + "/?" + setpin;
string stdout;
string stderr;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#send_data#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

Da es in HomeMatic Skript keinen „Wait“-Befehl gibt, wurde das „Tasten“ über zwei Skripte gelöst, die mit Abstand von einer Sekunde ausgeführt werden. Da die Lüftungsklappe von dem einem bis zum anderen Ende mehrere Sekunden braucht, ist diese Verzögerung in der Praxis kein Problem.

Das Herunterfahren nach der Saunasitzung verläuft vice versa…

Natürlich werden hier aber das Ausschaltskript für die Saunagangdauer und der Port 62 zum Öffnen des Lüftungsschiebers verwendet.

Der Saunatimer wird – sofern er beim Herunterfahren noch läuft – sofort gestoppt, da sonst mit dem späteren Stopp der Lüftungsschieber womöglich wieder zugefahren würde, was zur Belüftung und Entfeuchtung nach dem Saunieren unerwünscht ist. Zum gleichen Zweck wurde im Skript zum automatischen Rücksetzten des Timers (siehe unten) die Systemvariable „Sauna System“ als Bedingung aufgenommen.


Die Auswahl von Aroma und Beginn des Aufgussprozesses erfolgt über ein Pop-up, über das die Werte der Systemvariablen „Sauna Aufguss Typ“ und „Sauna Timer Aufguss Vorwahl“ definiert und gesetzt werden…

Über die untere Schalterreihe lassen sich Mischmotoren und Luftpumpe manuell schalten. In einem Untermenü auch Fächer und Lüftungsschieber, wobei mit den Tasten „Schieber auf/zu“ Programme mit den oben beim Ein- und Ausschaltprogramm erläuterten Skripten ausgeführt werden…

Da sich bei unsachgemäßem Einschalten der Pumpen schnell mal fünf Liter Flüssigkeit über dem Saunaofen entleeren, gibt es für die Pumpenwartung ein eigenes Pop-up, das über eine „Experten-Seite“ aufgerufen wird…

Das ausgewählte Aroma und der Zeitpunkt des Aufgusses werden im Pop-up und auf der Saunasteuerungsseite der App angezeigt…

Beide Parameter können jederzeit während der Saunasitzung angepasst werden.

Zur Berechnung des Aufgusszeitpunktes wurde der Saunatimer wie folgt umprogrammiert…

var EinZeit= dom.GetObject("Sauna Timer Einzeit");
EinZeit.State(system.Date("%F %T")); !Speichern der Einschaltzeit

Mit Beginn des Saunaganges wird nun zusätzlich der Lüftungsschieber geöffnet.

Das „Running“ Skript setzt den Trigger für den Aufguss auf wahr, wenn die Laufzeit des Timers der Vorwahlzeit entspricht…

var EinZeit= dom.GetObject("Sauna Timer Einzeit");
var KumZeit= dom.GetObject("Sauna Timer Wert");
var AufgussVorwahl= dom.GetObject("Sauna Timer Aufguss Vorwahl");
var AufgussTrigger= dom.GetObject("Sauna Timer Aufguss Trigger");
var AufgussCountdown= dom.GetObject("Sauna Timer Aufguss Countdown");

! Den Einschaltzeit String aus der Systemvariablen in ein Zeitobjekt umwandeln
time t = EinZeit.State().ToTime();

! Den aktuellen (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime();
 
! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
var x = t.ToInteger();
 
! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var x1 = t1.ToInteger();
 
! Die Differenz ist die Einschaltdauer in Minuten umgerechnet
var x0 = (x1-x)/60;

! Die Laufzeit in die Systemvariable einstellen
KumZeit.State(x0.Round(0));

! Aufguss
integer tg1 = KumZeit.State();
integer tg2 = AufgussVorwahl.State();
if (tg2 == tg1) {
AufgussTrigger.State(true);
}
if (tg1 <= tg2) {
integer tc = tg2-tg1;
}
else {
integer tc = 0;
}
AufgussCountdown.State(tc.Round(0));

Falls nach einem frühen Aufguss die Vorwahlzeit während des laufenden Timers – wie und von wem auch immer – soweit nach Hinten geschoben wird, dass diese noch nicht erreicht ist, erfolgt ein weiterer Aufguss.

Das Skript berechnet zudem einen Countdown bis zum Start des Aufgussvorganges, der in der Kabine angezeigt wird…

Während des Aufgusses wird das Aufgusssymbol eingefärbt, die (ja bereits abgelaufene) Zeit bis zum Aufguss bleibt ausgeblendet.

Dies ist in aio Creator NEO mittels einer Stausregel und schwarzen bzw. transparenten Grafiken realisiert…

Hier noch die beiden Programme zum Stopp und Zurücksetzen des Timers, die beide um die Funktion zum Schließen des Lüftungsschiebers ergänzt wurden…

Die Bedingung „Sauna System hochgefahren“ verhindert, dass der Schieber wieder geschlossen wird, wenn das System bereits heruntergefahren wurde und die Saunakabine belüftet bleiben soll.


Vier Programme steuern den eigentlichen Aufgussprozess, wenn dieser durch den Timer getriggert und das entsprechende Aroma ausgewählt wurde, hier am Beispiel des Aromas „Typ 1″…

Als Sicherheit zur Vermeidung von Überschwemmungen laufen die Aufgussprogramme nur, wenn die Ofentemperatur (homeduino_sauna_D25) über 70 °Celsius liegt.

Innerhalb der CCU nutze ich die Bezeichnungen Typ 1 bis Typ 4, die zugehörigen Aromen werden nur in aio Creator NEO und im Skript für die Übermittlung der Saunasitzungsdaten mittels Pushover (Artikel „HomeMatic Sauna 2.1“) benannt, so muss nur dort etwas geändert werden, falls die Aromen mal gewechselt werden.

Nachfolgend dieses, um die Aufgussfunktionalität ergänzte Ausschaltskript…

var AusZeit= dom.GetObject("Sauna Sitzung letzte Ausschaltzeit");
var EinZeit= dom.GetObject("Sauna Sitzung letzte Einschaltzeit");
var KumZeitZ= dom.GetObject("Sauna Sitzungsdauer");
var AufgussTyp= dom.GetObject("Sauna Aufguss Typ");

! Speichern der Ausschaltzeit
AusZeit.State(system.Date("%F %T"));

! Den Einschaltzeit String aus der Systemvariablen in ein Zeitobjekt umwandeln
time t = EinZeit.State().ToTime();

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime();

! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
var x = t.ToInteger();

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
var x1 = t1.ToInteger();

!Die Differenz ist die Einschaltdauer in Minuten (y0)umgerechnet
var y0 = (x1-x)/60;

! Die Einschaltdauer gesamt kumulieren = Dauer der aktuellen Sitzung
var gelaufenZ = y0 + KumZeitZ.State();

! Die Sitzungsdauer in die Systemvariable einstellen
KumZeitZ.State(gelaufenZ.Round(2));

! letzten Aufgusstyp im Klartext
if (AufgussTyp.Value() == 0) {
var Aufguss = "kein Aufguss";
}
elseif (AufgussTyp.Value() == 1) {
var Aufguss = "Saunamed";
}
elseif (AufgussTyp.Value() == 2) {
var Aufguss = "Cypresse-Rosmarin";
}
elseif (AufgussTyp.Value() == 3) {
var Aufguss = "Gr%C3%BCntee-Avocado";
}
elseif (AufgussTyp.Value() == 4) {
var Aufguss = "Waldfr%C3%BCchte";
}

! Nachricht verschicken
var AusZeitM= dom.GetObject("Sauna Sitzung letzte Ausschaltzeit").Value().ToString().Substr(11,5);
var EinZeitM= dom.GetObject("Sauna Sitzung letzte Einschaltzeit").Value().ToString().Substr(11,5);
var KumZeitZM= dom.GetObject("Sauna Sitzungsdauer").Value().ToString(0);
var KumZeitSmM= dom.GetObject("Sauna Ofen Betriebsminuten aktuelle Sitzung").Value().ToString(0);
var KumVerbrauchSM= dom.GetObject("Sauna Ofen Verbrauch aktuelle Sitzung").Value().ToString(2);
string MailText;
string sDate = system.Date("%d.%m.%Y");
MailText = "Die Saunasitzung am " # sDate # " dauerte " # KumZeitZM # " Minuten.%0A%0ASie begann " # EinZeitM # " Uhr und endete " # AusZeitM # " Uhr.%0A%0ADer Ofen war " # KumZeitSmM # " Minuten eingeschaltet, dabei entstanden Kosten von " # KumVerbrauchSM # " Euro.%0A%0AAls letztes Aroma wurde " # Aufguss # " gew%C3%A4hlt.";
string teilstr;
string sendmail = "";
foreach(teilstr, MailText.Split(" ")) {
		sendmail = sendmail # "+" # teilstr;
	}
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -d token=TOKEN -d user=USER -d message='"#sendmail#"' -d sound=bike http://api.pushover.net/1/messages.json");

…und die entsprechende Nachricht,…

…respektive Anzeige in der aio NEO App…

Wenn die Düfte oft gewechselt werden, empfiehlt es sich ggf. auch hierfür Systemvariablen anzulegen.

Nun aber zum eigentlichen Aufgussprozess.

Zu Beginn wird die Aufgussflüssigkeit nochmals aufgerührt und das Wedeln der Fächer beginnt. Nach etwa einer halben Minute wird die erste „Kelle“ mit knapp 100 Milliliter gepumpt. Eine weitere dreiviertel Minute später folgt die zweite „Kelle“ mit etwas weniger Flüssigkeit und nochmals nach 45 Sekunden die dritte mit wenig klarem Wasser, das zugleich dem Spülen des Schlauchs dient. Nach gut zwei Minuten ist der Vorgang abgeschlossen uns auch die Fächer kommen wieder zum Stillstand.

Da die Flüssigkeit in den Ansaugschläuchen nach einiger Zeit zurück in die Kanister fließt und zunächst hochgepumpt werden muss, ist der erste Aufguss einer jeden Sitzung etwas „sanfter“. Das wird hier aber nicht als störend, sondern eher als angenehm empfunden. Bei Bedarf kann man über die Tasten ja auch jederzeit manuell „nachlegen“.

Ergebnis

Wie das alles in der Praxis aussieht, ist im Video gut zu erkennen. Insgesamt bin ich von der Funktionalität sehr angetan.

Mit unter 200 € für den Aufgussanteil (ohne den optionalen HM-ES-PMSw1-DR) liegt das Projekt kostenmäßig sehr deutlich unter jeder derzeit vergleichbaren Fertiglösung. Für den Lüftungs-/Wedelanteil wurden zusätzlich knapp 50 Euro investiert.

Im Video sind die Zeiten zwischen den „Aufgusskellen“ zwar gekürzt, die drei Pumpvorgänge selbst aber real dargestellt. Man erkennt auch den Unterschied der Pumpentypen. Die ersten beiden „Kellen“ [0:53 und 1:06] sind die Membranpumpen, die letzte „Kelle“ [1:16] ist das Wasser zur Spülung aus der Schlauchpumpe.

Der Prozess ist auf das hiesige Kabinen-, Tank-, Schlauch- und Pumpensystem und nicht zuletzt auf den mit 6 kW vergleichsweise kleinen Saunaofen abgestimmt. Er stellt sicher, dass kaum Aufgussflüssigkeit auf dem Boden landet, sondern vollständig verdampft und bietet hier ein Aufgusserlebnis, das dem mit einer „Kelle“ durchaus vergleichbar ist. Andere Kabinen oder Öfen sowie individuelle Vorlieben nach stärkeren oder schwächeren Aufgüssen erfordern womöglich andere Parameter und Hardware.

Anmerkungen

Die oben gelisteten Komponenten sind auf die von mir genutzten Angebote verlinkt. Ich habe weder zu den Herstellern noch zu den Distributoren irgendeine wirtschaftliche Beziehung.

Der Schaltplan wurde mit Fritzing erstellt.

Die in aio NEO verwendeten Icons wurden selbst erstellt oder stammen von Mediola bzw. Icons8. Letztere wurden vom Nutzer Challenger im HomeMatic-Forum bereitgestellt.

Bitte beachten...

SMART WOHNEN in Stern's Haus ist ein rein privates Projekt. Support kann ich daher nur im Rahmen meiner begrenzten Freizeit leisten, hierfür bitte ich um Verständnis. Meine Hinweise, Anleitungen, Schaltungen und Software werden so angeboten, „wie sie sind“. Die Verwendung erfolgt auf eigenes Risiko, ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung! Für die Einhaltung der einschlägigen technischen Vorschriften ist jeder Anwender selbst verantwortlich!
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN in Stern's Haus | smart-wohnen.org

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.