Schalten nach mehrmaligem Eintritt eines Zustands

Begonnen von foly12, 08 Juni 2017, 23:05:00

Vorheriges Thema - Nächstes Thema

foly12

Hallo alle,

wahrscheinlich war ich nur wieder zu doof die Suche zu bedienen, falls dem so ist, freu ich mich über einen Link als Einstieg ... jedenfalls ich habe nichts dazu gefunden ...

Folgende Aufgabe:
Ich möchte  meine Gartenpumpe ausschalten, wenn Sie 10 x innerhalb von 10 min Ein und Ausgeschalten hat. Hintergrund ist, dass manchmal ein Entwässerungsventil nicht sauber schliesst und dadurch der Druck im Schlauch immer wieder abfällt. Die Pumpe schaltet sich dann automatisch wieder ein, wegen des internen Drucksensors. Dass das manchmal so ist, sehe ich an dem Log, das ich mit einer Homematic Schaltsteckdose beschreibe. Falls dieser Zustand eintritt, möchte ich, dass die Steckdose automatisch auf Off geht.

Wie gesagt, ein log habe ich, die Daten sind da. Welchen Befehl kann ich nun verwenden, um das Verhalten auszuwerten und einen Schaltbefehl abzusetzen.

Danke für einen Tipp  :D :D


...Newbie... aber lernbereit :-)

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

foly12

... jetzt habe ich mir das angesehen, aber das übersteigt meine Fähiglkeiten ... :'( :'( Wenn mir da jemand helfen könnte wäre das super.

Ich möchte den Schalter SD_1_Sw auf off stellen, wenn innerhalb der letzten 120 min der Wert SD_1_SenPwr 20 x auf >200 Watt und wieder zurück auf <30 Wgeschalten wurde. Die Log Datei FileLog_SD_1 heisst :SD_1-2017.log und ändert Ihren Namen monatlich (könnte auch ein Problem sein, oder)

Vielen Dank schon mal vorab dem freundlichen Helfer :-)

Anbei ein Auszug aus der log:
017-05-26_08:39:43 SD_1_SenPwr 0.86
2017-05-26_08:40:26 SD_1 CMDs_done
2017-05-26_08:40:26 SD_1_SenPwr 12.6
2017-05-26_08:40:41 SD_1 CMDs_done
2017-05-26_08:40:41 SD_1_SenPwr 464.29
2017-05-26_08:40:57 SD_1_SenPwr 0.85
2017-05-26_08:40:57 SD_1 CMDs_done
2017-05-26_08:41:50 SD_1 CMDs_done
2017-05-26_08:41:50 SD_1_SenPwr 20.93
2017-05-26_08:42:05 SD_1 CMDs_done
2017-05-26_08:42:05 SD_1_SenPwr 462.15
2017-05-26_08:42:21 SD_1 CMDs_done
2017-05-26_08:42:21 SD_1_SenPwr 0.85
2017-05-26_08:43:18 SD_1 CMDs_done
2017-05-26_08:43:18 SD_1_SenPwr 9.83
2017-05-26_08:43:33 SD_1 CMDs_done
2017-05-26_08:43:33 SD_1_SenPwr 464.5
2017-05-26_08:43:49 SD_1 CMDs_done
2017-05-26_08:43:49 SD_1_SenPwr 0.85
2017-05-26_08:44:50 SD_1 CMDs_done
2017-05-26_08:44:50 SD_1_SenPwr 6.99
2017-05-26_08:45:05 SD_1 CMDs_done
2017-05-26_08:45:05 SD_1_SenPwr 464.77
2017-05-26_08:45:21 SD_1 CMDs_done
2017-05-26_08:45:21 SD_1_SenPwr 0.86
2017-05-26_08:46:25 SD_1 CMDs_done
2017-05-26_08:46:25 SD_1_SenPwr 15.87
2017-05-26_08:46:40 SD_1 CMDs_done
2017-05-26_08:46:40 SD_1_SenPwr 465.12
2017-05-26_08:46:41 SD_1 CMDs_done
2017-05-26_08:46:56 SD_1 CMDs_done
2017-05-26_08:46:56 SD_1_SenPwr 0.86
2017-05-26_08:48:02 SD_1 CMDs_done
2017-05-26_08:48:02 SD_1_SenPwr 18.87
2017-05-26_08:48:17 SD_1 CMDs_done
2017-05-26_08:48:17 SD_1_SenPwr 466
2017-05-26_08:48:33 SD_1 CMDs_done
2017-05-26_08:48:33 SD_1_SenPwr 0.85
2017-05-26_08:49:39 SD_1 CMDs_done
2017-05-26_08:49:39 SD_1_SenPwr 14.36
2017-05-26_08:49:54 SD_1 CMDs_done
2017-05-26_08:49:54 SD_1_SenPwr 466.38


