Hauptmenü

Was ist da falsch?

Begonnen von satprofi, 08 August 2016, 09:34:06

Vorheriges Thema - Nächstes Thema

satprofi

Sollte nicht die erste Bedingung heute zutreffen?


([07:44-17:00] and $mday==8 and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month >10 or $month <3) and [Ladestatus] < 2 and [Ueberschuss:state:d] > 100 and [07:45-19:00] and [Absorbtionsphase] eq "Closed" and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month >10 or $month <3) and [Ladestatus] < 3 and [Ueberschuss:state:d] > 200 and [07:45-18:00] and [Absorbtionsphase] eq "Closed" and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month >10 or $month <3) and [Ladestatus] < 4 and [Ueberschuss:state:d] > 300 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month >10 or $month <3) and [Ladestatus] < 5 and [Ueberschuss:state:d] > 400 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month >10 or $month <3) and [Ladestatus] >= 5 and [Ueberschuss:state:d] > 500 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month <11 and $month >2) and [Ladestatus] < 2 and [Ueberschuss:state:d] > 200 and [07:45-19:00] and [Absorbtionsphase] eq "Closed" and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month <11 and $month >2) and [Ladestatus] < 3 and [Ueberschuss:state:d] > 400 and [07:45-18:00] and [Absorbtionsphase] eq "Closed" and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month <11 and $month >2) and [Ladestatus] < 4 and [Ueberschuss:state:d] > 600 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month <11 and $month >2) and [Ladestatus] < 5 and [Ueberschuss:state:d] > 800 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF (($month <11 and $month >2) and [Ladestatus] >= 5 and [Ueberschuss:state:d] > 1000 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF ([Ueberschuss:state:d] <1 or [Netz_Schuetz_aus] eq "on") (set Batterielader_aus off)



Es schaltet aber cmd11

send from OP3
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

igami

Ich würde ja versuchen zu helfen, aber nur, wenn du ein paar Zeilenumbrüche einbaust. Ist mir so zu unübersichtlich.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

satprofi

Hallo. Habe doch Code gesetzt. Kack tapatalk

send from OP3

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Ellert

#3
2 Zeilenumbrüche sind noch zu wenig, sonst würde ich mir das DOIF auch ansehen.

Du könntest das DOIF mal mitloggen, dann hast Du alle Infos kompakt vorliegen und kannst das Verhalten selbst analysieren und dem Problem auf die Spur kommen.

define LogDOIF DOIF ([<Name des zu analysierenden DOIF>:""] or [<Gerät 1>:"<Reading>:"] or [<Gerät 2>:"<Reading>:"] ...)
   ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
attr LogDOIF do always


automatisierer

cmd1 triggert um 7.44, die anderen um 7.45

Wenn du die Zeiten alle auf 7.45 setzt, dann wird das erste zutreffende CMD ausgeführt.

So wird erst um 7.44 das cmd1 getriggert und wenn wahr ausgeführt - und um 7.45 die ganzen DOELSEIF Zweige und der erste der wahr wird, wird ausgeführt.

satprofi

Hallo.
Sollte nicht der 8. eines Monates Vorrang haben? Oder muss ich den Rest am 8. verbieten?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

automatisierer

wieso hat der 8.Tag Vorrang? Hat der liebe Gott da das DOIF erschaffen?

Nix verbieten, nur alle Timer auf 7.45 stellen, dann wird das erste passende CMD ausgeführt und dann bleibts auch dabei. So wie du es aktuell hast, wird eine Minute nachdem CMD1 wahr geworden ist, also um 7.45 CMD2-CMD123 überprüft und davon dann das erst zutreffende CMD ausgeführt, auch wenn CMD1 in der Zeit noch wahr ist.

igami

Ich war mal so frei... jetzt kann man wenigstens was erkennen.

([07:44-17:00] and
$mday==8 and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month >10 or
  $month <3
) and
[Ladestatus] < 2 and
[Ueberschuss:state:d] > 100 and
[07:45-19:00] and
[Absorbtionsphase] eq "Closed" and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month >10 or
  $month <3
) and
[Ladestatus] < 3 and
[Ueberschuss:state:d] > 200 and
[07:45-18:00] and
[Absorbtionsphase] eq "Closed" and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month >10 or
  $month <3
) and
[Ladestatus] < 4 and
[Ueberschuss:state:d] > 300 and
[07:45-18:00] and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month >10 or
  $month <3
) and
[Ladestatus] < 5 and
[Ueberschuss:state:d] > 400 and
[07:45-18:00] and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month >10 or
  $month <3
) and
[Ladestatus] >= 5 and
[Ueberschuss:state:d] > 500 and
[07:45-18:00] and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month <11 and
  $month >2
) and
[Ladestatus] < 2 and
[Ueberschuss:state:d] > 200 and
[07:45-19:00] and
[Absorbtionsphase] eq "Closed" and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month <11 and
  $month >2
) and
[Ladestatus] < 3 and
[Ueberschuss:state:d] > 400 and
[07:45-18:00] and
[Absorbtionsphase] eq "Closed" and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month <11 and
  $month >2
) and
[Ladestatus] < 4 and
[Ueberschuss:state:d] > 600 and
[07:45-18:00] and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month <11 and
  $month >2
) and
[Ladestatus] < 5 and
[Ueberschuss:state:d] > 800 and
[07:45-18:00] and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
(($month <11 and
  $month >2
) and
[Ladestatus] >= 5 and
[Ueberschuss:state:d] > 1000 and
[07:45-18:00] and
[Netz_Schuetz_aus] eq "off"
)(
  set Batterielader_aus off
)
DOELSEIF
([Ueberschuss:state:d] <1 or
[Netz_Schuetz_aus] eq "on"
)

Ich würde versuchen alle Bedingungen zusammen zu fassen, sodass du nur cmd1 und cmd2 hast.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

satprofi

Ok, verstanden. Danke.
ich war der Meinung das perl von oben nach unten abfragt, und was zuerst zutrifft, sticht.

Alles in nur 2 cmd bedeutet das ich mit or arbeiten muss.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

satprofi

So, habe es einmal gekürzt.
mal sehen obs passt.


([07:45-17:00] and $mday==9 and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
DOELSEIF ((($month >10 or $month <3) and $mday!=9 and [07:45-17:00] and [Netz_Schuetz_aus] eq "off") and ([Ladestatus] < 2 and [Ueberschuss:state:d] > 100 and [Absorbtionsphase] eq "Closed") or ([Ladestatus] < 3 and [Ueberschuss:state:d] > 200 and [Absorbtionsphase] eq "Closed") or ([Ladestatus] < 4 and [Ueberschuss:state:d] > 300) or ([Ladestatus] < 5 and [Ueberschuss:state:d] > 400) or ([Ladestatus] >= 5 and [Ueberschuss:state:d] > 500)) (set Batterielader_aus off)
DOELSEIF ((($month <11 and $month >2) and $mday!=9 and [07:45-18:00] and [Netz_Schuetz_aus] eq "off") and ([Ladestatus] < 2 and [Ueberschuss:state:d] > 200 and [Absorbtionsphase] eq "Closed") or ([Ladestatus] < 3 and [Ueberschuss:state:d] > 400 and [Absorbtionsphase] eq "Closed") or ([Ladestatus] < 4 and [Ueberschuss:state:d] > 600) or ([Ladestatus] < 5 and [Ueberschuss:state:d] > 800) or ([Ladestatus] >= 5 and [Ueberschuss:state:d] > 1000)) (set Batterielader_aus off)
DOELSEIF ([Ueberschuss:state:d] <1 or [Netz_Schuetz_aus] eq "on") (set Batterielader_aus on)
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

satprofi

Verstehe ich nicht. Trotz 9. Des Monats wird cmd2 ausgeführt.
Why?

send from OP3

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

automatisierer

ist noch was unübersichtlich mit den vielen bedingungen. Aber ich sage mal, dass du das $mday mit den klammern und einem 'or' ausgehebelt hast

satprofi

Ok, vielleicht klappts so:

(([07:45-17:00] and $mday==10) and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

satprofi

Zitat von: automatisierer am 08 August 2016, 14:38:47
wieso hat der 8.Tag Vorrang? Hat der liebe Gott da das DOIF erschaffen?

Nix verbieten, nur alle Timer auf 7.45 stellen, dann wird das erste passende CMD ausgeführt und dann bleibts auch dabei. So wie du es aktuell hast, wird eine Minute nachdem CMD1 wahr geworden ist, also um 7.45 CMD2-CMD123 überprüft und davon dann das erst zutreffende CMD ausgeführt, auch wenn CMD1 in der Zeit noch wahr ist.

Hallo.
vestehe ich nicht ganz. Wenn ich explizit den 8. eines Monats ausklammere, kann doch der zeitpunkt egal sein? Der dürfte doch später , also um 7:45 gar nicht zum zug kommen?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

automatisierer

#14
Zitat von: satprofi am 09 August 2016, 18:23:46
Wenn ich explizit den 8. eines Monats ausklammere, kann doch der zeitpunkt egal sein? Der dürfte doch später , also um 7:45 gar nicht zum zug kommen?
richtig, das geht - aber den hattest du ja durch ein or gekillt.

und das hatte nix damit zu tun:
(([07:45-17:00] and $mday==10) and [Netz_Schuetz_aus] eq "off") (set Batterielader_aus off)

sondern damit:

(
(($month >10 or $month <3) and $mday!=9 and [07:45-17:00] and [Netz_Schuetz_aus] eq "off")
and
([Ladestatus] < 2 and [Ueberschuss:state:d] > 100 and [Absorbtionsphase] eq "Closed")
or
([Ladestatus] < 3 and [Ueberschuss:state:d] > 200 and [Absorbtionsphase] eq "Closed")
or
([Ladestatus] < 4 and [Ueberschuss:state:d] > 300)
or
([Ladestatus] < 5 and [Ueberschuss:state:d] > 400)
or
([Ladestatus] >= 5 and [Ueberschuss:state:d] > 500)
)
(set Batterielader_aus off)


was übersetzt bedeutet, wahr wenn:


(($month >10 or $month <3) and $mday!=9 and [07:45-17:00] and [Netz_Schuetz_aus] eq "off")
and
([Ladestatus] < 2 and [Ueberschuss:state:d] > 100 and [Absorbtionsphase] eq "Closed")


oder


([Ladestatus] < 3 and [Ueberschuss:state:d] > 200 and [Absorbtionsphase] eq "Closed")


oder


([Ladestatus] < 4 and [Ueberschuss:state:d] > 300)


oder


([Ladestatus] < 5 and [Ueberschuss:state:d] > 400)


oder


([Ladestatus] >= 5 and [Ueberschuss:state:d] > 500)


somit wird dein '$mday!=9' ausgehebelt, weil es durch deine Klammersetzung und das or ausreicht, wenn z.B. '[Ladestatus] < 3 and [Ueberschuss:state:d] > 200 and [Absorbtionsphase] eq "Closed"' wahr wird um den Zweig auszulösen. Da brauchts das '$mday...' dann nicht mehr für.

Wenn innerhalb der von dir angegebenen Zeitfenstern eine der Bedingungen in den anderen Zweigen triggert, dann kann dadurch natürlich auch ein anderer Zweig wahr werden.


Ich habe keinen Plan was du genau mit deinem DOIF erreichen willst. Vielleicht kannst du das mal mit ein paar Worten erklären, dann kann man dir auch evtl. sagen wie es besser funktioniert.