neuer FHEM-Befehl IF

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

Vorheriges Thema - Nächstes Thema

Damian

#300
Zitat von: Puschel74 am 29 Juni 2014, 20:14:17
define Klima_WZ_off notify (Pac|Forecast):(state|temp_c) IF ([Pac:state] < 1500 and [Forecast:temp_c] < 23) (set Klima_WZ on-for-timer 660)
einschränken sollte so man auf state überhaupt triggern kann - ich hab das noch nier versucht.

Wird so wohl nicht funktionieren.

Schau dir  DOIF mal an, da brauchst du dir um solche "Feinheiten" keine Gedanken machen:

define Klima_WZ_off DOIF ([Pac:state] < 1500 and [Forecast:temp_c] < 23) (set Klima_WZ on-for-timer 660)

Hier wird immer richtig getrigger und "set Klima_WZ on-for-timer 660" nur einmal nach Zustandswechsel aufgeführt.

Gruß

Damian

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

Puschel74

Hallo,

das scheint die Feinheit an DOIF zu sein.

Sorry aber ich werde weiterhin mit if arbeiten und alle mit IF oder DOIF zu dir schicken.
Mich hat nur das regexp gewundert - aber wenn das so klappt ist es ja wunderbar.

Grüße

P.S.: Ich will damit absolut NICHT deine Arbeit oder dein Engagement schmälern.
Vor deiner Leistung kann auch ich nur meinen Hut ziehen und sagen - Toll was du leistest.
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.

Damian

Zitat von: Puschel74 am 29 Juni 2014, 21:10:53
Hallo,

das scheint die Feinheit an DOIF zu sein.

Sorry aber ich werde weiterhin mit if arbeiten und alle mit IF oder DOIF zu dir schicken.
Mich hat nur das regexp gewundert - aber wenn das so klappt ist es ja wunderbar.

Grüße

P.S.: Ich will damit absolut NICHT deine Arbeit oder dein Engagement schmälern.
Vor deiner Leistung kann auch ich nur meinen Hut ziehen und sagen - Toll was du leistest.

Der Tipp war eher an @satprofi gerichtet, der hier die ursprüngliche Frage stellte. Jeder soll natürlich das nutzen, womit er am besten klar kommt :)

Gruß

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

satprofi

#303
Zitat von: Damian am 29 Juni 2014, 20:53:07
Wird so wohl nicht funktionieren.

Schau dir  DOIF mal an, da brauchst du dir um solche "Feinheiten" keine Gedanken machen:

define Klima_WZ_off DOIF ([Pac:state] < 1500 and [Forecast:temp_c] < 23) (set Klima_WZ on-for-timer 660)

Hier wird immer richtig getrigger und "set Klima_WZ on-for-timer 660" nur einmal nach Zustandswechsel aufgeführt.

Gruß

Damian

hallo.
verstehe ich das richtig das bei zustandsänderung eines der beiden werte der timer anschaltet? oder doch nur wenn beide werte passen?
ich benötige den timer eigentlich, damit die klima nicht immer ein/ausschaltet sollte Pac auf/ab wandern. so ist die klima wenigstens für den timer lang "geschützt". solange der actor "on" ist ist die klima "off" ! habe das sicherheitshalber eingebaut, falls fhem ausfällt und klima aber laufen soll.

werd mir DOIF ansehen.
gruss

[edit]

mit DOIF müsste das ganze so aussehen?


define Klima_WZ_off DOIF ([Pac:state] < 1500 and [Forecast:temp_c] < 23) (set actor on) DOELSE (set actor off)
attr Klima_WZ_off wait 660


sinn des ganzen: wenn Pac kleiner als 1500W u. Aussentemp kleiner als 23° schalte den actor für 11 Minuten, wenn nicht setze actor auf off.

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

Brockmann

Zitat von: satprofi am 30 Juni 2014, 08:42:29
verstehe ich das richtig das bei zustandsänderung eines der beiden werte der timer anschaltet? oder doch nur wenn beide werte passen?
DOIF prüft bei jeder Zustandsänderung eines der beiden Werte, ob nun (nach der Änderung) BEIDE Werte die Bedingung erfüllen und schaltet (nur) dann. Deshalb das "and" und kein "or".
Andernfalls geht es einfach so weiter, bis sich wieder einer der beiden Werte ändert.

Damian

Zitat von: satprofi am 30 Juni 2014, 08:42:29
hallo.
verstehe ich das richtig das bei zustandsänderung eines der beiden werte der timer anschaltet? oder doch nur wenn beide werte passen?
ich benötige den timer eigentlich, damit die klima nicht immer ein/ausschaltet sollte Pac auf/ab wandern. so ist die klima wenigstens für den timer lang "geschützt". solange der actor "on" ist ist die klima "off" ! habe das sicherheitshalber eingebaut, falls fhem ausfällt und klima aber laufen soll.

werd mir DOIF ansehen.
gruss

Also eine if-Abfrage, welcher Art auch immer, hat immer zwei Zustände: wahr bzw. falsch. Falsch ist der else-Fall, den du hier nicht definiert hast.

Die Abfrage oben bedeutet, dass "set Klima_WZ on-for-timer 660" zunächst einmalig geschaltet wird, wenn die Bedingung wahr wird. Wenn die Bedingung falsch wird, wird bei dir nichts passieren, weil du keinen else-Fall definiert hast. Dennoch wird der Zustand im DOIF-Modul festgehalten. Wenn danach irgendwann wieder die Bedingung wahr sein wird (Zustandswechsel) wird wieder  "set Klima_WZ on-for-timer 660" ausgeführt.

Möchtest du dagegen jedes Mal, wenn ein Event (Pac oder Forecast) eintrifft und die Bedingung Wahr ist "set Klima_WZ on-for-timer 660" ausführen (dass würde deinem ursprünglichen notify-Konstrukt entsprechen), dann muss du beim DOIF-Modul das Attribut "do always" setzen.

Gruß

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

satprofi

Zitat von: Damian am 30 Juni 2014, 09:12:30


Möchtest du dagegen jedes Mal, wenn ein Event (Pac oder Forecast) eintrifft und die Bedingung Wahr ist "set Klima_WZ on-for-timer 660" ausführen (dass würde deinem ursprünglichen notify-Konstrukt entsprechen), dann muss du beim DOIF-Modul das Attribut "do always" setzen.

Gruß

Damian

also dann so ? :


define Klima_WZ_off DOIF ([Pac:state] < 1500 and [Forecast:temp_c] < 23) (set actor on) DOELSE (set actor off)
attr Klima_WZ_off do always
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Zitat von: satprofi am 30 Juni 2014, 09:21:30
also dann so ? :


define Klima_WZ_off DOIF ([Pac:state] < 1500 and [Forecast:temp_c] < 23) (set actor on) DOELSE (set actor off)
attr Klima_WZ_off do always


In diesem Fall, macht das do always Attribut eher wenig Sinn, denn es würde jedes mal, wenn Pac bzw. Forecast ein Event auslöst und die Bedingung wahr ist "set actor on" ausführten und das willst du wahrscheinlich nicht. Hier ist also besser ohne do always zu arbeiten, dann wird nur einmal "set actor on" und nur einmal "set actor off" ausgeführt und zwar immer dann, wenn die Bedingung von wahr auf falsch bzw. von falsch auf wahr wechselt.

Gruß

Damian

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

satprofi

das möchte ich ja eigentlich verhindern, soll nur schalten wenn erst einer der beiden werte mind ~11min. ansteht.
wenn danach 1min. später die bedingung zutrifft soll er wieder "off" schalten. also dann doch mit
attr Klima_WZ_off wait 660 zusätzlich.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Zitat von: satprofi am 30 Juni 2014, 10:25:57
das möchte ich ja eigentlich verhindern, soll nur schalten wenn erst einer der beiden werte mind ~11min. ansteht.
wenn danach 1min. später die bedingung zutrifft soll er wieder "off" schalten. also dann doch mit
attr Klima_WZ_off wait 660 zusätzlich.

ja, dann mit: attr Klima_WZ_off wait 660:60

und ohne attr Klima_WZ_off do always

Gruß

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

satprofi

danke, schon erstellt.
habe im DOIF Thread weitergemacht.

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

Simon74

#311
Kleine Anfängerfrage.
Möchte im notify ein fhem Befehl der immer ausgeführt werden soll(Zeile1) und eine IF Abfrage(Zeile2):
Wie muss ich das trennen bzw. richtig setzen ?
notify DEF:
t5.sz.ws1:off set t5.sz.di1_Sw 0 2
if (([t5.wz.sd1_Sw:state]) eq "off" and ([t5.bo.sd2_Sw:state]) eq "off") (set group=Licht off)

Damian

Zitat von: Simon74 am 29 Juli 2014, 21:46:42
Kleine Anfängerfrage.
Möchte im notify ein fhem Befehl der immer ausgeführt werden soll(Zeile1) und eine IF Abfrage(Zeile2):
Wie muss ich das trennen bzw. richtig setzen ?
notify DEF:
t5.sz.ws1:off set t5.sz.di1_Sw 0 2;;IF (([t5.wz.sd1_Sw:state]) eq "off" and ([t5.bo.sd2_Sw:state]) eq "off") (set group=Licht off)

In der Kommandozeile zwei Semikolons, im DEF-Editor nur ein Semikolon dazwischen setzen.


Gruß

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

Simon74

Schon 100x gesehen aber...
Vielen Dank für das IF und DOIF Modul !

Invers

Warum wird die Nachricht nicht verschickt?

define atSchlossUncertain at +*00:00:10 IF ([Tuerkontakt] eq "closed" and ([Schloss] eq "locked (uncertain)" or [Schloss] eq "NACK"))(set Schloss unlock;; { PushBulletText('Türstatus nicht sicher erkennbar') })

Wenn ich folgendes eingebe (Direkteingabezeile) , dann funktioniiert es. Schloss geht auf und Nachricht kommt.
set Schloss unlock; { PushBulletText('Türstatus nicht sicher erkennbar') }
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