Hauptmenü

Problem mit if-Bedingung

Begonnen von grntbn, 28 Februar 2019, 15:48:59

Vorheriges Thema - Nächstes Thema

grntbn

Hallo,

ich möchte meine Warmwasserumwälzpumpe an Wochentagen zu anderen Zeiten einschalten als an Wochenenden. Dazu habe ich folgende 2 Codevarianten erstellt, wobei die Variante ohne if-Bedingung einwandfrei läuft, die mit der if-Bedingung aber garnichts macht.

Variante 1: 

define WarmwasserUmwaelzumpe_Morgens_WT at *15:10:00 {fhem("define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60")}

Auszug aus dem Event Monitor:

2019-02-28 15:10:00 at WarmwasserUmlauf_Morgens_AN Next: 15:12:00
2019-02-28 15:12:00 CUL_HM WarmwasserUmwaelzPumpe_Sw on
2019-02-28 15:13:02 CUL_HM WarmwasserUmwaelzPumpe_Sw off
2019-02-28 15:14:04 CUL_HM WarmwasserUmwaelzPumpe_Sw on
2019-02-28 15:15:02 CUL_HM WarmwasserUmwaelzPumpe_Sw off
2019-02-28 15:16:00 CUL_HM WarmwasserUmwaelzPumpe_Sw on
2019-02-28 15:17:02 CUL_HM WarmwasserUmwaelzPumpe_Sw off
2019-02-28 15:18:00 CUL_HM WarmwasserUmwaelzPumpe_Sw on
2019-02-28 15:19:03 CUL_HM WarmwasserUmwaelzPumpe_Sw off

Variante 2 mit if-Bedingung "wenn nicht Wochenende":

define WarmwasserUmwaelzumpe_Morgens_WT at *15:24:00 {if (!($we)) {fhem("define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60")}}

Keine Funktion!

Kann mir jemand helfen? Was mach ich falsch?

Danke!
grntbn

Beta-User

Willkommen im Forum!

Bitte nutze zukünftig code-tags (der #-Button oben).

Ansonsten könntest du als erstes mal die klammern um das $we weglassen. In der commandref unter Perl-Specials findet sich das z.B. so:

define roll_en *07:45:00 { fhem "trigger SwitchAllRoll on" if(!$we) }
(die Variante, das if hinten anzufügen, ist eine Perl-Besonderheit, die nicht sein muß. Ansonsten gäbe es auch noch "unless":

define WarmwasserUmwaelzumpe_Morgens_WT at *15:24:00 {unless ($we) {fhem "define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60"}}

Alles in ein Gerät ($we/!$we) ginge z.B. auch mit einem WeekdayTimer:
define Timer_Brunnen_Schildkroeten WeekdayTimer Wasser_Schildkroeten 10:45|1800 12:30|1800 14:00|1800 15:30|1800 17:00|1800 19:00|1800 { if (ReadingsVal("Aussentemperatur_Nord", "state", "no") > 8 && ReadingsVal("Heizung_Schildkroeten","state","active") eq "disabled") { fhem ("set $NAME on-for-timer $EVENT")}}
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

grntbn

Hallo,

habe jetzt auch noch die vorgeschlagenen Varianten getestet, alle ohne Funktion !??!

define WarmwasserUmwaelzumpe_Morgens_WT at *16:10:00 {if (!$we) {fhem "define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60"}}

define WarmwasserUmwaelzumpe_Morgens_WT at *16:16:00 {fhem "define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60" if (!$we)}

define WarmwasserUmwaelzumpe_Morgens_WT at *16:21:00 {unless ($we) {fhem "define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60"}}

Beta-User

Was meint denn {$we} in der Kommandozeile?
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

grntbn

{$we} in der Kommandozeile ergibt "1"

Beta-User

Wenn Wochenende ist, warum erwartest du dann eine Reaktion?
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

Wzut

wenn an einem Donnerstag $we = 1 ist würde ich mal das Attribut holiday2we unter global prüfen ob da ein holiday device der Meinung ist es seien gerade Ferien
(aber heute noch , sonst must du zwei Tage warten :)  )
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

nils_

vermutlich ein Eintrag vom Karneval der als Feiertag (für manche ist er das ja :) ) interpretiert wird
.
viele Wege in FHEM es gibt!

rabehd

define WarmwasserUmwaelzumpe_Morgens_WT at *16:10:00 {if (!$we) {fhem "define WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60"}}

Was passiert, wenn "WarmwasserUmlauf_Morgens_AN" schon vorhanden ist? Ich glaube da wäre define WarmwasserUmwaelzumpe_Morgens_WT at *16:10:00 {if (!$we) {fhem "defmod WarmwasserUmlauf_Morgens_AN at +*{4}00:02:00 set WarmwasserUmwaelzPumpe_Sw on-for-timer 60"}} besser.

PS: Ich fände ein DOIF übersichtlicher.
Auch funktionierende Lösungen kann man hinterfragen.

Byte09

#9
hmm, ich finde das alles etwas unübersichtlich .

wenn du magst versuch es mal mit einem MSwitch ... 2 unterschiedliche Schaltzeiten ( welche auch immer ) eintragen und es passt .

defmod wasser MSwitch
attr wasser MSwitch_Debug 0
attr wasser MSwitch_Delete_Delays 1
attr wasser MSwitch_Expert 0
attr wasser MSwitch_Extensions 0
attr wasser MSwitch_Help 1
attr wasser MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr wasser MSwitch_Include_Devicecmds 1
attr wasser MSwitch_Include_MSwitchcmds 0
attr wasser MSwitch_Include_Webcmds 0
attr wasser MSwitch_Inforoom MSwitch
attr wasser MSwitch_Lock_Quickedit 1
attr wasser MSwitch_Mode Notify
attr wasser room MSwitch

setstate wasser active
setstate wasser 2019-03-01 08:39:15 .Device_Affected no_device
setstate wasser 2019-03-01 08:38:54 .Device_Events no_trigger
setstate wasser 2019-03-01 08:36:43 .First_init done
setstate wasser 2019-03-01 08:36:43 .Trigger_cmd_off no_trigger
setstate wasser 2019-03-01 08:36:43 .Trigger_cmd_on no_trigger
setstate wasser 2019-03-01 08:39:11 .Trigger_condition
setstate wasser 2019-03-01 08:36:43 .Trigger_off no_trigger
setstate wasser 2019-03-01 08:36:43 .Trigger_on no_trigger
setstate wasser 2019-03-01 08:39:11 .Trigger_time on~off~ononly[16#[dp]00|!$we][18#[dp]00|$we]~offonly~onoffonly
setstate wasser 2019-03-01 08:36:43 .V_Check V2.00
setstate wasser 2019-03-01 08:39:11 Trigger_device no_trigger
setstate wasser 2019-03-01 08:36:43 Trigger_log off
setstate wasser 2019-03-01 08:39:15 state active




gruss Byte09


grntbn

Ich bin gestern im Internet noch auf die Suche gegangen warum {$we} unter der Woche eine "1" ausgibt und habe folgenden Beitrag gefunden

https://forum.fhem.de/index.php?topic=15099.0

Nachdem ich, wie in diesem Beitrag beschrieben, meine Feiertagseinträge in der cfg auskommentiert habe, gibt {$we} eine "0" zurück.

Werde am Abend also die verschiedenen Varianten austesten. Außerdem muss ich mir das Problem mit den Feiertagen dann noch genauer anschauen.

Jedenfalls vielen Dank für die Hilfe!