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 (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.
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
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
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.
Bin unterwegs und teste später.
Dachte leerung wäre ein Versehen und hatte leer benutzt.
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)
Ne das große B war mein Handy ;-) versuch mal [briefkasten:state] eq "leerung"
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.
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
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.
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.
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
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.
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)
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")
Hi,
ja genau, es wird abgefragt wann die letzte Änderung des Reading war und, in dem Fall mit größer als verglichen ;-)
danke!
Leider kein Bild, bin gerade nicht zuhause.
Mein Briefkasten ist eher klein, senkrechter Wandeinbau, ohne Einwurf-Klappe.
Ich habe ein Stück Pappe ca. in Breite der Rückwand mit einem Loch versehen durch das der Sensor nach vorne sehen kann.
Der Sensor ist ein paar cm von unten entfernt mittig in der Platte die an die Rückwand geklebt ist, unten ist das Ganze etwas weiter nach vorne gestellt.
Erwischt in diesem Aufbau Briefe jeder Art quer oder hochkant und auch gepolsterten Kram der nicht bis ganz nach unten rutscht.
Ich sehe so immer ob was drin ist oder nicht.
Bei einem schrägen Briefkasten kann man das analog mit der Konstruktion am Boden erreichen.