Hauptmenü

DOIF-Frage

Begonnen von JMW, 27 Mai 2015, 08:40:41

Vorheriges Thema - Nächstes Thema

JMW


Ich möchte eine Email erhalten, wenn sich in meiner Abwesenheit ein Bewegungsmelder (FS20) eine Bewegung registriert.
Hier mein Code:

define di_Wohnzimmer_BM DOIF ([Wohnzimmer_BM] and [HomeState] eq "absent") ( { DebianMail('....','...','Bewegung im Zimmer erkannt') } )
attr di_Wohnzimmer_BM cmdpause 900
attr di_Wohnzimmer_BM do always


Ich bekommen nun aber sofort eine Email, wenn der Zustand von HomeState auf "absent" geht. Liegt das daran, dass das Bewegungsevent gespeichert wird
bis die zweite Bedingung erfüllt ist?
Ist ein "DOELSE" ohne Inhalt die Lösung?

Ralli

Ich würde zunächst einmal nur auf den BM triggern und daher


[?HomeState] eq "absent"


verwenden.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Zrrronggg!

Ich benutze DOIF nicht, daher mag ich falsch liegen. Aber wenn sich die Syntax analog zum PERL-if verhält, dann bedeutet

([Wohnzimmer_BM] and [HomeState] eq "absent")

wenn Wohnzimmer_BM IRGENDEINEN Wert hat und [HomeState] gleich "absent" ist, dann...

Und da Wohnzimmer_BM IMMER "irgendeinen" Wert hat, also immer wahr ist, löst [HomeState] eq "absent" auch immer sofort aus.

Ich mag mich aber täuschen, und das ist laut DOIF Syntax so korrekt.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Phill

Wenn du in der Perl if Bedingung keinen Vergleich angibst vergleicht er auf ungleich 0 oder undefined. Also nicht irgendein Wert sondern nicht 0.
Sobald aber ein Leerzeichen zur Null dazu kommt würde die bedingung aber wieder erfüllt sein.

Was gibt den der Bewegungsmelder für einen Status aus?
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Zrrronggg!

ZitatWenn du in der Perl if Bedingung keinen Vergleich angibst vergleicht er auf ungleich 0 oder undefined.

Okay, wusste ich nicht. Allerdings ändert das nichts an der Sache, denn wenn der Bewegungsmelder nur 1x auslöst ist [Wohnzimmer_BM] bereits TRUE. Bewegungsmelder haben ausserdem die Eigenschaft nur Bewegung anzuzeigen und nicht etwa KEINE Bewegung. D.H. die gehen nicht von selber auf "0" zurück oder so. Daher ist das meiner Aufassung nach so sowieso Tricky.

Ich würde daher eher was in Richtung:

define di_Wohnzimmer_BM notify Wohnzimmer_BM  { if (Value("HomeState") eq "absent") ( { DebianMail('....','...','Bewegung im Zimmer erkannt') } )


machen, aber das ist natürlich ohne DOIF. Wie gesagt habe ich DOIF inhaltlich nicht auf dem Schirm, da ich Perl-If gewohnt bin.  Aber man könnte die Variante oben ohne DOIF alternativ mal ausprobieren. Die müsste eigentlich ohne weiteres gehen.



FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Damian

Zitat von: JMW am 27 Mai 2015, 08:40:41
Ich möchte eine Email erhalten, wenn sich in meiner Abwesenheit ein Bewegungsmelder (FS20) eine Bewegung registriert.
Hier mein Code:

define di_Wohnzimmer_BM DOIF ([Wohnzimmer_BM] and [HomeState] eq "absent") ( { DebianMail('....','...','Bewegung im Zimmer erkannt') } )
attr di_Wohnzimmer_BM cmdpause 900
attr di_Wohnzimmer_BM do always


Ich bekommen nun aber sofort eine Email, wenn der Zustand von HomeState auf "absent" geht. Liegt das daran, dass das Bewegungsevent gespeichert wird
bis die zweite Bedingung erfüllt ist?
Ist ein "DOELSE" ohne Inhalt die Lösung?

Vorschlag:

...([Wohnzimmer_BM:?] and [?HomeState] eq "absent")...

Das erste Fragezeichen für beliebige Events, das zweite für Abfrage ohne Trigger.

Gruß

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

JMW

Super, funktioniert!

Danke.

RitterSport

(([Anwesenheitsstatus] eq "Urlaub" or [Anwesenheitsstatus] eq "Away") and [Bewegungsmelder1K1] eq "on-old-for-timer 60") (set Pushover1 msg 'ALARM' 'Bewegungsmelder Flur' '' 1 '')

Das o.g. funktioniert bei mir ohne das Nutzen von "?" , allerdings jedesmal wenn eine Bewegung ausgelöst wird.
[Bewegungsmelder1K1] erhält als state aber auch automatisch ein off , sonst würde das o.g. nicht funktionieren.