Arduino HomeMatic Node Red Raspberry Pi Tutorial

HomeMatic – Sauna 2.0

Nachdem ich mit dem Arduino-Saunatimer 2013 begonnen hatte, unsere Familiensauna etwas smarter zu machen, habe ich sie in den letzten Jahren mehr und mehr in die Hausautomation integriert. Begonnen hat das mit diversen Upcycling-Kleinprojekten, die eigentlich nichts mit Hausautomation zu tun haben, wie z.B. einer Himalayasalzleuchte aus Ausschuss-Hölzern und übrig gebliebenen Salzkristallen…

HomaMatic Sauna

…oder einem Aromatopf aus nicht mehr benötigten Küchenschüsseln…

HomaMatic Sauna

So kam mir die Idee, auch mal in meiner Elektronik-Ramschkiste nach Brauchbarem für die Sauna zu forschen. Dabei fiel mir neben einem Stück WS2812 LED-Band, einigen Raspberry Pi-, HiFiBerry- und Arduino-Boards eine frühe Homeduino-Platine in die Hände, die ich mir vor Jahren mal zum Testen zugelegt, jedoch bisher keinen wirklichen Anwendungsfall gefunden hatte.

Da ich die Messwerte des Arduino-Saunatimers ohnehin in die HomeMatic einbinden wollte, ergab sich so eine passende Spielwiese. Nach und nach kamen weitere Funktionen hinzu, welche die Sauna nun nahezu vollständig in die HomeMatic integrieren und die Funktionalitäten des „alten“ Arduino-Saunatimers mit abbilden.

Nachdem dessen wesentliche Hardware, der Bausatz „I2C-4-Digit LED Display I2C-4DLED mit Temperaturfühler“ von ELV, leider nicht mehr erhältlich ist, bietet sich mit der hier vorgestellten Lösung eine gute Alternative.

Dieser Beitrag wurde in einer gekürzten und redaktionell überarbeiteten Version im Rahmen des Leserwettbewerbs im ELV-Journal 02/2020 veröffentlicht.

Funktionalität

  • Sensorik mit Datenintegration in die HomeMatic und Anzeige auf einem Tablet
    • Temperatur
    • Luftfeuchte
    • Tür-Status
    • Präsenz
  • Schaltung/Steuerung über Tasten und/oder ein Tablet
    • Saunaofen (Spannungsversorgung des Steuergerätes)
    • Beleuchtung
    • Entfeuchtung
  • Audiosystem mit automatischer Start-/Stopp-Funktion nach Präsenz
  • Saunatimer mit Display in der Kabine (als mögliche Alternative zum Arduino-Saunatimer)
  • Farbwechselbeleuchtung
  • Pushbenachrichtigungen bei Erreichen bestimmter Temperaturen

Komponenten

Folgende Hardware wurde verbaut:

230 Volt Geräte

Die bereits bestehenden HomeMatic Aktoren des Saunaraums wurden mit in die Saunasteuerung integriert (Raumbeleuchtung, Regelung der Fußbodenheizung)…

HomaMatic Sauna

Die Entfeuchtung des Raumes erfolgt nach einer seit vielen Jahren bewährten Methode, die ich bereits in dem verlinkten Artikel beschrieben habe.

Für die Saunakabine sind weitere 230 Volt Schaltkanäle hinzugekommen:

  • Arduino Saunatimer
  • Außenbeleuchtung (Dekofackel)
  • Innenbeleuchtung (Salzleuchte)
  • Innenbeleuchtung (Farbwechsler)
  • Saunaofen (Spannungsversorgung des Steuergerätes)

Die Aktoren sind in einem Feuchtraum-Hutschienengehäuse eingebaut, bei den Leuchten handelt es sich um handelsübliche Geräte, die für den Betrieb in einer Sauna geeignet sind.

Aus Gründen des Versicherungsschutzes und weil die originäre analoge Regelung des Saunaofens perfekt funktioniert, wurde auf eine Temperaturregelung über HomeMatic verzichtet und in keiner Weise in die vorhandene Ofenelektrik eingegriffen. Jedoch schaltet ein HomeMatic Aktor die Spannungsversorgung der bestehenden Ofensteuerung ein und nach maximal drei Stunden wieder aus, so wurde eine zusätzliche Sicherheitsfunktion realisiert.

Schaltplan (ohne 230 Volt Geräte)

HomaMatic Sauna
HomaMatic Sauna

Bedienung

Für eine Bedienung der wesentlichen Funktionen, ohne dass ein Tablet erforderlich ist, wurden Taster in ein Bedienpanel eingebaut, die zwei HomeMatic 8-Kanal-Sendemodule HM-MOD-EM-8 triggern…

HomaMatic Sauna
HomaMatic Sauna

Die Schaltbeziehungen sind überwiegend mit Direktverknüpfungen realisiert. Damit lassen sich u.a. verschiedene Lichtszenarien direkt anwählen. Hier am Beispiel der Salzleuchte zusammen mit dem Farbwechsler 1…

HomaMatic Sauna
HomaMatic Sauna
HomaMatic Sauna

Anmerkung:
Sehr viele Tastendrücke hintereinander können zu einem Anstieg des Duty Cycles führen.

Über ein Android Tablet mit einer aio NEO Fernbedienung lassen sich darüber hinaus weitere Funktionen steuern und Daten anzeigen.

HomaMatic Sauna

Mein zugehöriges aio Front-End habe ich bereits in einem anderen Artikel vorgestellt.

Für das Ein- und Ausschalten des Gesamtsystems lassen sich umfangreiche Szenarien über die HomeMatic realisieren…

HomaMatic Sauna
HomaMatic Sauna

Sensorik

Die Erfassung der Temperatur- und Luftfeuchtigkeit, der Präsenz sowie des Zustandes der Saunatür erfolgt über den Homeduino. Wie dieser einzurichten und zu betreiben ist, wurde von dessen Entwickler, Eugen Stall, auf seiner Website umfangreich beschrieben.

Link zu meinem Homeduino-Sketch.

Der (mein) Homeduino liefert nach dem Hochfahren oftmals keine Messdaten. Erst nach einem zusätzlichen manuellen Reset des Arduino MEGA funktioniert die Datenübertragung. Zum Reset gibt es am Gehäuse einen Taster (im Bild rechts), die Funktion wird aber zusätzlich von einem Einschaltautomaten ELV EA4 übernommen (im Bild links), der kurz nach dem Hochfahren automatisch einen Reset durchführt…

HomaMatic Sauna

Die Temperatur wird mit einem DS18B20 an der Decke direkt über dem Ofen…

HomaMatic Sauna

…und zusätzlich – zusammen mit der Luftfeuchtigkeit – mit einem DHT22 unter der Bank gemessen (die zweiten Sensoren sind vom Arduino-Saunatimer)…

HomaMatic Sauna

Ein weiterer DS18B20 ist außen angebracht…

HomaMatic Sauna

Ein Taster erkennt den Zustand der Saunatür…

HomaMatic Sauna

Mit der Präsenzüberwachung innerhalb der Saunakabine habe ich etwas länger experimentiert, zumal es nicht einfach ist, bezahlbare Sensoren zu finden, welche die hohen Temperaturen dauerhaft schadlos überstehen. Schließlich habe ich mich für Doppler-Radar Module des Typs RCWL-0516 entschieden. Diese haben den Vorteil, dass sie durch Materie hindurch erfassen und somit auf das Kabinendach aufgelegt werden können.

Da die Module 3.3 Volt als Hi-Pegel nutzen, der Homeduino aber 5 Volt benötigt, kam es in der Praxis zu Fehlerkennungen. Ein bidirektionaler Vierkanal-Logik-Level-Konverter (Platine oben im Gehäuse) sorgt für eine zuverlässige Pegelanpassung…

HomaMatic Sauna

Damit eine hinreichende Erkennung innerhalb der gesamten Kabine erfolgt, erwiesen sich drei auf der Kabinendecke verteilte Module als optimal, die in nicht mehr benötigte SD-Speicherkartenboxen eingelegt wurden…

HomaMatic Sauna

Zur Präsenzerkennung wird eine Systemvariable…

HomaMatic Sauna

…ein-…

HomaMatic Sauna

…und mittels einer „Trigger-Hysterese“ wieder ausgeschaltet.

HomaMatic Sauna

Eine Hysterese von 60 Sekunden hat sich bei mir als optimal herausgestellt, damit die Präsenz durchgängig erkannt wird, auch wenn die Saunainsassen sich mal kaum bewegen. Hier muss man ggf. etwas probieren.

Audiosystem

