Dieses. kann ich nicht in die Dokumentation finden: gibt es in Fhem ausser IF auch AND und OR oder derartiges? Bis jetzt benutze ich genestete IF Ausdrücke, aber ob das notwendig ist weiss ich nicht.
IF (großgeschrieben) ist ein fhem Modul-Typ/Device-Typ.
EDIT: hmmm, ob da in den Klammern dann sowas IF (irgendwas && irgendwas anderes) geht,
hmm, sollte aber...EDIT: geht (klar ;) ), siehe commandref zu IF:
Zitat von: commandref
Filtern nach "on" und "off" im Status des Devices "move":
define activity notify move IF ([move:&STATE:[(on|off)]] eq "on" and $we) (set lamp off)
Ebenso DOIF...
(beide selber Entwickler, soweit ich das im Kopf habe)
Du kannst aber nach Perl wechseln, also (Beispiel):
define nTest notify RegEx { Perl }
EDIT: https://wiki.fhem.de/wiki/Klammerebenen
in Perl kannst du dann programmieren, was eben in Perl geht, also:
define nTest notify RegEx { if(irgendwas && irgendwas anderes || was ganz anderes){mache dies} }
Wenn du dann in Perl etwas "von fhem" willst, dann brauchst du die "fhem-Funktion":
define nTest notify RegEx { if(irgendwas && irgendwas anderes || was ganz anderes){fhem("set XYZ on")} }
Wenn es dann mal mehr Perl wird (bzw. mache ich das eigentlich immer ;) ), kannst du das in eine Sub in myUtils "auslagern":
define nTest notify RegEx { if(irgendwas && irgendwas anderes || was ganz anderes){MeineSub("Parameter")} }
Und dann eben in myUtils eine Sub namens "MeineSub" anlegen ;)
https://wiki.fhem.de/wiki/99_myUtils_anlegen
EDIT: bzw. was willst du tun!?Gruß, Joachim
Danke sehr, das war ziemlich gut versteckt :-)
Was ich tun will: ein Heizlüfter einschalten wenn die Sonne gut scheint auf meine Solaranlage, UND der Raumtemperatur zu niedrich is. Jetzt sieht es so aus:
define xx notify envoy:production_02_wNow:..*
IF (([envoy:production_02_wNow] > 500) and ([Wandthermostaat:desiredTemperature] > [Wandthermostaat:temperature]) )
(set Tasmota4 on)
ELSE
(set Tasmota4 off)
Hoffentlich geht das...
Ich kenne die Syntax von IF und auch DOIF nicht sonderlich (nutze es nicht).
ABER: ich würde in deinem Fall gleich auf DOIF gehen, statt notify -> IF / ELSE
Du musst bei DOIF nur aufpassen, zwischen Trigger und "nur" Abfrage. Bei nur Abfrage ein '?' vor den "Ausdruck".
-> commandref zu DOIF ist aber sehr gut (oder warens die Wiki dazu? ;) ).
Ansonsten würde (ICH SELBER): nach Perl gewechselt sein... ;)
EDIT: eine Anmerkung zu deinem notify (trifft aber dann auch bei DOIF ;) ) du solltest nicht "einfach so breit" reagieren, also :..* weil das erfasst dann alles was mindestens 2 Zeichen (egal welche) nach dem ':' hat. Wobei das notify eh etwas "eigenartig" (auf mich) wirkt. Wie hast du das erstellt!? Am einfachsten (auch für DOIF und weitere) geht sowas über den EventMonitor! Da kann man sich sowas generieren lassen. https://wiki.fhem.de/wiki/Event_monitor und dann (bei Bedarf) anpassen und "erweitern" (also die "Reaktion" dazu "bauen")...
Gruß, Joachim
Die logischen Operatoren bei IF oder DOIF sind die üblichen Perl-Operatoren, siehe https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Insbesondere gibt es für UND: && oder and für ODER: || oder or
Hallo,
define meinDOIF DOIF ([envoy:production_02_wNow] > 500 and [Wandthermostat:desiredTemperature] > [Wandthermostat:temperature]) (set Tasmota4 on)
DOELSE (set Tasmota4 off)
Gruß
Eisix
Danke für diese Bemerkungen, kenne mich mit Regular Expressions noch nicht so gut aus. Übrigens habe ich den Event Monitor benutzt und die hat es so für mich so gemacht!
Hans
EDIT: eine Anmerkung zu deinem notify (trifft aber dann auch bei DOIF ;) ) du solltest nicht "einfach so breit" reagieren, also :..* weil das erfasst dann alles was mindestens 2 Zeichen (egal welche) nach dem ':' hat. Wobei das notify eh etwas "eigenartig" (auf mich) wirkt. Wie hast du das erstellt!? Am einfachsten (auch für DOIF und weitere) geht sowas über den EventMonitor! Da kann man sich sowas generieren lassen. https://wiki.fhem.de/wiki/Event_monitor und dann (bei Bedarf) anpassen und "erweitern" (also die "Reaktion" dazu "bauen")...
Gruß, Joachim
[/quote]