Hauptmenü

Können sich 2 DOIFs beißen ?

Begonnen von visionsurfer, 05 November 2016, 11:58:35

Vorheriges Thema - Nächstes Thema

visionsurfer

Guten Morgen,

ich habe ein DOIF gebaut, welches am Morgen und am Abend meine Raffstores automatisch schließt bzw. öffnet, wenn eine gewisse Helligkeit draußen unterschritten oder überschritten ist.

Das ganze sieht so aus:

define raffstores_automatik DOIF ([06:00-09:00] and [wetterstation_helligkeit]>10) (set raffstores_alle value 25 g4) DOELSEIF ([16:00-19:00] and [wetterstation_helligkeit]<180) (set raffstores_alle value 100 g4)

Funktioniert auch perfekt.

Nun habe ich hin und wieder das Problem das ich am Abend lüften möchte. Ich möchte also erreichen, wenn ich ein Fenster öffne, das entsprechend bei diesem Fenster dann die Raffstores in eine gewisse Position fahren. Zum Beispiel 25% kippen. Wenn ich das Fenster wieder schließe, sollen sie sich wieder komplett schließen.

Dazu würde ich ein zweites DOIF bauen. Grundsätzlich glaube ich auch zu wissen, wie es geht.

Mich interessiert aber nur die Frage, ob sich diese beiden DOIF´s dann beißen, bzw. in die Quere kommen ?

Weil DOIF 1 hat ja die Anweisung, wenn dunkler als XY, dann schließen. Jetzt lass ich durch DOIF2 die Lamellen wieder ein bisschen öffnen und habe die Angst, das dann sofort DOIF 1 greift und sagte: Hey, ich habe doch gesagt Lamellen zu, also zack zu.

Oder würde das nicht passieren, bzw. kann man das verhindern, dass die sich nicht gegenseitig beißen ?

Grüße,
Visionsurfer


CBSnake

Hi,
mit einem and [fenster] eq  "zu"?? als 3. Bedingung müsstest du das abfangen können :-)

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Muschelpuster

Genau, das kann sich in der Tat beißen. Ich fahre meine Rollläden ab einer gewissen Solarleistung in die Verschattungsposition. Aber das darf natürlich auch nur passieren, wenn die Terassentür nicht auf ist und jemand draußen ist. Dann fahre ich nur die Fensterseite und sobald die Terassentür geschlossen ist auch diesen Rollladen. Umgekehrt soll nur der Rollladen hoch fahren, wenn man die Tür öffnet.
War etwas Gefrickel, aber Dank dem genialen DOIF geht es. Wichtig ist dabei das Fragezeichen vor Paramentern:
Zitat von: CommandrefAngaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

ungetriggerte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

visionsurfer

Hi.

O.K. als dritte Bedingung. Das Problem ist aber mein DOIF betrifft die komplette structure. Also mehrere Fenster mit Raffstores. Jetzt öffne ich z.B. nur das Fenster in der Küche. Dann möchte ich natürlich auch nur, dass das Fenster in der Küche in eine andere Position geht. Nicht alle.

Daher wollte ich in jedem Raum ein extra DOIF machen, nur für das jeweilige Fenster.

Aber wie gesagt, es sollte sich nichts in die Quere kommen. Also nicht das DOIF der structure mit den jeweiligen einzelnen DOIF ?

Oder gibt es einen besseren Weg ?
Es wird ja immer geschrieben, so wenig wie möglich DOIF, aber ich sehe keine bessere Möglichkeit.

Grüße,
Visionsurfer

Ellert

Zitat von: visionsurfer am 05 November 2016, 12:38:44
Hi.

O.K. als dritte Bedingung. Das Problem ist aber mein DOIF betrifft die komplette structure. Also mehrere Fenster mit Raffstores. Jetzt öffne ich z.B. nur das Fenster in der Küche. Dann möchte ich natürlich auch nur, dass das Fenster in der Küche in eine andere Position geht. Nicht alle.

Daher wollte ich in jedem Raum ein extra DOIF machen, nur für das jeweilige Fenster.

Aber wie gesagt, es sollte sich nichts in die Quere kommen. Also nicht das DOIF der structure mit den jeweiligen einzelnen DOIF ?

Oder gibt es einen besseren Weg ?
Es wird ja immer geschrieben, so wenig wie möglich DOIF, aber ich sehe keine bessere Möglichkeit.

Grüße,
Visionsurfer
Du könntest die DOIF mit einander verküpfen, z.B. über den Status.
DOIF1: (<Bedingung> and [<DOIF2>] eq "cmd_<x>") (set ...)

visionsurfer

Hi,

hmmm. ok, geht das ?

Wenn ich es richtig verstanden habe gibt es ja immer nur cmd_1 und cmd_2

Im Augenblick befindet sich mein DOIF raffstores_automatik im cmd_1, wenn die sich dann heute Abend wieder schließen, geht der Status ja dann in cmd_2.

Wenn ich nun ein zweites DOIF baue und dort sage, nur wenn DOIF1 im Status cmd_2 ist, kommen die sich dann nicht trotzdem in die Quere ?

Dann kommt mir wieder der Gedanke, welchen ich hier schon mal im Forum besprochen hatte. Es soll ja auch möglich sein, meine Raffstores weiterhin per Hand zu steuern. Also über den Taster an der Wand. Soweit ich das damals richtig verstanden habe, geht das eigentlich mit meinem oben stehenden DOIF (hatte bisher noch  nicht den Bedarf, daher nicht getestet). Wenn es geht, dann müsste ein zweites DOIF auch keine Rolle spielen. Weil das wäre ja so, als wenn ich das Fenster öffne, kurz die Raffstores per Taster etwas kippe und später wieder schließe.

Mir fällt gerade ein, ich glaube das hab ich gestern sogar per Hand gemacht. Da hat das oben stehende DOIF auch nicht sofort mein Raffstore wieder geschlossen. Muss ich heute Abend mal probieren. Wenn ich es per Hand einfach verändern kann, dann kann man auch locker ein 2. DOIF starten oder eine 3. Bedienung ?

Grüße,
Visionsurfer


CBSnake

Hi,

nur fleißig probieren ;-) kann ja nichts kaputt gehen. Wenn du dann schlauer bist, kannste evtl Fehler erstmal über die DOIF Attribute versuchen zu beheben. Oder halt hier wieder fragen :-)

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

visionsurfer

Hi,

ja hab ich getan. Meine Basis für mein DOIF 2 (pro Zimmer) sieht so aus:

define lueften_lounge DOIF ([fensterstatus_lounge] eq "open") (set rollo_lounge value 50 g1) DOELSEIF ([fensterstatus_lounge] eq "closed") (set rollo_lounge value 100 g1)

Damit funktioniert es so wie ich es gerne hätte. Fenster auf, Rolle geht hoch, Fenster zu, Rollo geht wieder runter.

Mein 1. DOIF juckt es nicht. Ich glaube aber auch das die sich nicht in die Quere kommen, weil ja mein DOIF1 überhaupt kein Status von der Position abfragt. Daher müsste es meiner Meinung zu keinem Problem kommen. Als ich mein DOIF 2 gerade probiert habe, hat sich DOIF 1 nicht verändert. Also scheinbar alles gut.

Nun muss ich das neue DOIF nur noch ein bisschen "absichern". Also das es nur schaltet, wenn auch wirklich alles zu und unten ist. Da muss ich also noch eine Abfrage einbauen. Mal sehen.
Aber der Weg stimmt glaube ich. Oder ?

Grüße,
Visionsurfer

CBSnake

Moin,
den einen weg gibt es eh nicht ;-) am Anfang programmierst du über 5 Ecken und nach und nach lernst di effizienter und kompakter zu programmieren
Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

visionsurfer

Hi,

mist ich glaub jetzt hab ich es mir doch verbastelt :)

Ich hab es jetzt noch so umgebaut:

define lueften DOIF ([rollo_kueche:lamellen_get-get] = 100 and [fensterstatus_kueche] eq "open") (set rollo_kueche value 25 g4) DOELSEIF ([fensterstatus_kueche] eq "closed") (set rollo_kueche value 100 g4)

Wenn ich jetzt das Fenster öffne, bewegt sich gar nichts. Der Status vom DOIF bleibt auch weiterhin auf initialized stehen.

Das List von meinem Rollo wo ich das Reading auslesen lassen will, sieht so aus:


Internals:
   DEF        2/3/105:dpt5.001:position_get 2/4/105:dpt5.001:lamellen_get 2/3/5:dpt5.001:position_set 2/4/5:dpt5.001:lamellen_set 2/1/5:dpt1.008:fahren 2/2/5:dpt1.008:kurz
   DEVNAME    rollo_kueche
   IODev      KNX
   KNX_MSGCNT 41
   KNX_RAWMSG C1107w2469ff
   KNX_TIME   2016-11-05 17:32:28
   LASTInputDev KNX
   MSGCNT     41
   NAME       rollo_kueche
   NR         319
   NTFY_ORDER 50-rollo_kueche
   STATE      100 % 100 %
   TYPE       KNX
   Gaddr:
     1          2/3/105
     2          2/4/105
     3          2/3/5
     4          2/4/5
     5          2/1/5
     6          2/2/5
   Gcode:
     1          2369
     2          2469
     3          2305
     4          2405
     5          2105
     6          2205
   Model:
     1          dpt5.001
     2          dpt5.001
     3          dpt5.001
     4          dpt5.001
     5          dpt1.008
     6          dpt1.008
   Readings:
     2016-11-04 18:10:17   fahren-get      down
     2016-11-05 16:57:37   fahren-set      down
     2016-11-02 07:42:03   getG3           up
     2016-11-02 07:42:03   getG5           100 %
     2016-11-05 16:54:12   kurz-get        up
     2016-11-05 12:21:17   kurz-set        down
     2016-11-05 17:32:28   lamellen_get-get 100 %
     2016-11-05 17:32:26   lamellen_set-set 100 %
     2016-11-05 17:32:28   last-sender     1/1/7
     2016-11-02 07:42:03   pause-get       up
     2016-11-02 07:42:03   position-set    100 %
     2016-11-05 16:58:35   position_get-get 100 %
     2016-11-02 07:42:03   setG2           down
     2016-11-02 07:42:03   setG3           down
     2016-11-02 07:42:03   setG4           50 %
     2016-11-05 17:32:28   state           100 % 100 %
     2016-11-02 07:42:03   stop-get        down
   Readingsname:
     1          position_get
     2          lamellen_get
     3          position_set
     4          lamellen_set
     5          fahren
     6          kurz
Attributes:
   IODev      KNX
   eventMap   /value 100% g5:Ab/on g6:Stop/value 0% g5:Auf/value 25% g4:Pos1/value 50% g4:Pos2/value 75% g4:Pos3
   room       Kueche
   stateCmd   {sprintf("%s %s", ReadingsVal($name,"position_get-get",""), ReadingsVal($name,"lamellen_get-get",""))}
   userattr   room_map structexclude
   webCmd     Ab:Stop:Auf:Pos1:Pos2:Pos3


Mache ich das mit dem auslesen vom Reading falsch ? Ich denke da stimmt irgendwas nicht. Aber was ?

Grüße,
Visionsurfer


visionsurfer

Ich hab jetzt noch mal selbst probiert. Bekomme es aber nicht hin.
Keine Ahnung. Muss ich hinter die 100 noch ein prozentzeichen setzen ?

Oder sollte man es grundsätzlich anders machen? Ich will ja nur sicher sein, das Rollladen unten ist.

Grüße
Visionsurfer

Damian

Zitat von: visionsurfer am 05 November 2016, 21:05:24
Ich hab jetzt noch mal selbst probiert. Bekomme es aber nicht hin.
Keine Ahnung. Muss ich hinter die 100 noch ein prozentzeichen setzen ?

Oder sollte man es grundsätzlich anders machen? Ich will ja nur sicher sein, das Rollladen unten ist.

Grüße
Visionsurfer

Beim Vergleich sollte man darauf achten Zahlen mit Zahlen zu vergleichen, Zeichenketten mit Zeichenketten.

100 % ist keine Zahl, sondern eine Zeichenkette (String genannt). Du hast mehrere Möglichkeiten:

[rollo_kueche:lamellen_get-get] eq "100 %"

oder mit d (Zahlen filtern) nur die Hundert aus dem String herausfiltern und dann als Zahl vergleichen z. B.

[rollo_kueche:lamellen_get-get:d] == 100

Die möglichen Vergleichsoperatoren in Perl (alle kannst du beim DOIF benutzen) solltest du dir mal genauer anschauen, wenn du an FHEM länger Spaß haben willst. ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF