DOIF führt nur einmal den Befehl aus

Begonnen von goerdi, 29 Januar 2016, 13:58:45

Vorheriges Thema - Nächstes Thema

goerdi

Hallo !

ich habe einen DOIF + DOIFELSE  um meine Heizungsregler auszuschalten (die Tage wars wieder mal warm genug das die Tags reagieren SOLLTEN :) (und das haben sie nicht wie gewünscht)

DOIF ([05:25-23:30] and [Aussensensor:temperature] < 13.0) (set hz.regler.*_clima controlMode auto, set hz.thermostat.*_climate controlMode auto) DOELSEIF ([05:25-23:30] and [Aussensensor:temperature] > 13.3) (set hz.regler.*_clima controlManu off,set hz.thermostat.*_climate controlManu off)

Also um das mal zu erklaeren...
Hier sollte im angegeben Zeitrahmen der Aussensensor ausgewertet werden und entsprechend der Temperatur die Regler auf AUTO oder Manual Off schalten.

Beim initialze führt er diesen Befehl auch aus...
o.g. Befehl wurde zuletzt am 28.01. um 8:32 Uhr ausgeführt zumal er ja zumindest heute morgen um 5:25 ausgeführt werden sollte das es ja kälter als 13 Grad war......

Habe ich da einen Denkfehler ?

Gruss Gerd

kumue

hast du das Attribut "do always" gesetzt ?

attr <DOIF-NAME> do always

turo

Ich habe einen leisen Zweifel, dass "do always" hilft. Außerdem gäbe es dann bei jedem Event vom Außensensor die Schaltbefehle.

Wie sieht denn das Reading Aussensensor:temperature aus? Wirklich numerisch und mit "." als Dezimaltrenner?
Und erzeugt der Aussensensor auch brav seine Trigger (Event Monitor) - da müsste ja  bei jeder Änderung was kommen?
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

goerdi

Hallo !

Jetzt isses drin :)
der Dezimaltrenner ist ein komma (ist der normale HM Aussensensor)
Und im Reading aendert sich die temperatur....


turo

Zitatder Dezimaltrenner ist ein komma (ist der normale HM Aussensensor)
Echt? Das müsste man natürlich umsetzen, bevor der numerische Vergleich in Perl richtig funktioniert. Ich habe zwar keinen "normalen HM Aussensensor", aber mal kurz im WIKI gestöbert und da finde ich 2 Feuchte-/Temperatursensoren, die beide "." als Trenner liefern. Kannst Du vielleicht kurz ein Reading posten - nur zu meiner Beruhigung?

(Leider hilft das nur bei Deinem Problem nicht sofort weiter, denn es war heute morgen < 13.0 Grad - ob mit oder ohne Nachkommastellen.)

Wenn es immer noch nicht geht, dann wäre ein list von dem DOIF und dem Aussensensor hilfreich. (Und ich bin immer noch besorgt, dass mit dem "do always" jetzt die Regler und Thermostate mit unnötigen Schaltbefehlen belästigt werden.)
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

kumue

Der Trigger soll ja der Sensor sein und nicht die Zeit.
Somit würde ich ein "?" vor die Uhrzeit setzen wie hier beschrieben:

http://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger

goerdi

Hi

Hatte mich verschrieben... Trenner ist ein Punkt :)

Gruss Gerd

goerdi

Hi !

OK und dann wird es nur einmal ausgefuehrt wenn die Temperatur erstamlig unter den Wert faellt ?
Oder bei jedem Durchlauf ?

Gruss Gerd

turo

Probier doch den Vorschlag von kumue aus!

Meine Prognose: Mit "do always" bei jedem Event vom Außensensor. Ohne "do always" nur beim Statuswechsel. Aber nicht genau um 05:25 (sondern erst, wenn danach ein Event vom Außensensor kommt.)

(Du hälst uns aber hier etwas knapp mit Detailinfos. Ist das eine militärische Einrichtung oder sonst was geheimes? ;-))
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

goerdi

Hi !

Ich hab jetzt mal das mit dem "?" davor getestet... kann aber erst wieder was dazu sagen wenn die Temperatur steigt.

BTW: Ja klar ne Rakenetnbasis ist das hier nicht :)

BTW2: Ich schalte je nach Aussetemperatur meine Heizkoerper zu und weg, wie es die Therme auch macht bzw. diese sich ausschaltet.. ich hab die Aussenttmperatur beobachtet und die Schwellwerte des Aussensensors angepasst. Ich mach das nur weil ich auf die Schnelle nicht unbedingt im Regelkreis der Therme rumpfuschen will.  Die Therme ist 16 Jahre alt, sprich irgendwann loest sich das Problem von alleine :) sprich es gibt ne neue Therme (oder haöt was anderes)

