Hallo,
probiere mich gerade an einer autmoatisierten Steuerung einer kleinen Bewässerung. Die besteht aus einer Pumpe (in einem Eimer/Kübel), div. Füllstandssensoren (einfache Schwimmschalter in verschiedener Tiefe), Ausgießern in den Töpfen und einem kleinen Durchflusswächter (Rad im Schlauch) meldet auch zurück wenn Wasser fließt. Geschaltet wird die Pumpe über ein SOnOff auf dem Tasmota läuft. Ein einfaches Pumpe an/aus ist kein Problem und bekomme ich (via MQTT) hin und auch wenn sich der Durchflusswächter dreht, bekomme ich eine Info. Aber es soll komfortabler werden ;-)
- ich schalte die Pumpe an -> erledigt und läuft
set pumpe on
- wenn sich der Durchflusswächter dreht, bekomme ich ein notify (Wasser_fliesst) und Info aufs Handy (via Telegram) --> erledigt und läuft
defmod Wasser_fliesst notify PUMPE:STATUS.WASSER {\
my $laufzeit = ReadingsVal("PUMPE","drehzahl","");;;;\
fhem "set Tele_bot message \@-1234567 Wasser läuft: $laufzeit";;;;\
}
Nun hätte ich aber gerne ein paar Extrawünsche bei denen ich nicht weiter komme:
- wenn dieses notify aktiv ist/geschaltet wurde, dann würde ich gerne alle 3min den Wasserstand abfragen und ausgeben (get Eimer_Wasserstand) --> Denkanstoß benötigt
- wenn kein Wasser mehr fließt (= Eimer leer), würde ich gerne die Gesamtlaufzeit der Pumpe wissen (also Differenz zw. notify hat ausgelöst und neuem (?) notify "dreht nicht mehr")
Ein at einzufügen das blind alle 3min den Füllstand abfragt schaffe ich. Aber das soll ja nur aktiv werden, wenn
- das notify für die Drehzahl ausgelöst wurde
- weiterhin eine Drehzahl (=Wasserfluss) erkannt wurde
Daran scheitere ich...
Bei unterschreiten eines gewissen Füllstands (einfach mehrere Schwimmschalter in verschiedener Tiefe), würde ich die Pumpe dann wieder abschalten und auch die Füllstandsmeldungen interessieren mich dann nicht mehr -> Benachrichtigungen wieder abschalten.
Wie bekomme ich zudem die Laufzeit ermittelt, also vom letzten "anspringen" des Wasserflusses/Drehzahl, bis es dann wieder aufgehört hat? Da stehe ich völlig auf dem Schlauch.
Würde mich hier über ein paar Denkanstöße freuen, letzte FHEM Kontakt ist wieder zu lange her.
Gruß, Robert
Zitat von: Betonklotz am 31 Mai 2023, 11:35:32Ein at einzufügen das blind alle 3min den Füllstand abfragt schaffe ich. Aber das soll ja nur aktiv werden, wenn
- das notify für die Drehzahl ausgelöst wurde
- weiterhin eine Drehzahl (=Wasserfluss) erkannt wurde
Wenn du das at erstellen kannst, dann einfach bei Start der Pumpe (notify?) das at aktivieren:
set atName active
Und wenn alles leer ist usw. (notify?) dann wieder deaktivieren:
set atName inactive
Zitat von: Betonklotz am 31 Mai 2023, 11:35:32Wie bekomme ich zudem die Laufzeit ermittelt, also vom letzten "anspringen" des Wasserflusses/Drehzahl, bis es dann wieder aufgehört hat? Da stehe ich völlig auf dem Schlauch.
Beim Start (notify?) die aktuelle Zeit "speichern" (setreading) bzw. wenn es nur um die reine Laufzeit geht einfach nur ein Reading setzen (Wert ist "egal" ;) ) und beim Stoppen (notify?) wieder die aktuelle Uhrzeit "speichern" (setreading) oder einfach ein Reading setzen.
Laufzeit: ReadingsAge("Device", "Stopp", 0) - ReadingsAge("Device", "Start", 0) oder eben mit den gespeicherten Uhrzeiten usw. (ist aber für reine Laufzeit zu "aufwendig" ;) )
Beim Start dann: setreading Device Start irgendwas (es geht ja nur um den Eintrag an sich -> ReadingsAge)
Bei Stopp dann: setreading Device Stopp irgendwas (es geht ja nur um den Eintrag an sich -> ReadingsAge)
EDIT: "Device" kann jedes Device sein. Du hast ja so einige notify, at, pumpe, ... such dir eines raus ;) (alternativ, wenn du unbedingt meinst: dummy / ich würde aber eines nehmen was schon da ist, statt ein weiteres anzulegen)...
Es gibt aber auch das Modul HourCounter, das dann mit der Pumpe "koppeln" und das sollte dann auch die Laufzeit protokollieren...
https://wiki.fhem.de/wiki/HourCounter
Gruß, Joachim
Hallo Joachim,
danke für die schnelle Antwort, muss ich nachher mal mit experimentieren. Das "active/inactive" kannte ich so nicht, oder habe ich vergessen
Die zyklische Abfrage geht ja einfach per
define Pumpenmeldung at +*00:03:00 get Eimer_Wasserstand
Also nun nur noch ein notify wenn das Wasser leer ist und alles wird gut.
Damit wäre ich aber beim nächsten Problem: das würde dann zyklisch/ständig Meldungen erzeugen wenn die Pumpe aus ist, d.h. ich muss die gegeneinander verriegeln, in der Art
- Pumpe an
- wenn Wasser läuft, dann frage Wasserstand ab
- wenn Wasser nicht mehr fließt oder Füllstand zu gering, dann Pumpe aus
- frage auch den Wasserstand nicht mehr ab
- warte bis ich manuell wieder Wasser nachgefüllt habe
- warte dann wieder auf den den Trigger "Wasser läuft"
Und bei Stromausfall, Reset o.ä. brauche ich erst einmal einen Durchlauf bevor es sich eingeschwungen hat und der korrekte Status vorliegt. Nicht schön, ist dann aber so.
Für den Start hätte ich Pumpe an, bzw. wenn Drehzahl erkannt wurde, muss dann im notify mehrere Befehle unterbringen um das setreading abzusetzen, aber das bekomme ich auch hin.
Danke und Gruß
Zitat von: Betonklotz am 31 Mai 2023, 13:12:23- wenn Wasser läuft, dann frage Wasserstand ab
Ich dachte dafür hättest du schon ein notify?
Da dann einfach das at aktivieren...
Zitat von: Betonklotz am 31 Mai 2023, 13:12:23- wenn Wasser nicht mehr fließt oder Füllstand zu gering, dann Pumpe aus
Auch hierfür dachte ich hättest du bereits ein notify -> at wieder deaktivieren
Alternative: im at abfragen, ob gerade Wasser läuft/Pumpe an ist und nur dann den Wasserstand holen...
Einfacher wäre es, wenn du mal alles postest was du bereits hast...
Inkl. kurzer "Erläuterung" was was ist/macht ;)
Gruß, Joachim