Erneut: Wassermelder

Begonnen von andies, 05 August 2017, 21:48:52

Vorheriges Thema - Nächstes Thema

andies

Es gibt hier schon mehrere Wassermelder und ich wollte meinen beschreiben, der viel von den Ideen anderer profitiert hat. Kostenpunkt < 5 Euro, aber etwas Arbeit (und, wenn wir ehrlich sind, das ist es, was am meisten Spaß machte). Ich schreibe das in mehrere Antworten, weil ich das nach Hardware/Software/FHEM sortieren möchte.

Zuerst die Hardware: Einfaches Kupferband, verzinnt und im Abstand von etwa 5mm befestigt. Ich habe andere Abstände gemessen und wenn das nicht einen Meter weit auseinander liegt, ist das nicht so wichtig. Zu nahe könnte Fehlalarme auslösen, ich fand 5mm einen guten Kompromiss. Alles aus Resten zusammengebaut. 

Das Objekt liegt auf dem Boden im Keller.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#1
Die eigentliche Messung habe ich mit einem Analog-Digital-Wandler MCP3201, eine Rasperry Pi (Zero) und in python realisiert. Einmal wollte ich mit so einem AD-Wandler arbeiten, zum anderen kann ich python etwas besser als Perl. Zuletzt hatte ich den Wandler herumliegen, aus einem anderen gescheiterten Projekt.

Technisch geschieht folgendes. Man legt den "Messkopf" (also das Ding da oben) in Reihe mit 100 kOhm (diesen Wert habe ich nach mehreren Messungen mit Wasser auf dem Boden etc für bestens geeignet ermittelt; enthärtes Wasser und schmutziger Kellerboden - beides spielt eine Rolle, weil Wasser nur durch die gelösten Teile darin leitet!). Diese Konstruktion wird an 3,3V angeschlossen. Man greift nun die Spannung am Messkopf ab. Das zeigt das Schaltbild unten rechts.

Ist die Spannung hoch (in etwa 3,3V), dann ist der Boden trocken. Ist sie niedrig (ich hatte mit Werten unterhalb der Hälfte von 3,3V gerechnet), dann ist der Boden nass oder feucht. Man misst die Spannung nun mit dem AD-Wandler und einem RPi-Zero.

Das geschieht so, dass ein RPi-Zero und der AD-Wandler miteinander verbunden werden. Der AD-Wandler vergleicht sozusagen eine Referenzspannung (bei mir 3,3V) mit der Messkopf-Spannung und gibt im RPi-Zero eine Zahl zurück, die sich ungefähr aus
int(MesskopfSpannung/Referenzspannung * 1024)

ermittelt.

Es war nicht ganz so einfach herauszubekommen, wie man die GPIOs und den Wandler verknüpft, in dem Bild unten links ist das näher ausgeführt. Wenn man die Sachen so verkabelt, kann man mit python und SPI die Höhe der Spannung am Messkopf auslesen und in einen digitalen Wert verwandeln.

