(Gelöst) Einmaliges Schalten bei Unterschreiten einer Temperatur

Begonnen von Hackstall, 21 August 2020, 13:08:17

Vorheriges Thema - Nächstes Thema

Hackstall

Schade dass die Diskussion so verlaeuft.

Ich denke dem einen oder anderen klar ist was ich vorhabe:

Ich moechte IMMER schalten wenn eine Temperatur unterschritten wird aber
nur EINMAL solange diese Temperatur unterschritten bleibt.
Sollte dann die Temperatur ueberschritten werden und dann wieder
Unterschritten werden moechte ich wieder schalten aber nur einmal.
Ich hoffe dass das irgendwie klar geworden ist.

Danke Andreas

Damian

Zitat von: Hackstall am 21 August 2020, 22:59:48
Schade dass die Diskussion so verlaeuft.

Ich denke dem einen oder anderen klar ist was ich vorhabe:

Ich moechte IMMER schalten wenn eine Temperatur unterschritten wird aber
nur EINMAL solange diese Temperatur unterschritten bleibt.
Sollte dann die Temperatur ueberschritten werden und dann wieder
Unterschritten werden moechte ich wieder schalten aber nur einmal.
Ich hoffe dass das irgendwie klar geworden ist.

Danke Andreas

Dann ist es ein Einzeiler, den ich dir schon bereits verlinkt hatte:

DOIF ([device:temperatur] <20) (set Aktor on)

mehr braucht man dazu nicht. Es reicht eine klare Formulierung, dann spart man sich lange Diskussionen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Der_Tom

Zitat von: Hackstall am 21 August 2020, 22:59:48
Schade dass die Diskussion so verlaeuft.

Ich denke dem einen oder anderen klar ist was ich vorhabe:

Ich moechte IMMER schalten wenn eine Temperatur unterschritten wird aber
nur EINMAL solange diese Temperatur unterschritten bleibt.
Sollte dann die Temperatur ueberschritten werden und dann wieder
Unterschritten werden moechte ich wieder schalten aber nur einmal.
Ich hoffe dass das irgendwie klar geworden ist.

Danke Andreas

ich bin mir nicht wirklich sicher , ob obiges doif wirklich bezweckt was du brauchst - aber egal - gehen wird es sicherlich mit doif.

für das Modul MSwitch gibt es ein entsprechendes template, was nur abgearbeitet werden muss. ( MSwitch ist aber kein FHEM Standartmodul mehr )

Bei Interesse , oder wenn du anderweitig nicht weiterkommst kannst du mich gerne anschreiben .
https://chat.whatsapp.com/IOr3APAd6eh6tVYsHpbDqd

gruss Thomas

Damian

Zitat von: Der_Tom am 22 August 2020, 09:35:52
ich bin mir nicht wirklich sicher , ob obiges doif wirklich bezweckt was du brauchst - aber egal - gehen wird es sicherlich mit doif.

Mit Sicherheit, es schaltet nur einmal, solange die Temperatur unter 20 Grad bleibt - das wurde zuletzt so formuliert.

Als nächstes wird ihm aber auffallen, dass die Temperatur, die um 20 Grad pendelt, zum häufigen Schalten führen wird.

Spätestens dann wird er sich Gedanken über eine Hysterese machen müssen. Bevor dazu die nächste Frage kommt:

DOIF ([device:temperatur] <20) (set Aktor on) DOELSEIF ([device:temperatur] >21)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Hackstall

Hallo Damian, Deine Ratschläge gehen in die falsche Richtung. Wenn Du die Überschrift liest geht es genau um Lösungen die ein einmaliges Schalten erfragen. In meinem ersten Post hatte ich schon nach Ratschlägen bzgl Hysterese etc gefragt. All das was Du in Deinem letzten Post Äußerst hilft wirklich nicht weiter.

Wenn Du helfen willst dann bitte konstruktiv und nicht so pauschal mit Besserwissereien.

Bzgl wiederholtem schalten (wenn die Temp um 20 Grad pendelt) war mir der Hinweis Notify Verzögerung wertvoll.

Wie auch immer ich habe bereits eine funktionierende Lösung aus den anderen Ideen entwickelt und bin hierfür dankbar.

Gruß Andreas

Damian

Zitat von: Hackstall am 22 August 2020, 11:52:55
Hallo Damian, Deine Ratschläge gehen in die falsche Richtung. Wenn Du die Überschrift liest geht es genau um Lösungen die ein einmaliges Schalten erfragen. In meinem ersten Post hatte ich schon nach Ratschlägen bzgl Hysterese etc gefragt. All das was Du in Deinem letzten Post Äußerst hilft wirklich nicht weiter.

Wenn Du helfen willst dann bitte konstruktiv und nicht so pauschal mit Besserwissereien.

Bzgl wiederholtem schalten (wenn die Temp um 20 Grad pendelt) war mir der Hinweis Notify Verzögerung wertvoll.

Wie auch immer ich habe bereits eine funktionierende Lösung aus den anderen Ideen entwickelt und bin hierfür dankbar.

Gruß Andreas

Meine Vorschläge waren alle für einmaliges Schalten, wie du es zuletzt formiert hast. Die sind auch nicht pauschal, sondern konkret, sogar konkreter als deine Angaben zum "Autor". Du darfst nicht ein ergeignisgesteuertes Notify mit einem zustandsbasierten DOIF verwechseln.

Hier noch mal die entscheidende Stelle in der Doku:

ZitatBei der Angabe von zyklisch sendenden Sensoren (Temperatur, Feuchtigkeit, Helligkeit usw.) wie z. B.:

define di_heating DOIF ([sens:temperature] < 20) (set heating on)

ist die Nutzung des Attributes do always nicht sinnvoll, da das entsprechende Kommando hier: "set heating on" jedes mal ausgeführt wird, wenn der Temperatursensor in regelmäßigen Abständen eine Temperatur unter 20 Grad sendet. Ohne do always wird hier dagegen erst wieder "set heating on" ausgeführt, wenn der Zustand des Moduls auf "cmd_2" gewechselt hat, also die Temperatur zwischendurch größer oder gleich 20 Grad war.

Soll bei Nicht-Erfüllung aller Bedingungen ein Zustandswechsel erfolgen, so muss man ein DOELSE am Ende der Definition anhängen. Ausnahme ist eine einzige Bedingung ohne do always, wie im obigen Beispiel, hierbei wird intern ein virtuelles DOELSE angenommen, um bei Nicht-Erfüllung der Bedingung einen Zustandswechsel in cmd_2 zu provozieren, da sonst nur ein einziges Mal geschaltet werden könnte, da das Modul aus dem cmd_1-Zustand nicht mehr herauskäme.

Wenn dir eine Hysterese für ein einmaliges Schalten nach Änderung des Zustands nicht reicht, dann kannst gerne auch Attribute, wie wait oder cmdpause benutzen, um das Schalten weiter zu reduzieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

#21
Damians Vorschlag passt genau 100% zu dem, was Du formuliert hast. Statt an den Modulaktor/autor (;)) zu zweifeln und den wegen unkonstruktiven (eher von dir nicht ganz verstandenen) Lösungen anzumeckern, warum testest Du es nicht einfach?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hackstall

Sorry ich möchte keinen hier in Verlegenheit bringen. Wenn der Ton etwas unscharf war dann bitte ich um Entschuldigung. Ich habe sehr wohl Damian und auch Dich verstanden sehe aber das Problem wenn die Temperatur um die Schaltschwelle toggelt werde ich mehrfach schalten.

Und daran geht nichts vorbei. Das ist ja genau der Sachverhalt den ich von Anfang an erfragt habe. Hier müsste jeder eingestehen dass wir wieder bei Post #1 sind und eigentlich nicht viel gewonnen haben. Das einzige was ich mitgenommen habe und hierauf basiert nun auch meine Lösung ist
der Hinweis "disabledForIntervals" in Kombination mit doif.

Dieser Hinweis war proaktiv und wirft keine neuen Fragen auf, so wie ich es in dem Forum bisher gewohnt war.

Ich werde somit den Thread als gelöst einstufen

Gruss Andreas

amenomade

Zitat von: Hackstall am 22 August 2020, 12:24:29
sehe aber das Problem wenn die Temperatur um die Schaltschwelle toggelt werde ich mehrfach schalten.

Zitat von: Damian am 22 August 2020, 12:04:49
Wenn dir eine Hysterese für ein einmaliges Schalten nach Änderung des Zustands nicht reicht, dann kannst gerne auch Attribute, wie wait oder cmdpause benutzen, um das Schalten weiter zu reduzieren.

Das Problem ist, Du hast immer noch nicht gesagt, ab wann es wieder geschaltet werden darf. Wenn die Temperatur über 25 inzwischen gekommen ist? Erst am nächsten Tag? Erst nächstes Jahr? Nie wieder? Somit kann man weder mit notify noch mit DOIF oder was auch immer eine Lösung vorschlagen.
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

#24
Es kann immer Missverständnisse geben, die dazu führen, dass man an einander vorbei redet.

Vielleicht wird es verständlich, wenn ich deinen ersten Post "laut" für mich lese:
Zitat
Hallo,

ich suche nach einer Lösung und bin mir nicht sicher ob ich hier die Module Threshold oder ein DOIF
geschickt einsetzen kann.

Mein Problem ist folgendermassen:
Ziel: Ich möchte einen Autor genau EINMAL schalten wenn eine Temperatur unterschritten ist.

OK. beim Unterschreiten wird beim DOIF oder THRESHOLD nur einmal geschaltet. Weiß er das? Mit Autor wird er wohl Aktor meinen?

ZitatDer Autor bewirkt einen Anstieg der Temperatur aber nicht sofort sonder erst nach ca 5min.

Wie kann ein Autor/Aktor einen Anstieg der Temperatur bewirken? Der Anstieg der Temperatur kann nur vom Temperatursensor kommen.

ZitatSofern ich nun einen notify auf die Temperatur setze, so wird dieser bei jeder Temperaturänderung unterhalb der Schwelle
getriggert und würde ein erneutes Schalten des Aktors bewirken welches ich vermeiden muss.

Ok, er möchte es offenbar es mit einem notify lösen, aber warum, wenn DOIF ja nur einmal schaltet, aber wahrscheinlich weiß er das nicht, siehe oben. Das Überschreiten der Schaltgrenze hat er noch gar nicht erwähnt. Er hat etwas von Anstieg der Temperatur gesprochen, aber was meinte er damit genau?

ZitatHättet Ihr hier Ideen wie ich das implementieren (am besten in der 99_UTIL implementieren kann.

Danke Andeas
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF