FHEM Forum

FHEM => Automatisierung => Thema gestartet von: roedert am 02 April 2013, 14:22:05

Titel: Wie Katzenklappe implementieren?
Beitrag von: roedert am 02 April 2013, 14:22:05
Hallo zusammen,
ich habe an der Katzenklappe 1 Magnet und 2 Reedkontakte angebracht - 1 für Klappe nach innen (also Katze kommt), 1 für Klappe nach aussen für Katze geht. Beide steuern einen FS20-S4M der auf 4 Tasten konfiguriert ist.
Das funktioniert soweit auch prima - nur schwingt die Klappe ja nach jedem Durchgang noch einige male hin und her und löst somit beide Kanäle mehrfach aus.
zB Katze rein, Katze rein, Katze raus, Katze raus, Katze rein .....

Korrekt ist eigentlich nur der 1. Befehl - danach kommt nur noch das "Pendeln".  

Wie könnte man das sinnvoll implementieren, dass nach dem 1. Schalten für 5 sec der andere FS20-Schalter ignoriert wird?

Mit event-min-interval und per notify den jeweils anderen Kanal auf do_not_notify für 5 sec setzen habe ich schon probiert - aber das klappt wohl so vom Timimg her nicht...


Gruß Tilo
Titel: Aw: Wie Katzenklappe implementieren?
Beitrag von: rudolfkoenig am 02 April 2013, 14:32:47
Vorschlag:

define ntfy1 notify klappe1 attr klappe2 ignore;; sleep 5;; deleteattr klappe2 ignore
Titel: Aw: Wie Katzenklappe implementieren?
Beitrag von: rudolfkoenig am 02 April 2013, 14:36:21
Eigentlich ist do_not_notify besser als das gerade vorgeschlagene ignore. Wieso klappt es nicht bzw. wie hat dein Konstrukt ausgeschaut?
Titel: Aw: Wie Katzenklappe implementieren?
Beitrag von: roedert am 02 April 2013, 14:51:58
ok, ich habs gerade nochmal probiert .... sah beim ersten Test ganz gut aus - war mein Gedankengang doch nicht ganz falsch.

Wie kann aber im Log stehen:

2013-04-02_14:43:06 Katzenklappe.rein toggle
2013-04-02_14:43:06 Katzenklappe.rein toggle


trotz attr Katzenklappe.rein event-min-interval 5?

Gruß Tilo
Titel: Aw: Wie Katzenklappe implementieren?
Beitrag von: rudolfkoenig am 02 April 2013, 15:15:54
Weil laut http://fhem.de/commandref.html#event-min-interval (//fhem.de/commandref.html#event-min-interval) es als
attr Katzenklappe.rein event-min-interval state:5
zu schreiben ist.
Titel: Aw: Wie Katzenklappe implementieren?
Beitrag von: roedert am 02 April 2013, 15:50:47
...mann bin ich blind - bei meinen ersten Versuchen hatte ich es mit state:5 sogar richtig ... dann aber einfach vergessen und trotz mehrfachem Hinsehen nicht mehr aufgefallen.
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: BerndHST am 22 Dezember 2016, 00:08:56
Hallo,

habe das gleiche Problem mit dem "Pendeln" der Klappe:
Die Klappenbewegung wird über zwei Lichtschranken registriert, die wiederum am GPIO-Port hängen.

define GPIO18KKraus RPI_GPIO 18
attr GPIO18KKraus debounce_in_ms 250
attr GPIO18KKraus direction input
attr GPIO18KKraus event-min-interval Counter:10
attr GPIO18KKraus interrupt falling
attr GPIO18KKraus pud_resistor up
attr GPIO18KKraus stateFormat Counter

define GPIO22KKrein RPI_GPIO 22
attr GPIO22KKrein debounce_in_ms 250
attr GPIO22KKrein direction input
attr GPIO22KKrein event-min-interval Counter:10
attr GPIO22KKrein interrupt falling
attr GPIO22KKrein pud_resistor up
attr GPIO22KKrein stateFormat Counter



Über ein notify wird dann bei jeder Klappenbewegung eine mail verschickt.
Das Zurückpendeln habe ich mit
event-min-interval Counter:10
in den Griff bekommen, aber das Pendeln in die jeweils andere Richtung nicht.
So löst die Katze jetzt jeweils ein "raus - rein" bzw. "rein - raus" aus. Wie bekomme ich auch den jeweils anderen GPIO-Port dazu, das Signal für eine bestimmte Zeit zu ignorieren. Ich könnte natürlich ein sleep-Befehl einbauen, aber dann schläft ja der komplette Raspi und verpasst in der Zeit auch u.U. die Signale von Gas- und Stromzähler. etc.

Bernd


Titel: Antw:Aw: Wie Katzenklappe implementieren?
Beitrag von: abc2006 am 22 Dezember 2016, 00:28:11
Zitat von: rudolfkoenig am 02 April 2013, 14:32:47
Vorschlag:

define ntfy1 notify klappe1 attr klappe2 do_not_notify;; sleep 5;; deleteattr klappe2 do_not_notify
(editiert auf do_not_notify)

Was funktioniert denn an deinem notify nicht?

Grüße
Stephan
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: BerndHST am 22 Dezember 2016, 00:43:30
mein notify sieht so aus:


define KatzeReinMail notify GPIO22KKrein:Counter:.* {DebianMail('...r@gmx.de','Katze rein','Katzenklappe meldet: Katze ist drin')}
define KatzeRausMail notify GPIO18KKraus:Counter:.* {DebianMail('...r@gmx.de','Katze raus','Katzenklappe meldet: Katze ist rausgegangen')}


wenn ich da jetzt ein
attr GPIO18KKraus do_not_notify;; sleep 5;; deleteattr GPIO18KKraus do_not_notify

einbaue, hätte ich ja wieder ein sleep drin, was mir die komplette Kiste ja für eine bestimmte Zeit lahmlegt.
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: abc2006 am 22 Dezember 2016, 01:01:09
http://fhem.de/commandref_DE.html#sleep

Grüße
Stephan
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: dev0 am 22 Dezember 2016, 05:53:34
Was Dir abc2006 mit dem Link sagen will, ist, dass ein FHEM sleep mit nachfolgenden Befehl nicht blockierend ist. Intern ist ein FHEM sleep ein Timer, der den nachstehenden Befehl x Sekunden später ausführt. Nicht zu verwechseln mit dem perl sleep, welches blockierend wäre.
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: BerndHST am 22 Dezember 2016, 15:44:17
aaahhh, Danke, das habe ich in der Tat nicht gewusst. Dann ist das ja kein Problem.
Prima, vielen Dank Euch und Frohe Feiertage,
Bernd
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: BerndHST am 25 Dezember 2016, 21:15:36
Muß doch nochmal nachfragen, da es noch nicht klappt.
Wohin kommt denn das Attribut "do_not_notify"? Ich habe ein zweites notify definiert, daß ebenfalls auf den GPIO-Port reagiert und das do_not_notify ausführt:

define KatzeReinMail notify GPIO22KKrein:Counter:.* {DebianMail('b..@gmx.de','Katze rein','Katzenklappe meldet: Katze ist drin')}
define KatzeRausMail notify GPIO18KKraus:Counter:.* {DebianMail('b..@gmx.de','Katze raus','Katzenklappe meldet: Katze ist rausgegangen')}
define ignKKrein notify GPIO18KKraus:Counter:.*  attr KatzeReinMail do_not_notify;; sleep 10;; deleteattr KatzeReinMail do_not_notify
define ignKKraus notify GPIO22KKrein:Counter:.*  attr KatzeRausMail do_not_notify;; sleep 10;; deleteattr KatzeRausMail do_not_notify


Aber das funktioniert nicht, bekomme immer noch doppelte mails wegen dem Durchschwingen der Klappe
Titel: Antw:Wie Katzenklappe implementieren?
Beitrag von: abc2006 am 27 Dezember 2016, 09:22:30
Zitat von: BerndHST am 25 Dezember 2016, 21:15:36
Muß doch nochmal nachfragen, da es noch nicht klappt.
Wohin kommt denn das Attribut "do_not_notify"? Ich habe ein zweites notify definiert, daß ebenfalls auf den GPIO-Port reagiert und das do_not_notify ausführt:

define KatzeReinMail notify GPIO22KKrein:Counter:.* {DebianMail('b..@gmx.de','Katze rein','Katzenklappe meldet: Katze ist drin')}
define KatzeRausMail notify GPIO18KKraus:Counter:.* {DebianMail('b..@gmx.de','Katze raus','Katzenklappe meldet: Katze ist rausgegangen')}
define ignKKrein notify GPIO18KKraus:Counter:.*  attr KatzeReinMail do_not_notify;; sleep 10;; deleteattr KatzeReinMail do_not_notify
define ignKKraus notify GPIO22KKrein:Counter:.*  attr KatzeRausMail do_not_notify;; sleep 10;; deleteattr KatzeRausMail do_not_notify


Aber das funktioniert nicht, bekomme immer noch doppelte mails wegen dem Durchschwingen der Klappe


Möglicherweise liegt das Problem darin, dass das Mail-Notify getriggert wird, bevor das andere deaktiviert wurde. Vielleicht schafft es abhilfe, die Befehle in ein einziges notify zu packen (s.u., Syntax bin ich mir mit der Aneinanderreihung von Perl und FHEM nicht so ganz sicher).

define KatzeReinMail notify GPIO22KKrein:Counter:.* {fhem("attr KatzeRausMail do_not_notify");;DebianMail('b..@gmx.de','Katze rein','Katzenklappe meldet: Katze ist drin');;fhem("sleep 10;; deleteattr KatzeRausMail do_not_notify")}


Bei  DOIF würde folgendes gehen:

define DF_KatzeReinMail DOIF ([GPIO22KKrein:Counter])(attr KatzeRausMail do_not_notify,{DebianMail('b..@gmx.de','Katze rein','Katzenklappe meldet: Katze ist drin')})
(deleteattr KatzeRausMail do_not_notify)

attr DF_KatzeReinMail do always
attr DF_KatzeReinMail wait 0,10

Grüße
Stephan