Wasserschäden schnell erkennen Dank homematic und openHAB2

Im Winter hatte ich einen kleinen Wasserschaden, denn ein Überdruckbehälter unserer Heizanlage war defekt und leckte. Gut, dass ich es relativ schnell gemerkt habe, weil ich zufällig in den Raum musste. Ansonsten hätte ich wohl erst am Tag darauf davon erfahren, wenn der Keller tatsächlich komplett unter Wasser gestanden hätte.

Damit das künftig nicht mehr passiert habe ich mein Smarthome um die laut meiner Frau erste sinnvolle Funktion ergänzt: Wasseraustritte werden nun vernünftig gemeldet, so dass man schnell reagieren kann.

Was soll das System leisten?

Grundsätzlich habe ich drei Gefahrenstellen im Haus: Die Heizanlage ist im Keller, in der Küche steht die Spülmaschine und im Dachgeschoss die Waschmaschine.

Tritt Feuchtigkeit auf, soll eine Meldung via Email und Telegram erfolgen – sowohl an meine Frau wie auch an mich. Wie Telegram angebunden werden kann ist hier beschrieben. In der Meldung per Mail oder am Handy soll natürlich aufgeführt werden, welcher Sensor angeschlagen hat. Tritt Wasser auf, dann soll zusätzlich noch ein akustischer Alarm erfolgen, der im ganzen Haus zu hören ist. Hier soll ein mp3-Alarmton auf einem Webradio im Erdgeschoss (mit recht guten Boxen) abgespielt werden. Zudem soll per Text-To-Speach sparchlich ausgegeben werden, welcher Melder angeschlagen hat. Die Soundausgaben habe ich mit meinem „soundpi“-Projekt umgesetzt, über welches ich 2017 schon geschrieben hatte.

Das Ganze soll entweder dann auslösen, wenn ein Melder anschlägt. Ansonsten wird per cron alle 15 Minuten geprüft, ob ein Alarm vorliegt und wenn ja, wird das Alarmierungsprozedere alle 15 Minuten wiederholt. Schonzeiten gibt es keine – denn auch Nachts möchte ich lieber geweckt werden und reagieren können anstatt in einer Pool-Landschaft aufzuwachen…

Die „Hardware“

Die Hardware ist in dem Fall relativ einfach: Es sind Homematic IP Wassersensoren.

Aus diesem kommen unten drei Kontakte heraus. Zwei berühren den Boden, der dritte Kontakt ist etwa 1,5 mm drüber über dem Boden. Tritt Wasser aus und ist der Boden feucht, dann fließt Strom zwischen den beiden Kontakten und er alarmiert mit Feuchtigkeit. Fließt auch zum dritten Kontakt strom, dann steht schon etwas Wasser im Raum und er meldet Wasseralarm.

Kostenpunkt für alle Sensoren insgesamt grob 100 €.

Die Konfiguration

items-File (Auszug)

Group   gruppeWasserKG                      "Wassersensor Heizungskeller" <water> (gruppeKG)
Switch KG_WASSERSENSOR_LOWBAT "Batteriewarnung" <lowbattery> (gruppeWasserKG, lowbat) {channel="homematic:HmIP-SWD:xxx:xxx:0#LOW_BAT"}
Switch KG_WASSERSENSOR_ALARM_WASSER "Alarm Wasser" <alarm> (gruppeWasserKG, gruppeWassermelder) {channel="homematic:HmIP-SWD:xxx:xxx:1#WATERLEVEL_DETECTED"}
Switch KG_WASSERSENSOR_ALARM_FEUCHTIGKEIT "Alarm Feuchtigkeit" <alarm> (gruppeWasserKG, gruppeFeuchtigkeitsmelder) {channel="homematic:HmIP-SWD:xxx:xxx:1#MOISTURE_DETECTED"}
Switch KG_WASSERSENSOR_ALARM_STATUS "Status Alarm" <alarm> (gruppeWasserKG) {channel="homematic:HmIP-SWD:xxx:xxx:1#ALARMSTATE"}

Analog dazu existiert das Ganze dann nochmal für Erdgeschoss und Dachgeschoss.

rules-File

import java.net.URLEncoder

var String logPrefix = 'Wassermelder - '
val String TTS_URL = 'http://soundpi.fritz.box/streampi/streampi.php'

rule "Alarmierung bei Wassermelder-Alarm WASSER"
when 
    Time cron "0 0/15 * * * ?"   // alle 15 Minuten checken oder wenn ein Wassermelder Wasser-Alarm meldet
    or Member of gruppeWassermelder changed to ON
then
    // ist einer der Wassermelder an? Dann melden. Meldestufe WASSER, nicht Feuchtigkeit
    var boolean wasserDG = false
    var boolean wasserEG = false
    var boolean wasserKG = false
    var boolean alarm = false
    var String meldetext = 'Achtung, folgende Wassersensoren haben Wasser-Alarm ausgelöst: ' 
    if (DG_WASSERSENSOR_ALARM_WASSER.state == ON) {
        wasserDG = true
        meldetext += 'Hauswirtschaftsraum ' 
        alarm = true
    }
    if (EG_WASSERSENSOR_ALARM_WASSER.state == ON) {
        wasserEG = true
        meldetext += 'Küche '
        alarm = true
    }
    if (KG_WASSERSENSOR_ALARM_WASSER.state == ON) {
        wasserKG = true
        meldetext += 'Heizungskeller '
        alarm = true
    }
    if (alarm) {
        logInfo('rules', logPrefix + meldetext.toString())
        // Nun Alarmierung starten
        // Chat-Bot anschreiben
        logInfo('rules', meldetext)
        sendTelegram('bot1', meldetext)
        sendTelegram('bot2', meldetext)
        // Mail schicken
        sendMail('xxx', 'Wasser-Alarm!', meldetext)
        sendMail('xxx', 'Wasser-Alarm!', meldetext)

        // Lautsprecher im Haus benutzen
        if (wassermelderAlarmAn.state == ON) {
            val Integer volume = 50
            val String url = TTS_URL + '?type=tts&prio=1&volume=' + volume + '&base64=1&text=' + URLEncoder::encode(meldetext, "UTF-8")
            sendHttpGetRequest(TTS_URL + '?volume=' + volume + '&prio=2&file=/home/pi/wasseralarm.wav')	
            sendHttpPostRequest(url)
            }
    }
end

rule "Alarmierung bei Wassermelder-Alarm FEUCHTIGKEIT"
when 
    Member of gruppeFeuchtigkeitsmelder changed to ON
then
    // ist einer der Feuchtigkeitsmelder an? Dann melden. Meldestufe WASSER, nicht Feuchtigkeit
    var boolean wasserDG = false
    var boolean wasserEG = false
    var boolean wasserKG = false
    var boolean alarm = false
    var String meldetext = 'Achtung, folgende Wassersensoren haben Feuchtigkeit gemeldet: ' 
    logInfo('rules', 'Feuchtealarm-Check')
    if (DG_WASSERSENSOR_ALARM_FEUCHTIGKEIT.state == ON) {
        wasserDG = true
        meldetext += 'Hauswirtschaftsraum ' 
        alarm = true
    }
    if (EG_WASSERSENSOR_ALARM_FEUCHTIGKEIT.state == ON) {
        wasserEG = true
        meldetext += 'Küche '
        alarm = true
    }
    if (KG_WASSERSENSOR_ALARM_FEUCHTIGKEIT.state == ON) {
        wasserKG = true
        meldetext += 'Heizungskeller '
        alarm = true
    }
    if (alarm) {
        logInfo('rules', logPrefix + meldetext.toString())
        // Chat-Bot anschreiben
        logInfo('rules', meldetext)
        sendTelegram('bot1', meldetext)
        sendTelegram('bot2', meldetext)
        // Mail schreiben
        sendMail('xxxxxx', 'Feuchtigkeits-Alarm!', meldetext)
        sendMail('xxxxxx', 'Feuchtigkeits-Alarm!', meldetext)

    }
end

Da bei jedem verschieden viele Stellen geschützt und überwacht werden müssen ist das Ganze einfach entsprechend anzupassen – obiges ist nur als Beispiel zu sehen.

Es hat sich gelohnt!

Tatsächlich hat sich das Gaze bereits am ersten Tag, als ich die Wasser-Melder installiert hatte, gelohnt, auch wenn man es kaum glauben mag. Bei unserer Waschmaschine – die inzwischen auch schon 14 Jahre am Buckel hat – hatte sich an genau diesem Tag der Zulauf-Schlauch zur Trommel gelöst und all das Wasser, das in die Trommel sollte, lief einfach auf den Boden.

Zum Glück hat gleich der Wasser-Melder angeschlagen und wir konnten Schlimmeres verhindern und sofort reagieren. Ansonsten hätte uns das Wasser vermutlich über das Treppenhaus schnell einen Besuch bis in das Erdgeschoss abgestattet… Vermutlich ist dieser Anwendungsfall der bisher sinnvollste aus dem Bereich Smart Home für uns…

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.