FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Helmi55 am 01 Mai 2017, 17:43:25

Titel: [gelöst-Danke]Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 01 Mai 2017, 17:43:25
Guten Abend.
ich habe bei meiner Poolsteuerung folgende 3 DOIFs im Einsatz.
1) hiermit wird die KernPoolPumpenumwälzung gesteuert - Poolmaster ist ein Dummy (Badebetrieb Sommer-Winter)

define Ti_PoolPumpe DOIF ([11:00-19:00] and [PoolMaster] eq "on") (set PoolPumpe on) DOELSE (set PoolPumpe off)
attr Ti_PoolPumpe do always
attr Ti_PoolPumpe room Poolsteuerung

2) Das Herzstück die Solarsteuerung

define di_Solar1 DOIF ([11:00-19:00] and [PoolMaster] eq "on" and [PoolPumpe] eq "on" and ([SolarDiff]>[Hysterese:state])) (set SolarPumpe on) DOELSE (set SolarPumpe off)
attr di_Solar1 room Poolsteuerung
attr di_Solar1 wait 0:240

und 3) die Solarsteuerung außerhalb der KernZeit

define di_Solar2 DOIF ([PoolMaster] eq "on" and [PoolPumpe] eq "off" and ([SolarDiff]>[Hysterese:state])) (set PoolPumpe on, set SolarPumpe on) DOELSE (set SolarPumpe off, set PoolPumpe off))
attr di_Solar2 room Poolsteuerung
attr di_Solar2 wait 0:300


Jetzt zum Problem: es kann natürlich vorkommen dass außerhalb der Kernzeit die Hysterese um 10:58 aktiv wird, d.h. ungefähr um 11:05
schaltet mir das 3) DOIF die Anlage ab. AUS.....

Nun meine Frage wie kann und soll ich das am schönsten und zweckmäßigsten lösen?
Kann ich im 3. DOIF noch ein DOELSEIF anhängen und sagen um 10:59:30 Set PoolPumpe off, Set SolarPumpe off?
Oder soll ich einfach mit einem at um 10:59:30 beide Pumpen abschalten

Kann das so funktionieren oder ist das Murks und es gibt was eleganteres?

Danke Euch
LG
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 01 Mai 2017, 18:34:09
Ich habe jetzt mal das DOIF2 so abgeändert

([07:30:00-10:59:30] and [PoolMaster] eq "on" and [PoolPumpe] eq "off" and ([SolarDiff]>[Hysterese:state])) (set PoolPumpe on, set SolarPumpe on) DOELSE (set SolarPumpe off, set PoolPumpe off))


Mal sehen wie sich das die nächsten Tage verhält
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 03 Mai 2017, 18:43:45
Irgendwie habe ich einen Denkfehler bei dem Ganzen!
Auch wenn ich im Solar2 DOIF die Zeit bis 10:59:30 begrenzen, habe ich ja immer noch den wait  fehl mit drinnen.
Den brauche ich aber für den Normalbetrieb damit die Pumpen nicht sofort abschalten und eine Nachlaufzeit haben.
Jetzt kann die Hysterese um 10:58 wirksam werden und durch das wait bin ich wieder nach 11 Uhr mit dem ausschalten.
Um 11 Uhr schaltet aber das Ti_PoolPumpe ein und würde aber durch den waitBefehl vom Solar2 z.B. um 11:02 wieder ausgeschaltet werden

Gibts da bitte einen Lösungsansatz - die Sonneneinstrahlung für die Hysterie kann ich ja Gottseidank nicht beeinflussen......

Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Muschelpuster am 03 Mai 2017, 20:47:16
Zitat von: Helmi55 am 01 Mai 2017, 17:43:25Kann ich im 3. DOIF noch ein DOELSEIF anhängen und sagen um 10:59:30 Set PoolPumpe off, Set SolarPumpe off?
Natürlich, da spricht nichts gegen. Es sollten nicht zu viele Bedingungen triggern (mit vorangestelltem '?' deaktivieren)!
Ich versuche so etwas nach Möglichkeit in 1 DOIF zu packen, dann bricht eine neue Situation den WAIT-Timer ab. Macht zwar keinen absolut fixen Wait-Timer, aber das scheint mich ja auch nicht überwichtig. Wenn doch, dann muss die Einschaltzeit in ein Dummy geschrieben werden und dieser Wert beim Ausschalten berücksichtigt werden.

Mal so ein grober Entwurf ohne Gewähr:define di_Pool DOIF
   ([11:00-19:00] and [?PoolMaster] eq "on") (set PoolPumpe on)
DOELSEIF
   ([19:00-10:59] and [?SolarPumpe:state] eq "off") (set PoolPumpe off)
DOELSEIF
   ([?11:00-19:00] and [?PoolMaster] eq "on" and [?PoolPumpe] eq "on" and [SolarDiff]>[Hysterese:state]) (set SolarPumpe on)
DOELSEIF
   ([?19:00-10:59] and [?PoolMaster] eq "on" and [PoolPumpe] eq "off" and [SolarDiff]>[Hysterese:state]) (set PoolPumpe on, set SolarPumpe on)
DOELSEIF
   ([?19:00-10:59] and [?SolarPumpe:state] eq "on" and ([SolarDiff]<[Hysterese:state]) (set SolarPumpe off, set PoolPumpe off)
DOELSEIF
   ([?11:00-19:00] and [?SolarPumpe:state] eq "on" (and ([SolarDiff]<[Hysterese:state]) (set PoolPumpe off)


Ich würde ggf. 2 Hysterese-Werte schaffen (1x aus, 1x ein), dann verdient das Ding auch seinen Namen. Oder im DOIF einen Hysteresewert abziehen oder addieren (je nachdem an welcher Stelle).

zusammengefasste Grüße
Niels
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 04 Mai 2017, 16:03:08
Hallo Niels
vorerst herzlichen Dank dass du dich meiner Sache annimmst.
Schaut wesentlich übersichtlicher aus als mein gebastelt - aber ja es hat ja fast funktioniert.
Wenn ich dich richtig verstanden habe, müsste aber dann in der letzten Zeile der letzte Befehl lauten "Set SolarPumpe off"

Jetzt noch eine Frage dazu, ich könnte doch eigentlich das "Hysterese off" weglassen und auch
ein
([?11:00-19:00] and [?PoolMaster] eq "on" and [?PoolPumpe] eq "on" and ([SolarDiff]>[Hysterese:state]) (set SolarPumpe on-for-timer 300)
setzen.
Dann würde ich die off Schaltungen nicht benötigen und würde auch kein "wait" brauchen.
Ein Wasserdurchlauf benötigt zirka 5 Minuten - ja kann ich auch auf 7 Min setzen?
Müsste so doch auch funktionieren? Oder wird der on-for-timer Befehl gelöscht wenn Hysterese = oder< - NEIN oder?

Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 04 Mai 2017, 17:15:07
Kann dir zwar gerade nicht zur "Hysterese" helfen, aber zwei Anmerkungen:
1. Zur Übersicht solltest du nicht ein Device von verschiedenen DOIFs schalten lassen, welche auf die gleichen Eingaben (Zeit, Sensoren...) reagieren.
2.

define Ti_PoolPumpe DOIF ([11:00-19:00] and [PoolMaster] eq "on") (set PoolPumpe on) DOELSE (set PoolPumpe off)
attr Ti_PoolPumpe do always



define di_Solar1 DOIF ([11:00-19:00] and [PoolMaster] eq "on" and [PoolPumpe] eq "on" and ([SolarDiff]>[Hysterese:state])) (set SolarPumpe on) DOELSE (set SolarPumpe off)
attr di_Solar1 wait 0:240


Da aber PoolPumpe = ([11:00-19:00] and [PoolMaster] eq "on"), kannst du im zweiten DOIF direkt nach ([PoolPumpe] eq "on" and ([SolarDiff]>[Hysterese:state])) fragen.

Und Nils hat wohl zuviele "(", die er los werden muss ;). Zumindest hat er dir 3 untergejubelt, die da nicht hingehören.

OK, doch noch was zur Hysterese, bzw. der Laufzeit:
Wenn du die Startzeit einfach auf [19:00-10:54] reduzierst, bekommst du mit wait 300 zumindest schon mal keine Überschneidungen.
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 04 Mai 2017, 17:24:02
danke Per
das mit Endzeit 10:54 ist logisch und leuchtet mir ein - da habe ich den Wald vor lauter Bäumen anscheinend nicht mehr gesehen
Danke
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Muschelpuster am 05 Mai 2017, 08:45:30
Zitat von: Per am 04 Mai 2017, 17:15:07Und Nils hat wohl zuviele "(", die er los werden muss ;). Zumindest hat er dir 3 untergejubelt, die da nicht hingehören.
Wollte ja nur mal sehen, ob Ihr auch aufpasst  8)
Typisch Copy&Paste  ;)

zusammenkopierte Grüße
Niels
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: pc1246 am 05 Mai 2017, 09:11:17
Zitat von: Per am 04 Mai 2017, 17:15:07
1. Zur Übersicht solltest du nicht ein Device von verschiedenen DOIFs schalten lassen, welche auf die gleichen Eingaben (Zeit, Sensoren...) reagieren.
Hallo
Das oben gesagte kann ich nur unterstreichen! Man sollte einen Aktor immer nur von einem DOIF schalten lassen. Du fummelst Dir sonst nen Wolf und suchst eventuell im falschen DOIF! In der Steuerungstechnik macht man das auch so, da man sonst nicht weiss wer gewinnt!
Gruss Christoph
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 09 Mai 2017, 17:21:47
Hallo und sorry für die späte Rückmeldung (musste nur zuerst Tapezierer, Maler und Tischler aus dem Haus bekommen 8) 8))
Ich habe das jetzt so zusammengefasst und werde es in der Produktion so versuchen umzusetzen:

([11:00-19:00] and [?PoolMaster] eq "on") (set PoolPumpe on)
DOELSEIF
([?11:00-19:00] and [?PoolMaster] eq "on" and [?PoolPumpe] eq "on" and [SolarDiff]>[Hysterese:state]) (set SolarPumpe on)
DOELSEIF
([?11:00-19:00] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off)
DOELSEIF
([?19:00-10:54] and [?PoolMaster] eq "on" and [PoolPumpe] eq "off" and [SolarDiff]>[Hysterese:state]) (set PoolPumpe on, set SolarPumpe on)
DOELSEIF
([?19:00-10:54] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off, set PoolPumpe off)
DOELSEIF
([19:00-10:54] and [?SolarPumpe:state]eq "off") (set PoolPumpe off)


Dann habe ich für die off Befehle folgendes wait eingebaut 0:300:0:300

So sollte es funktionieren oder? Werde mir noch überlegen, wie angeregt, eine Hysterese on und off anzulegen.

Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 09 Mai 2017, 17:43:39
Zitat von: Helmi55 am 09 Mai 2017, 17:21:47Werde mir noch überlegen, wie angeregt, eine Hysterese on und off anzulegen.
Heizsysteme mit viel Wasser (Pool) sind in der Regel träge genug, keine Hysterese zu benötigen. Verwunderlich war eher die Verwendung dieses Begriffes ohne passende Funktion.
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 09 Mai 2017, 18:13:43
Hallo Per
ich meine damit die Schaltdifferenz? Ich kann festlegen ob bei 5, 7 oder 15 Grad Differenz zwischen dem Poolwasser und der Solarmatte die
SolarPumpe geschaltet wird.
Das ist doch die Hysterie oder? Will jetzt nicht OT werden - mir ist nur wichtig dass die Anlage richtig schaltet damit der Pool warm wird  ;D ;D ;D
Liebe Grüße
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 09 Mai 2017, 21:58:52
Zitat von: Helmi55 am 09 Mai 2017, 18:13:43Das ist doch die Hysterie oder?
Nee, die Hysterese ist der Unterschied zwischen Ein- und Ausschaltpunkt. Bsp. Heizung: bei 20°C wird eingeschaltet, bei 22°C wieder aus. Sonst läuft die nur ganz kurz und ineffektiv. Da so ein Pool aber eine recht hohe Trägheit hat (Nachheizen), wirst du es nicht brauchen. Zumindest nicht am Anfang, später vllt. zum Optimieren.
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Damian am 09 Mai 2017, 22:01:27
Zitat von: Per am 09 Mai 2017, 21:58:52
Nee, die Hysterese ist der Unterschied zwischen Ein- und Ausschaltpunkt. Bsp. Heizung: bei 20°C wird eingeschaltet, bei 22°C wieder aus. Sonst läuft die nur ganz kurz und ineffektiv. Da so ein Pool aber eine recht hohe Trägheit hat (Nachheizen), wirst du es nicht brauchen. Zumindest nicht am Anfang, später vllt. zum Optimieren.

und gegen Schwankungen kann man wait einsetzen. Da kann man auf Hysterese fast schon verzichten.
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 09 Mai 2017, 22:08:40
Hallo
Vielleicht habe ich mich falsch ausgedrückt?
Ich habe z.b. 5 Grad eingestellt. D. H. Wenn der Pool 20 hat und am Dach sind es 25 schaltet die Solarpumpe ein und läuft bis am Dach auch wieder 20 sind Plus der wait Zeit (damit ist etwas mehr Zeit)

@Damian. Wie meinst du das bitte mit dem wait

Bin für alle Verbesserungen zu haben. Vielleicht einfacher zu lösen und ich denke zu kompliziert oder unwissend

Danke euch für die Unterstützung

Gruß Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Damian am 09 Mai 2017, 22:23:40
Zitat von: Helmi55 am 09 Mai 2017, 22:08:40
Hallo
Vielleicht habe ich mich falsch ausgedrückt?
Ich habe z.b. 5 Grad eingestellt. D. H. Wenn der Pool 20 hat und am Dach sind es 25 schaltet die Solarpumpe ein und läuft bis am Dach auch wieder 20 sind Plus der wait Zeit (damit ist etwas mehr Zeit)

@Damian. Wie meinst du das bitte mit dem wait

Bin für alle Verbesserungen zu haben. Vielleicht einfacher zu lösen und ich denke zu kompliziert oder unwissend

Danke euch für die Unterstützung

Gruß Helmut

Da musst du dir zunächst die Frage Stellen wozu ist eine Hysterese da.

Sie ist da, um ständiges Hin- und Herschalten zu verhindern. Nun schwankt oft die entnommene Temperatur, wenn du ein wait setzt, dann verhinderst du ein  "vorzeitiges" Schalten und wartest ab, bis sich das Schwanken "stabilisiert" hat.

Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Muschelpuster am 10 Mai 2017, 07:08:01
Zitat von: Helmi55 am 09 Mai 2017, 22:08:40@Damian. Wie meinst du das bitte mit dem wait
Das wait-Attribut hast Du ja in Deinem Ausgangspost auch bereits verwendet. Damian meinte lediglich, dass Du damit auch die Aufgabe der Hysterese (ständiges Hin- und Herschalten) verhindern soll. Wenn Du nun auf eine Bedingung verzögert reagierst, kommt das ja fast auf das Gleiche raus.
Der Begriff Hysterese ist in diesem Kontext einfach verwirrend, weil Du eine Temperaturdifferenz damit beschreibst. Die Hysterese wäre jetzt, wenn Du den Schaltpunkt mit 5° festlegst und die Hysterese mit 2°. Dann wäre z.B. der Einschaltpunkt 7° und der Ausschaltpunkt 5°. Oder 5/3 oder sehr genau 6/4. Wie auch immer, die Hysterese beschreibt in der Regelungstechnik die Differenz zwischen Ein- und Ausschaltpunkt. Viel (zu viel) zu dem Begriff kann man bei Wikipedia lesen: https://de.wikipedia.org/wiki/Hysterese

abwartende Grüße
Niels
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 10 Mai 2017, 07:56:36
Hallo guten Morgen
Angekommen - Danke. Dann werde ich das auf [TempDiff] umbenennen. Dann ist niemand mehr verwirrt
Und ich verwende keine falschen Begriffe    8)
Noch eine letzte Frage zu meinen nun gesetzten wait Befehlen.
Passen die mit 0:300:0:300. damit jeweils der off Befehl verlängert wird (sollte ja auf das 2. und 4. DOELSEIF reagieren) d.h. Die Pumpe dreht nicht sofort nach wieder erreichen der TempDiff ab sondern läuft 5 Min nach
Nochmals Danke für eure Hilfe
Vielleicht kommt die Badesaison heuer doch noch. Heute Nacht waren wir auf 1 Grad.   Brrrrrr
Gruß Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 11 Mai 2017, 10:49:20
Irgendwie bekomm ich das mit dem wait nicht auf die Reihe


([11:00-19:00] and [?PoolMaster] eq "on") (set PoolPumpe on)
DOELSEIF
([?11:00-19:00] and [?PoolMaster] eq "on" and [?PoolPumpe] eq "on" and [SolarDiff]>[Hysterese:state]) (set SolarPumpe on)
DOELSEIF
([?11:00-19:00] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off)
DOELSEIF
([?19:00-10:54] and [?PoolMaster] eq "on" and [PoolPumpe] eq "off" and [SolarDiff]>[Hysterese:state]) (set PoolPumpe on, set SolarPumpe on)
DOELSEIF
([?19:00-10:54] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off, set PoolPumpe off)
DOELSEIF
([19:00-10:54] and [?SolarPumpe:state]eq "off") (set PoolPumpe off)


in diesem Fall muss doch wait 0:300:0:300 den 2ten und 4ten DOELSEIF beeinflussen oder (ware in diesen Fällen


([?11:00-19:00] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off)
und
([?19:00-10:54] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off, set PoolPumpe off)


Ich konnte nur beobachten, dass nach Erreichen der Differenz (sorry hab das Hysterie noch nicht umbenannt!!!)
das EINSCHALTEN der Pumpen verzögert war, nicht aber das Abschalten

Danke nochmals für eure Unterstützung
Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 11 Mai 2017, 11:38:53
Zitat von: Helmi55 am 11 Mai 2017, 10:49:20in diesem Fall muss doch wait 0:300:0:300 den 2ten und 4ten DOELSEIF beeinflussen
Nein, den 1. und 3. Du hast den DOIF-Fall vergessen.
1.: DOIF
2.: 1. DOELSEIF
3.: 2. DOELSEIF
...
n.: n-1. DOELSEIF
n+1: DOELSE
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 11 Mai 2017, 12:40:01
Danke
Werde es sofort umstellen Danke
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Muschelpuster am 11 Mai 2017, 17:13:53
Mehrere, extra geklammerte Befehle in einem DO(ELSE)IF werden im Wait mit Komma getrennt. Hier das Beispiel aus der Commandref:Beispieldefinition bei mehreren DO-Blöcken mit Befehlssequenzen:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden nach dem ersten Befehl verzögert werden
DOELSEIF (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden nach dem ersten Befehl verzögert werden

attr <DOIF-module> wait 1,2:3,0.5


nachgeschlagene Grüße
Niels
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 12 Mai 2017, 09:35:34
Hallo
irgendwie stehe ich mit diesem Monster DOIF auf Kriegsfuß.
Gestern am Abend hat die anlage um 19 Uhr nicht abgeschaltet.
Jetzt habe ich noch das DOELSE am Anfang hinzugefügt.
Jetzt um 9:33 ist die SolarDiff >7 (bei 12 Grad) und die anlage schaltet nicht ein???
Hier nochmals das aktuelle DOIF (ja, noch immer mit Hysterese sorry - das wird, wenn es funktioniert, geändert.
Meine einzelnen DOIFs haben funktioniert??


([11:00-19:00] and [?PoolMaster] eq "on") (set PoolPumpe on) DOELSE (set PoolPumpe off) DOELSEIF ([?11:00-19:00] and [?PoolMaster] eq "on" and [?PoolPumpe] eq "on" and [SolarDiff]>[Hysterese:state]) (set SolarPumpe on) DOELSEIF ([?11:00-19:00] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off) DOELSEIF ([?08:30-10:54] and [?PoolMaster] eq "on" and [PoolPumpe] eq "off" and [SolarDiff]>[Hysterese:state]) (set PoolPumpe on, set SolarPumpe on) DOELSEIF ([?08:30-10:54] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off, set PoolPumpe off) DOELSEIF ([08:30-10:54] and [?SolarPumpe:state]eq "off") (set PoolPumpe off)


Bitte um eure Unterstützung - DANKE
Ein genervter und gestreßter Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: pc1246 am 12 Mai 2017, 11:25:33
Moin
Nach DOELSE ist glaube ich Ende!
Gruss Christoph

Edith: Warum machst Du nicht einfach mal Zeilenumbrueche rein, dann kann man es viel besser lesen!
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: pc1246 am 12 Mai 2017, 11:34:22
Moin
Also, warum meinst Du das die Anlage um 19:00 Ausschalten soll? So wie Dein DOIF aussieht kann das passieren, muss aber nicht!
([11:00-19:00] and [?PoolMaster] eq "on") (set PoolPumpe on)
DOELSEIF ([?11:00-19:00] and [?PoolMaster] eq "on" and [?PoolPumpe] eq "on" and [SolarDiff]>[Hysterese:state]) (set SolarPumpe on)
DOELSEIF ([?11:00-19:00] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off)
DOELSEIF ([?08:30-10:54] and [?PoolMaster] eq "on" and [PoolPumpe] eq "off" and [SolarDiff]>[Hysterese:state]) (set PoolPumpe on, set SolarPumpe on)
DOELSEIF ([?08:30-10:54] and [?SolarPumpe:state] eq "on" and [SolarDiff]<[Hysterese:state]) (set SolarPumpe off, set PoolPumpe off)
DOELSEIF ([08:30-10:54] and [?SolarPumpe:state]eq "off") (set PoolPumpe off)
DOELSE (set PoolPumpe off)

Ich habe Dir das mal umgestellt, dann sieht man es besser! Und mit dem DOELSE schaltest Du jetzt die Pumpe immer aus, wenn keine der anderen Bedingungen erfuellt sind!
Gruss Christoph
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 12 Mai 2017, 11:38:27
Zitat von: Helmi55 am 12 Mai 2017, 09:35:34Jetzt habe ich noch das DOELSE am Anfang hinzugefügt.
1. Warum überhaupt?
2. Kommt DOELSE wie jeder anderen Programmiersprache am Ende (if - elseif - ... - elseif - else) und ist optional. Nur DOIF (=if) ist Pflicht. Und die Reihenfolge.
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: pc1246 am 12 Mai 2017, 11:45:15
Zitat von: Per am 12 Mai 2017, 11:38:27
1. Warum überhaupt?
Weil die Pumpe nicht ausging!
Gruss Christoph
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 12 Mai 2017, 12:28:03
Hallo pc1246 - Danke. Werde das so umsetzen
Hallo Per - ja genau weil die Pumpe nicht abgeschaltet hat und ich das leichtsinnigerweise (ich bin kein Programmierer - habe meine Programmer in der Firma  immer über GUI bearbeitet - leider hab ich das programmieren nie gelernt -Schade) von meinem einen DOIF übernommen habe.
Ja jetzt ist es mir klar - da kam ja auch nix mehr dahinter.
Ich glaub trotzdem dass ich min meinem Alter noch lernfähig bin -dauert halt etwas und muss immer draufgestossen werden

Trotzdem Danke für eure Hilfe
Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: pc1246 am 12 Mai 2017, 13:22:41
Hallo Helmut
Ich habe Dir keine Loesung fuer Dein Problem gegeben! Ich habe lediglich Dein DOIF lesbar gemacht, und das DOELSE ans Ende gestellt.
Deine Probleme sind immer noch vorhanden!
Gruss Christoph
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 12 Mai 2017, 14:32:39
Hab mir nochmal deinen Ausgang angeschaut. Irgendwie ergibt das wenig Sinn.
1. (Poolpumpe und Zeitsteuerung) und 2. (Solarpumpe und Zeitsteuerung) OK, aber 3. macht beides ohne Zeiteinschränkung, klar, dass das "reingrätscht".

Vllt. ist es für den Anfang leichter, du beschäftigst dich erstmal damit, di_Solar2 passende Einschränkungen zu geben (Zeit o.ä.), denn von
Zitat von: Helmi55 am 01 Mai 2017, 17:43:25außerhalb der KernZeit
weiss das DOIF ja nix.
Außerdem bist du von [19:00-10:59] auf [08:30-10:54] umgestiegen. Die 6 Minuten vor 11 ist klar, aber wo ist der Rest hin?
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 12 Mai 2017, 18:49:23
Hallo sorry für die späte Rückmeldung war unterwegs.

So wie in meinem Anfangsthread beschrieben – möchte ich folgendes erreichen
Hat v ergangenes Jahr funktioniert – nur wollte ich es verfeinern.
Sprich = ich hatte das Problem, dass ausserhalb meiner ,,normalen" Pumpenzeit
sich die Solar (je nach Sonnenstärke) dazugeschaltet hat und es einen Konflikt um 11 Uhr gab.
Da habe ich nicht mitgedacht – Problem wurde durch Per mit 10:54 gelöst!!
Dann kam von euch der Vorschlag alles in ein DOIF zu packen...  Gut

@Per ja ich bin auf 8:30-10:54 umgestiegen – weil 8:30 – 19 Uhr meine Hauptzeit ist.
Wobei die Filterpumpe fix von 11-19 Uhr läuft.
Hier nochmals was ich erreichen möchte

PoolPumpe (Filterpumpe) soll fix von 11-19 Uhr laufen
Während dieser Zeit soll sich die Solarpumpe dazuschalten wenn die Differenz zwischen
PoolSensor und Solarsensor größer Hysterese (ja noch immer falscher Name) ist
und wenn die Temperatur wieder unter diese Differenz fällt – plus wait von 300 –
Die Solarpumpe wieder ausschalten. Poolpumpe soll bei 19 uhr weiterlaufen.
Jetzt kann es aber vorkommen, dass Ende Mai bis ca. Ende August schon die Sonne ab 8:30
auf das Garagendach knallt und daher die Solar und dann natürlich auch die
PoolPumpe sich zwischen 8:30 und 10:54 – mit wait 300 – einschalten müssen

Das waren mein TimerDoif und meine Solar1 und 2.

Wie gesagt stehe ich da aber auf Kriegsfuß das in EIN DOIF zu gießen

Danke für eure Unterstützung

Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 12 Mai 2017, 20:40:07
Zitat von: Helmi55 am 12 Mai 2017, 18:49:23Hallo sorry für die späte Rückmeldung
Häh?

Schau dir mal folgende Variante an:
define Ti_PoolPumpe DOIF (([11:00-19:00] or [SolarDiff]>[Hysterese:state]) and [PoolMaster] eq "on")
(set PoolPumpe on)
DOELSE
(set PoolPumpe off)
attr Ti_PoolPumpe do always

define di_Solar1 DOIF ([PoolPumpe] eq "on" and ([SolarDiff]>[Hysterese:state]))
(set SolarPumpe on)
DOELSE
(set SolarPumpe off)

attr di_Solar1 wait 0:240

"Nachteil": du hast nur eine einstellbare Verzögerung statt zwei. Aber ob das relevante Auswirkungen hat, bezweifle ich.
Und ja, es sind zwei statt einem DOIF, aber zumindest nicht mehr drei. Und sie sind überhaupt nicht komplex, also gut zum Verstehen-Lernen.
Um das in ein DOIF zu "pressen", müsstes du viel mehr Fallunterscheidungen reinbringen oder mit Zusatzvariablen arbeiten. Oder noch mehr trixen, was es für dich auch nicht einfacher macht.
Wenn du einen zweiten "Hysterese" ;) Wert einführst, kannst du sogar einen Überhitzungsschutz einbauen:
([PoolMaster] eq "on" or [SolarDiff]>[Hitzeschutztemperatur]
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 14 Mai 2017, 10:53:30
Hallo Per - guten Morgen
also habe das gestern-wie von dir geschrieben - umgesetzt.
Lief den ganzen Tag ohne Probleme. Aber nach 19 Uhr lief der PoolPumpen Schalter amok

2017.05.13 19:01:04 3: CUL_HM set PoolPumpe off
2017.05.13 19:01:43 3: CUL_HM set PoolPumpe off
2017.05.13 19:02:04 3: CUL_HM set PoolPumpe off
2017.05.13 19:02:44 3: CUL_HM set PoolPumpe off
2017.05.13 19:03:04 3: CUL_HM set PoolPumpe off
2017.05.13 19:03:44 3: CUL_HM set PoolPumpe off
2017.05.13 19:04:05 3: CUL_HM set PoolPumpe off
2017.05.13 19:04:45 3: CUL_HM set PoolPumpe off
2017.05.13 19:05:05 3: CUL_HM set PoolPumpe off
2017.05.13 19:05:45 3: CUL_HM set PoolPumpe off
2017.05.13 19:06:06 3: CUL_HM set PoolPumpe off
2017.05.13 19:06:45 3: CUL_HM set PoolPumpe off
2017.05.13 19:07:06 3: CUL_HM set PoolPumpe off
2017.05.13 19:07:46 3: CUL_HM set PoolPumpe off
2017.05.13 19:08:06 3: CUL_HM set PoolPumpe off
2017.05.13 19:08:46 3: CUL_HM set PoolPumpe off
2017.05.13 19:09:07 3: CUL_HM set PoolPumpe off
2017.05.13 19:09:47 3: CUL_HM set PoolPumpe off
2017.05.13 19:10:07 3: CUL_HM set PoolPumpe off
2017.05.13 19:10:47 3: CUL_HM set PoolPumpe off
2017.05.13 19:11:07 3: CUL_HM set PoolPumpe off
2017.05.13 19:11:49 3: CUL_HM set PoolPumpe off
2017.05.13 19:12:07 3: CUL_HM set PoolPumpe off


Als ich es um 22 Uhr bemerkte habe ich alles deaktiviert

Hängt das mit dem do always zusammen?

Zur Zeit laufen wieder meine alten 3

Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 14 Mai 2017, 12:19:17
Zitat von: Helmi55 am 14 Mai 2017, 10:53:30Hängt das mit dem do always zusammen?
Wahrscheinlich. do always brauchst du eigentlich auch nicht.
Schau mal in dein EventLog, ob zur gleichen Zeit SolarDiff gemeldet hat.
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Helmi55 am 15 Mai 2017, 08:53:46
Guten Morgen
ja, ohne do always lief die Anlage perfekt durch.
Ich glaube ich muss meine Denkansätze ändern wenn ich mir deine DOIFs ansehe.
Jetzt noch eine Frage: im Solar1 DOIF ist kein [PoolMaster] vorhanden? Weil doe PoolPumpe nur "on" sein kann wenn der [PoolMaster] on ist?
Außer sie wird händisch geschaltet?
Danke und schönen Tag noch
Gruß
Helmut
Titel: Antw:Wie soll ich das am saubersten lösen
Beitrag von: Per am 15 Mai 2017, 09:04:49
Zitat von: Per am 04 Mai 2017, 17:15:07Da aber PoolPumpe = ([11:00-19:00] and [PoolMaster] eq "on"), kannst du im zweiten DOIF direkt nach ([PoolPumpe] eq "on" and ([SolarDiff]>[Hysterese:state])) fragen.

Wenn du die Poolpumpe manuell übersteuern willst, ohne dass die Solarpumpe anläuft, musst du das entweder abfangen (z.B. mit setstate (https://fhem.de/commandref_DE.html#setstate)) oder mit der kompletten Abfrage doppelt. Oder div. anderen Möglichkeiten...