Kämpfe immer noch... present mit einem Dummy unterbrechen

Begonnen von noanda, 06 Dezember 2013, 23:06:56

Vorheriges Thema - Nächstes Thema

noanda

Hallo zusammen,

ich kämpfe seit Wochen mit einem Problem: Ich möchte bei bedarf Die Einstellung von Present (Present/Absent) mit einem Dummy unterbrechen, und dann eine andere "definierte" Temp. einstellen. Leider komme ich so recht in keiner Variante weiter.

Was mache ich falsch?



define Familie structure Familie_structure HandySommer  HandyChristian  HandyLeonardo
attr Familie clientstate_behavior relative
attr Familie clientstate_priority present absent

define BADHeizungSteu dummy
attr BADHeizungSteu devStateIcon on:sani_heating_manual off:sani_heating_automatic
attr BADHeizungSteu fp_Wplan 950,1050,2,
attr BADHeizungSteu setList state:on,off
attr BADHeizungSteu webCmd state
define BADHeizungStatus notify BADHeizungSteu { if (Value("BADHeizungSteu") eq "on" && Value("Familie") eq "present") {fhem("set BADHeizungK04 desired-temp 23.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") eq "present") {\
fhem ("set BADHeizungK04 controlMode auto");;}\
else {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\
}


Bin kurz vor dem durchdrehen, hat jemand eine Idee?

Raspberry Pi - FHEM 5.5
HMLAN, RFXtrx433 , CUL 868
HM-CC-RT-DN, HM-SEC-MDIR , HM-SEC-SC-2
HM-LC-SW2-FM, ROTO_ZEL-STG-RM-FZS
ELRO440AB, Flamingo

betateilchen

Die Logiktabelle deines Notify sieht im Moment so aus:

1. wenn Badsteuerung ON und Familie PRESENT => desired-temp 23.0
2. wenn Badsteuerung OFF und Familie PRESENT => controlMode auto
3. wenn Familie ABSENT => desired-temp 16.0

Das bedeutet, die Temperatur wird nur dann auf 16 Grad gestellt, wenn mindestens eines der definierten Telefone NICHT anwesend ist.

Ist das wirklich der Gedanke hinter Deiner Planung, den Du umsetzen wolltest?

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

noanda

Nein natürlich nicht, im Gegenteil

1 Wenn Schalter on und ein Telefon Present ist = 23 Grad
2 Wenn Schalter off und ein Telefon Present ist = controlMode Auto
3 Sonst 16 Grad.

Wo ist der Denkfehler? Bzw was muss ich am Code ändern?
Raspberry Pi - FHEM 5.5
HMLAN, RFXtrx433 , CUL 868
HM-CC-RT-DN, HM-SEC-MDIR , HM-SEC-SC-2
HM-LC-SW2-FM, ROTO_ZEL-STG-RM-FZS
ELRO440AB, Flamingo

noanda

Hallo Betateilchen,

probiere weiter aber so geht es auch nicht:

define BADHeizungStatus notify BADHeizungSteu { if (Value("BADHeizungSteu") eq "on" && Value("Familie") ne "absent") {fhem("set BADHeizungK04 desired-temp 23.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") ne "absent")


Was ich jetzt gar nicht verstehe
Raspberry Pi - FHEM 5.5
HMLAN, RFXtrx433 , CUL 868
HM-CC-RT-DN, HM-SEC-MDIR , HM-SEC-SC-2
HM-LC-SW2-FM, ROTO_ZEL-STG-RM-FZS
ELRO440AB, Flamingo

betateilchen

Zitat von: noanda am 07 Dezember 2013, 00:03:52

1 Wenn Schalter on und ein Telefon Present ist = 23 Grad
2 Wenn Schalter off und ein Telefon Present ist = controlMode Auto
3 Sonst 16 Grad.

Wo ist der Denkfehler?

Wie definierst Du in Deinem Verständnis den Zustand "Sonst" aus Punkt 3?

Dein Denkfehler liegt darin, dass Du einfach zu wenige Bedingungen abfragst, um drei Zustände zu unterscheiden:

Schalter ON + PRESENT
Schalter OFF + PRESENT

Diese beiden Abfragen bewirken folgendes: Wenn PRESENT erfüllt ist, ist der Schalterzustand völlig egal, weil EINE der beiden ersten Bedingungen WAHR ergibt und die dritte Abfrage nie erreicht wird.

Nur wenn KEIN PRESENT erfüllt ist, gilt der Zustand "Sonst" aus Deiner Liste, Punkt 3, wobei auch dann der Schalterzustand egal ist.

Schalter ON + PRESENT = desired-temp 23
Schalter OFF + PRESENT = control-mode auto
Schalter ON + ABSENT = desired-temp 16
Schalter OFF + ABSENT = desired-temp 16

Du musst Dir eine solche Logiktabelle zum Verständnis einfach auf Papier aufschreiben, um zu verstehen, dass das, was Du eigentlich möchtest (16 Grad setzen, während ein PRESENT gilt) mit Deinen beiden vorhandenen Vergleichsoperatoren einfach nicht erreichbar ist.

Entweder Du brauchst noch ein drittes Entscheidungskriterium oder Du musst Deine Logik generell ändern.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

noanda

#5
Hallo betateilchen,

erst mal vielen Dank für Deine Geduld!!! aber ich bekomme es immer noch nicht hin habe es jetzt so versucht:

#Bad Heizung
define BADHeizungSteu dummy
attr BADHeizungSteu devStateIcon on:sani_heating_manual off:sani_heating_automatic
attr BADHeizungSteu fp_Wplan 950,1050,2,
attr BADHeizungSteu setList state:on,off
attr BADHeizungSteu webCmd state
define BADHeizungStatus notify BADHeizungSteu { if (Value("BADHeizungSteu") eq "on" && Value("Familie") eq "present") {fhem("set BADHeizungK04 desired-temp 23.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") eq "present") {\
fhem ("set BADHeizungK04 controlMode auto");;}\
elsif (Value("BADHeizungSteu") eq "on" && ("Familie") eq "absent") {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") eq "absent") {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\
}


Leider ohne Erfolg

#Bad Heizung
define BADHeizungSteu dummy
attr BADHeizungSteu devStateIcon on:sani_heating_manual off:sani_heating_automatic
attr BADHeizungSteu fp_Wplan 950,1050,2,
attr BADHeizungSteu setList state:on,off
attr BADHeizungSteu webCmd state
define BADHeizungStatus notify BADHeizungSteu { if (Value("BADHeizungSteu") eq "on" && Value("Familie") ne "absent") {fhem("set BADHeizungK04 desired-temp 23.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") ne "absent") {\
fhem ("set BADHeizungK04 controlMode auto");;}\
elsif (Value("BADHeizungSteu") eq "on" && ("Familie") eq "absent") {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") eq "absent") {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\
}


geht leider auch nicht

Kannst Du mir auf die Sprünge helfen


elsif (Value("BADHeizungSteu") eq "on" && ("Familie") ne "present") {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\
elsif (Value("BADHeizungSteu") eq "off" && ("Familie") ne "present") {\
fhem ("set BADHeizungK04 desired-temp 16.0");;}\


Hat leider auch keine wirkung
Raspberry Pi - FHEM 5.5
HMLAN, RFXtrx433 , CUL 868
HM-CC-RT-DN, HM-SEC-MDIR , HM-SEC-SC-2
HM-LC-SW2-FM, ROTO_ZEL-STG-RM-FZS
ELRO440AB, Flamingo

noanda

Nach langem Hin und Her, habe ich jetzt doch noch eine brauchbare Lösung gefunden.
Dafür musst ich allerdings die Sache ein wenig überdenken:

#Bad Heizung
define BADHeizungSteu dummy
attr BADHeizungSteu devStateIcon on:sani_heating_manual off:sani_heating_automatic
attr BADHeizungSteu fp_Wplan 950,1050,2,
attr BADHeizungSteu setList state:on,off
attr BADHeizungSteu webCmd state
define KeinerDaBAD notify Familie:absent set BADHeizungK04 desired-temp 16.0
define JemnadDaBAD notify Familie:present { if (Value("BADHeizungSteu") eq "on" ) {fhem("set BADHeizungK04 desired-temp 23.0");;}\
elsif (Value("BADHeizungSteu") eq "off" ) {fhem("set BADHeizungK04 controlMode auto");;}\
else\
{fhem ("set BADHeizungK04 desired-temp 16.0")}\
}


Vielleicht kann es ja jemand gebrauchen. Geht aber so nur mit Present
Raspberry Pi - FHEM 5.5
HMLAN, RFXtrx433 , CUL 868
HM-CC-RT-DN, HM-SEC-MDIR , HM-SEC-SC-2
HM-LC-SW2-FM, ROTO_ZEL-STG-RM-FZS
ELRO440AB, Flamingo