Gruss Gerd

goerdi

Hi !

So heute Morgen wars dann soweit.... geht nicht :(

Mit der Einstellung oben haette das DOIF das Kommando 1 absetzen muessen (hats aber nicht getan) :(
Kann es sein das dies cmd nicht abgesetzt wird weil er "denkt" er muesste nicht ?
Der State steht weiterhin auf state
   
Device   Aussensensor        2016-02-01 10:02:59
cmd_event     Aussensensor         2016-01-29 17:25:10
cmd_nr    1                                    2016-01-29 17:25:10
e_Aussensensor_temperature        11.2    2016-02-01 10:02:59
state            cmd_1                       2016-01-29 17:25:10
timer_1_c1    02.02.2016 05:25:00       2016-02-01 05:25:00
timer_2_c1    01.02.2016 23:30:00        2016-01-31 23:30:00
timer_3_c2    02.02.2016 05:25:00        2016-02-01 05:25:00
timer_4_c2    01.02.2016 23:30:00        2016-01-31 23:30:00



Gruss Gerd

turo

Na dann mal die Ärmel hochgekrempelt und Gehirn auf Leistung!

Welches DOIF hast Du denn jetzt implementiert? (kumue und ich hatten da ja durchaus konkurrierende Vorschläge ;-).

Und eine Info fehlt auch noch: Was soll eigentlich nachts passieren? Keine Änderung des aktuellen Zustands? (In der letzten Nacht, war es abends um
23:30 < 13.3 Grad und heute morgen um 05:25 auch, also hat sich der Zustand des DOIF nicht geändert und es gab kein neues Kommando.) Ein leeres DOELSE brauchen wir evtl. noch, damit der Zustand nachts auf cmd_3 geht.

Und: Gibt es noch andere DOIFs oder so, die an dem controlMode rumfummeln? (Also eigentlich die Frage: Muss um 05:25 auf jeden Fall der controlMode neu gesetzt werden, weil ihn etwas anderes verstellt hat.)

Spannend wäre auch der Zustand des Moduls _vor_ 05:25 gewesen - wenn Du nicht so früh aufstehen willst, wäre ein Logging mal prima (Code bei Ellert schamlos abgeschaut):
define spuernase notify Aussensensor|<doifname> {Log 1, "Spürnase: $NAME: $EVENT"}
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

goerdi

Hi !

Ja jetzt leuchtet es mir ein, ich habe praktisch den Pedant dazu (heizung nachts), ich muesste also quasi beide in eines reinpacken um sicherzugehen das ich nix verliere...
beim Nacht Pedant hat das ja geklappt weil es nach 23:31 wärmer als 7.x Grad war hat er alle Regler ausgeschaltet.
Ich nagel mal eines fuer den kompletten Zeitraum zusammen und probiers aus.

Gruss Gerd

goerdi

Hi

also so scheints zu funktionieren... oder hat einer noch nen Verbesserungsvorschlag ?
DOIF (([?05:25-23:30] and [Aussensensor:temperature] < 13.0 or [?23:31-05:24] and [Aussensensor:temperature]) < 7.7)
(set hz.regler.*_clima controlMode auto, set hz.thermostat.*_climate controlMode auto)
DOELSEIF (([?05:25-23:30] and [Aussensensor:temperature] > 13.3 or [?23:31-05:24] and [Aussensensor:temperature] > 8.3))
(set hz.regler.*_clima controlManu off,set hz.thermostat.*_climate controlManu off)


Gruss Gerd

turo

Die vorletzte Klammer in der ersten Zeile ist etwas deplaziert: Die kann weg und die allererste auch. In der dritten Zeile könnte man auch auf ein Klammerpaar verzichten.

Ich persönlich würde das noch etwas anders formulieren:
DOIF ([Aussensensor:temperature] < ([?05:25-23:30] ? 13.0 : 7.7))
(set hz.regler.*_clima controlMode auto, set hz.thermostat.*_climate controlMode auto)
DOELSEIF ([Aussensensor:temperature] > ([?05:25-23:30] ? 13.3 : 8.3))
(set hz.regler.*_clima controlManu off,set hz.thermostat.*_climate controlManu off)

Aber das ist "personal taste", weil ich meine, dass man so die Logik (Vergleich mit einem zeitabhängigen Grenzwert) schneller erkennt. Aber Du musst das ja später pflegen, nicht ich ;-).

Eine kleine Sache noch: Jetzt triggert das Ganze wirklich nur nach dem Aussensensor und nicht unbedingt um 05:25. Aber das dürfte nicht stören, weil der Außensensor vermutlich regelmäßig sendet.

Gruss,
turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo