Hallo zusammen.
in der vergangenen Woche habe ich mein erstes Mini-Projekt zusammengebastelt:
https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82712;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82712;image)
Ich habe einen Gartenteich mit 2 Pumpen, die per FHEM ein/ausgeschaltet werden können:
- Pumpe 1
läuft ganzjährig (24/7/365)
geringer Höhnenunterschied
geringes Risiko, dass Wasser aus dem Kreislauf entweicht - Pumpe 2
läuft von ca. April bis Oktober 24/7
großer Höhenunterschiede
diverse Zwischenfilter und Filterteiche im Kreislauf
höheres Risiko, dass Wasser aus dem Kreislauf entweicht
Insbesondere wegen Pumpe2, möchte ich den Wasserstand überwachen. Im letzten Jahr habe ich mir an einem Wochenende mehrere Kubikmeter Wasser aus dem Teich gepumpt, da ein fetter Frosch einen der Abläufe im Kreislauf von Pumpe 2 zu seinem neuen Zuhause machen wollte.
Vorhandene Geräte wie z.B. der Homematic Füllstandsmesser, schienen mir nicht geeignet, da der Höhenunterschied, den ich überwachen möchte so bei ca. 12 cm liegt.
Also musste ich selber basteln - folgendes ist dabei herausgekommen:
verwendete Teile: https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82714;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82714;image)
- Homematic HM-SCI-3-FM (Funk-Schliesserkontaktschnittstelle)
- Aufputzdose
- Isolierrohre EN16
- RohrClips EN16
- 3 Wasser-Füllstandsensoren
- Wago-Klemmen
Gebastel:
- Step 1 https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82716;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82716;image)
- die Isolierrohre auf gewünschte Länge schneiden (Unterschied zwischen längstem und kürzestem Rohr definiert die Überwachungshöhe)
- Einkleben der Füllstandsensoren in die Rohre
- Kabel durch die Aufputz-Dose führen
- Step 2 https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82718;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82718;image)
- Einkleben der Rohre in die Dose
- Abstand der Rohre mit 3 RohrClips fixieren, damit die Schwimmer gängig bleiben
- Step 3 https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82720;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82720;image)
- Montage der Schwimmer (Drehen der Schwimmer um 180° wechselt zwischen Öffner/Schliesser)
- Anklemmen der Kontakte (Verdrahtung)
- technischer Test https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82722;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82722;image)
- pairen des HM-SCI-3-FM
- cyclicInfoMsg einschalten
- "Entprellen" durch Einstellung von eventDlyTime auf 60
- eventOnChange auf .* stellen
"Programmierung" FHEM
- Funktion in MyUtils: SetTeichLevel
- Auswerten der Zustände von Level_01, Level_02 und Level_03:
- open - open - open -> TeichLevel "leer"; Pumpe1 und Pumpe2 werde ausgeschaltet
- closed - open - open -> TeichLevel "min"; Pumpe2 wird ausgeschaltet
- closed - closed - open -> TeichLevel "ok"
- closed - closed - closed -> TeichLevel "max"
- die 4 übrigen Kombinationen -> TeichLevel "error"; Pumpe1 und Pumpe2 werde ausgeschaltet - eingefroren?
- Dummy "dummy_Teich_Level" zur Zusammenfassung der 3 Level zu einem Zustand
- Notify "Notify_Teich_Level" (bei Änderung eines der 3 der Levels)
- Notify "Notify_Startsequenz" (Initialisieren des TeichLevels bei FHEM-Neustart)
sub setTeichLevel() {
my $Level1 = ReadingsVal("Teich_Level_01", "state", "open");
my $Level2 = ReadingsVal("Teich_Level_02", "state", "open");
my $Level3 = ReadingsVal("Teich_Level_03", "state", "open");
my $Message = "";
my $Icon = "";
my $ret;
Log 1, "$Level1 $Level2 $Level3";
if ($Level1 eq "open") {
if ($Level2 eq "open") {
if ($Level3 eq "open") {
$ret = "leer";
}
else {
$ret = "error";
}
}
else {
$ret = "error";
}
}
else {
if ($Level2 eq "open") {
if ($Level3 eq "open") {
$ret = "min";
}
else {
$ret = "error";
}
}
else {
if ($Level3 eq "open") {
$ret = "ok";
}
else {
$ret = "max";
}
}
}
fhem("set dummy_Teich_Level $ret");
if (($ret eq "error") || ($ret eq "leer")) {
$Icon="error-Icon";
fhem("set Teich_Pumpe1 off");
fhem("set Teich_Pumpe2 off");
$Message="\nPumpe1 und Pumpe2 ausgeschaltet";
}
elsif ($ret eq "min") {
$Icon="Exclamation-Icon";
fhem("set Teich_Pumpe2 off");
$Message="\nPumpe2 ausgeschaltet";
}
elsif ($ret eq "max") {
$Icon="Exclamation-Icon";
}
else {
$Icon="OK-Icon";
}
$Message=$Icon . " Teichlevel: " . $ret . "\n" . $Message;
fhem("set TBot message $Message");
Log 1, "$ret";
return $ret;
}
define dummy_Teich_Level dummy;
attr dummy_Teich_Level alias Teich-Füllstand;
attr dummy_Teich_Level setList state:leer,min,ok,max,error;
define Notify_Teich_Level notify Teich_Level_0[123]:(open|closed) {
setTeichLevel()
}
define Notify_Startsequenz notify global:INITIALIZED.* {
fhem("set TBot message $NAME $EVENT \nFHEM neu gestartet");
setTeichLevel()
}
Darstellung in FTUI:
- Füllstand max: https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82724;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82724;image)
- Füllstand ok: https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82726;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82726;image)
- Füllstand min: https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82728;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82728;image)
- Füllstand leer: https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82730;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82730;image)
- Füllstand error: https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82732;image (https://forum.fhem.de/index.php?action=dlattach;topic=75129.0;attach=82732;image)
Verbesserungsvorschläge (die nicht die Hardware betreffen - das ist zu spät!) sind willkommen!
Danke - nimm zur Sicherheit den großen Fluss raus.
Sonst gibts vielleicht noch Ärger wegen Werbung...........