Bedingtes schalten incl. Watchdog, brauche hilfe

Begonnen von Stivmaster, 28 Juli 2016, 14:54:19

Vorheriges Thema - Nächstes Thema

Stivmaster

Hi

ich bastle nun schon ne ganze weile an einem soif, und bekomme es nicht richtig hin.
Meine Anforderung: Ich habe einen Wassertank, bei dem mit einem Jeelink der Pegel gemessen wird. Ich möchte jetzt in Abhängigkeit des Pegelstandes, die Pumpe ein oder ausschalten, um zu verhindern, dass die Pumpe läuft, wenn der Tank leer ist. Dies hab ich auch soweit hinbekommen.

define di_Wassertank_leer DOIF ([Wassertank:liters] < 200) (set FS20_Stecker_2 off) DOELSEIF ([Wassertank:liters] > 200) (set FS20_Stecker_2 on)

ich möchte noch das überprüft wird, ob der Füllstand auch Regelmäßig rück gemeldet wird.

Das habe ich mit einem zweiten DOIf auch soweit hinbekommen:

define di_Wassertank_level_aktiv DOIF ([Wassertank]) (set FS20_Stecker_2 off)
attr di_Wassertank_level_aktiv do always
attr di_Wassertank_level_aktiv wait 300

Wenn jetzt das di_Wassertank_level_aktiv aktiv wird, dann funktioniert das di_Wassertank_leer nicht mehr, Ich vermute dass es nicht mehr getriggert wird, da sich ja eigentlich der Zustand nicht geändert hat.

Kann man das ganze auch in ein doif zusammenfassen? Ich vermute ja, aber alle meine Versuche brachten bisher nicht das gewünschte Ergebnis.

Ich hoffe ihr könnt mir einen Schubs in die richtige Richtung geben.

Mfg

Stiv

Ellert

#1
1.DOIF mit "do always" und "set" ggf. mit Filter, siehe http://fhem.de/commandref_DE.html#devspec

Und Code bitte in CODE-Tags setzen, dann wird er lesbarer.


Stivmaster

danke, dass mit den Filtern war der Entscheidende Hinweis.

das ganze in ein doif packen, wäre es generell möglich, oder muss ich den Weg mit den zwei doif´s gehen?

Ellert

Ob es generel möglich ist, lässt sich nur beantworten, wenn man mindestens eine Lösung findet, die das Problem in einem DOIF löst. Ich sehe keine Notwendigkeit eine Lösung für Dich zu suchen. Watchdog und Levelschalter sind recht unabhängige Funktionen, da machen 2 DOIF schon eine gute Figur.

Aber Du musst den Weg mit den 2 DOIF nicht gehen, vielleich findest Du selbst eine Möglichkeit.

SouzA

Hallo,

ich habe auch ein Problem mit dem Watchdog, bzw. mit der entsprechenden Umsetzung ins DOIF und hänge mich deswegen in diesen Threat mit rein. Wenn dies nicht gewünscht, bitte Bescheid geben!

Ich hatte bisher eine Bedingung über zwei Watchdogs realisiert und versuche nun diese in ein DOIF zu drücken...

An einer Tür gibt es einen Griff mit drei Stellungen und vier Meldungen (closed, open, open_from_tilted, tilted).
Die Rolläden sollen in der jeweiligen Stellung verbleiben, wenn der Griff nicht auf open oder open_from_tilted stehen bleibt. Deshalb hatte ich eine Sekunde Verzögerung drin, denn wenn man von closed nach tilted wechselt geht das relativ flott ;) Ansonsten fahren die Rolläden dann hoch.

Die Watchdogs sahen so aus:
wz_Tuer_rechts:open 00:00:01 wz_Tuer_rechts:closed|wz_Tuer_rechts:tilted set wz_Rolladen_rechts Auf

wz_Tuer_rechts:open_from_tilted 00:00:01 wz_Tuer_rechts:closed|wz_Tuer_rechts:tilted set wz_Rolladen_rechts Auf


Das DOIF schaut nun so aus, das attr wait wurde auf 1 Sekunde gesetzt:


##Wenn der Befehl Zu an das Rollo rechts gesendet wird und die Tür offen ist, soll es vorsichtshalber hoch fahren! (1 Sekunde verzögert, da Griff von closed auf tilted geschaltet werden könnte...)
(
(
(
[wz_Tuer_rechts:state] eq "open" or
[wz_Tuer_rechts:state] eq "open_from_tilted"
) and
(
[du_wz_Rolladen_rechts] eq "Zu"
)
) or
[du_wz_Rolladen_rechts] eq "Auf"
)
(
set wz_Rolladen_rechts Auf
)
##Ansonsten soll es auch runter fahren, wenn man die Tür schließt und der Automatikbefehl ansteht!
DOELSEIF
(

[du_wz_Rolladen_rechts] eq "Zu"
and
(
[wz_Tuer_rechts:state] eq "closed" or
[wz_Tuer_rechts:state] eq "tilted"
)
)
(
set wz_Rolladen_rechts Zu
)
DOELSE

attr wait 1:0


Das Problem ist aber, dass keine Sekunde gewartet wird, bis der erste Befehl gesendet wird.
Der EventMonitor sagt:
DOIF di_wz_Rolladen_rechts wait_timer: no timer

Kann mir bitte jemand die Fehlermeldung erklären?

Vielen Dank!

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Ellert

Zitat von: SouzA am 06 August 2016, 10:57:09
Hallo,

ich habe auch ein Problem mit dem Watchdog, bzw. mit der entsprechenden Umsetzung ins DOIF und hänge mich deswegen in diesen Threat mit rein. Wenn dies nicht gewünscht, bitte Bescheid geben!

Ich hatte bisher eine Bedingung über zwei Watchdogs realisiert und versuche nun diese in ein DOIF zu drücken...

An einer Tür gibt es einen Griff mit drei Stellungen und vier Meldungen (closed, open, open_from_tilted, tilted).
Die Rolläden sollen in der jeweiligen Stellung verbleiben, wenn der Griff nicht auf open oder open_from_tilted stehen bleibt. Deshalb hatte ich eine Sekunde Verzögerung drin, denn wenn man von closed nach tilted wechselt geht das relativ flott ;) Ansonsten fahren die Rolläden dann hoch.

Die Watchdogs sahen so aus:
wz_Tuer_rechts:open 00:00:01 wz_Tuer_rechts:closed|wz_Tuer_rechts:tilted set wz_Rolladen_rechts Auf

wz_Tuer_rechts:open_from_tilted 00:00:01 wz_Tuer_rechts:closed|wz_Tuer_rechts:tilted set wz_Rolladen_rechts Auf


Das DOIF schaut nun so aus, das attr wait wurde auf 1 Sekunde gesetzt:


##Wenn der Befehl Zu an das Rollo rechts gesendet wird und die Tür offen ist, soll es vorsichtshalber hoch fahren! (1 Sekunde verzögert, da Griff von closed auf tilted geschaltet werden könnte...)
(
(
(
[wz_Tuer_rechts:state] eq "open" or
[wz_Tuer_rechts:state] eq "open_from_tilted"
) and
(
[du_wz_Rolladen_rechts] eq "Zu"
)
) or
[du_wz_Rolladen_rechts] eq "Auf"
)
(
set wz_Rolladen_rechts Auf
)
##Ansonsten soll es auch runter fahren, wenn man die Tür schließt und der Automatikbefehl ansteht!
DOELSEIF
(

[du_wz_Rolladen_rechts] eq "Zu"
and
(
[wz_Tuer_rechts:state] eq "closed" or
[wz_Tuer_rechts:state] eq "tilted"
)
)
(
set wz_Rolladen_rechts Zu
)
DOELSE

attr wait 1:0


Das Problem ist aber, dass keine Sekunde gewartet wird, bis der erste Befehl gesendet wird.
Der EventMonitor sagt:
DOIF di_wz_Rolladen_rechts wait_timer: no timer

Kann mir bitte jemand die Fehlermeldung erklären?

Vielen Dank!

Bis denn
SouzA

Das ist keine Fehlermeldung, es sagt, dass z.Zt. kein Wait-Timer läuft, bzw. abgelaufen ist.

SouzA

Hallo,
Danke für deine Antwort!

Das finde ich jetzt dann aber komisch.
Der Timer läuft definitiv nicht. Der schaltet sofort auf Auf....

Hat jemand einen Tipp, woran es liegen könnte?

Vielen Dank.

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Ellert

Die meisten Informationen zur Analyse des Schaltverhalten erhälst Du, wenn Du die Events aller beteiligten Greräte aufzeichnest, z.B. mit:
define LogDOIF DOIF ([<Name des zu analysierenden DOIF>:""] or [<Gerät 1>:"Reading:"] or [<Gerät 2>:"Reading:"] ...) ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
attr LogDOIF do always


Damit könntest Du Dir Klarheit verschaffen.