FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Burny4600 am 25 Juni 2017, 22:01:23

Titel: [gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Burny4600 am 25 Juni 2017, 22:01:23
Ich suche die richtige Schreibweise für Delta Funktionen wenn ich Explizit das state benötige.

Für eine herkömliche Delta Schreibweise wird diese Form verwendet.
[DL2_T12:DL2_T08] >= 10)
(set AB_SSP_ST_FKVA5D:FILTER=state!=on on)


Wie ist die Definition wenn ich den state Wert benötige bzw. welche Klammern werden benötigt?
Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: amenomade am 25 Juni 2017, 22:34:58
Verstehe deine Frage nicht.

[DL2_T12:DL2_T08]triggert auf Reading DL2_T08  vom Device DL2_T12.

[DL2_T12] triggert auf dem state vom Device DL2_T12.
Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Ellert am 26 Juni 2017, 07:02:30
[DL2_T12] wertet das Internal STATE aus
[DL2_T12:state] wertet das Reading state aus.

Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Burny4600 am 26 Juni 2017, 14:56:24
Sorry Jungs!
Die Hitze dürfte mich ein bisschen weich in der Birne gemacht haben.

Das sollte nicht so heißen,
([DL2_T12:DL2_T08] >= 10)
(set AB_SSP_ST_FKVA5D:FILTER=state!=on on)

sondern so.
({([DL2_T12:state] - [DL2_T08:state])} >= 10)
(set AB_SSP_ST_FKVA5D:FILTER=state!=on on)


Und da wollte ich wissen ob die Schreibweise der Delta Berechnung richtig ist.
Es wird ein Vergleich der beiden Temperaturen gemacht. Ist diese höher als 10° erfolgt die Freigabe.
Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Per am 26 Juni 2017, 17:11:38
Warum der Umweg über Perl? Das geht auch direkt, also ohne die inneren runden und geschweiften Klammern.
Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Damian am 26 Juni 2017, 20:56:31
Zitat von: Per am 26 Juni 2017, 17:11:38
Warum der Umweg über Perl? Das geht auch direkt, also ohne die inneren runden und geschweiften Klammern.

Die Bedingung ist ja bereits bis auf Angaben in eckigen Klammern Perl, daher reicht

(([DL2_T12:state] - [DL2_T08:state]) >= 10)

Die runden Klammern darfst du nicht weglassen, denn es soll zuerst die Differenz gebildet werden und dann der Vergleich stattfinden.


Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Burny4600 am 26 Juni 2017, 21:05:27
Das mit den runden Klammern ist mir schon klar.

Ich bin nur von dieser Berechnungsform ausgegangen.
([DL2_T09:state] >= 45.0)
(set AB_P_ST_DT12T08D {([DL2_T12:state] - [DL2_T08:state])})


Oder gibt es hierfür auch eine andere Berechnungsmöglichkeit.
Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Damian am 26 Juni 2017, 21:24:25
Zitat von: Burny4600 am 26 Juni 2017, 21:05:27
Das mit den runden Klammern ist mir schon klar.

Ich bin nur von dieser Berechnungsform ausgegangen.
([DL2_T09:state] >= 45.0)
(set AB_P_ST_DT12T08D {([DL2_T12:state] - [DL2_T08:state])})


Oder gibt es hierfür auch eine andere Berechnungsmöglichkeit.

Du musst wissen, dass DOIF-Bedingung Perl ist mit etwas DOIF-Spezifischem, Ausführungsteil dagegen FHEM ist mit etwas DOIF-Spezifischem.
Titel: Antw:Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Burny4600 am 28 Juni 2017, 15:11:56
ZitatDu musst wissen, dass DOIF-Bedingung Perl ist mit etwas DOIF-Spezifischem, Ausführungsteil dagegen FHEM ist mit etwas DOIF-Spezifischem.
Ganz habe ich diesen Satz nicht verstanden, aber die Angelegenheit funktioniert.
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: amenomade am 28 Juni 2017, 15:24:57
define di DOIF (DOIF-Bedingung)
     (Ausführungsteil)
DOELSEIF (DOIF-Bedingung)
     (Ausführungsteil)
...


DOIF-Bedingung = Perl Befehle mit etwas DOIF-Spezifischem
Ausführungsteil = FHEM Befehle mit etwas DOIF-Spezifischem

Siehe https://fhem.de/commandref_DE.html#command für die Befehl Arten.
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Frank_Huber am 28 Juni 2017, 15:26:14
Ich würde hier gerne mal einsteigen.
lässt sich innerhalb vom DOIF noch ne Bedingung einfügen dass die Über-Unterschreitung des Schwellwertes eine Mindestdauer anliegen muss?

Will das DOIF für meine Pool-Solarheizung einsetzen.
Ist die Sonne weg gibt es keine Erwärmung mehr also Pumpe aus.

Problem ist beim einschalten, da schaltet das DOIF gleich wieder aus da noch kein warmes Wasser am Sensor ist.
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Per am 28 Juni 2017, 15:32:00
Gibt es. Nennt sich wait. Aber viele Wege führen nach Rom. Ein weiterer wäre eine Hysterese. Oder DOELSEIF statt DOELSE fürs Ausschalten.
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Frank_Huber am 28 Juni 2017, 15:35:14
ich schalte manuell ein und der DOIF soll mit der Delta Funktion dann abschalten.
Attribut wait war ein gutes Stichwort! So läuft es jetzt bei mir:
defmod PoolHeizAUS DOIF ([IT_00FF0F0FFF:state] eq "on" and (([Pool_Temp_1:Temp_1] - [Pool_Temp_2:Temp_2]) <= 1)) (set IT_00FF0F0FFF off)
attr PoolHeizAUS do always
attr PoolHeizAUS wait 180


Danke Per!
DOIF ist so mächtig, da sieht man den Wald vor Bäumen nicht. ;)
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Per am 28 Juni 2017, 15:42:56
attr PoolHeizAUS wait 600
Dann wartet das DOIF 10 min, bis dahin sollte am Sensor warmes Wasser sein. Allerdings pumpt bei dieser "Billiglösung" die Pumpe auch noch 10 min, nachdem die Temperatur wieder runter ist.
Du kannst aber auch das Alter des Einschaltbefehls abfragen (:sec > 600), da hast du das Problem nicht.

defibe PoolHeizAUS DOIF ([IT_00FF0F0FFF:state] eq "on" and [IT_00FF0F0FFF:state:sec] > 600 and (([Pool_Temp_1:Temp_1] - [Pool_Temp_2:Temp_2]) <= 1)) (set IT_00FF0F0FFF off)
attr PoolHeizAUS do always
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: Frank_Huber am 28 Juni 2017, 15:45:08
Das mit dem Einschaltbefehl ist ja noch besser! :)
Danke! So wirds umgesetzt.
Titel: Antw:[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen
Beitrag von: nils_ am 28 Juni 2017, 16:12:39
nur so als einwurf:

https://fhem.de/commandref_DE.html#THRESHOLD  (für die hysterese)