DOIF mit mehreren Temperaturwerten unterschiedlich schalten

Begonnen von Wasserwerk33, 01 Dezember 2020, 16:03:35

Vorheriges Thema - Nächstes Thema

Wasserwerk33

Hallo Leute,

Ich habe ein problem und zwar fehlt mir ein passendes beispiel so das ich es nachbauen kann. Vielleicht habe ich bei Google und hier im Forum auch die Falsche frage unter suchen eingetrage.

Und zwar geht es darum das licht geht an wenn es dunkler wird. Wird über einen Lichtsensor geschaltet. Soweit alles gut.
Die jalousie soll nun aber nicht über Twilight direkt runterfahren wenn der punkt erreicht ist sondern nach Temperatur zusätzlich.
Also ist es unter 5 grad soll sie sofort runterfahren ist es unter 10 grad eine gewisse zeit warten und unter 15 auch. aber nur wenn die Steckdose on ist. Ist die aus und es ist unter 15 Grad soll sie direkt runterfahren. Wie machen ich das mit den Temperatur spannen dazwischen ich könnte ja eintagen zwischen 5 und 10 grad dann und zwischen 2 und 5 dann geht das so einfach?? ( ([?LaCrosse_0C:temperature]  5-10) oder wie muss ich das dann machen?? Danke für eure Hilfe.

([?LaCrosse_0C:temperature]  <= 5 and [([Twilight.Zuhause:ss_civil]+[00:00])] and Steckdose_3 eq "on") (set Kueche_Jalousie_runter trigger)
DOELSEIF
([?LaCrosse_0C:temperature]  <= 10 and [([Twilight.Zuhause:ss_civil]+[00:30])] and Steckdose_3 eq "on") (set Kueche_Jalousie_runter trigger)
DOELSEIF
([?LaCrosse_0C:temperature] <= 15 and [([Twilight.Zuhause:ss_civil]+[00:60])] and Steckdose_3 eq "on") (set Kueche_Jalousie_runter trigger)
DOELSEIF
([?LaCrosse_0C:temperature] <= 15 and [([Twilight.Zuhause:ss_civil]+[00:00])] and Steckdose_3 eq "off") (set Kueche_Jalousie_runter trigger)

Damian

ich würde es so lösen:

DOIF {
[Twilight.Zuhause:ss_civil];
  if ([?Steckdose_3:state] eq "on") {
    if ([?LaCrosse_0C:temperature]  <= 5) {
      fhem_set "Kueche_Jalousie_runter trigger";
    } elsif ([?LaCrosse_0C:temperature]  <= 10) {
      set_Exec("Timer",1800,'fhem_set "Kueche_Jalousie_runter trigger"');
    } elsif ([?LaCrosse_0C:temperature]  <= 15) {
      set_Exec("Timer",3600,'fhem_set "Kueche_Jalousie_runter trigger"')n
    }
  } elsif ([?LaCrosse_0C:temperature]  <= 15) {
     fhem_set "Kueche_Jalousie_runter trigger";
  }
}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Wasserwerk33

Hi da ich kein PERL schreiben kann und meine programme gerne immer verstehen möchte, verusche ich dieses malzu übersetzten.
Du hast also erstes Twilight abgefragt, dann die Steckdose und Dann die unterschiedlichen Temperaturen ist doch richtig so oder??


Damian

Zitat von: Wasserwerk33 am 01 Dezember 2020, 19:54:01
Hi da ich kein PERL schreiben kann und meine programme gerne immer verstehen möchte, verusche ich dieses malzu übersetzten.
Du hast also erstes Twilight abgefragt, dann die Steckdose und Dann die unterschiedlichen Temperaturen ist doch richtig so oder??

ja.

Ich sehe gerade, dass [Twilight.Zuhause:ss_civil] nur ein Reading ist für deinen Timer, dann muss es natürlich, als indirekter Timer angegeben werden:

[[Twilight.Zuhause:ss_civil]];
...

er braucht nicht, wie im FHEM-Modus in einer Bedingung stecken, es reicht, wenn er einfach angegeben wird, damit der Block um diese Zeit getriggert wird.

mit set_Exec wird ein Verzögerungstimer gesetzt, was einem wait entspricht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF