neuer FHEM-Befehl IF

Begonnen von Damian, 25 Dezember 2013, 23:50:06

Vorheriges Thema - Nächstes Thema

Invers

Das erinnert mich etwas an eine frühere Diskussion, die ein Forum mit mir führte. Da ging es darum, ob denn eine Kamera im Handy genau so gut sein kann, wie eine Kamera. Ich war damals der Meinung - ja.
alle meinten nein. Nun ratet mal, wer Recht hatte?
Lasst doch den Dingen einfach ihren Lauf. Die Zeit wird entscheiden, wer richtig lag.
Jemand macht sich Mühe und bringt etwas Neues. Soll man ihn da bremsen?
Eine Fehlentwicklung ist das IF sicher nicht. Ob es ein Bombenerfolg wird oder ein Strohfeuer, ist Spekulation.
Wenn jemand sein Heim automatisiert, ist es ja erst einmal nur für ihn selbst gedacht. Und er kommt dann damit auch zurecht, selbst dann, wenn es in thailändisch programmiert ist. Leichter und schwerer ist auch von Gehirn zu Gehirn unterschiedlich zu betrachten. Ich bin offen für jede Entwicklung. Was ich dann später toll finden werde, weiss ich heute auch noch nicht. Aber wer einen Weg noch nie gegangen ist, kann auch die Eindrücke nicht beschreiben. Also versuchen wirs doch einfach, um so mehr Zeit bleibt für die Entwicklungen, statt sie hier in Diskussionen zu stecken. Viele Erfindungen wurden schon falsch eingeschätzt. Warten wirs ab.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

#61
Zitat von: Invers am 22 Januar 2014, 22:02:31
Aber wer einen Weg noch nie gegangen ist, kann auch die Eindrücke nicht beschreiben.

Nach diesem Motto.

Wer Interesse an dem Befehl hat, der sollte ihn aus dem ersten Post laden, FHEM herunterfahren, die Datei 98_IF.pm in FHEM-Verzeichnis kopieren, FHEM wieder hochfahren und dann für seine Problemstellung ausgiebig testen. Anschließend Rückmeldung (positiv, wie auch negativ) hier posten. So kann man möglichst schnell herausfinden, ob die Sache alltagstauglich ist oder nicht. Und dann kann Rudi entscheiden, ob er den Befehl aufnimmt oder nicht.

Ich, für meinen Teil, habe ihn in diversen Szenarien bereits getestet und habe zunächst meine Entwicklung abgeschlossen.

Und noch eins zum Verständnis:

Dieser Befehl ist in erster Linie dazu gedacht, ihn auf der FHEM-Ebene zu nutzen, also in Kombination mit anderen FHEM-Befehlen, um nicht unnötig auf die Perlebene zu müssen (siehe Beispiele im ersten Post).

Gruß

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

kermi

Hallo Damian,

Frei nach deinem Beispiel :
define activity notify move IF ([move:state[(on|off)] eq "on" and $we) (set lamp off)

habe ich mal testweise bei mir folgendes eingegeben:
Zitatdefine flur_Bewegungsmelder notify dimmer_flur_detekt_Sw_01 IF ([dimmer_flur_detekt_Sw_01:state[(closed|open)] eq "closed") (set dimmer_flur_kanal1 100 0 5) ELSE (set dimmer_flur_kanal1 0 0 5)

bekomme folgende Fehlermeldung:
Zitatflur_Bewegungsmelder return value: IF: no right bracket: [dimmer_flur_detekt_Sw_01:state[(closed|open)] eq "closed"

unterm Strich, es fehlt eine rechte Klammer, nur wo?

Gruß
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Damian

define flur_Bewegungsmelder notify dimmer_flur_detekt_Sw_01 IF ([dimmer_flur_detekt_Sw_01:state:[(closed|open)]] eq "closed") (set dimmer_flur_kanal1 100 0 5) ELSE (set dimmer_flur_kanal1 0 0 5)

Gruß

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

Damian

wenn allerdings der Zustand nur closed oder open ist, brauchst du auch nicht zu filtern es reicht dann auch:

define flur_Bewegungsmelder notify dimmer_flur_detekt_Sw_01 IF ([dimmer_flur_detekt_Sw_01:state] eq "closed") (set dimmer_flur_kanal1 100 0 5) ELSE (set dimmer_flur_kanal1 0 0 5)

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

kermi

alles klar, funktioniert bestens.
Danke.
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Damian

#66
Zitat von: kermi am 23 Januar 2014, 20:12:32
alles klar, funktioniert bestens.
Danke.

Übrigens, da war noch ein Tippfehler in der Doku - es fehlte ein Doppelpunkt als Trennzeichen, es muss heißen:


define activity notify move IF ([move:state:[(on|off)]] eq "on" and $we) (set lamp off)

habe es gerade korrigiert.

Aber wie gesagt, wenn die Zustände eindeutig sind, braucht man auch nicht zu filtern.

Gruß

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

stgeran

Ich bekomme es nicht gebacken:
define Wandtaster_T3 notify CUL_HM_HM_PBI_4_FM_2436B1_Btn_03 IF (Value("toggle1") eq "on")(set schalter1 on,set toggle1 off) ELSE (set schalter1 off,set toggle1 on)
Wo ist mein Fehler, das Licht geht an und gleich wieder aus. Das sagt der Event Monitor:
2014-01-23 21:35:29 IT schalter1 on
2014-01-23 21:35:29 dummy toggle1 off
2014-01-23 21:35:30 IT schalter1 off
2014-01-23 21:35:30 dummy toggle1 on
2014-01-23 21:35:30 CUL_HM CUL_HM_HM_PBI_4_FM_2436B1_Btn_03 Short (to broadcast)
2014-01-23 21:35:30 CUL_HM CUL_HM_HM_PBI_4_FM_2436B1_Btn_03 trigger: Short_81
2014-01-23 21:35:30 CUL_HM Wandtaster_Kamin battery: ok
2014-01-23 21:35:30 CUL_HM Wandtaster_Kamin CUL_HM_HM_PBI_4_FM_2436B1_Btn_03 Short (to broadcast)
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

Damian


define Wandtaster_T3 notify CUL_HM_HM_PBI_4_FM_2436B1_Btn_03 IF ([toggle1:state] eq "on")(set schalter1 on,set toggle1 off) ELSE (set schalter1 off,set toggle1 on)

Gruß

Damian

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

Damian

Dein Notify reagiert auf alle Events von  CUL_HM_HM_PBI_4_FM_2436B1_Btn_03, da du beim notify nicht genau angegeben hast, auf welche Events er reagieren soll und dein Tastendruck erzeugt offenbar zwei Events, dann wird natürlich auch das FHEM-Kommando, hier also IF, zweimal aufgerufen.

Du musst also beim notify eine passende Filteroption angeben, damit das IF-Kommando bei einem Tastendruck auch nur einmal aufgerufen wird.

z. B. auf Short filtern:

define Wandtaster_T3 notify CUL_HM_HM_PBI_4_FM_2436B1_Btn_03:Short.* IF ([toggle1:state] eq "on")(set schalter1 on,set toggle1 off) ELSE (set schalter1 off,set toggle1 on)

Gruß

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

stgeran

GEHT!!!
Dann hat es auch auf ...short und ...long reagiert und deshalb zweimal ausgeführt.
Danke!
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

Damian

Zitat von: stgeran am 23 Januar 2014, 22:35:58
GEHT!!!
Dann hat es auch auf ...short und ...long reagiert und deshalb zweimal ausgeführt.
Danke!
eher auf:

2014-01-23 21:35:30 CUL_HM CUL_HM_HM_PBI_4_FM_2436B1_Btn_03 trigger: Short_81

was offenbar bei short mitgesendet wird (siehe dein Eventlog).

Gruß

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

der-Lolo

Guten Morgen Damian,
ich würde gerne mein derzeitiges schalten der Subwoofer Steckdose verändern...
aktuell habe ich folgendes definiert

define subwoofer_an notify DenonAVR:on { if ($hour ~~ [8..21]) { fhem 'set HUEDevice7 on' }\
else { fhem 'set HUEDevice7 off' }}
attr subwoofer_an room develop


DenonAVR liefert mir aber auch ein Reading "volume_level_pct"
Ich würde nun gerne etwas nutzen wie
define subwoofer_an notify DenonAVR:volume_level_pct >30 { if ($hour ~~ [8..21]) { fhem 'set HUEDevice7 on' }

Ich grüble schon länger ob dein IF dabei behilflich ist oder aber doch das Threshold Modul.
Richtig toll wäre noch wenn die abfrage auf $hour negativ ausfällt - es also nacht ist ein eigenes Icon setzen zu können.

Wäre toll wenn du mir kurz weiterhilfst...

Damian

#73
Soll dein Subwoofer nur beim Einschalten deines Receiver angehen?
Soll der Subwoofer beim Ausschalten des Receivers ausgehen?
wenn ja, dann vielleicht so etwas:

define subwoofer_an notify DenonAVR:(on|off)  IF (([DenonAVR:state] eq "on") and ($hour ~~ [8..21]) and ([DenonAVR:volume_level_pct]>30)) (set HUEDevice7 on) ELSE (set HUEDevice7 off)


Gruß

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

der-Lolo

#74
ZitatSoll dein Subwoofer nur beim Einschalten deines Receiver angehen?
Soll der Subwoofer beim Ausschalten des Receivers ausgehen?

ja, so soll es sein.

Das habe ich sofort mal ausprobiert, es funktioniert leider noch nicht...

Vielleicht liegt es an dem geliefertem Zahlenwert vom DenonAVR er arbeitet in 0.5% schritten...
29.5
30
30.5
habe aber auch werte größer 30.5 also 31 probiert.

Muss ich vielleicht noch mit .*arbeiten um evtl. vorhandene Leerzeichen zu erschlagen?


EDIT:
ich bin ein bisschen weiter, ein READING state gibt es nicht, STATE steht nur in den Internals.
Deswegen habe ich umgebaut auf

DenonAVR:(on|off)  IF (([DenonAVR:power] eq "on") and ($hour ~~ [8..21]) and ([DenonAVR:volume_level_pct]>30)) (set HUEDevice7 on) ELSE (set HUEDevice7 off)


Ergebnis: Es funktioniert falschrum - wenn ich den Denon ausschalte wird HUEDevice7 an geschaltet,
wenn ich ihn anschalte wird HUEDevice7 aus geschaltet...