...Newbie... aber lernbereit :-)

foly12

... kann mir nicht bitte jemand helfen. Ich bin einer, der es normalerweise erstmal selbst versucht, aber hier fehlt mir jedlicher Ansatz ... daher bin ich wirklich dankbar für Eure Hilfe!!

Aus der Fhem Docu bekomme ich folgenden Syntax:

define lampseq sequence Btn1:on 0.5 Btn2:off 0.5 Btn1:on
define lampon notify lampseq:trigger set lamp on

Aber mir ist völlig unklar wie ich das mehrmalige Eintreten eines Zustands auswerten kann. Ich habe keine mehrere Buttons sondern ich muss im Prinzip auf Basis des Werts "SD_Pumpe_SenPwr" eine Aktion programmieren. Wenn der WErt " SD_Pumpe_SenPwr" z.B. 5x in einer Minute auf >300 W und dann wieder auf <10 W geht, dann soll geschalten werden.

Hinweise sind wirklich sehr willkommen! Danke!
...Newbie... aber lernbereit :-)

amenomade

Mit sequence kannst Du nicht genau machen, was du willst. Es ware nur möglich zu definieren:

wenn > 300W, dann innerhalb von 10 Sekunden < 10W, dann innerhalb von 10 Sekunden > 300W, dann usw.

Wäre ok?

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

ZitatWenn der WErt " SD_Pumpe_SenPwr" z.B. 5x in einer Minute auf >300 W und dann wieder auf <10 W geht, dann soll geschalten werden.

Sollte mit folgendem funktionieren:
defmod diseq DOIF ([SD_Pumpe_SenPwr] > 300)\
  {if (ReadingsAge("diseq", "init", "9999999") < 60) \
     {\
     my $count = ReadingsVal("diseq", "count", "0") + 1;;\
     fhem "setreading diseq count $count";;\
     if ($count >= 5) \
        { fhem "set SD_1_Sw off";;\
          fhem "setreading diseq count 0";;\
        };;\
     }\
   else \
     {\
     fhem ("setreading diseq init 1");;\
     fhem ("setreading diseq count 0");;\
     }\
   }\
DOELSEIF ([SD_Pumpe_SenPwr] < 10)\



Version vom DOIF Modul > 07.03.2017

Man kann vielleicht eleganter machen, bin noch auf der Suche. Aber diese Version mit viel Perl sollte gehen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

fiedel

Leider hast du uns nicht geschrieben, wie du deine Bewässerung steuerst. Mein Ansatz wäre immer, die Pumpe nur so lange am Netz zu haben, wie bewässert werden soll. Mal angenommen, du hast 3 Ventile. Jedes soll 20 Min. lang nacheinander laufen. Dann startest du die Pumpe mit "on-for-timer 3900", also mit etwas Zugabe. Dann die Ventile in Abfolge mit "on-for-timer 1200" und ca. 10 Sek. Pause dazwischen.

Noch perfekter geht das, wenn man zeitgleich mit den Ventilen noch jeweils ein at startet, welches im Ausführungsteil die Abfolge der Ventile und die Pumpe stoppt, wenn die Pumpe in den 10 Sek. Pause nicht kurz abschaltet (Undichtigkeit / Schlauchplatzer).
Das Abschalten der Pumpe löscht dabei das at, welches beim nächsten Ventil erneut gestartet wird usw.

Das kann letztendlich solche Formen annehmen. Zur Programmbeschreibung komme ich zwar dieses Jahr nicht mehr, aber zum Ideenklau reicht es bestimmt aus.

Gruß
Frank
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

foly12

Wow, Danke Euch! Da werde ich mich jetzt durcharbeiten, wills ja auch verstehen.

Zur Anregung mit der parallelen Schaltung von Pumpe und Bewässerungsventilen: Ich habe auch noch einen ganz normalen Wasserhahn in Betrieb, da würde ich gerne vermeiden, dass ich die Pumpe immer erst einschalten muss bevor Wasser kommt. Deshalb dachte ich, ich gehe den Weg über die Erkennung einer Fehlfunktion, um nur dann abzuschalten.

Vg foly12
...Newbie... aber lernbereit :-)

foly12

Hi amenomade,

nachdem ich jetzt einige Zeit nicht dazu kam am System weiter zu arbeiten, habe ich den Snippet von Dir in FHEM importiert und das funktioniert perfekt! Vielen Dank. Verstanden habe ich den Code auch, aber ich habe noch eine Frage dazu:

