Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich habe im Praxistest festgestellt, dass diese Notabschaltung
define di_Benachrichtigung DOIF ([EnO_switch_00001010:buttons] eq "pressed") ({email()}, set Lampe off)

attr di_Benachrichtigung wait 600

in Zusammenhang mit diesem DOIF
define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on) DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off)
attr LichtAn cmdState on|off
attr LichtAn room EnOcean
attr LichtAn wait 0:10


nicht so funktioniert, wie es soll!
Greift di_Benachrichtigung nach 600s, weil die Lichtschranke blockiert ist (pressed), dann schaltet die Lampe korrekter Weise ab und auch die Mail wird gesendet. Gibt man nun den Zustand der Lichtschranke wieder frei (released), kommt trotzdem das Attribut "wait" aus "LichtAn" zum Tragen. Es soll aber erreicht werden, dass der Eingang direkt wieder schaltet, wenn die Blockade behoben wird.

Hier müsste das di-Benachrichtigung das LichtAn quasi zurücksetzten, damit das nächste "pressed" auch das Licht wieder einschaltet.

wie könnte man das realisieren?

Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Könnte mit:

define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on) DOELSEIF ([di_Benachrichtigung] eq "cmd_2") DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off)
attr LichtAn wait 0:0:10
attr LichtAn cmdState on|off|off


besser funktionieren. Damit wird ein Zustandswechsel in LichtAn erreicht, nach dem die Lampe beim nächsten "pressed" sofort angehen sollte.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

Hi Damian,
irgendwie habe ich es noch nicht verstanden!
Fehlt da nicht bei diesem DOIF noch eine Aktion? zB. set Lampe off?
DOELSEIF ([di_Benachrichtigung] eq "cmd_2")

So oder so!
wenn ich das so teste, wie Du gepostet hast, bleibt der Aktor an.
wenn ich das DOELSEIF ergänze, schaltet der Aktor nur kurz ein, und direkt wieder aus.

Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 17 Oktober 2014, 16:03:02
Hi Damian,
irgendwie habe ich es noch nicht verstanden!
Fehlt da nicht bei diesem DOIF noch eine Aktion? zB. set Lampe off?
DOELSEIF ([di_Benachrichtigung] eq "cmd_2")

So oder so!
wenn ich das so teste, wie Du gepostet hast, bleibt der Aktor an.
wenn ich das DOELSEIF ergänze, schaltet der Aktor nur kurz ein, und direkt wieder aus.

Spartacus.

Dann habe ich dein Problem offenbar noch nicht verstanden. Wenn deine Lichtschranke "hängen bleibt", dann setzt du button auf release. Damit geht di_Benachrichtigung auf cmd_2 und 10 Sekunden später ginge LichtAn auf off in der ursprünglichen Konstellation. Wenn du innerhalb der 10 Sekunden die Lichtschranke wieder auf pressed geht, dann sollte die Lampe brennen bleiben, da sie noch gar nicht ausgegangen ist, bis wieder release kommt und 10 Sekunden später die Lampe ausgeschaltet wird. Es gibt also nach dem manuell ausgelösten "release" nur den Fall Lampe brennt weiter, wenn innerhalb von 10 Sekunden press kommt oder Lampe geht nach 10 Sekunden aus. Ein verzögertes Einschalten kann nicht nachvollziehen.
Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

Hallo Damian,
die Wahrscheinlich, dass ich es falsch beschrieben habe,  ist größer :D

Ich versuche es noch einmal:

wenn die Lichtschranke betätigt wird, dann schaltet der Eingang vom FSR14 von  "released" aud "pressed". Der Impuls am Eingang, wenn jemand die LS durchschreitet, sieht so aus:
"released"->"pressed"->"released".

Der Aktor wird geschaltet, wenn der Zustand auf "pressed" geht. Die Abschaltverzögerung wird aber erst gestartet, wenn der Eingang auf "released" zurückgefallen ist. Das hat den Vorteil, das das Licht nachgetriggert wird, wenn  die LS -z.B. beim Ausladen von Einkäufen- immer wieder kurz durchschritten wird. Das ist auch so gewollt!

Die Notabschaltung hat nun folgende Funktion:
Wird die LS blockiert (z.B. durch Schneefall im Winter, absichtliches Zustellen) dann liegt das Signal "pressed" dauerhaft an. Parallel zur oberen Funktion, die das Licht über "pressed" einschaltet, wird ein zweiter Timer gestartet, der den Status "pressed" überwacht und nach Ablauf der Zeit t die Lampe zwangsabschaltet.

Wird der Fehler behoben (Schnee schippen!) und ist der Zustand am Eingang wieder auf "released" zurückgefallen, dann muss das Licht auch wieder direkt einschalten, wenn die LS durchschritten wird.

Mit Deiner ursprünglichen Kombination aus LichtAn und diBenachrichtigung hat das funktioniert. Allerdings blockierte der Aktor nach der Notabschaltung für die Dauer der "wait-Zeit" im Modul LichtAn. Das heißt, erst nach Ablauf des Timers (wait=10s), konnte das Licht erneut eingeschaltet werden, wenn der die LS betätigt wurde.Das ist mir bei den 10s nicht aufgefallen, im Realbetrieb mit einer Verzögerung von 120s habe ich mich gewundert, warum nach Notabschaltung und Behebung des Fehlers, die Lampe nicht einschalteten wollte, wenn ich die LS durchschritt.

Die LS ist nur eines von zwei Devices. Das zweite Device ist ein Reedkontakt, der bei aufstehender Haustür das Signal "pressed" und im geschlossenen Zustand "released" sendet. Analog zur LS soll auch hier das Licht abgeschaltet werden, wenn die Haustür länger als 10min offen steht (man will ja niemanden durch das brennende Licht auf die offen stehende Haustür aufmerksam machen)

Ich hoffe, ich konnte meinen Anwendungsfall verständlich beschreiben.

Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 17 Oktober 2014, 17:47:36
Wird der Fehler behoben (Schnee schippen!) und ist der Zustand am Eingang wieder auf "released" zurückgefallen, dann muss das Licht auch wieder direkt einschalten, wenn die LS durchschritten wird.

Dann hast du mir wahrscheinlich auch jetzt eine Information vorenthalten, nämlich dass du das Licht im Falle eines "Notfalls" manuell abschaltet, denn warum sollte es direkt einschalten, wenn es noch gar nicht aus war. Wenn du das Licht manuell schaltest, dann stimmt natürlich der Zustand der Lampe nicht mit dem Zustand des Moduls. Das hatte ich versucht durch den weiteren DOELSEIF-Fall zu synchronisieren.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

Hi Damian,
ne, falsch verstanden! Hier wird nichts manuell abgeschaltet! Die Abschaltung erfolgt nur durch das "di_Benachrichtigung"!

Nehmen wir an, es schneit! (zum Glück wird es morgen 25 Grad!  8))
Der Schnee blockiert irgendwann die Lichtschranke ("released"->"pressed"), Licht schaltet ein und wird ständig nachgetriggert, da Zustand="pressed". Nach 10min. greift der Timer der Notabschaltung, das Licht geht aus.

Das heißt: Schranke ist blockiert ("pressed"), Licht ist aber aus!

Nun schaufelt der fleißige Hausbesitzer am späten Abend den Schnee weg, der Zustand des Eingangs ändert sich von "pressed" auf "released", das  Licht bleibt aber aus. Soweit alles gut!

Wenn jetzt der Hausbesitzer in sein warmes Haus zurückkehrt, durchschreitet er erneut die LS und das Licht sollte nun wieder einschalten, da nun der ursprüngliche Zustand (LS="released") wieder hergestellt ist. Und genau das passiert nicht!

Nachdem der Schnee weggeräumt wurde ("pressed"->"released") startet die Ausschaltverzögerung des Moduls "LichtAn" (obwohl Lich aus ist) und verhindert für die Dauer der Ausschaltverzögerung das erneute Einschalten durch den Eingang der LS.

Das heißt:
Durchschreitet jemand während dieser 10s die LS erneut, schaltet das Licht nicht ein. Erst nach Ablauf der Verzögerungszeit kann man durch erneutes Durchschreiten der LS den Aktor schalten.

Das mag kleinkariert klingen, ist auch bei 10s nicht tragisch. Bei 2-3min Ausschaltverzögerung aber ungünstig, da sich der Aktor während dieser Zeit nicht einschalten lässt.
Christian.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

#562
Zitat von: Spartacus am 17 Oktober 2014, 19:11:30
Hi Damian,
ne, falsch verstanden! Hier wird nichts manuell abgeschaltet! Die Abschaltung erfolgt nur durch das "di_Benachrichtigung"!

Nehmen wir an, es schneit! (zum Glück wird es morgen 25 Grad!  8))
Der Schnee blockiert irgendwann die Lichtschranke ("released"->"pressed"), Licht schaltet ein und wird ständig nachgetriggert, da Zustand="pressed". Nach 10min. greift der Timer der Notabschaltung, das Licht geht aus.

Das heißt: Schranke ist blockiert ("pressed"), Licht ist aber aus!

Nun schaufelt der fleißige Hausbesitzer am späten Abend den Schnee weg, der Zustand des Eingangs ändert sich von "pressed" auf "released", das  Licht bleibt aber aus. Soweit alles gut!

Wenn jetzt der Hausbesitzer in sein warmes Haus zurückkehrt, durchschreitet er erneut die LS und das Licht sollte nun wieder einschalten, da nun der ursprüngliche Zustand (LS="released") wieder hergestellt ist. Und genau das passiert nicht!

Nachdem der Schnee weggeräumt wurde ("pressed"->"released") startet die Ausschaltverzögerung des Moduls "LichtAn" (obwohl Lich aus ist) und verhindert für die Dauer der Ausschaltverzögerung das erneute Einschalten durch den Eingang der LS.

Das heißt:
Durchschreitet jemand während dieser 10s die LS erneut, schaltet das Licht nicht ein. Erst nach Ablauf der Verzögerungszeit kann man durch erneutes Durchschreiten der LS den Aktor schalten.

Das mag kleinkariert klingen, ist auch bei 10s nicht tragisch. Bei 2-3min Ausschaltverzögerung aber ungünstig, da sich der Aktor während dieser Zeit nicht einschalten lässt.
Christian.

OK. Ich habe übersehen, dass neben der E-Mail auch das Licht ausgeschaltet wird. ???

define Notaus dummy
define di_Benachrichtigung DOIF ([EnO_switch_00001010:buttons] eq "pressed") ({email()}, set Lampe off, set Notaus on)
define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on)  DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off) DOELSEIF ([Notaus] eq "on")
attr LichtAn wait 0:10:0
attr LichtAn cmdState on|off|off



Ich habe nun die beiden DOIF-Module über einen Dummy gekoppelt. Im Falle der Notabschaltung sollte nun durch die zusätzliche DOELSEIF-Abfrage auch der Zustand von LichtAn sofort auf off gehen, ohne etwas zu schalten, denn die Lampe wurde ja bereits ausgeschaltet. Danach sollte die Lampe sofort wieder angehen, denn nun weiß das DOIF-Modul, dass die Lampe aus ist.

Das ist natürlich "durch die Brust ins Auge". Zukünftig wirst du das Problem mit einem einzigen DOIF-Modul lösen können.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

Damian,
erst einmal vielen Dank für Deine Antwort. Ich werde das mal  testen.
Wie ich Deinem Post entnehmen kannst, planst Du das DOIF zu erweitern um solche Aufgabenstellungen einfacher zu lösen.
Das finde ich großartig!

Aber heute gibt es vermutlich den letzten Sommertag! Also lieber mal Pause machen und ab in den Garten......

Ich melde mich...
Vielen Dank,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 18 Oktober 2014, 08:45:23
Damian,
erst einmal vielen Dank für Deine Antwort. Ich werde das mal  testen.
Wie ich Deinem Post entnehmen kannst, planst Du das DOIF zu erweitern um solche Aufgabenstellungen einfacher zu lösen.
Das finde ich großartig!

Aber heute gibt es vermutlich den letzten Sommertag! Also lieber mal Pause machen und ab in den Garten......

Ich melde mich...
Vielen Dank,
Christian

Keine Sorge, vor Weihnachten wird es nichts, dafür dann aber richtig - es wird einige mächtige Erweiterungen des Moduls geben  :) . Das Pflichtenheft habe ich schon fertig, ich muss es nur noch umsetzen.  Es gibt aber noch andere Dinge außer FHEM im Leben.  :)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

....das meine ich ja!

Alles Guten, und viel Spaß bei dem (hoffentlich auch bei Dir) so tollen Wetter,
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Spartacus

Hallo,
eine Frage noch!
Warum wird Notaus niemals auf Off gesetzt? Es scheint zwar zu funktionieren, aber ich verstehe es nicht!
Manchmal schaltet der Aktor zwar nicht, aber ich fürchte, das liegt an meiner EnOcean Umgebung
Christian.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Puschel74

Hallo,

ich hab im obigen Code nichts gefunden mit dem dein Dummy off geschalten werden sollte - oder hab ich was übersehen?

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Spartacus

Hi puschel,
genau die Frage habe ich mir auch gestellt! Das durchblicke ich nicht! Aber es funktioniert!
Christian.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 18 Oktober 2014, 13:53:14
Hi puschel,
genau die Frage habe ich mir auch gestellt! Das durchblicke ich nicht! Aber es funktioniert!
Christian.

Bevor ich mich in die Sonne lege:

Durch das Setzen des Dummys auf "on" wird ein Event erzeugt, dadurch wird das LichtAn-Modul getriggert und die dazugehörige Bedingung  DOELSEIF ([Notaus] eq "on") ausgewertet. Das ist auch der einzige Sinn des Dummys. Man könnte auch lediglich DOELSEIF ([Notaus]) auswerten, weil nur der Trigger wichtig ist und der Zustand des Dummys für diese Konstruktion unwesentlich ist. Aber wie gesagt, zukünftig wird man diese Hilfskonstruktion eh nicht brauchen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF