FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: grntbn am 28 Februar 2019, 15:48:59

Titel: Problem mit if-Bedingung
Beitrag von: grntbn am 28 Februar 2019, 15:48:59
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
Titel: Antw:Problem mit if-Bedingung
Beitrag von: Beta-User am 28 Februar 2019, 15:59:04
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")}}
Titel: Antw:Problem mit if-Bedingung
Beitrag von: grntbn am 28 Februar 2019, 16:29:11
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"}}
Titel: Antw:Problem mit if-Bedingung
Beitrag von: Beta-User am 28 Februar 2019, 17:00:21
Was meint denn {$we} in der Kommandozeile?
Titel: Antw:Problem mit if-Bedingung
Beitrag von: grntbn am 28 Februar 2019, 18:59:40
{$we} in der Kommandozeile ergibt "1"
Titel: Antw:Problem mit if-Bedingung
Beitrag von: Beta-User am 28 Februar 2019, 22:14:13
Wenn Wochenende ist, warum erwartest du dann eine Reaktion?
Titel: Antw:Problem mit if-Bedingung
Beitrag von: Wzut am 01 März 2019, 07:28:11
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 :)  )
Titel: Antw:Problem mit if-Bedingung
Beitrag von: nils_ am 01 März 2019, 08:09:04
vermutlich ein Eintrag vom Karneval der als Feiertag (für manche ist er das ja :) ) interpretiert wird
.
Titel: Antw:Problem mit if-Bedingung
Beitrag von: rabehd am 01 März 2019, 08:26:37
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.
Titel: Antw:Problem mit if-Bedingung
Beitrag von: Byte09 am 01 März 2019, 08:44:35
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

Titel: Antw:Problem mit if-Bedingung
Beitrag von: grntbn am 01 März 2019, 09:35:52
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 (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!