Das Audiosystem wurde mittels der bewährten Raspberry Pi / HiFiBerry Amp+ Kombination unter der Verwendung von Volumio realisiert, die zwei 4 Ohm Einbaulautsprecher antreibt. Die verwendeten Lautsprecher sind zwar wasserfest aber nur für Temperaturen bis 80° Celsius ausgelegt, daher wurden sie relativ weit unten im kühleren Bereich der Saunakabine montiert.

Da ich zum Schalten der Spannungsversorgung des Raspberry Pi und des Arduino-Farbwechslers ohnehin ein HomeMatic 8-Kanal-Empfangsmodul HM-MOD-Re-8 im Einsatz habe, bot es sich an, über dessen freie Kanäle die wesentlichen Funktionen des Volumio-Systems gleich mit in die HomeMatic zu integrieren:

  • Play / Pause
  • Track vor / Track zurück
  • lauter / leiser
  • Shutdown
  • Spannungsversorgung

Damit das funktioniert, muss das Volumio Plugin „GPIO-Buttons“ installiert sein.

Hier exemplarisch ein mögliches Steuerungsprogramm, für die Play / Pause Funktion (der gewünschte Trigger ist noch zu ergänzen)…

HomaMatic Sauna

Bei den reinen Volumio-Funktionen über das Tablet nutze ich aber die etwas elegantere Möglichkeit über das Volumio REST API, das ich über HTTP-Requests in die aio NEO Seite eingebunden habe…

HomaMatic Sauna

Die verwendeten Kommandos:

http://IP_DES_VOLUMIO/api/v1/commands/?cmd=toggle
http://IP_DES_VOLUMIO/api/v1/commands/?cmd=next
http://IP_DES_VOLUMIO/api/v1/commands/?cmd=prev
http://IP_DES_VOLUMIO/api/v1/commands/?cmd=volume&volume=plus
http://IP_DES_VOLUMIO/api/v1/commands/?cmd=volume&volume=minus

Als Alternative wurde das Volumio WebUI als Website eingebunden, wodurch z.B. auch eine Titel- oder Senderauswahl möglich ist…

HomaMatic Sauna

Zum Herunterfahren des Volumios sowie für das Ein- und Ausschalten von dessen Spannungsversorgung existieren zwei Taster am Gehäuse.

Innerhalb der aio NEO Oberfläche gibt es hierzu ein Pop-Up,…

HomaMatic Sauna

…wobei für den Shutdown ein Makro genutzt wurde, das den entsprechenden Kanal des HomeMatic 8-Kanal-Empfangsmodul HM-MOD-Re-8 für 500 Millisekunden ein- und dann wieder ausschaltet…

HomaMatic Sauna
HomaMatic Sauna

Ich wollte zudem erreichen, dass die Musik in der Saunakabine nur abgespielt wird, solange diese besetzt ist. Das wurde mit Hilfe der o.a. Präsenzmelder mittels NodeRed (Redmatic) umgesetzt.

Wie Volumio in die HomeMatic eingebunden werden kann, habe ich in dem verlinkten Artikel beschrieben.

Um die Funktion nach Belieben ein- und ausschalten zu können, wurde eine weitere Systemvariable „Sauna Musik Automatik“ angelegt…

HomaMatic Sauna
HomaMatic Sauna

Die Volumio-Steuerung erfolgt über den Node „node-red-contrib-volumio„…

HomaMatic Sauna

Die Injects auf der linken Seite und der Funktionsknoten „volume“ sind optional und für die Präsenzsteuerung nicht unbedingt erforderlich.

Hier der zugehörige Code…

[
    {
        "id": "3fe1e2ba.28206e",
        "type": "tab",
        "label": "UG Bad Volumio Sauna",
        "disabled": false,
        "info": ""
    },
    {
        "id": "f5b1a40f.3894e8",
        "type": "volumio command",
        "z": "3fe1e2ba.28206e",
        "server": "ca58de94.38e5d8",
        "x": 1341.88330078125,
        "y": 520.199951171875,
        "wires": [
            []
        ]
    },
    {
        "id": "b3b61609.c352b8",
        "type": "function",
        "z": "3fe1e2ba.28206e",
        "name": "event",
        "func": "var event = msg.payload;\n\nmsg.payload = {\n    event: event\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1115.88330078125,
        "y": 422.199951171875,
        "wires": [
            [
                "f5b1a40f.3894e8"
            ]
        ]
    },
    {
        "id": "1600e719.889191",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Stop",
        "topic": "",
        "payload": "stop",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 109.88330078125,
        "y": 435.199951171875,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "655cc18e.79dcb8",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Play",
        "topic": "",
        "payload": "play",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 108.88330078125,
        "y": 355.19996643066406,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "cc088f9f.cca47",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Track vor",
        "topic": "",
        "payload": "next",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 119.88330078125,
        "y": 475.199951171875,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "2f9d5332.3d620c",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Track zurück",
        "topic": "",
        "payload": "prev",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 129.88330078125,
        "y": 515.199951171875,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "344ad980.852576",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Pause",
        "topic": "",
        "payload": "pause",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 108.88330078125,
        "y": 395.19996643066406,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "9db2ec26.5dc858",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Lautstärke auf 40%",
        "topic": "",
        "payload": "40",
        "payloadType": "num",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 146.88330078125,
        "y": 674.199951171875,
        "wires": [
            [
                "28c02ca6.c12e74"
            ]
        ]
    },
    {
        "id": "28c02ca6.c12e74",
        "type": "function",
        "z": "3fe1e2ba.28206e",
        "name": "volume",
        "func": "var vol = msg.payload;\n\nmsg.payload = {\n    event: \"volume\",\n    data: vol\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1107.88330078125,
        "y": 628.1999206542969,
        "wires": [
            [
                "f5b1a40f.3894e8"
            ]
        ]
    },
    {
        "id": "956b8cea.17e9f",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Lauter",
        "topic": "",
        "payload": "+",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 107.88330078125,
        "y": 628.199951171875,
        "wires": [
            [
                "28c02ca6.c12e74"
            ]
        ]
    },
    {
        "id": "18f6dae8.eb6ec5",
        "type": "inject",
        "z": "3fe1e2ba.28206e",
        "name": "Leiser",
        "topic": "",
        "payload": "-",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 109.88330078125,
        "y": 583.199951171875,
        "wires": [
            [
                "28c02ca6.c12e74"
            ]
        ]
    },
    {
        "id": "4a592d8d.373054",
        "type": "comment",
        "z": "3fe1e2ba.28206e",
        "name": "UG Bad Volumio Sauna",
        "info": "",
        "x": 142.76666259765625,
        "y": 47.56666564941406,
        "wires": []
    },
    {
        "id": "94838782.b2bdb8",
        "type": "ccu-sysvar",
        "z": "3fe1e2ba.28206e",
        "name": "Sauna Präsenz Kabine",
        "ccuConfig": "38263145.35ea0e",
        "topic": "ReGaHSS/${Name}",
        "change": false,
        "cache": true,
        "x": 216.7666015625,
        "y": 204.46670532226562,
        "wires": [
            [
                "a1f9e2d6.13adb8"
            ]
        ]
    },
    {
        "id": "8ba1756b.475368",
        "type": "switch",
        "z": "3fe1e2ba.28206e",
        "name": "Präsenz ?",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            },
            {
                "t": "false"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 714.7666015625,
        "y": 204.40005493164062,
        "wires": [
            [
                "38ad0d1e.3ebf4a"
            ],
            [
                "57e2ed83.ae4564"
            ]
        ]
    },
    {
        "id": "38ad0d1e.3ebf4a",
        "type": "change",
        "z": "3fe1e2ba.28206e",
        "name": "play",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "play",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 902.7666015625,
        "y": 181.63333129882812,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "57e2ed83.ae4564",
        "type": "change",
        "z": "3fe1e2ba.28206e",
        "name": "pause",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "pause",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 901.7666015625,
        "y": 229.63333129882812,
        "wires": [
            [
                "b3b61609.c352b8"
            ]
        ]
    },
    {
        "id": "a1f9e2d6.13adb8",
        "type": "ccu-switch",
        "z": "3fe1e2ba.28206e",
        "name": "Sauna Musikautomatik ein ?",
        "ccuConfig": "38263145.35ea0e",
        "iface": "ReGaHSS",
        "channel": "",
        "sysvar": "Sauna Musik Automatik",
        "sysvarProperty": "value",
        "datapoint": "",
        "datapointProperty": "value",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 479.7666320800781,
        "y": 204.15005493164062,
        "wires": [
            [
                "8ba1756b.475368"
            ]
        ]
    },
    {
        "id": "ca58de94.38e5d8",
        "type": "volumio-server",
        "z": "",
        "host": "111.111.111.111",
        "port": "3000"
    },
    {
        "id": "38263145.35ea0e",
        "type": "ccu-connection",
        "z": "",
        "name": "localhost",
        "host": "localhost",
        "regaEnabled": true,
        "bcrfEnabled": true,
        "iprfEnabled": false,
        "virtEnabled": true,
        "bcwiEnabled": false,
        "cuxdEnabled": true,
        "regaPoll": true,
        "regaInterval": "30",
        "rpcPingTimeout": "60",
        "rpcInitAddress": "127.0.0.1",
        "rpcServerHost": "127.0.0.1",
        "rpcBinPort": "2047",
        "rpcXmlPort": "2048",
        "queueTimeout": "5000",
        "queuePause": "250",
        "contextStore": ""
    }
]

Arduino Farbwechsler

Ein Stück von einem anderen Projekt übriggebliebenes LED-Band WS2812 wurde unter der Saunabank angebracht…

HomaMatic Sauna

…und sorgt – alternativ oder zusammen mit dem 230 Volt Farbwechsler – für einen angenehmen, langsam wechselnden Farbübergang…

HomaMatic Sauna
HomaMatic Sauna

Das Ein- und Ausschalten geschieht über das 8-Kanal-Empfangsmodul HM-MOD-Re-8 in Verbindung mit einem Arduino Relais, die Ansteuerung mit einem Arduino UNO R3, wie im Schaltplan dargestellt.

Hier der verwendete Sketch…

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(20, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
rainbow(20);
}

void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels()/2; i++) {
    strip.setPixelColor(i, c);
    strip.setPixelColor(strip.numPixels()-i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
     strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait+3000);
  }
}

void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256*5; j++) { 
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);
      }
      strip.show();
      delay(wait);
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);
      }
    }
  }
}

void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));
      }
      strip.show();
      delay(wait);
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);
      }
    }
  }
}

uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Obwohl die WS2812 LED-Bänder häufig als temperaturempfindlich beschrieben werden, versieht dieses Licht seit einigen Jahren problemlos seinen Dienst.

Saunatimer mit Display

Für die Anzeige von Uhrzeit, Temperatur, Luftfeuchtigkeit und der Dauer des Saunaganges (Sanduhr) wurde ein nicht mehr benötigtes Smartphone genutzt und speziell für diese Darstellung eine von der Auflösung passende aio NEO Seite erstellt. Damit die Anzeige immer die aktuellen Daten zeigt, muss im aio Creator eine automatische Aktualisierung der Seite (z.B. alle 10 Sekunden) eingestellt werden.

HomaMatic Sauna

Wie beim Arduino Saunatimer ist das Display (Smartphone) von außen an der Glastür befestigt. Hierbei wurde eine hohe Helligkeit gewählt, damit die Anzeige durch die getönte Tür und auch ohne Brille gut erkennbar bleibt (die Klebestreifen sind nur wegen der Blitzlichtaufnahme zu sehen und in der Praxis hinter der Scheibe nicht mehr zu erkennen).

HomaMatic Sauna

Außerdem sollte das Display immer an sein. Falls die diesbezüglich am Smartphone maximal einstellbare Zeit nicht ausreicht, kann Tasker helfen, das Display regelmäßig wieder einzuschalten.

Damit das Smartphone bei Bedarf problemlos entnommen werden kann, können festgeklebte U- oder S-Profile aus Metall oder Kunststoff als Halterung dienen, z.B. wie hier Kabelkanal…

HomaMatic Sauna

Die farblich wechselnden Icons sind in aio NEO mittels Statusregel eingebunden…

HomaMatic Sauna
HomaMatic Sauna
HomeMatic Sauna
HomeMatic Sauna
HomeMatic Sauna
HomeMatic Sauna

Die Funktion des Timers ist an meinen Heizölzähler angelehnt, Start und Stopp erfolgen über das Tablet, indem die Systemvariable „Sauna Timer Zustand“ geschaltet wird. Die Variable „Sauna Timer Einzeit“ dient als Zwischenspeicher der Einschaltzeit des Timers, in „Sauna Timer Wert“ wird die Saunagangdauer gespeichert.

HomeMatic Sauna

Beim Start wird dieses Skript getriggert,…

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

…bei laufendem Timer alle 10 Sekunden das folgende Skript ausgelöst…

var EinZeit= dom.GetObject("Sauna Timer Einzeit");
var KumZeit= dom.GetObject("Sauna Timer Wert");
 
! 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 umgerechnet
var x0 = (x1-x)/60;
 
