[gelöst] Wie ist die richtige DOIF Schreibweise für Delta Funktionen

Begonnen von Burny4600, 25 Juni 2017, 22:01:23

Vorheriges Thema - Nächstes Thema

Burny4600

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?
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Ellert

[DL2_T12] wertet das Internal STATE aus
[DL2_T12:state] wertet das Reading state aus.


Burny4600

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.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Per

Warum der Umweg über Perl? Das geht auch direkt, also ohne die inneren runden und geschweiften Klammern.

Damian

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.


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

Burny4600

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.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Damian

#7
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Burny4600

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.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Frank_Huber

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.

Per

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.

Frank_Huber

#12
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. ;)

Per

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

Frank_Huber

Das mit dem Einschaltbefehl ist ja noch besser! :)
Danke! So wirds umgesetzt.