DOIF mit Varialbe im DO Teil?

Begonnen von JMC, 25 September 2019, 15:05:58

Vorheriges Thema - Nächstes Thema

JMC

Hallo,

Ich habe verschiedene DOIF laufen die abhängig von bestimmten Bedingungen die Heizung im Badezimmer steuern. Wenn ich die gewünschte Temperatur ändere muss ich bisher immer alle 6 DOIF von Hand ändern. In diesem Beispiel ist die gewünschte Temperatur 22 Grad. Kann ich stattdessen auch eine Variable benutzen die ich an einer anderen Stelle definiere und ändern kann?

IST:
defmod at_B_HeizungAnWT at *05:15:00 { if ((fhem("get NRW_Feiertag today") eq "none") && (Value("Dummy_HeizungManuell") ne "ja") && (Value("Dummy_HeizungBadErledigt") ne "ja") && (Value("Dummy_Urlaubstag") eq "nein") && (($wday == 1) || ($wday == 2) || ($wday == 3) || ($wday == 4) || ($wday == 5))) { fhem("set DF_H_Badezimmer desired-temp 22") } }

Vereinfacht ausgedrückt:
defmod at_B_HeizungAnWT at *05:15:00 { if ((fhem("get NRW_Feiertag today") eq "none") && (Value("Dummy_HeizungManuell") ne "ja") && (Value("Dummy_HeizungBadErledigt") ne "ja") && (Value("Dummy_Urlaubstag") eq "nein") && (($wday == 1) || ($wday == 2) || ($wday == 3) || ($wday == 4) || ($wday == 5))) { fhem("set DF_H_Badezimmer desired-temp $TEMPERATUR_BAD_1") } }

Viele Grüße
Viele Grüße
JMC

Beta-User

Puh,

zum einen sehe ich kein DOIF, sondern ein at mit Perl.

Das sollte schon gehen, z.B. indem du erst die Variable füllst:defmod at_B_HeizungAnWT at *05:15:00 { if ((fhem("get NRW_Feiertag today") eq "none") && (Value("Dummy_HeizungManuell") ne "ja") && (Value("Dummy_HeizungBadErledigt") ne "ja") && (Value("Dummy_Urlaubstag") eq "nein") && (($wday == 1) || ($wday == 2) || ($wday == 3) || ($wday == 4) || ($wday == 5))) { my $TEMPERATUR_BAD_1 = ReadingsNum("baddummy","state","22");; fhem("set DF_H_Badezimmer desired-temp $TEMPERATUR_BAD_1") } }
Aber insgesamt kommt mir die Konstruktion sehr statisch vor.

Gibt hier viele Möglichkeiten, aber hier würde ich z.B. überlegen, ob ich $we nutze und den Dummy_Urlaubstag ebenfalls als eingeschränkt "holiday2we"-kompatiblen Dummy einrichte. Das macht das schon wesentlich kürzer.

Wenn du dann eine Verzögerungsbedingung haben willst (Dummy_HeizungBadErledigt), käme z.B. auch ein WeekdayTimer in Betracht.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

#2
Hi,
wie heisst Du? Wie heisst Dein Device? Wie heisst Dein Type? Willi oder DOIF oder at  :o :D

Dein Device Type ist nicht DOIF sondern at  ;)

So geht das vom Prinzip her:
define DummyDesired dummy
setreading DummyDesired temp 22
set DF_H_Badezimmer desired-temp [DummyDesired:temp]


Nennt sich set-magic - findest als Beschreibung in der Doku beim set Befehl.

Aber man kann es auch viel länger schreiben ;D - ist am Ende in der Wirkung identisch:
{ my $TEMPERATUR_BAD_1 = ReadingsNum("baddummy","state","22");; fhem("set DF_H_Badezimmer desired-temp $TEMPERATUR_BAD_1") }

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

JMC

Hi,

Danke. Ja - das kommt davon wenn zwischen dem Anfang des Posts und dem Ende ein halber Tag liegt. Ich habe tatsächlich beides gehabt, das DOIF ist aber deaktiviert und schon länger durch das at ersetzt... Irgendwann ist es mir zwar aufgefallen beim kopieren, aber daran das im Text und der Überschrift zu ändern, ne das nicht ::) :-\

Vielen Dank für das mit dem setmagic und dem Dummy - das ist genau das was ich gesucht habe. Ich habe zwar einiges gesucht, aber "Variable" ist jetzt kein sonderlich hilfreicher Teil der Suchanfrage gewesen :-)

Dankeschön!
Viele Grüße
JMC

loescher

Nur als kleine Ergänzung, falls die "Variable" nicht nur als reading im statefile liegen soll, sondern als attribute im fhem.cfg, dann geht es z.B. so mit DOIF:
define diDesired DOIF (["^global$:^ATTR $SELF state "])
attr diDesired state 22
set DF_H_Badezimmer desired-temp [diDesired]


LG,
Stephan.