DOIF oder Notify das ist hier die Frage

Begonnen von chopsor, 28 Dezember 2017, 22:08:42

Vorheriges Thema - Nächstes Thema

chopsor

Hallo,

Spiele gerade etwas mit den Raspberry pi GPIO einer 16er Relais karte und einem Bewegungsmelder rum.

mein Szenario soll eine per Bewegungsmelder getriggertes Ereignis sein, welche dann je nach Uhrzeit entweder Lampe 1 an Relais1 oder Lampe 2 an Relais2 schaltet (z.B. ab 22:00 -06:30 eine indirekte Beleuchtung, damit man bei Toiletten gang nicht aufgewacht wird und sonst die normale Deckenlampe)

Ich habe es jetzt Über 2 Varianten probiert:
1. Notify
IF ([Bewegungsmelder2] eq "on" and $hms gt "06:30 and lt "22:00") (set Relais1 on-for-timer 30) ELSE (set Relais2 on-for-timer 30)

2. DOIF
([Bewegungsmelder2] eq "on" and $hms gt "06:30 and lt "22:00") (set Relais1 on-for-timer 30) DOELSE (set Relais2 on-for-timer 30)


So un jetzt zum lustigen Teil der Geschichte beide Varianten funktionieren nicht ...

falls jemand eine Idee hierzu hätte ... wäre ich sehr dankbar!
Hier könnte Ihre Werbung stehen !

Otto123

#1
Hi,

Dein DOIF Syntax ist Nonsens

([Bewegungsmelder2] eq "on" and [06:30-22:00]) (set Relais1 on-for-timer 30) DOELSE (set Relais2 on-for-timer 30)

Doku -> https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung

Tipp: Die Codetags gibt es mit der # Taste über dem  :-X Smiley  ;)

Wobei Du im Text etwas anderes willst([Bewegungsmelder2] eq "on" and [06:30-22:00]) (set Relais1 on-for-timer 30) DOELSEIF ([Bewegungsmelder2] eq "on" and [22:00- 06:30]) (set Relais2 on-for-timer 30)

Ich habe jetzt bewusst die Zeiten (Überlappung) falsch gesetzt!

Ich habe meinen Bewegungsmelder noch anders definiert, damit wird "nachgetriggert"
defmod di_Flurlicht DOIF ([PIR1:"motion:.on"] and ([?Tageslicht] eq "0" or [?PIRWg:brightness] < 130)) (set SW01_Sw01 on)(set SW01_Sw01 off)
attr di_Flurlicht do resetwait
attr di_Flurlicht room Flur
attr di_Flurlicht wait 0,180


Erklärung siehe Doku ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

ZitatDOIF oder Notify das ist hier die Frage
Gar keine Frage: notify, man will ja schliesslich perl lernen, und nicht eine andere Sprache :)
"notify mit IF" zaehlt nicht, IF ist nicht perl. Uebrigens gibt es fuer perl einen grossen Auswahl an Buechern.

Hier ist eine Loesung mit notify, Einzugeben in "Raw definition":
defmod b2_ntfy notify Bewegungsmelder2:on {\
   if($hms gt "06:30" && $hms lt "22:00") {\
    fhem "set Relais1 on-for-timer 30"\
  } else {\
    fhem "set Relais2 on-for-timer 30"\
  }\
}


Je nach Relais-Typ geht es auch einfacher:
defmod b2_ntfy notify Bewegungsmelder2:on set Relais1,Relais2 on-for-timer 30
attr Relais1 disabledForIntervals 00:00-06:30 22:00-24:00
attr Relais2 disabledForIntervals 06:30-22:00

Damian

Zitat von: rudolfkoenig am 28 Dezember 2017, 22:31:50
Gar keine Frage: notify, man will ja schliesslich perl lernen, und nicht eine andere Sprache :)

und

Zitat
Je nach Relais-Typ geht es auch einfacher:
defmod b2_ntfy notify Bewegungsmelder2:on set Relais1,Relais2 on-for-timer 30
attr Relais1 disabledForIntervals 00:00-06:30 22:00-24:00
attr Relais2 disabledForIntervals 06:30-22:00


Welche Sprache ist das? Ich sehe hier kein bisschen Perl ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chopsor

@Otto123
Ich schätze ich hab das DOIF nocht nicht so verstanden wie ich es dachte ;-)

@rudolfkoenig
Die Perl variante tut eigentlich genau das was ich bezwecken wollte  und ersetzt mir noch eine träge variante eines anderen Projekts ;)

einen herzlichen DANK !

Hier könnte Ihre Werbung stehen !