Mal wieder Briefkasten (DoIF - Verzögern einer Prüfung nötig)

Begonnen von Gunther, 01 November 2017, 02:24:50

Vorheriges Thema - Nächstes Thema

Gunther

Ich versuche meinen Briefkasten in FHEM einzubinden.
Derzeit tüftel ich an der Logik mit einem Fenstersensor und nutze dabei ebenfalls den Sabotagegontakt für die Leerung.

Leider fehlt mir an einer Stelle ein Kniff.
Die Herausforderung ist, dass der Briefkasten sich nur öffnen und leeren lässt, wenn man die Klappe für den Briefeinwurf ebenfalls öffnet.
Nach der Entleerung schließt man diese erst wieder. Das bringt meine Logik immer wieder zu einem vollen Kasten.

So schaut mein DEF im DOIF aus.

#1 Wenn der Fensterensor (Briefeinwurfklappe) offen und Dummy briefkasten=leer und Sabotagekontakt aus
([eg_fl_briefkasten:state] eq "open" and [briefkasten:state] eq "leer" and [eg_fl_briefkasten:sabotageError] eq "off")
#2 dann setze Briefkastendummy auf "großer Brief"
(set briefkasten großer Brief)
DOELSEIF
#3 Wenn Briefeinwurfklappe geschlossen wird und Dummy briefkasten auf "großer Brief" steht
([eg_fl_briefkasten:state] eq "closed" and [briefkasten:state] eq "großer Brief")
#4 dann setze Dummy briefkasten auf "kleiner Brief"
(set briefkasten kleiner Brief)
DOELSEIF
#5 Wenn Sabotagekontakt = on dann setze Dummy briefkasten auf leer
([eg_fl_briefkasten:sabotageError] eq "on")(set briefkasten leer)


Mein Problem ist nun bei leerem Briefkasten, dass wenn die Entnahmeklappe (#5) geschlossen wird ist die Briefeinwurfklappe offen und #1 setzt wieder auf "großer Brief".

Hiermit habe ich es auch schon versucht.
https://forum.fhem.de/index.php/topic,35867.msg282157.html#msg282157
Bei meinem Briefkasten das gleiche Dilemma.

WIe bekomme ich das gelöst? Wie kann ich FHEM mitteilen, dass der Sabotagekontakt für #1 kein Event sein soll?

Edit: Ups: Ich wollte im DOIF-Forum posten. Darf gerne dahin verschoben werden. Ich kann das selbst leider nicht.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

CBSnake

#1
Moin,


DOELSEIF
#5 Wenn Sabotagekontakt = on dann setze Dummy briefkasten auf leerung
([eg_fl_briefkasten:sabotageError] eq "on")(set briefkasten leerung)
DOELSEIF
#6 wenn Briefkasten auf leerung und Sabotage 60 Sekunden auf Off setze auf leer
([eg_fl_briefkasten:sabotageError] eq "off" and [eg_fl_briefkasten:sabotageError:sec] > 60 and [?Briefkasten] eq "leerung")(set briefkasten leer)



So auf die schnelle, geht evtl eleganter ;-)
Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Gunther

Noch ne Eule unterwegs. Oder bist Du schon wach? ;-)

Leider klappt das nicht. Verstehe auch die Logik noch nicht ganz.
Sobald der Sabotagekontakt wieder auf "off" geht ist wieder Post im Kasten, weil #1 durchlaufen wird.

Nochmal zur Verdeutlichung wie das physisch abläuft:

Post rein
a) Kontakt A open und direkt wieder closed (kleiner Brief)
oder b) Kontakt A open und bleibt so (großer Brief)

Post raus
Kontakt A open (weil Tür nur aufgeht, wenn obere Klappe offen ist)
Kontakt B open und closed



FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

CBSnake

Hi,

Na dank Kinder schon wach ;-)

Komisch im #5 setze ich leerung anstatt leer wie ursprünglich bei dir.
Erst wenn Klappe und Türe zu und 60 sec um setzte ich leer und erst dann könnte #1 aktiv werden.
Habs aber nicht getestet da am Handy getippt.
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Gunther

Bin unterwegs und teste später.
Dachte leerung wäre ein Versehen und hatte leer benutzt.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

Leider schaltet das DOIF im letzten Step nicht auf "leer"

Hast Du bewusst ?Briefkasten geschrieben?

Ich habe das auch mal auf briefkasten geändert. Klappt leider auch nicht.
Kann es sein, dass DOIF nicht mit der Zeitangabe klarkommt. Wo kann ich dazu etwas lesen?
also zum: [eg_fl_briefkasten:sabotageError:sec] > 60

So schaut mein DOIF in der DEV aus:
([eg_fl_briefkasten:state] eq "open" and [briefkasten:state] eq "leer" and [eg_fl_briefkasten:sabotageError] eq "off")
(set briefkasten großer Brief)
DOELSEIF
([eg_fl_briefkasten:state] eq "closed" and [briefkasten:state] eq "großer Brief")
(set briefkasten kleiner Brief)
DOELSEIF
([eg_fl_briefkasten:sabotageError] eq "on")
(set briefkasten leerung)
DOELSEIF
([eg_fl_briefkasten:sabotageError] eq "off" and [eg_fl_briefkasten:sabotageError:sec] > 60 and [briefkasten] eq "leerung")
(set briefkasten leer)
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

CBSnake

Ne das große  B war mein Handy  ;-) versuch mal [briefkasten:state] eq "leerung"
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Markus M.

Welchen Sensor verwendet ihr?
Mein optischer Sensor liegt an eine Papp-Rampe geklebt (nicht komplett) unten im Briefkasten und zeigt zu 98% sicher an ob gerade was drin liegt.
Der zweite Kontakt erübrigt sich damit.
Aktuell weder Smarthome noch FHEM vorhanden

Gunther

Danke für Deine Hilfe.
Ich hab es nun so gelöst:

define doif_briefkasten_befuellen_klappe_offen DOIF ([eg_fl_briefkasten:state] eq "open" and [briefkasten:state] eq "leer" and [eg_fl_briefkasten:sabotageError] eq "off")\
(set briefkasten großer Brief)\
DOELSEIF\
([eg_fl_briefkasten:state] eq "closed" and [briefkasten:state] eq "großer Brief" and [eg_fl_briefkasten:sabotageError] eq "off")\
(set briefkasten kleiner Brief)\
DOELSEIF\
([eg_fl_briefkasten:sabotageError] eq "on" and ([briefkasten:state] eq "großer Brief" or [briefkasten:state] eq "kleiner Brief"))\
(set briefkasten leerung)\
DOELSEIF\
([eg_fl_briefkasten:sabotageError] eq "off" and [briefkasten:state] eq "leerung")\
(set briefkasten leer)

attr doif_briefkasten_befuellen_klappe_offen wait 10:0:0:0
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

Zitat von: Markus M. am 02 November 2017, 16:44:51
Welchen Sensor verwendet ihr?
Mein optischer Sensor liegt an eine Papp-Rampe geklebt (nicht komplett) unten im Briefkasten und zeigt zu 98% sicher an ob gerade was drin liegt.
Der zweite Kontakt erübrigt sich damit.

Ich habe die Hardware noch nicht fertig.
Nehme einen Homematic Fenstersensor HM-Sec-SC-2 und löte den Sabotageschalter raus und tauschen gegen einen Reedkontakt.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

Ich muss meinen Thread leider doch nochmal rausholen obwohl ich dachte meine 30 Tests beim Fernsehen wären erfolgreich gewesen.

Habe nun alles eingebaut und es klappt leider nicht wie gewünscht.
Ich bekomme immer wieder Post!  ;)

Mein DOIF:
define doif_briefkasten DOIF ([eg_fl_briefkasten:state] eq "open" and [briefkasten:state] eq "leer" and [eg_fl_briefkasten:sabotageError] eq "off")\
(set briefkasten Post)\
([eg_fl_briefkasten:sabotageError] eq "on" and ([briefkasten:state] eq "Post"))\
(set briefkasten leerung)\
DOELSEIF\
([eg_fl_briefkasten:sabotageError] eq "off" and [briefkasten:state] eq "leerung")\
(set briefkasten leer)

attr doif_briefkasten wait 60:0:0


Wenn ich den Briefkasten leere passiert folgendes:
1.) Ich öffne die Posteinwurfklappe um an den Entleerungsklappe ranzukommen
eg_fl_briefkasten ist "open"
2.) Während die obere Klappe offen bleibt, öffne ich nun die Entleerungsklappe. und entnehme die Post
eg_fl_briefkasten ist "open"
und eg_fl_briefkasten:sabotageError ist "on"

3.) Ich schließe die Entleerungsklappe
eg_fl_briefkasten ist noch auf "open"
und eg_fl_briefkasten:sabotageError ist "off"

4.) nun klappe ich die Posteinwurfklappe wieder über die Entleerungsklappe
eg_fl_briefkasten ist noch auf "closed"
und eg_fl_briefkasten:sabotageError ist "off"

--> jetzt springt der Status meines Dummys richtigerweise auf "leer"

Der Zustand 3.) ist anscheinend mein Problem, da es in der ersten Bedingung meines DOIFs natürlich zum Status "Post" in meinem Dummy führt.

Nun dachte ich, dass ein
attr doif_briefkasten wait 60:0:0
dazu führt, dass die Bedingung für den ersten Befehl erst nach 60 Sekunden geprüft wird.
Anscheinend ist es aber so, dass die Prüfung in jedem Fall durchgeführt wird aber die Ausführung des "set" um 60 Sekunden verzögert wird.

Freu mich nochmal über Anregungen.
Der Ansatz von CBSnake hörte sich super an, hat leider bei mir nicht funktioniert.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

CBSnake

Hi,

im DOIF fehlt noch ein DOELSEIF zwischen Zustand 1 und 2

du kannst die 60 Sekunden wartezeit auch mit in die erste Abfrage packen

....and [briefkasten:state:sec] > 60... die Abfrage nach leer musste noch zusätzlich abfragen bzw weiter drin lassen.

Grüße
Achim

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

majorshark

Hallo Markus

Zitat von: Markus M. am 02 November 2017, 16:44:51
Welchen Sensor verwendet ihr?
Mein optischer Sensor liegt an eine Papp-Rampe geklebt (nicht komplett) unten im Briefkasten und zeigt zu 98% sicher an ob gerade was drin liegt.
Der zweite Kontakt erübrigt sich damit.

kannst Du bitte mal ein Bild machen. Danke.
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Gunther

Zitat von: CBSnake am 04 November 2017, 14:16:28

....and [briefkasten:state:sec] > 60... die Abfrage nach leer musste noch zusätzlich abfragen bzw weiter drin lassen.


Achim: Perfekt! Hat geklappt.
Hätte ich das beim ersten Mal richtig gecheckt hätte ich Dir und mir viel Mühe gespart. Danke Dir!
Nochmal zur Sicherheit, ob ich das auch richtig verstanden habe:
[briefkasten:state:sec] > 20
Hier wird geprüft, das der state vom Device briefkasten vor mindestens 20 Sekunden geändert wurde. Richtig?

Das fehlende DOELSEIF war nur ein Kopierfehler.

So schaut es jetzt aus:
defmod doif_briefkasten DOIF ([eg_fl_briefkasten:state] eq "open" and [briefkasten:state] eq "leer" and [eg_fl_briefkasten:sabotageError] eq "off" and [briefkasten:state:sec] > 20)\
(set briefkasten Post)\
DOELSEIF\
([eg_fl_briefkasten:sabotageError] eq "on" and ([briefkasten:state] eq "Post"))\
(set briefkasten leerung)\
DOELSEIF\
([eg_fl_briefkasten:sabotageError] eq "off" and [briefkasten:state] eq "leerung")\
(set briefkasten leer)
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

Zitat von: majorshark am 04 November 2017, 18:38:52
Hallo Markus

kannst Du bitte mal ein Bild machen. Danke.

Finde ich auch interessant (für meine Zeitungsr"rolle")
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden