Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo,

Ändert aber an Daminas Erklärung nichts.
ZitatWahrscheinlich meinst du DOELSEIF statt DOELSE.  DOELSE hat keine Bedingung.

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.

satprofi

Alles klar, kapiert.

Thx u. lg
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

knochenmuehle

Hallo, ich versuche mir ansagen zu lassen, wenn ein Fenster auf ist, wenn ich das Haus verlasse:

(([MK_Haustuer] eq "auf") and ([MK_Bad1] eq "auf" or [MK_Gast] eq "auf" or [MK_Bad2] eq "auf" or [MK_Heizung] eq "auf" or [MK_Kueche] eq "auf" or [MK_Terrasse] eq "auf" or [MK_Schlafzimmer] eq "auf")) (set Tablet ttsSay "@ ist auf") DOELSE (set Tablet ttsSay "Alles zu, tschüss, bis bald"))

dieser Versuch ist allerdings misslungen, wenn alles zu ist, passt es, wenn etwas auf ist möchte ich hören was auf ist, haut aber nicht hin...

Andreas

Damian

Zitat von: knochenmuehle am 26 Oktober 2014, 17:40:32
Hallo, ich versuche mir ansagen zu lassen, wenn ein Fenster auf ist, wenn ich das Haus verlasse:

(([MK_Haustuer] eq "auf") and ([MK_Bad1] eq "auf" or [MK_Gast] eq "auf" or [MK_Bad2] eq "auf" or [MK_Heizung] eq "auf" or [MK_Kueche] eq "auf" or [MK_Terrasse] eq "auf" or [MK_Schlafzimmer] eq "auf")) (set Tablet ttsSay "@ ist auf") DOELSE (set Tablet ttsSay "Alles zu, tschüss, bis bald"))

dieser Versuch ist allerdings misslungen, wenn alles zu ist, passt es, wenn etwas auf ist möchte ich hören was auf ist, haut aber nicht hin...

Andreas

@ gibt es bei DOIF nicht. Es ist eine Eigenschaft von notify.

Du kannst aber deine Fenster in eine Structure packen, diese in DOIF abfragen (dann wird die Abfrage auch wesentlich einfacher) und bei set  Tablet ttsSay  [<deine Structure>:LastDevice] angeben.

Gruß

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

Brockmann

Zitat von: Damian am 26 Oktober 2014, 17:45:30
Du kannst aber deine Fenster in eine Structure packen, diese in DOIF abfragen (dann wird die Abfrage auch wesentlich einfacher) und bei set  Tablet ttsSay  [<deine Structure>:LastDevice] angeben.
Ich weiß nicht, ob das in diesem Fall hinhaut. Wenn ich zwei Fenster offen habe, eines schließe und dann rausgehe, dann ist das geschlossene das LastDevice und nicht das offene, oder?

Damian

Zitat von: Brockmann am 26 Oktober 2014, 18:03:39
Ich weiß nicht, ob das in diesem Fall hinhaut. Wenn ich zwei Fenster offen habe, eines schließe und dann rausgehe, dann ist das geschlossene das LastDevice und nicht das offene, oder?

Stimmt. An den Fall habe ich nicht gedacht. Dann bleibt wohl nur der notify übrig oder mehrere DOELSEIF-Fälle.

Gruß

Damian


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

Brockmann

Zitat von: Damian am 26 Oktober 2014, 19:12:49
Stimmt. An den Fall habe ich nicht gedacht. Dann bleibt wohl nur der notify übrig oder mehrere DOELSEIF-Fälle.
Man könnte sich eine eigene Perl-Funktion bauen, die alle Fensterobjekte durchgeht und die zurückliefert, die "open" sind.
Eigentlich schade, denn im Prinzip "weiß" DOIF ja, wer die Bedingung erfüllt hat. Wären in solche Szenarien praktisch, wenn man das verwenden könnte.

MaJu

Hallo Andreas,

vor dem gleichen Problem stand ich auch.
Hier die Lösung, die hervorragend funktioniert, es werden genau die offenen Fenster angesagt:

http://forum.fhem.de/index.php/topic,10628.msg162593.html#msg162593
Erlebnisreiche Grüße aus Leipzig!

Damian

Zitat von: Brockmann am 26 Oktober 2014, 19:37:55
Man könnte sich eine eigene Perl-Funktion bauen, die alle Fensterobjekte durchgeht und die zurückliefert, die "open" sind.
Eigentlich schade, denn im Prinzip "weiß" DOIF ja, wer die Bedingung erfüllt hat. Wären in solche Szenarien praktisch, wenn man das verwenden könnte.

ja, der Reading cmd_event im DOIF-Modul mit dem Namen des letzten Devices wird erst beim Setzen des Status geschrieben, daher leider paar Millisekunden zu spät. Ich denke, da kann ich sicherlich zukünftig noch etwas in DOIF einbauen.

Gruß

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

Brockmann

Zitat von: Damian am 26 Oktober 2014, 19:53:45
ja, der Reading cmd_event im DOIF-Modul mit dem Namen des letzten Devices wird erst beim Setzen des Status geschrieben, daher leider paar Millisekunden zu spät. Ich denke, da kann ich sicherlich zukünftig noch etwas in DOIF einbauen.
Daran hatte ich auch zuerst gedacht, aber das wäre - zumindest ist diesem Fall - auch keine Lösung. Denn in der Regel ist hier ja das Öffnen der Haustür der Trigger und nicht das Öffnen eines Fensters. Demzufolge würde im cmd_event die Haustür stehen...
Eine spontane Idee (ggf. für die sehr erweiterte ToDo-Liste): Wenn DOIF irgendwie die Werte der getroffenen Bedingung als Liste von Name:Wert-Paare zugänglich machen würde, also z. B.
"MK_Haustuer:auf;MK_Bad1:zu;MK_Gast:auf;MK_Bad2:zu;MK_Heizung:zu;MK_Kueche:zu;MK_Terrasse:zu;MK_Schlafzimmer:zu"
Dann könnte man sich daraus mit einer Regex relativ flexibel die Informationen rausziehen, die man benötigt.

Damian

Zitat von: Brockmann am 26 Oktober 2014, 20:05:04
Daran hatte ich auch zuerst gedacht, aber das wäre - zumindest ist diesem Fall - auch keine Lösung. Denn in der Regel ist hier ja das Öffnen der Haustür der Trigger und nicht das Öffnen eines Fensters. Demzufolge würde im cmd_event die Haustür stehen...
Eine spontane Idee (ggf. für die sehr erweiterte ToDo-Liste): Wenn DOIF irgendwie die Werte der getroffenen Bedingung als Liste von Name:Wert-Paare zugänglich machen würde, also z. B.
"MK_Haustuer:auf;MK_Bad1:zu;MK_Gast:auf;MK_Bad2:zu;MK_Heizung:zu;MK_Kueche:zu;MK_Terrasse:zu;MK_Schlafzimmer:zu"
Dann könnte man sich daraus mit einer Regex relativ flexibel die Informationen rausziehen, die man benötigt.
ja, allerdings kümmere ich mich nicht selbst um die Zustände, sondern überlasse es Perl über die zuvor abgelegte Bedingungen mit entsprechenden Funktionen siehe conditions im DOIF-Modul mit list-Ausgabe.

Gruß

Damian

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

knochenmuehle

Zitat von: MaJu am 26 Oktober 2014, 19:53:17
Hallo Andreas,

vor dem gleichen Problem stand ich auch.
Hier die Lösung, die hervorragend funktioniert, es werden genau die offenen Fenster angesagt:

http://forum.fhem.de/index.php/topic,10628.msg162593.html#msg162593

Danke MaJu, das ist die Lösung!

Andreas

MaJu

@Andreas,

ich habe das Spiel noch ein wenig weiter getrieben:
Mit der genannten Lösung würde bei jedem Tür-öffnen eine Information über offene Fenster kommen. Auch, wenn ich nur mal den Müll runter bringe. Und auch, wenn ich wieder reinkomme.

Fazit: FHEM muss wissen, wann wirklich die Wohnung endgültig verlassen wird.
Dazu habe ich in den Fenstersensor, der die Tür-Öffnung realisiert, einen kleinen Drucktaster eingebaut und mit dem "Sabotage-Kontakt" (der erkennt, wenn man den Sender von der Platte nimmt) verbunden.
Ziel: Das drücken der Taste bedeutet "wir gehen jetzt". Wird die Taste gedrückt, wird ein Abwesenheitsdummy von "anwesend" auf "gehen" gesetzt, der nach 2 Minuten "abwesend" bekommt.
Wird die Tür im Dummy-Status "anwesend" geöffnet, dann kommt zur Erinnerung die Ansage "Taste gedrückt?". Wird die Tür im Status "gehen" gedrückt, dann kommt die Fenster-offen-Ansage, das Wand-Display wird ausgeschaltet und alle Lampen werden ausgemacht.
Wird die Tür im Status "abwesend" geöffnet wird das Licht im Flur eingschaltet, es erfolgt keine Ansage, der Abwesenheitsdummy wird auf "anwesend" gesetzt.

Ein bisschen viel für das Thema hier, ich versuche es mal anderweitig nachvollziehbar niederzuschreiben.

Was hat das mit DOIF zu tun?

Ich habe ein DOIF mit der folgenden Definition laufen, um zu erkennen, wenn auch bei bereits geöffneter Tür noch die gehen-Taste gedrückt wird. Denn das Licht sollte erst ausgeschalten, wenn die Tür geöffnet wird, aber auch, wenn die Tür schon offen ist wenn der Taster gedrückt wird.
([Wohnungstuer] eq "open" and [Abwesenheit] eq "gehen") (set Licht.* aus)
Erlebnisreiche Grüße aus Leipzig!

knochenmuehle

@ MaJu
ich werde das vermutlich mit einem HM-PB-2-WM55 lösen, den ich in eine vorhandene Schalterleiste integriere und beim verlassen einmal drücke und damit die Sprachausgabe auslöse. Hier einen Automatismus zu schaffen, der alle Fälle abdeckt ist unmöglich.

Andreas




satprofi

Hallo.
Heute bemerkt, weil keine Benachrichtigung



([myCalendar] modeStarted.*cq5k8hl2bfcvcb2mllkugu573ogooglecom) (set Restmuell on) DOELSE (set Restmuell off)


folgende Fehlermeldung



perl error in condition: InternalDoIf('myCalendar','STATE','') modeStarted.*cq5k8hl2bfcvcb2mllkugu573ogooglecom: syntax error at (eval 688998) line 1, near ") modeStarted"



hatte aber schon einmal funktioniert, aber einige updates schon dazwischen. liegts an dem?

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram