DoIF jeden Tag um 00:00 etwas schalten ,wenn zweite Bedingung passt?

Begonnen von wowogiengen, 27 September 2017, 21:54:23

Vorheriges Thema - Nächstes Thema

wowogiengen

Hallo,
ich möchte bei mir jede Nacht um 00:00 die Sollraumtemperatur im Bad runternehmen, wenn sie zuvor auf einem höheren Wert gesetzt war:
Dachte mir, das geht so:

defmod HeizungsReset DOIF ( [00:00] and ([HzgSetBad:desired-temp] > 29)) (set HzgSetBad desired-temp 25)

Also, wenn der Thermostat sagt, ich will 30 Grad haben und es zufälligerweise genau 00:00 ist, dann soll die Solltemperatur wieder auf 25 °C zurückgeschalten werden.

Frank_Huber

Das sollte passen. Mach noch ein DOELSEIF drunter ohne Befehl oder setze das Attribut do auf always.

Kannst aber auch [HzgSetBad:desired-temp] ne "25" machen, dann wird es  auf 25 gesetzt wenn es nicht 25 ist.

Gesendet von meinem S3_32 mit Tapatalk


CoolTux

Ich würde es so machen


defmod HeizungsReset DOIF ( [00:00] and ([?HzgSetBad:desired-temp] > 29)) (set HzgSetBad desired-temp 25)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

Ja, ist ressourcen schonender. 😉

Gesendet von meinem S3_32 mit Tapatalk


wowogiengen


Gisbert

Zitat aus der commandref:

Trigger verhindern [?<devicename>], [?<devicename>:<readingname>], [?<devicename>:&<internalname>], [?<time specification>]
    Werden Status, Readings, Internals und Zeitangaben in der Bedingung mit einem Fragezeichen eingeleitet, triggern sie nicht.

sowie:
https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

wowogiengen

Wieso löst ein Zugriff auf das Reading einen Trigger aus?
Und welche(n)?

Damian

Zitat von: wowogiengen am 28 September 2017, 19:18:35
Wieso löst ein Zugriff auf das Reading einen Trigger aus?
Und welche(n)?

rate doch mal wann diese Bedingung ausgewertet wird:

DOIF ([HzgSetBad:desired-temp] > 29) ...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

wowogiengen

Hallo Damian,
ich will nicht raten  :-\

Weil unter einem Trigger verstehe ich ein Ereignis, welches ausgelöst wird, wenn sich ein Zustand ändert.
Und der einzige Zustand, der sich hier ändert, ist das Setzen der Wunschtemperatur auf 25°C.
Durch das Auslesen des Readings wird doch kein Trigger ausgelöst?
Und wenn doch, wo kann man das nachlesen?

Damian

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

rvideobaer

Hallo,

Thermostat Mode auto und templist ist zu einfach?
Weshalb muß man da ein DoIf bemühen?

Gruß Rolf
Raspberry Pi 2, HM-Uart,1x HM-LC-Sw1PBU-FM, 1x HM-RC-2-PBU-FM,1x HM-LC-SW4-DR,1x HM-LC-Sw1-Pl-DN-R1,1x HM-TC-IT-WM-W-EU, 5x HM-CC-RT-DN und noch mehr

wowogiengen

Zitat von: Damian am 29 September 2017, 18:29:02
siehe: https://fhem.de/commandref_DE.html#DOIF_checkReadingEvent

Bezogen auf mein Beispiel mit dem Raumthermostat würde das heissen, dass mein DoIf auch dann die  Temperatur auswerten würde, wenn sich die Luftfeuchtigkeit im Raum ändert? Also ohne checkReadingEvent.

Inwieweit wirkt es sich dann positiv oder negativ auf die Performance aus, wenn man zuerst die Uhrzeit und dann die Temperatur prüft, oder umgekehrt?
Also:

defmod HeizungsReset DOIF ( [00:00] and ([HzgSetBad:desired-temp] > 29)) (set HzgSetBad desired-temp 25)
gegenüber
defmod HeizungsReset DOIF ( ([HzgSetBad:desired-temp] > 29) and [00:00]) (set HzgSetBad desired-temp 25)

bzw. dann noch besser
defmod HeizungsReset DOIF ( [00:00] and ([?HzgSetBad:desired-temp] > 29)) (set HzgSetBad desired-temp 25)
gegenüber
defmod HeizungsReset DOIF (([?HzgSetBad:desired-temp] > 29) and  [00:00]) (set HzgSetBad desired-temp 25)



Das Beispiel in der CommandRef verstehe ich nicht:

Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
attr di_motion do always


Kann mir mal jemand ein Beispiel machen, wo man den Unterschied sehen kann, was mit oder ohne Fragezeichen tatsächlich ausführt?

Viele Grüße
Wolfgang

wowogiengen

Zitat von: rvideobaer am 29 September 2017, 18:38:58
Hallo,

Thermostat Mode auto und templist ist zu einfach?
Weshalb muß man da ein DoIf bemühen?

Gruß Rolf
Ich glaube, dass ich absichtlich von dem Auto-Modus und der Temperaturliste weggegangen bin, weil für meinen Anwendungsfall das nicht funktioniert:

Meine Frau sitzt im Rollstuhl, und in der Regel geht sie jeden zweiten Tag baden, und wenn sie baden geht, schalten wir in der Früh die FBH auf 30°C dass es abends ja nicht zu kalt ist im Bad für sie. Damit wir die Heizung aber nach dem Baden nicht vergessen können, wollte ich jede Nacht um 00:00 bei  Solltemperatur 30°C die Solltemperatur wieder auf 25°C runternehmen, was auch schon viel ist, aber grade so passt...

Den Automodus und die Temperaturliste kann ich aber nur so verwenden, dass ich an gleichen Wochentagen abwechselnd 30°C und Normaltemperatur einstelle, also z.B. Mo, Mi, Fr und So. Aber in der zweiten Woche wären die Badetage dann ja Di, Do und Sa. Und das versteht die Templist doch nicht?

Außerdem kann man dann nicht manuell eingreifen, ohne dass man am Abend wieder auf Auto stellen muss, wenn mal die Badetage doch anders wären.

Von daher habe ich es jetzt mal mit manueller Steuerung versucht, und um 00:00 dann wieder auf normale Temperatur zurück.

Bei kompletter Steuerung über FHEM könnte man sicher auch einen virtuellen Button "Badetag" definieren, der in der Früh dafür sorgt, dass von Auto auf manuell umgeschalten wird, und auf 30 °C Solltemperatur, sowie um 00:00 dann wieder auf Auto...

Damian

Zitat von: wowogiengen am 29 September 2017, 20:31:59
Bezogen auf mein Beispiel mit dem Raumthermostat würde das heissen, dass mein DoIf auch dann die  Temperatur auswerten würde, wenn sich die Luftfeuchtigkeit im Raum ändert? Also ohne checkReadingEvent.

Inwieweit wirkt es sich dann positiv oder negativ auf die Performance aus, wenn man zuerst die Uhrzeit und dann die Temperatur prüft, oder umgekehrt?
Also:

defmod HeizungsReset DOIF ( [00:00] and ([HzgSetBad:desired-temp] > 29)) (set HzgSetBad desired-temp 25)
gegenüber
defmod HeizungsReset DOIF ( ([HzgSetBad:desired-temp] > 29) and [00:00]) (set HzgSetBad desired-temp 25)

bzw. dann noch besser
defmod HeizungsReset DOIF ( [00:00] and ([?HzgSetBad:desired-temp] > 29)) (set HzgSetBad desired-temp 25)
gegenüber
defmod HeizungsReset DOIF (([?HzgSetBad:desired-temp] > 29) and  [00:00]) (set HzgSetBad desired-temp 25)



Das Beispiel in der CommandRef verstehe ich nicht:

Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
attr di_motion do always


Kann mir mal jemand ein Beispiel machen, wo man den Unterschied sehen kann, was mit oder ohne Fragezeichen tatsächlich ausführt?

Viele Grüße
Wolfgang

1) ja, auch Feuchtigkeit oder jedes anderes Reading des Devices würde dein DOIF-Modul triggern.

2) Die Reihenfolge der Angaben spielt hier keine Rolle, dein Beispiel 1 entspricht Beispiel 2 bzw. 3 entspricht 4.

Für dich ist Beispiel 3 oder 4 das richtige, denn die Temperaturabfrage soll nur um 0:00 Uhr stattfinden.







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

wowogiengen

Zitat von: Damian am 29 September 2017, 21:36:54
1) ja, auch Feuchtigkeit oder jedes anderes Reading des Devices würde dein DOIF-Modul triggern.

2) Die Reihenfolge der Angaben spielt hier keine Rolle, dein Beispiel 1 entspricht Beispiel 2 bzw. 3 entspricht 4.

Für dich ist Beispiel 3 oder 4 das richtige, denn die Temperaturabfrage soll nur um 0:00 Uhr stattfinden.

Hallo Damian,
ausgehend von dem was ich in anderen Programmiersprachen gelernt habe, würde ich sagen, dass ich das Reading, welches weniger häufig wechselt als erstes angeben würde.
Weil, wenn das Reading dann nicht true ergibt, würde beim "and" das zweite Reading gar nicht mehr ausgewertet werden müssen.

Bis grade eben wollte ich die Uhrzeit als erste Bedingung angeben, und die Temperatur als zweites.
Aber nach ein bischen Überlegen:
die Uhrzeit wechselt eigentlich jede Sekunde, und die Temperatur etwas langsamer.
Somit zuerst auf die Temperatur abfragen und dann auf die Uhrzeit.
Wobei aber die Solltemperatur an dem in Frage kommenden Tag ja seit der Früh auf 30°C steht...

Viele Grüße
Wolfgang