! Laufzeit in die Systemvariable einstellen
KumZeit.State (x0.Round(0));
HomeMatic Sauna

…und beim Stoppen des Timers die Systemvariable „Sauna Timer Wert“ auf 0 Minuten gesetzt…

HomeMatic Sauna

Nach 25 Minuten erfolgt ein automatischer Reset…

HomeMatic Sauna

Der „neue“ Saunatimer ersetzt den Arduino-Saunatimer nahezu vollständig und bietet vor allem eine ansprechendere Anzeige. Lediglich die Sprachansage alle fünf Minuten ist nicht umgesetzt.

Der Timer ist die neueste Funktion dieses Projekts und läuft seit mehreren Monaten absolut zuverlässig, sodass ich den alten Arduino-Saunatimer, der derzeit noch alternativ oder parallel betrieben wird, demnächst abbauen werde.

Spannungsversorgung

Die Spannungsversorgung der beiden Arduinos, einschließlich LED-Band und Relais, des Raspberry Pi mit HiFiBerry Amp+ und der drei 8-Kanal-Module erfolgt zentral über das Netzteil einer alten externen Festplatte, das 12 und 5 Volt bei einem Ausgangsstrom von insgesamt ca. 4 Ampere liefert. Bei einem längeren LED-Band sollte die Spannungsversorgung des Arduino Farbwechslers separat erfolgen oder ein leistungsstärkeres Netzteil verwendet werden.

Tablet und Smartphone werden über die mitgelieferten Steckernetzteile geladen und im Saunabetrieb von ihren Akkus versorgt.

Push-Benachrichtigungen

Bei Erreichen bestimmter Temperaturen verschickt das System Pushnachrichten mittels Pushover, damit der Saunagang pünktlich starten kann und nicht unnötig Strom durch überflüssiges Heizen verbraucht wird…

HomeMatic Sauna
string tmpN;
string tmpO = system.Date("%d.%m.%Y, %T");
tmpN = "Die Sauna ist jetzt  (" # tmpO # ") auf 80%C2%B0C vorgeheizt!";
string tmpP;
string tmpQ = "";
foreach(tmpP, tmpN.Split(" ")) {
tmpQ = tmpQ # "+" # tmpP;
}
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -d token=TOKEN -d user=USER -d message='"#tmpQ#"' -d sound=bike http://api.pushover.net/1/messages.json");
HomeMatic Sauna

Auch zu Pushover gibt es bereits eine Anleitung, in der das grundsätzliche Vorgehen beschrieben ist.

Anmerkungen

Selten kommt es bei meinem Aufbau vor, dass sich die einzelnen Geräte gegenseitig beeinflussen und ungewollte Schaltvorgänge beobachtet werden. Hier kann die Verwendung geschirmter Leitungen helfen.

Auf der aio NEO Sauna-Tablet-Seite ist eine Taste für einen automatischen Aufguss vorhanden. Dies ist eine vorbereitete Funktionalität, die derzeit noch nicht implementiert ist.

Der Schaltplan wurde mit Fritzing erstellt.

Die in aio NEO verwendeten Icons stammen von Mediola bzw. Icons8. Letztere wurden im 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
  1. Wolfgang Badstein

    Hallo und Hut ab für dieses Projekt Sauna,
    ich hab schon länger eine Sauna und fange gerade an mich mit Homematic IP
    zu beschäftigen und die Sauna zu Steuer. Leider bekomme ich das nicht so hin
    wie ich mir das wünsche. Vielleicht kannst du mir ein paar Tipps geben.
    Das einschalte per Funktaster WRC2 über die Schaltplatine PCBS und verzögerter ( 90′) Ausschaltung bekomme ich hin.
    Das Ausschalten per Funktaster WRC2 vor der abgelaufen Zeit bekomme ich nicht hin.
    Über den Schaltaktor BSL mit Signalleuchte – Funk Temperatursender WDS30-T-O bekomme ich Grün wenn An – Rosa bei 35° – Rot bei 65°.
    Am Ende der Zeit oder beim Ausschalten sollen alle Signalleuchten aus sein. Ich komme immer nur ein teil hin, nie das ganze.

    • Hallo Wolfgang,

      freut mich, dass dir das Projekt gefällt. Wenn ich kann, versuche ich gerne, dir zu helfen. Ich habe aber zunächst Fragen zu deiner Konfiguration. Hierzu habe ich dir eben eine Mail geschickt.

      Liebe Grüße Jens

Schreibe einen Kommentar

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