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
hast du das Attribut "do always" gesetzt ?
attr <DOIF-NAME> do always
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?
Hallo !
Jetzt isses drin :)
der Dezimaltrenner ist ein komma (ist der normale HM Aussensensor)
Und im Reading aendert sich die temperatur....
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.)
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 (http://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger)
Hi
Hatte mich verschrieben... Trenner ist ein Punkt :)
Gruss Gerd
Hi !
OK und dann wird es nur einmal ausgefuehrt wenn die Temperatur erstamlig unter den Wert faellt ?
Oder bei jedem Durchlauf ?
Gruss Gerd
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? ;-))
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
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
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"}
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
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
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
Zitat([?05:25-23:30] ? 13.0 : 7.7)
Ich finde, das ist eine interessante Idee.
Zitat von: Ellert am 02 Februar 2016, 10:17:03
Ich finde, das ist eine interessante Idee.
ja, es ergeben sich immer wieder neue Möglichkeiten, die ich selbst noch nicht bedacht habe :)
Damian
Hi !
Ich werd dein Anpassungen mal reinmachen... war halt als blutiger Anfänger lt. Commandref zusammengenagelt :)
und ob das Ganze jetzt genau um 5:25 getriggert wird oder erst um 5:27:30 ist mir eigentlich egal.... es sollte halt um den Dreh passieren...
Es ist ja nicht zwingend die Uhrzeit, es kann ja je nach Temperatur Tagsüber auch ausschalten ... aber das werd ich sehn...
Ja der Aussensensor sendet regelmäßig... wird auch ein Plot dazu erstellt...
Gruss Gerd
Ich mag den " ? : " Operator! Etwas ungewohnt am Anfang, aber er erlaubt schön kurze Konstrukte, die auch übersichtlich sind (wenn man es nicht übertreibt).
Gruss,
turo
Hi !
So einfach ist das ja nicht ...... :)
ich habe 2 Verschiedene Zeitrahmen und in jedem 2 Kommandos.... (auto und manuell)
so wie du das geschrieben hast habe ich fuer jedes Kommando nur einen Zeitrahmen...
Gruss Gerd
@turo: den " ? : " Operator kannte ich bisher noch gar nicht und hab jetzt auf Anhieb nix dazu gefunden... Gibt's dafür ne Doku oder sowas?
@i2r: Das ist ein ganz normaler Perl Operator, siehe http://perldoc.perl.org/perlop.html#Conditional-Operator
@goerdi: Also wenn ich nicht total auf dem Schlauch stehe, ist mein Code zu Deinem funktional äquivalent.
Gruss,
turo
ahh verstanden und ich glaube ich werde deine Begeisterung dafür teilen :-)
danke
Hi !
Zitat von: turo am 02 Februar 2016, 14:55:05
@goerdi: Also wenn ich nicht total auf dem Schlauch stehe, ist mein Code zu Deinem funktional äquivalent.
Gruss,
turo
Ich habs mal nachgeprüft (zu Not kann ich dir 2 screenshots machen)..
Zur Funktion:
vom Prinzip habe ich zwei "Befehle"
(1. alle Regler auf auto und 2.l alle Regler manual off)
Befehl 1 soll ausgefuehrt werden wenn die Aussentemperatur zwischen 5:25 und 23:30 unter 13 grad foder zwischen 23:31 und 5:24 unter 7.7 Grad faellt
Befehl 2 soll ausgefuehrt werden wenn die Aussentemperatur zwischen 5:25 und 23:30 über 13.3 grad oder zwischen 23:31 und 5:24 über 8.3 Grad steigt
Gruss Gerd
Zitatvom Prinzip habe ich zwei "Befehle"
(1. alle Regler auf auto und 2.l alle Regler manual off)
Befehl 1 soll ausgefuehrt werden wenn die Aussentemperatur zwischen 5:25 und 23:30 unter 13 grad foder zwischen 23:31 und 5:24 unter 7.7 Grad faellt
Befehl 2 soll ausgefuehrt werden wenn die Aussentemperatur zwischen 5:25 und 23:30 über 13.3 grad oder zwischen 23:31 und 5:24 über 8.3 Grad steigt
Ja, das machen Dein Code und meiner. (Wobei man korrekterweise noch dazwischenfügen muss: "und wenn nicht, dann") Und wo ist jetzt das Problem? (Problem = Abweichung des beobachteten Systemverhaltens vom erwarteten Systemverhalten)
Gruss,
turo
Hi !
Ok ich werde dem mal glauben schenken :)
Aber kannst du mir erklaeren wo dein "script" die zweit Zeitangabe hernimmt ? Wenn ich es in Fhem "einpflege" steht das im Status
timer_1_c1 03.02.2016 05:25:00 2016-02-02 16:20:45
timer_2_c1 02.02.2016 23:30:00 2016-02-02 16:20:45
timer_3_c2 03.02.2016 05:25:00 2016-02-02 16:20:45
timer_4_c2 02.02.2016 23:30:00 2016-02-02 16:20:45
Gruss Gerd
ZitatOk ich werde dem mal glauben schenken :)
Das könnte man schon formal beweisen ;D, aber das habe ich schon ewig nicht mehr gemacht.
Deine 2. Zeitangabe taucht bei mir nicht auf, weil sie die Negation der 1. ist: Wenn es nicht 05:25-23:30 ist,
dann ist es 23:31-05:24.
Da die Zeiten ja nicht triggern, braucht es auch keine timer dazu. Ehrlich gesagt wundert es mich sogar, dass das DOIF in diesem Fall überhaupt Timer aufzieht.
EDIT: Jetzt nicht mehr: Ich habe mal in den Code gespickt: Die Zeiten werden natürlich für den Vergleich ausgerechnet, aber es werden keine Timer gesetzt - das sieht man auch bei einem list unter "Timers:"
Gruss,
turo
Zitat von: turo am 02 Februar 2016, 16:38:22
EDIT: Jetzt nicht mehr: Ich habe mal in den Code gespickt: Die Zeiten werden natürlich für den Vergleich ausgerechnet, aber es werden keine Timer gesetzt - das sieht man auch bei einem list unter "Timers:"
Gut beobachtet ;)
Gruß
Damian