Hauptmenü

DOIF Rolladen

Begonnen von no_Legend, 01 Juni 2015, 15:03:10

Vorheriges Thema - Nächstes Thema

Frank_Huber

ich hab meine Rollo-Steuerung so gelöst:
Ein doif welches einen Dummy füttert. Also jeder Rollo bzw Rollo-Gruppe ist als Reading im Rollo enthalten.
Dieser Dummy wird auf alle FHEM Instanzen gespiegelt.
Dort hört ein weiterer DOIF auf die Änderungen im Dummy (und den lokalen Tastern) und fährt den Rollo.

zentraler DOIF:
defmod DOIF_ROLLO_ALLGEMEIN DOIF ([{twilight("Sonnenstand","sr_civil","05:45","07:00")}])\
(set Rollo eg open) (set Rollo flur_bad_og open) (set Rollo dg open)\
DOELSEIF ([05:46|8]) (set Rollo schlaf open)\
DOELSEIF ([06:00|8]) (set Rollo kinder open)\
DOELSEIF ([08:00|7]) (set Rollo schlaf open) (set Rollo kinder open)\
DOELSEIF ([20:00|01234] or [21:00|56]) (set Rollo kinder closed)\
DOELSEIF ([{twilight("Sonnenstand","ss_astro","20:01","23:00")}]) (set Rollo og closed)\
DOELSEIF ([23:01]) (set Rollo eg closed) (set Rollo dg closed)\
DOELSEIF ([02:00]-[05:44] and [Verbrauch:Aussentemp_avg_day] >= 20 and [Aussen_Temp:temperature] < 20)\
(set Rollo eg position 80) (set Rollo og position 80)
attr DOIF_ROLLO_ALLGEMEIN do always
attr DOIF_ROLLO_ALLGEMEIN group Rollo
attr DOIF_ROLLO_ALLGEMEIN room zentrale Funktionen


Dummy:
defmod Rollo dummy
attr Rollo group Rollo
attr Rollo readingList eg og dg kinder flur_bad_og schlaf nord dach sued west
attr Rollo room zentrale Funktionen
attr Rollo setList eg og dg kinder flur_bad_og schlaf nord dach sued west
attr Rollo stateFormat EG:eg, OG:og, DG:dg, Kinder:kinder, Flur_Bad_OG:flur_bad_og, Schlaf:schlaf, Nord:nord, Dach:dach, Sűd:sued, West:west


lokaler DOIF:
defmod Rollo_Bad_EG DOIF ([GPIO_IN_06:"^on$"] and [?Rollo2_Bad_EG] ne "drive-up") (set Rollo2_Bad_EG open)\
DOELSEIF ([GPIO_IN_07:"^on$"] and [?Rollo2_Bad_EG] ne "drive-down") (set Rollo2_Bad_EG closed)\
DOELSEIF (([GPIO_IN_06:"^on$"] or [GPIO_IN_07:"^on$"]) and [?Rollo2_Bad_EG] =~ "drive-down|drive-up") (set Rollo2_Bad_EG stop)\
DOELSEIF ([Rollo:eg]) (set Rollo2_Bad_EG [Rollo:eg])\
DOELSEIF ([Rollo:west]) (set Rollo2_Bad_EG [Rollo:west])
attr Rollo_Bad_EG checkReadingEvent 1
attr Rollo_Bad_EG cmdpause 1:1:1
attr Rollo_Bad_EG do always
attr Rollo_Bad_EG group Rollo_Bad_EG
attr Rollo_Bad_EG room Rollo,_Bad EG


Wie Du siehst habe ich im zentralen DOIF alle Zeiten entkoppelt so dass niemals zwei Zweige gleichzeitig aktiv werden.
sieht vielleicht etwas komplex aus, läuft aber seit 1,5 Jahren stabil und zuverlässig.
Der PI im KG steuert dadurch drei andere PIs im EG, OG und DG.
Die spiegelung des Dummys mache ich übrigens mit RFHEM.


tweety-rt

Hallo Frank,

das sieht gut aus, aber die Komplexität habe ich gar nicht.
Wenn ich das richtig interpretiere, kann bei dir aber sehr wohl ein DOELSEIF zeitgleich mit dem DOIF zusammenkommen, wenn auch nicht sehr wahrscheinlich.

Ich will ja nicht verschiedene Rollos in eine Regel packen. Ich will einen Rollo zu einer variablen Zeit (ss_indoor) auf oder zu machen. Die Entscheidung soll die Außentemperatur sein.

Frank_Huber



Zitat von: tweety-rt am 16 März 2018, 16:05:14
Hallo Frank,

das sieht gut aus, aber die Komplexität habe ich gar nicht.
Wenn ich das richtig interpretiere, kann bei dir aber sehr wohl ein DOELSEIF zeitgleich mit dem DOIF zusammenkommen, wenn auch nicht sehr wahrscheinlich.

Jetzt wo du es schreibst seh ich es auch. *lol*
Hat früh aber noch nie Probleme gegeben.
Bevor ich den einen auf 20:01 gehoben hab gab es abends immer wieder Probleme.

Dir reicht dann natürlich ein doif.
Dachte nur zum Verständnis ist es so einfacher. ;-)

Mit dem Handy online, daher kurz gefasst...


Per

Zitat von: tweety-rt am 16 März 2018, 12:51:28Kann es ein Problem geben, wenn die beiden Timer die exact gleiche Zeit haben?
Hat jemand sonst eine Idee, wie ich die Aufgabe lösen könnte?
Wenn die restlichen Bedingungen sich ausschließen, können in den beiden Zweigen auch die gleichen Zeiten stehen.
Sonst kann man mit IF arbeiten.
DOIF [von-bis] (IF (Bed1) (Bef1),IF (Bed2) (Bef2))


Oder das neue DOIF-Perl nutzen, aber ob das jetzt schon das Richtige ist ;).