[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert

Begonnen von holle75, 03 April 2017, 17:43:09

Vorheriges Thema - Nächstes Thema

Per

Also mal ohne Zitate:
Die Sub sind Zahlen und durch Tests (nicht Überlegung ;)) ermittelt.
defmod kommt, weil ich den Code aus dem raw-Feld der GUI gezogen habe und mir der eine (oder sind es mehr?) durch die Lappen gegangen ist.
Um nicht jedes Mal [BeregnungStandarddauer]*60 eintragen zu müssen bzw. eigentlich noch ein "wenn auto, dann [BeregnungStandarddauer]*60, sonst 0" in das wait-Attribut eintragen zu müssen, habe ich das in die ohnehin vorhandene Abfrage mit reingebracht. Hatte auch den Vorteil, wenn man testet, schreibt man einfach statt der 60 nur 6 und muss nicht ewig warten.
Und an dritter Stelle past, ist ja das zweite DOELSEIF.

holle75

ok, werd ich auch mal mehr Ermitteln bevor ich versuche zu Überlegen :D ... hat nur gerade Lust auf Kopf bewegen.
Ist nur doof, wenn Ermitteltes beim Nachvollziehen wollen nicht mit dem Überlegten übereinstimmt ;)

Also ich schau dann in 1-2 Wochen.

Ach so, cmdState [$self] würd mich jetzt aber doch noch interessieren was man da bekommt?

Per

Zitat von: holle75 am 19 April 2017, 15:50:37cmdState [$self] würd mich jetzt aber doch noch interessieren was man da bekommt?
Wahrscheinlich nur Unfug, muss
attr BeregnungDOIF_Mapping cmdState [$SELF]|[$SELF]|6*[BeregnungStandarddauer]|0|0
heißen und bedeutet nix weiter, als dass der Status beibehalten wird.
Ist aber nur sicherheitshalber, falls der unwahrscheinliche Fall eintritt, dass zwischen der Abfrage und der Ausführung jemand in der 100 Sekunde einen Regner manuell ein- oder ausschaltet.

holle75


holle75

#34
Hallo Per, hab mir jetzt mal unterwegs ein Testsystem aufgebaut. Jungfräulich.

Wir haben ein Phänomen!

Durchlauf on off auto funktioniert ganz gut.

Beregner einzeln schalten on off (direkt nacheinander) funktioniert auch prima.

und jetzt kommts (und da wo man keinerei Probleme vermutet): Schalte mal einen Beregner auf on und dann noch einen Beregner auf on und dann den ersten auf off...... oder einfach mal queerbeet on und off. Da geht dann nichts mehr.

Im Event Monitor kommt der Event, aber BeregnungDOIF_Mapping ignoriert diesen einfach ?????!

Idee? Ich mein, was gibts bei

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(set [$DEVICE:switch] on) \
DOELSEIF (["Beregner_:off"]) \
(set [$DEVICE:switch] off) \


fehlzuinterpretieren ? :D ... "merkt" sich fhem den $DEVICE ??

neuester raspi
neuestes fhem

Per

Komisch, bei mir gehts. Sogar im "Live-System". Mit und ohne gleichzeitiger Automatik. Aber halt mit Dummies. Mangels echten Beregnern.

1. BeregnungDOIF_Mapping mit do always versehen.
2. BeregnungDOIF_Mapping teilen.
Ersteres fehlte, zweiteres zum Testen.

holle75

noch phänomenaler, weil ich habs ja jetzt eins zu eins mit deinem Code im Testsystem auch ohne Hardware.

mmh, welche DOIF Version hast du?

Meine .... $Id: 98_DOIF.pm 14088 2017-04-23 17:59:06Z Damian $#

und nochmal der Code

define myTwilight Twilight
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14 dummy
define BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13 dummy
define BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18 dummy
define BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17 dummy
define BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15 dummy
define BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16 dummy

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen webCmd auto:on:off
attr Beregner_01_Zitronen readingList talktext,switch
set Beregner_01_Zitronen talktext Beregnung Zitronen
set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben webCmd auto:on:off
attr Beregner_05_CampeggioOben readingList talktext,switch
set Beregner_05_CampeggioOben talktext Beregnung Camping oben
set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten webCmd auto:on:off
attr Beregner_02_CampeggioUnten readingList talktext,switch
set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen webCmd auto:on:off
attr Beregner_03_Blauregen readingList talktext,switch
set Beregner_03_Blauregen talktext Beregnung Blauregen
set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche webCmd auto:on:off
attr Beregner_04_HinterKueche readingList talktext,switch
set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus webCmd auto:on:off
attr Beregner_06_Waschhaus readingList talktext,switch
set Beregner_06_Waschhaus talktext Beregnung Waschhaus
set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDummy_Helper dummy

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(set [$DEVICE:switch] on) \
DOELSEIF (["Beregner_:off"]) \
(set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|6*[BeregnungStandarddauer]|0|0

defmod BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set $SELF cmd_2) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_01_Zitronen) \
(set BeregnungDummy_Helper Beregner_01_Zitronen) \
(set $SELF cmd_3) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set $SELF cmd_4) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_03_Blauregen) \
(set BeregnungDummy_Helper Beregner_03_Blauregen) \
(set $SELF cmd_5) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_04_HinterKueche) \
(set BeregnungDummy_Helper Beregner_04_HinterKueche) \
(set $SELF cmd_6) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_05_CampeggioOben) \
(set BeregnungDummy_Helper Beregner_05_CampeggioOben) \
(set $SELF cmd_7) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus) \
() \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus)

attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0

attr .*Beregnung.* group Beregnung
attr .*BEREGNUNG.* group Beregnung
attr .*Beregner.* group Beregnung
attr .*BEREGNUNG.* room Beregnung
attr .*Beregnung.* room Beregnung
attr .*Beregner.* room Beregnung

holle75

ok, es war das do always ......

wenn man nachdenkt auch logisch :D

teste weiter

holle75

#38
Per, wo du gerade da bist ;)

ich versuche auch noch die ZisternenPumpe sobald irgendein Beregner oder die Automatik läuft an/auszuschalten. Abhängig davon, ob sie manuell an ist.

Im Moment habe ich das hier, aber das will nicht so recht.

define BeregnungDOIF_PumpeCisterna DOIF (([BeregnungDOIF_Mapping:"cmd_1"] or [BeregnungDOIF_Trigger] eq "cmd_1") and [BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off") (set BEREGNUNG_SCHALTER_DUMMY_PUMPE on, set $SELF selbstangeschaltet 1) \
DOELSEIF (([BeregnungDOIF_Mapping:"cmd_2"] or [BeregnungDOIF_Trigger:"cmd_7_3|cmd_8"]) and [?$SELF:selbstangeschaltet] == 1) (set BEREGNUNG_SCHALTER_DUMMY_PUMPE off, set $SELF selbstangeschaltet 0)

attr BeregnungDOIF_PumpeCisterna readingList selbstangeschaltet
attr BeregnungDOIF_PumpeCisterna wait 0:10


finde keine andere Abfragelogik und die cmd´s sind komplex. Vor allem da der state bei set $SELF nicht angepast wird.

Bessere Idee?

Per

Bin etwas in Eile, schau ich mir später an.

Aber schön, dass der Rest geht. Zisterne ist easy, zumal mit den neuen Aggregatsfunktionen. Alternativ ne ReadingsGroup.

Per

Ich glaube, ich hatte deine Anfrage falsch verstanden.
Die Zisternenpumpe soll angeschaltet werden, falls sie aus ist, aber an bleiben, falls sie manuell angeschaltet war. Sonst wieder aus gehen.

holle75

genau .... das DOIF soll unabhängig vom Zustand davor, falls Beregnung, dafür sorgen, dass die Pumpe an ist. Und danach wieder den Zustand von davor herstellen.

Also wenn aus -> für Beregnung an -> wieder aus
Wenn an -> gar nix tun (anlassen)

Per

Na toll, jetzt hat es mir den Text zerschossen  :'(
Also nochmal, aber kürzer:

define BeregnungDOIF_PumpeCisterna DOIF (([#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] != 0)
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSE
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)
attr BeregnungDOIF_PumpeCisterna wait 0:10


Und dazu ein
define BEREGNUNG_SCHALTER_00_Cisterna dummy
mit den üblichen on/off zum manuellen Einschalten.

Dein Beispiel hätte des selbstangeschaltet nicht bedurft, mangels do always hätte es eh nicht anders gekonnt ;).

holle75

Uuuh, da brauch ich jetzt mal wieder ein paar Stunden ..... :D

Per

Ist doch easy: wenn mehr als 0 "BEREGNUNG_SCHALTER_0" an sind, geht auch die Zisternenpumpe an, sonst geht sie mit 10 Sekunden Nachlauf wieder aus.