Der Code, den man da benötigt, ist folgender (auszuführen mit sudo python <Dateiname.py>:
#!/usr/bin/env python
##
## https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=48810&p=1163064#p1163064
import time
import sys
import spidev

start_time = time.time()
#
######################################################################################
# Test am 5.8.2017
# Rueckmeldung "ohne Wasser" = 1000-1200 (2 min)
# Rueckmeldung "mit Wasser" = 200-210 (1,5 min)
#
######################################################################################


spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 40000
numdata = 100

def GetADC():
        Msum = 0
        s = 0
        while s < numdata:
            adc = spi.xfer2([0, 0])
            hi = (adc[0] & 0x1F);
            low = (adc[1] & 0xFE);  # FE for B, FC for C chip (MCP3201-B/C) Danil
            data = (hi << 8) | low;
            Msum += int(data)
            s += 1
        return int(Msum/(4*numdata))

try:
    while True:
        wasser = GetADC()
        f = open('/home/pi/wasser.txt', "w")
        f.write(str(wasser))
        f.close()
        time.sleep(300)
except:   
    spi.close()

Wie man sieht, wird der genannte Wert in eine Datei wasser.txt geschrieben, und das alle fünf Minuten.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#2
Dann habe ich mir die Werte in meinem Keller angeschaut und diverse Messungen durchgeführt - sowohl mit trockenem als auch nassem Boden. Unten sind die Ergebnisse zu sehen. Trocken ist der Boden, wenn der gespeicherte Werte in etwa bei 1000 oder so landet, feuchte Böden haben in etwa 700 und die 200 habe ich gemessen, wenn das Ding im Wasser stand.

Damit war klar, wie man das in FHEM einbindet. Das habe ich vermutlich umständlich gemacht, aber so ging das bei mir schneller. Auf dem RPi-Zero ist ein Webserver installiert, der bei Aufruf der IP nur "wasser=1006" (oder welcher Wert sich immer einstellt) ausgibt.

Auf diesen Webserver wird von FHEM nun mit HTTPMOD zugegriffen:
defmod Heizungskeller HTTPMOD http://192.168.2.105/ 300
attr Heizungskeller userattr reading01Name reading01Regex
attr Heizungskeller reading01Name Wasser
attr Heizungskeller reading01Regex wasser=(\d*)
attr Heizungskeller stateFormat { \
if (ReadingsNum($name, "Wasser", 1200) < 350) { \
    return "ALARM: Boden nass";;;;\
} elsif (ReadingsNum($name, "Wasser", 1200) < 700) { \
    return "WARNUNG: Boden feucht";;;; \
} else { \
    return "OK";;;;\
} \
}
attr Heizungskeller timeout 15


Der STATE sagt mir, ob alles ok ist. Wenn es Probleme gibt, werden die mit folgendem DOIF abgearbeitet:
defmod WassermelderDOIF DOIF ([Heizungskeller:Wasser]<700) (set TelegramBot _msg WARNUNG: Heizungsboden feucht!) DOELSEIF ([Heizungskeller:Wasser]<350) (set mySIP call 0163XXXXXX 3;;set TelegramBot _msg ALARM: Heizungsboden nass!)
attr WassermelderDOIF cmdpause 10800
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

der-sigi

Hallole

hmmm, nette Idee. Nur wird sie nicht lange funktionieren. Wenn man sie braucht ...

Sowas muß man kapazitiv oder per Wechselspannung messen. Mit einem Analogeingang klappt das nicht.

Aber andere Idee: Solche fertigen Holz und Boden Feuchtigkeitsmesser gibt es schon ab 5 Euro (Baumarkt, Labag etc.). Da ist schon alles drin. Die muß man nur am richtigen Punkt anzapfen und hat einen Digitaleingang oder sogar entsprechende Digitalwerte. Das wäre mein Startpunkt, wenn ich sowas bräuchte.

Viele Grüße
Sigi

Frank_Huber

Hab mal irgendwo auf nem Blog von der Idee gelesen einen Taster mit einem Stück Würfelzucker zu verbinden und dieses auf den Boden zu legen. Wird  es nass löst sich der Zucker und der Taster löst aus.
Kommt ganz ohne Ruhestrom aus und scheint zu funktionieren.

Btw: ich hab bei mir die wassermelder (Bausatz) von Pollin verbaut. 5er das Stück...

Gesendet von meinem S3_32 mit Tapatalk


andies

Zitat von: der-sigi am 06 August 2017, 00:04:30
Sowas muß man kapazitiv oder per Wechselspannung messen. Mit einem Analogeingang klappt das nicht.
Was passiert denn, weshalb es nicht klappt? Und habt Ihr (beide) einen Link?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann


andies

Danke. Ich habe ein wenig gelesen: Bei resistiven Sensoren korridieren die Messfühler, wegen der Gleichspannung. Deshalb kapazitativ, insbesondere bei Feuchtigkeitsmessung. Ich werde das mal beobachten und testen, mein Boden ist ja normalerweise trocken und nicht feucht (Strom vermutlich unter 2uA auf den Sensoren). Sonst steige ich um.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

fiedel

Zitat von: Frank_Huber am 06 August 2017, 09:06:18
http://www.zabex.de/site/wassermelder.html
Zuckerwürfel und Zeitungspapier - Ich seh schon die Maus vor mir, nennen wir sie mal Sweetie Gonzales, wie sie genüsslich den Zuckerwürfel durchnagt und bei Ertönen des Alarms "Arriba Arriba...." ruft. Ihr Kondensstreifen ist noch nicht ganz verflogen da fällt ihr ein, dass sie ja noch ein paar wichtige Zeitungsschnipsel mitnehmen wollte...  ;D
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

fiedel

#9
Zitat von: andies am 06 August 2017, 09:42:08
Danke. Ich habe ein wenig gelesen: Bei resistiven Sensoren korridieren die Messfühler, wegen der Gleichspannung. Deshalb kapazitativ, insbesondere bei Feuchtigkeitsmessung. Ich werde das mal beobachten und testen, mein Boden ist ja normalerweise trocken und nicht feucht (Strom vermutlich unter 2uA auf den Sensoren). Sonst steige ich um.

Das gilt natürlich nur für Feuchtemessung in feuchten Medien wie z.B. Boden, wo zwischen den Kontakten dauerhaft strom fließt.
Eine Oberflächenvergütung schadet den Kontakten aber auch in deinem Fall nicht. Irgendwas vernickeltes wäre gut. Es gibt doch solche Nägel oder Reißzwecken mit großem, gewölbtem, sibernem Kopf. 

Ich hab mir diese hier bestellt und werde sie mit einer FS20KSE erweitern (z.B. für Gartenpumpenleckagen in der Garage). Liegt leider aus Zeitmangel noch in der Schublade. Für die wichtigen Stellen (HWR zwischen WW- Speicher und Waschmaschine oder am Geschirrspüler) gibt es bereits 2 HM- Sensoren. Das soll schon 100-Prozentig sein.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Frank_Huber

Ja, deshalb hab ich auch die Bausätze von Pollin genommen. ;-)
12V hab ich eh von nem zentralen Netzteil in jeden Etagenverteiler liegen und bei jedem Wassersensor ein 2x2x0,6.

Wobei man das mit den Mäusen auch in den Griff bekommen kann indem man den "Sensor" noch irgendwie einpackt.

Gesendet von meinem S3_32 mit Tapatalk


ak323

Zitat von: Frank_Huber am 06 August 2017, 00:14:44
Hab mal irgendwo auf nem Blog von der Idee gelesen einen Taster mit einem Stück Würfelzucker zu verbinden und dieses auf den Boden zu legen. Wird  es nass löst sich der Zucker und der Taster löst aus.
Kommt ganz ohne Ruhestrom aus und scheint zu funktionieren.

Habe ich mir gerade gebaut !

Hängt nen 1-wire DS2401 dran der beim Auflösen des Würfelzuckers verschwindet weil der Taster unterbricht (Öffner) ... hoffentlich gibt der nie Alarm !
VG ak323
RaspberryPi 2 im 19" Rack mit 16x2 i2c LCD, FHEM, diverse HomeMatic, 1-Wire (8x DS18B20, 3x DS2408, 2x DS2413, 5x DS2401, DS2423 ATTiny) über DS9490R#, Waterkotte Ai1QE (WWPR) Wärmepumpe über Modbus, WH1080 über Signalduino, 433MHz Funksteckdosen, WiFi RGBWW via Tasmota, ...