Was ist denn der Unterschied wenn ich den Code in die fhem.cfg kopiere (dann funktioniert er nicht) zu der Raw definition import variante, da funktioniert er. Da wird ja dann auch aus "defmod" "define". Kannst Du mir sagen was da passiert, Danke!!

Viele Grüße!
...Newbie... aber lernbereit :-)

amenomade

Den Unterschied zwischen Raw Def und fhem.cfg kann ich dir nicht genau sagen. Ich weiss nicht. Nur... direkt editieren von fhem.cfg ist immer gefährlich, und führt oft zu unerwartete Ergebnisse/ Fehler. Ausserdem wird eine neue Definition nur dann geladet, wenn Du fhem neu startest. Mit Raw Def wird die neue Definition sofort gültig. Ich habe in den letzten 6 Monaten (mind.) meine fhem.cfg Datei nie direkt editiert.

Allerdings sollte man lieber ein DOIF durch klicken auf "DEF" in der Weboberfläsche ändern. Da sind die \ am Ende der Zeilen und die doppelte ;; nicht nötig.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rudolfkoenig

ZitatWas ist denn der Unterschied wenn ich den Code in die fhem.cfg kopiere (dann funktioniert er nicht) zu der Raw definition import variante, da funktioniert er.
Zwischen den beiden Varianten sollte kein Unterschied sein. defmod steht fuer "define or modify", d.h. falls die Instanz existiert, dann wird ein modifiy durchgefuehrt, sonst ein define. Da save die internen Speicherstrukturen abspeichert, ist in einem per save erzeugten fhem.cfg defmod nicht notwendig.

Probleme beim Editieren der fhem.cfg:
- FHEM bzw. FHEMWEB kann keine zusaetzlichen Pruefungen (wie Perl Syntaxcheck bei einem per DEF geaenderten notify) vornehmen, oder Falscheingaben per select verhindern (wie bei Attributnamen).
- Falls man die Aenderungen aktivieren moechte, dann ist ein Neustart oder ein rereadcfg notwendig, wobei rereadcfg nicht viel weniger bedeutet, als einen Neustart. Beim Neustart gehen alle "Internals" verloren (wie gestartetes watchdog, sequence, etc), weiterhin brauchen manche USB-Geraete lang zum Initialisieren, waehrend dieser Zeit ist FHEM blockiert.
- Je nach Editor kann man Nicht-UTF-8 Zeichen eingeben, was in FHEMWEB falsch dargestellt wird.
- Es ist einfacher eine falsche Reihenfolge von Definitionen zu erzeugen
- usw.

Aus diesen Gruenden wird insb. Anfaengern das direkte Editieren von fhem.cfg nicht empfohlen, und ich habe nach diversen Diskussionen das Editieren in FHEMWEB mit editConfig etwas erschwert.

Prof. Dr. Peter Henning

Mal zurück zum Pumpenproblem: Das sollte immer unabhängig von FHEM sein - also sollte sich z.B. per Druckschalter die Pumpe automatisch einschalten, wenn die Ventile offen sind. (außer im Winter natürlich).

LG

pah

foly12

Vielen Dank für die Erläuterungen! Die u.g. Risiken bei einer direkten Veränderung der fhem.cfg kenne ich und habe ich auch selbst schmerzlich gelernt :o :o
Hatte nur bisher die Raw Def Funktion nicht gekannt und daher umfangreichere Ergänzungen der .cfg direct vorgenommen. Aber, lesen bildet, Danke furs Erklären!


@Prof: Der Druckschalter ist natürlich in Betrieb und fuinktioniert auch. Allerdings gibt es das Risiko, dass durch eine kleine Undichtigkeit in der Druckleitung, ein Druckverlust ensteht und der führt dann zu häufigem wieder einschalten. Das Problem hatte ich am Anfang mal und die Pumpe ist drei Wochen lang im 20 sekunden Rhythmus angesprungen. Das überlebt sie nicht lange! Daher möchte ich so eine zweite Sicherheitsstufe.... aber die habe ich ja jetzt  :) :)
...Newbie... aber lernbereit :-)

Prof. Dr. Peter Henning

Ich habe an derselben Pumpe auch manuell bedienbare Wasserhähne - und hatte über die Jahre auch schon Undichtigkeiten, kenne die Probleme also alle.

Sind bei mir dadurch gelöst, dass parallel zur Pumpe eine Klingelsignalerkennung angeschlossen ist. FHEM bekommt also mit, wenn die Pumpe an- oder ausgeht. Damit habe ich sehr gut unter Kontrolle, wie häufig das passiert. Außerdem kann ich eine Warnung bekommen, wenn die Pumpe zu lang eam Stück läuft - das schützt vor dem Trockenlaufen und der damit verbundenen Brandgefahr.

LG

pah