[gelöst] Gedankenfehler bei Pushmitteilung und Temperatur DOIF

Begonnen von Thoffi1978, 22 Mai 2017, 14:21:11

Vorheriges Thema - Nächstes Thema

Thoffi1978

Hallo,
Ich möchte mir eine WA zu schicken lassen, wenn die Temperatur sich bei 40°,45°,50°Celsius befindet

Es soll immer nur 1 Nachricht gesendet werden und nicht dauernd wenn sich der Sensor updatet.
Ich habe folgendes DOIF:
([Temp_Schlafzi:temperature] >40 ) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)
DOELSEIF
([Temp_Schlafzi:temperature] >45 ) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)
DOELSEIF
([Temp_Schlafzi:temperature] >50 ) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)
DOELSE
()

Als Atribute habe ich :
repeatcmd  900
   repeatsame 1:1:1:1

gesetzt
Das senden klappt grundsätzlich. Ich bekomme aber immer nur eine Nachricht wenn die 40°C überschritten werden und dann Keine mehr.
Wo ist da mein Gedankenfehler?
Vielen Dank schon mal
Hoffi

l2r

du musst das doif anders herum aufbauen... also erst >50 dann >45 usw..


da wenn größer 50 ist ja auch größer 45 wahr ist und auhc größer 40. Wenn die erste Bedingung wahr ist, dann arbeitet doif auch diese ab und testet nicht weiter.

Also als erste Bedingung immer den unwahrscheinlichsten Fall nehmen.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

nils_

bei dir wird es aber heiß im schlafzimmer und vor allem im schrank.
was willste denn damit erkennen? ob da jemand drin steht?? :D

ok spaß beiseite, versuch doch mal:
([Temp_Schlafzi:temperature] >40 or [Temp_Schlafzi:temperature] >45 or [Temp_Schlafzi:temperature] >50) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)



//edit:
verschieb das Thema doch in das DOIF Unterforum, da kann dir vielleicht besser geholfen werden!


viele Wege in FHEM es gibt!

amenomade

Also........

( A > 40 or A > 45 or A > 50) ist gleich (A > 40). Das Trigger ist [Temp_Schlafzi:temperature] und nicht die Bewertung der Kondition. Sobald ein Event mit [Temp_Schlafzi:temperature] kommt, wird das DOIF durchgeführt, und die Bedingungen bewertet.

Dann ist m.A. die Lösung mit "or" nicht die richtige.

Das Problem mit der andere Variante mit absteigenden Temperaturen ist: sobald eine Bedingung erfüllt ist, wechselt das DOIF ins Zustand cmd+1. Es sei denn, doAlways wurde eingestellt (in dem Fall, hat es aber wenig Sinn, da die Nachricht auch bei 41, 42, 43, 44, 46, 47, 48, 49, 51,usw geschickt würde). Wechselt plötzlich die Temperatur auf 50, dann wirds Du Nachricht 1 bekommen, dann bei nächster Änderung von Temperatur Nachricht 2 wenn die Temperatur immer noch höher als 45, dann Nachricht 3 wenn die Temperatur immer noch höher als 40... drei Nachrichten nacheinander.

Ich würde sagen, die erste Version ist dann die richtige: wird Temperatur > 40, wird cmd1 duchgeführt. Dann wechselt der DOIF auf cmd2 : nächste möglichkeit, Temperatur > 45 (durch Bedingung 2), oder Temperatur geht wieder unter 40 dann DOELSE() am Ende = cmd 4 = reset.

Mit repeatsame 1:1:1:1 ist m.M.n repeadcmd 900 unnötig.

Jetzt frage ich mich warum es nicht funktioniert... Was ist genau das Bedarf? Du willst 1 und nur 1 Nachricht bekommen, wenn die Temperatur über 40 kommt, und erst dann eine neue Nachricht falls es über 45 kommt, usw ? Und wenn es über 50 gekomment ist, und zurück auf 45 kommt, was willst Du? Villeicht muss man noch ein paar Reset programmieren.

Wo nils_ aber völlig Recht hat: verschieb deine Frage im DOIF Unterforum. Da lesen die Spezialisten, inkl. der Entwickler. Knopf dafür ist ganz unten links.







Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

l2r

@amenomade: da hast du natürlich recht. Da habe ich wohl nicht gründlich genug nachgedacht.

ich würde aber auch den DOELSE()-Zweig weglassen. da sich das DOIF auch so ungewollt zurücksetzen könnte.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

amenomade

Ich habe irgendwo im Forum folgendes gesehen:
Zitatrepeatsame impliziert do always

Dann würde ich repeatsame weglassen. Weil do always = bei jeder Änderung der Temperatur, und nicht nur 5°C-Stuffenweise

Bzg. DOELSE(), ... abhängig von was er will. Die ganze gewünschte Vorgehensweise (inkl. wenn die Temperatur wieder runterkommt, oder sich zwischen 47 und 42 °C bewegt) ist mir noch nicht ganz klar.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

([Temp_Schlafzi:temperature] >50 ) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)
DOELSEIF
([Temp_Schlafzi:temperature] >45 ) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)
DOELSEIF
([Temp_Schlafzi:temperature] >40 ) (set Torsten_WA send [Temp_Schlafzi:temperature] Celsius im Schrank)
DOELSE


Bei dieser Definition wird jeweils eine Meldung geliefert, wenn die Temperatur ansteigt, beginnend mit >40, dann > 45 und schließlich >50. Umgekehrt bei fallender Temperatur nach >50, >45 und anschließend >40

Dabei brauchen keine weiteren Attribute gesetzt zu werden, da jeder Zweig standardmäßig immer nur einmal  ausgeführt wird (da kein do always).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Danke @Damian.

Jetzt zu meiner Verständnis (so lerne ich langsam, beim Forum lesen):

Die Temperatur ist 37°C und steigt plötzlich auf 52°C. So wird die erste Bedingung wahr => Nachricht.
So lange die wahr bleibt, wird keine andere Bedingung bewertet, richtig ?

Wenn jetzt die Temperatur auf 47°C sinkt, kommt das DOIF auf cmd2 => Nachricht, richtig?

Wenn jetzt die Temperatur wieder auf 53°C steigt, was passiert?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: amenomade am 22 Mai 2017, 18:40:54
Danke @Damian.

Jetzt zu meiner Verständnis (so lerne ich langsam, beim Forum lesen):

Die Temperatur ist 37°C und steigt plötzlich auf 52°C. So wird die erste Bedingung wahr => Nachricht.
So lange die wahr bleibt, wird keine andere Bedingung bewertet, richtig ?

Wenn jetzt die Temperatur auf 47°C sinkt, kommt das DOIF auf cmd2 => Nachricht, richtig?

Wenn jetzt die Temperatur wieder auf 53°C steigt, was passiert?

So ist es und wenn 53 kommt dann gibt es natürlich wieder eine Meldung, da ein neuer Zustand.

Das Ganze würde ich noch jeweils mit wait verzögern, um bei Schwankungen um die jeweiligen Grenzen keine kurz aufeinander folgenden Meldungen zu erhalten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Zitatund wenn 53 kommt dann gibt es natürlich wieder eine Meldung, da ein neuer Zustand.

Ja klar. Aber auf Grund cmd1 oder cmd3?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: amenomade am 22 Mai 2017, 19:25:41
Ja klar. Aber auf Grund cmd1 oder cmd3?

bei 47 bin ich in cmd2 und bei 53 lande ich in cmd1, es ist also ein Zustandswechsel, egal ob von, ob von cmd2 auf cmd1  oder sonst einem Zustand ungleich cmd1.

Genauso wenn du in cmd4 bist, weil Temperatur unter 40 Grad und plötzlich 53 käme, dann hast du ebenso einen Zustandswechsel und du hast eine Ansage bei cmd1, weil cmd4 ungleich cmd1.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

OK danke. Hab schon wieder was gelernt. Ich dachte, es geht von cmd1 auf cmd2 dann cmd3, so lange nach und nach die entspr. Bedingungen wahr werden. Da war ich anscheinend komplet falsch.

Nochmal danke :)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: amenomade am 23 Mai 2017, 00:33:25
Ich dachte, es geht von cmd1 auf cmd2 dann cmd3, so lange nach und nach die entspr. Bedingungen wahr werden.

Das wird der Normalfall sein, aber nur deswegen, weil die Temperatur üblicherweise nicht Sprunghaft ansteigen wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thoffi1978

Hallo an Alle,

ein Tag unterwegs und eine richtige Debatte.
Ich habe mein "Radiokram" in den Schrank umgebaut, sieht besser aus (unsichtbar) als auf den Regalen vorher. Um zu sehen wie warm das wird, habe ich den Sender vom SchalfZi in den Schrank gestellt.

Ich nehme dann jetzt den leeren DOELSE Zweig raus uns setze ein WAIT ein.

Vielen Dank für die regen Ideen.

Vielen Dank
Hoffi

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus