98_MSwitch - Support

Begonnen von Byte09, 25 März 2018, 12:19:58

Vorheriges Thema - Nächstes Thema

Byte09

Hi Bäschdler,

in erster linie triggerst du 'global' , d.H jedes event löst hier das MSwitch device aus , scheinbar ohne jeden Filter.
inaller regel ist das nicht notwendig und ergiebt eine wirklich spürbare systemlast.

kannst du mir bitte nochmal sagen , was du überhaupt erreichen willst , was soll der auslöser sein , um das MSwitch auszulösen .

in jetziger konfiguration löstt ja keines der eingehenden Events wirklich den schaltvorgang aus.

un poste doch bitte die ausgabe von get DEVICE get_support_site mit, nur da kann ich wirklich sehen , was du eigentlich konfiguriert hat.

gruss Byte09


Bäschdler

Hallo Byte09,

ich möchte mit diesem MSwitch den Tag über bei Eintritt von bestimmten Bedingungen (vor Sonnenaufgang, x Minuten nach Sonnenaufgang, Helligkeit über y, Azimuth grösser Z1, Azimuth grösser Z2, x Minuten vor Sonnenuntergang, Helligkeit unter y, ...) einen Dummy "hochzählen" (und damit quasi eine Schrittkette aufbauen). In Abhängigkeit von diesem Dummywert soll dann mit je einem weiteren MSwitch je Rolladen dieser gesteuert werden. In diesem MSwitch wird dann (sinngemäß) drin stehen Rolladen_Ablaufsteuerung > 100 set Rolladen 0, Rolladen_Abaufsteuerung > 200 AND Raumtemperatur > 21 set Rolladen 60, ...

Ach ja, die whitelist hatte ich vergessen und habe sie jetzt eingetragen. Danke für den Hinweis

Welches Attribut muss ich denn setzen, dass die Sortierung dann auswählbar ist ?

hier die DAten von Support_Site:
Zitat
Modulversion: 2.02a_Test
Datenstruktur: V2.00

----- Devicename -----
Rolladen_Ablaufsteuerung

----- Attribute -----
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Include_MSwitchcmds: 0
Attribut MSwitch_Mode: Full
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Help: 1
Attribut MSwitch_Debug: 3
Attribut MSwitch_Include_Devicecmds: 1
Attribut MSwitch_Comments: 1
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Expert: 1

----- Trigger -----
Trigger device:  all_events
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: Rolladen_Aktionen,

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: no_trigger
Trigger cmd4: no_trigger

----- Device Actions -----

Device: FreeCmd-AbsCmd1
cmd1: cmd set Rolladen_Aktionen 10
cmd2: cmd set Rolladen_Aktionen 20
cmd1 condition: [00:00-00:02]
cmd2 condition: [00:02-{ sunrise("-1") }] AND [Rolladen_Aktionen:state] < 20
cmd1 delay: 00:00:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1

Bäschdler

#512
Mir ist eben aufgefallen, dass die whitelist die ich mit "Rolladen_Aktionen, sunrise, sunset, dy_Wetterstation_Stefan_brightness, myLocation" ausfülle irgendwie immer nur "Rolladen_Aktionen, " enthält.

Byte09

#513
Zitat von: Bäschdler am 15 Oktober 2018, 20:22:42
Hallo Byte09,

ich möchte mit diesem MSwitch den Tag über bei Eintritt von bestimmten Bedingungen (vor Sonnenaufgang, x Minuten nach Sonnenaufgang, Helligkeit über y, Azimuth grösser Z1, Azimuth grösser Z2, x Minuten vor Sonnenuntergang, Helligkeit unter y, ...) einen Dummy "hochzählen" (und damit quasi eine Schrittkette aufbauen). In Abhängigkeit von diesem Dummywert soll dann mit je einem weiteren MSwitch je Rolladen dieser gesteuert werden. In diesem MSwitch wird dann (sinngemäß) drin stehen Rolladen_Ablaufsteuerung > 100 set Rolladen 0, Rolladen_Abaufsteuerung > 200 AND Raumtemperatur > 21 set Rolladen 60, ...

Ach ja, die whitelist hatte ich vergessen und habe sie jetzt eingetragen. Danke für den Hinweis

Welches Attribut muss ich denn setzen, dass die Sortierung dann auswählbar ist ?

hier die DAten von Support_Site:

moin,

so wie du das mswitchkonfiguriert hast , kann es nicht funktionieren , unabhängig davon, was in den affected devices und den zugehörigen conditions steht. das mswitch lauscht zwar auf alle events 'global', aber es ist nichts konfiguriert, was einen zweig des mswitches dann wirklich auslösen soll :
----- Trigger -----
Trigger device:  all_events
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: Rolladen_Aktionen,

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: no_trigger
Trigger cmd4: no_trigger


diese Teile cmd1: cmd set Rolladen_Aktionen 10
cmd2: cmd set Rolladen_Aktionen 20
cmd1 condition: [00:00-00:02]
cmd2 condition: [00:02-{ sunrise("-1") }] AND [Rolladen_Aktionen:state] < 20


besagen ledigleich , dass Rolladen_Aktionen auf 10 gesetzt wird, wenn cmd1 ausgelöst ist und es zwischen 00 Uhr und 00 Uhr 02 ist, bzw , dass Rolladen_Aktionen auf 20 gesetzt wird, wenn es cmd2 ausgelöst wird und es zwischen 00 uhr 02 und 7 uhr 14 ( zumindest heute ) ist und Rolladen_Aktionen kleiner als 20 ist . Aber eben die Auslöser für cmd1 und/oder cmd2 sind nicht konfiguriert :

Trigger cmd1: no_trigger
Trigger cmd2: no_trigger


auch das lauschen auf alle events macht nicht wirklich sinn , sondern hier solltest du wirklich nur auf das gerät 'hören', dessen ausgabe wirklich das auslösen des mswitches veranlassen soll.

das triggern auf alle events macht wirklich nur in ganz wenigen ausnahmefällen sinn und dann sollte es über die whitelist oder entsprechendes attribut (MSwitch_trigger_filter) weiter eingegrenzt werden , sonst belastet es das system wirklich völlig unnötig und spürbar. ( in deinem debugfile werden in 4 Minuten über 115 events in irgendeiner form vom modul ausgewertet )

alternativ dazu kannst du das mswitch zu bestimmten zeiten auslösen , um mit vorhandenen readings aus sunset, twilight etc. zu arbeiten , dann brauchst du aber gar kein gerät angeben , das als trigger dient.

es muss ein oder mehrere events eingestellt werden , die den entsprechenden zweig (cmd1-4) auslösen sollen, erst dann kannst du dich damit beschäftigen , was in den eigentlichen cmds dann passieren soll.

ps: in den Hilfefeldern ist doch zu jedem Eingabefeld erklärt, was dort hinein muss - und entsprechendes Format. Weiterhin wäre es ratsam , gerade wenn du global triggerst , das MSwitch in den Safemode zu schalten ( attr MSwitch_Safemode = 1 ) , hier besteht sonst immer die gefahr, das sich bei fehlerhafter konfiguration das MSwitch selber triggert und ruckzuck befindet es sich in einer endlosschleife = fhemabsturz = Fhemneustart erforderlich = doof . Im Safemode kann das nicht passieren , da hier nur eine gewisse anzahl anfragen in einem best. zeitraum zugelassen wird. wird diese überschritten schaltet sich das Mswitch auf disabled = 1 und eine vermutete endlosschleife wird unterbrochen.

Auch hast du das MSwitch in den Expertmodus geschaltet.Attribut MSwitch_Expert: 1 Wenn nicht zwingender Bedarf besteht solltest du das vermeiden. Zum einen sind im Normalmode schon ain grosser Teil an Fehlerquellen ausgeschlossen ( da nicht einstellbar ) und die internen Abläufe sind deutlich abgespeckt - d.H das device benötigt deutlich weniger verarbeitungszeit. Den Expertenmode brauchst du auch im Grunde nur in Ausnahmefällen. Selbst bei mir laufen von weit über 40 MSwitches nur eine Handvoll im Expertenmodus ( bei denen entsprechende Funktionen halt unverzichtbar sind ).

gruss Byte09

Byte09

Zitat von: Bäschdler am 15 Oktober 2018, 20:31:11
Mir ist eben aufgefallen, dass die whitelist die ich mit "Rolladen_Aktionen, sunrise, sunset, dy_Wetterstation_Stefan_brightness, myLocation" ausfülle irgendwie immer nur "Rolladen_Aktionen, " enthält.

trennung der namen nur durch komma. Leerzeichen dürfen nicht enthalten sein !

gruss Byte09

Bäschdler

Hi Byte09,

jetzt habe ich den MSwitch umgebaut. Ich habe jetzt nur noch Zeiten, die brightness und den Rolladen_Aktionen drin.

Im Device: FreeCmd-AbsCmd2 bekomme ich die Anzeige, dass die Bedingung wahr ist und ausgeführt wird, aber der set wird nicht ausgeführt.

Nochmals zur Verdeutlichung was ich haben möchte:
- bei Device: FreeCmd-AbsCmd1 soll der Dummy Rolladen_Aktionen nur abhängig von der Zeit (und bei cmd2 auch vom state des Dummy Rolladen_Aktionen) auf 10 bzw. 20 gesetzt werden.
- bei Device: FreeCmd-AbsCmd2 soll der Dummy Rolladen_Aktionen abhängig von brightness und state des Dummy Rolladen_Aktionen auf 520 bzw. 530 gesetzt werden.

Ich habe mit das so vorgestellt, dass ich je cmd1 / cmd2 Pfad in jedem Device FreeCmd im Prinzip einen vom anderen total unabhängigen Befehl eingeben kann. Das eine Mal nur abhängig von einer Zeit, das andere Mal nur abhängig von einem Reading (in diesem Fall brightness) und wieder ein anderes Mal abhängig von einer Kombination von 2 oder 3 Bedingungen.

Irgendwie stehe ich hier wohl auf dem Schlauch...

Viele Grüsse
Bäschdler



Hier der check condition von Device: FreeCmd-AbsCmd2:
Zitat
eingehender String:
[dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520

If Anweisung Perl:
if (ReadingsVal('dy_Wetterstation_Stefan_brightness', 'state', '00:00:00') < 60 && ReadingsVal('Rolladen_Aktionen', 'state', '00:00:00') < 520){$answer = 'true';} else {$answer = 'false';}

Bedingung ist Wahr und wird ausgeführt

States der geprüften Readings:
Reading: [Rolladen_Aktionen:state] - Inhalt: 102
Reading: [dy_Wetterstation_Stefan_brightness:state] - Inhalt: 0
Das zugehörige MSwich cmd1 ist "set Rolladen_Aktionen 520". Da würde ich jetzt erwarten, dass der Dummy auf 520 gesetzt wird. er bleibt aber dauerhaft auf (manuell von mir irgendwann mal gesetzten) 102.

Und hier der get_support_site
Zitat
Modulversion: 2.02a_Test
Datenstruktur: V2.00

----- Devicename -----
Rolladen_Ablaufsteuerung

----- Attribute -----
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Include_MSwitchcmds: 0
Attribut MSwitch_Mode: Full
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Help: 1
Attribut MSwitch_Debug: 1
Attribut MSwitch_Include_Devicecmds: 1
Attribut MSwitch_Comments: 1
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Expert: 0

----- Trigger -----
Trigger device:  dy_Wetterstation_Stefan_brightness
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: undef

----- Trigger Details -----
Trigger cmd1: *:state: > 60
Trigger cmd2: *:state: < 60
Trigger cmd3: *:state:*
Trigger cmd4: *:state:*

----- Device Actions -----

Device: FreeCmd-AbsCmd1
cmd1: cmd set Rolladen_Aktionen 10
cmd2: cmd set Rolladen_Aktionen 20
cmd1 condition: [00:00-00:02]
cmd2 condition: [00:02-{ sunrise("-1") }] AND [Rolladen_Aktionen:state] < 20
cmd1 delay: 00:00:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd2
cmd1: cmd set Rolladen_Aktionen 520
cmd2: cmd set Rolladen_Aktionen 530
cmd1 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520
cmd2 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd3
cmd1: cmd set Rolladen_Aktionen 540
cmd2: cmd set Rolladen_Aktionen 550
cmd1 condition: [{ sunset(-900,"17:00","21:30") }-{ sunset("-780") }] AND [Rolladen_Aktionen:state] < 540
cmd2 condition: [{ sunset(-900,"17:00","21:30") }-{ sunset("-780") }] AND [Rolladen_Aktionen:state] < 550
cmd1 delay: 00:00:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd4
cmd1: cmd set Rolladen_Aktionen 560
cmd2: cmd set Rolladen_Aktionen 570
cmd1 condition: [{ sunset(0,"17:00","21:30") }-{ sunset("+60") }] AND [Rolladen_Aktionen:state] < 560
cmd2 condition: [{ sunset(0,"17:00","21:30") }-23:59] AND [Rolladen_Aktionen:state] < 570
cmd1 delay: 00:00:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd5
cmd1: cmd set Rolladen_Aktionen 30
cmd2: cmd set Rolladen_Aktionen 40
cmd1 condition: [{ sunrise(0,"05:00","08:30") }-{ sunrise("+60") }] AND [Rolladen_Aktionen:state] < 30
cmd2 condition: [{ sunrise(0,"05:00","08:30") }-{ sunrise("+60") }] AND [Rolladen_Aktionen:state] < 40
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd6
cmd1: cmd set Rolladen_Aktionen 50
cmd2: cmd set Rolladen_Aktionen 60
cmd1 condition: [dy_Wetterstation_Stefan_brightness:state] > 60 AND [Rolladen_Aktionen:state] < 50
cmd2 condition: [dy_Wetterstation_Stefan_brightness:state] > 60 AND [Rolladen_Aktionen:state] < 50
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd7
cmd1: cmd set Rolladen_Aktionen 70
cmd2: cmd set Rolladen_Aktionen 80
cmd1 condition: [{ sunrise(2700,"05:00","08:30") }-{ sunrise("+2820") }] AND [Rolladen_Aktionen:state] < 70
cmd2 condition: [{ sunrise(2700,"05:00","08:30") }-{ sunrise("+2820") }] AND [Rolladen_Aktionen:state] < 70
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd8
cmd1: cmd set Rolladen_Aktionen 110
cmd2: cmd set Rolladen_Aktionen 100
cmd1 condition: [08:17-13:44] AND [Rolladen_Aktionen:state] < 110
cmd2 condition: [08:15-08:17] AND [Rolladen_Aktionen:state] < 100
cmd1 delay: 00:02:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd9
cmd1: cmd set Rolladen_Aktionen 210
cmd2: cmd set Rolladen_Aktionen 200
cmd1 condition: [13:47-13:59] AND  [Rolladen_Aktionen:state] < 210
cmd2 condition: [13:45-13:47] AND [Rolladen_Aktionen:state] < 200
cmd1 delay: 00:02:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd10
cmd1: cmd set Rolladen_Aktionen 250
cmd2: cmd set Rolladen_Aktionen 240
cmd1 condition: [14:02-17:29] AND [Rolladen_Aktionen:state] < 250
cmd2 condition: [14:00-14:02] AND [Rolladen_Aktionen:state] < 240
cmd1 delay: 00:02:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd11
cmd1: cmd set Rolladen_Aktionen 270
cmd2: cmd set Rolladen_Aktionen 260
cmd1 condition: [17:30-{ sunset("-1") }] AND [Rolladen_Aktionen:state] < 270
cmd2 condition: [17:30-17:32] AND [Rolladen_Aktionen:state] < 260
cmd1 delay: 00:02:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: FreeCmd-AbsCmd12
cmd1: cmd set Rolladen_Aktionen 500
cmd2: cmd set Rolladen_Aktionen 510
cmd1 condition: [{ sunset(-2700,"17:00","21:30") }-{ sunset("-2580") }] AND [Rolladen_Aktionen:state] < 500
cmd2 condition: [{ sunset(-2700,"17:00","21:30") }-{ sunset("-2580") }] AND [Rolladen_Aktionen:state] < 510
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Byte09

#516
ok, da liegt einiges im argen .

zum ersten die trigger :
Trigger cmd1: *:state: > 60
Trigger cmd2: *:state: < 60
Trigger cmd3: *:state:*
Trigger cmd4: *:state:*


cmd3 und cmd4 sind ok , d.h diese beiden zweige werden ausgeführt , sobald sich der state des devices ändert - egal welchen wert state annimmt.

cmd1 und cmd2 werde niemals auslösen ( müssen sie aber auch nicht  ) . in den zweigen 1 und 2 schaltet der state des mswitches zusätzlich auf on oder off, wird in deinem fall aber nicht benötigt . Daher dürfen 1 und 2 auch nicht mit dem gleichen string belegt sein , da hier eine klare abgrenzung zwischen on und off vorhanden sein muss.
Auslösen würde es nur dann ,wenn ein event eintrefffen würde, welches wirklich so aussieht "state: < 60" , ankommen wird aber "state:60(59,58,etc) " . Hier wird kein mathematischer "vergleich" durchgeführt, sondern ein reiner vergleich der strings . Lösbar wäre das nur über regex.

aber da du diese zweige eh nicht benötigst , setze 1 und 2 einfach auf 'no_trigger' ( du kanns das ganze mswitch auch in den Notify-Mode setzen - über attribut -, dann sind sie eh nicht mehr aufgeführt und können hier nicht mehr zur verwirrung beitragen).

zu den affected devices:

auch hier gibt es probleme mit einer eindeutigen definition:

angenommen das ankommende event ist 'state:59' , so werden beide zweige ausgefügrt, weil für beide zweige der auslöser 'state:*' ist.

bei dieser definition : (1)
Device: FreeCmd-AbsCmd2
cmd1: cmd set Rolladen_Aktionen 520
cmd2: cmd set Rolladen_Aktionen 530
cmd1 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520
cmd2 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00


werden beide befehle ausgeführt , weil die bedingungen BEIDE zutreffen ,d.h wenn Rolladen_Aktionen:state < 520 ist , wird das endergebniss in jedem fall nach 2 min 530 annehmen .... ( theroretisch, ... weill ja das zweite,dritte,...  affected device ggf. auch greift )

Device: FreeCmd-AbsCmd3
cmd1: cmd set Rolladen_Aktionen 540
cmd2: cmd set Rolladen_Aktionen 550
cmd1 condition: [{ sunset(-900,"17:00","21:30") }-{ sunset("-780") }] AND [Rolladen_Aktionen:state] < 540
cmd2 condition: [{ sunset(-900,"17:00","21:30") }-{ sunset("-780") }] AND [Rolladen_Aktionen:state] < 550


.... dieses erfüllt unter umständein die Bedingung nämlich auch und würde auf in jedem fall auf 550 schalten . 540 können hier nie erreicht werden , da die erste bedingung zutrifff und auf 540 geschaltet würde, aber die zweite trifft ebenso zu und es geht gleich weiter nach 550 .

...... und dann 2 min später schlägt das delay aus dem ersten 'affected zu ' und setzt wieder zurück nach 520 do diese bedingung :cmd2 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520  vor 2 minuten nämlich zutraf !

ich kann die hier gar nicht wirklich helfen. du musst schritt für schrittt logisch durchgehen , was passiert , wenn welches event kommt ( ggf. sogar anhand eines diagrammes )  und dabei nicht vergessen: wenn eine bedingung erfüllt ist , bricht er nicht ab , d.h er testet auch alle anderen 'affected devices' noch und führt diese aus , wenn es passt , es sei denn du gibst explizit an , dass er nach einem befehl abbrechen soll ).

weiterhin wichtig: die befehle werden blockweise ausgeführt ! d.h es wird nicht 'affected_device1' geprüft und ausgeführt , und dann  affected_device 2 etc, sondern es werde erst alle affected devices geprüft und danach der oder die entsprechenden befehle abgesetzt . das ist nicht ganz unwesentlich , da sich eine bedingung somit während der prüfung nicht ändert, auch wenn diese zutrifft und er den befehl ausführen sollte und unter umständen damit die bedingung ändern würde - ich weise daher darauf hin , da sich bei dir ja eine bedingung nach prüfung des ersten devices ändern würde , und im zweiten device dann anders wäre. tut sie aber nicht - sie hat immer den wert, den sie hat , wenn das mswitch auslöst .
( einzige ausnahme ist hier zeitversetztes schalten ( delay ) da kannst du explizit angeben , ob er unmittelbar vor dem schalte nochmals prüfen soll )
gruss Byte09

Bäschdler

Guten Morgen,

danke für die ausführliche Antwort.
Anscheinend müsste ja jetzt das was ich programmiert habe eigentlich wenigstens ein bisschen funktionieren ;-)

Zitat
bei dieser definition : (1)
Code: [Auswählen]

Device: FreeCmd-AbsCmd2
cmd1: cmd set Rolladen_Aktionen 520
cmd2: cmd set Rolladen_Aktionen 530
cmd1 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520
cmd2 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520
cmd1 delay: 00:00:00
cmd2 delay: 00:02:00


werden beide befehle ausgeführt , weil die bedingungen BEIDE zutreffen ,d.h wenn Rolladen_Aktionen:state < 520 ist , wird das endergebniss in jedem fall nach 2 min 530 annehmen .... ( theroretisch, ... weill ja das zweite,dritte,...  affected device ggf. auch greift )
Genau das hatte ich so beabsichtigt, dass beide getriggert werden, das eine (520) für 2 Minuten bleibt und dann das nächste (530) geschaltet wird.

Zitat
Code: [Auswählen]

Device: FreeCmd-AbsCmd3
cmd1: cmd set Rolladen_Aktionen 540
cmd2: cmd set Rolladen_Aktionen 550
cmd1 condition: [{ sunset(-900,"17:00","21:30") }-{ sunset("-780") }] AND [Rolladen_Aktionen:state] < 540
cmd2 condition: [{ sunset(-900,"17:00","21:30") }-{ sunset("-780") }] AND [Rolladen_Aktionen:state] < 550



.... dieses erfüllt unter umständein die Bedingung nämlich auch und würde auf in jedem fall auf 550 schalten . 540 können hier nie erreicht werden , da die erste bedingung zutrifff und auf 540 geschaltet würde, aber die zweite trifft ebenso zu und es geht gleich weiter nach 550 .
Auch das hatte ich so beabsichtigt, denn wenn das nachfolgende "überholt" soll das "höhere" gesetzt werden.

Zitat
...... und dann 2 min später schlägt das delay aus dem ersten 'affected zu ' und setzt wieder zurück nach 520 do diese bedingung :
Code: [Auswählen]

cmd2 condition: [dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520

  vor 2 minuten nämlich zutraf !
Das sollte eigentlich nicht passieren, daher habe ich es (hoffentlich) so eingestellt, dass die condition erst nach 2 Minuten geprüft werden soll und dann verhindert ja der "AND [Rolladen_Aktionen:state] < 520" was wahr werden der Bedigung, da er höher als 520 ist.

Zitat
und dabei nicht vergessen: wenn eine bedingung erfüllt ist , bricht er nicht ab , d.h er testet auch alle anderen 'affected devices' noch und führt diese aus , wenn es passt
Genau so habe ich meine Logik aufgebaut und möchte ja bewusst, dass ein "höherer" Wert gesetzt wird wenn mehrere Dinge gleichzeitig zutreffen. Die weitere Logik die dann den Rolladen steuert hat dann als condition ein "[Rolladen_Aktionen:state] > x".

Zitat
weiterhin wichtig: die befehle werden blockweise ausgeführt ! d.h es wird nicht 'affected_device1' geprüft und ausgeführt , und dann  affected_device 2 etc,
Da ich im Augenblick nur ein affected device habe (den dummy "Rolladen_Aktionen") kann da auch nix passieren.


Jetzt bleibt für mich aber noch immer die Frage offen weshalb bei
Zitat
eingehender String:
[dy_Wetterstation_Stefan_brightness:state] < 60 AND [Rolladen_Aktionen:state] < 520

If Anweisung Perl:
if (ReadingsVal('dy_Wetterstation_Stefan_brightness', 'state', '00:00:00') < 60 && ReadingsVal('Rolladen_Aktionen', 'state', '00:00:00') < 520){$answer = 'true';} else {$answer = 'false';}

Bedingung ist Wahr und wird ausgeführt

States der geprüften Readings:
Reading: [Rolladen_Aktionen:state] - Inhalt: 102
Reading: [dy_Wetterstation_Stefan_brightness:state] - Inhalt: 0
und
Zitat
cmd1 ist "set Rolladen_Aktionen 520"
der Dummy nicht auf 520 gesetzt wird.

Wenn ich es mal schaffen würde, dass der MSwitch hier wenigstens mal überhaupt irgend einen Wert setzen würde dann wäre ich an dem Punkt an dem ich nachschauen könnte was ich falsch gemacht habe aber so tappe ich leider total im dunkeln und weiss nicht was ich ändern muss.


Danke und viele Grüsse
Bäschdler

Byte09

Bitte das Device nochmal auf debug 3 setzen , eine Auslösung veranlassen und den gesamten log hier einstellen . Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk


Bäschdler

Hallo Byte09,

hier das Log
Zitat
Thu Oct 18 10:25:15 2018 Starte Log
Thu Oct 18 10:26:46 2018: -> ----------------------------------------
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event von -> dy_Wetterstation_Stefan_brightness
Thu Oct 18 10:26:46 2018: -> ----------------------------------------
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event  -> dy_Wetterstation_Stefan_brightness state: 199
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: anzahl gefundener Befehle -> 0
Thu Oct 18 10:26:46 2018: -> Rolladen_Ablaufsteuerung: inhalt gefundener Befehle ->
Thu Oct 18 10:29:34 2018: -> ----------------------------------------
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event von -> dy_Wetterstation_Stefan_brightness
Thu Oct 18 10:29:34 2018: -> ----------------------------------------
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event  -> dy_Wetterstation_Stefan_brightness state: 199
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: anzahl gefundener Befehle -> 0
Thu Oct 18 10:29:34 2018: -> Rolladen_Ablaufsteuerung: inhalt gefundener Befehle ->
Thu Oct 18 10:32:07 2018: -> ----------------------------------------
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event von -> dy_Wetterstation_Stefan_brightness
Thu Oct 18 10:32:07 2018: -> ----------------------------------------
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event  -> dy_Wetterstation_Stefan_brightness state: 197
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: anzahl gefundener Befehle -> 0
Thu Oct 18 10:32:07 2018: -> Rolladen_Ablaufsteuerung: inhalt gefundener Befehle ->
Thu Oct 18 10:34:26 2018: -> ----------------------------------------
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event von -> dy_Wetterstation_Stefan_brightness
Thu Oct 18 10:34:26 2018: -> ----------------------------------------
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: eingehendes Event  -> dy_Wetterstation_Stefan_brightness state: 196
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: checktrigger trigger cmd4 ->
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: checktrigger ergebniss -> undef
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: anzahl gefundener Befehle -> 0
Thu Oct 18 10:34:26 2018: -> Rolladen_Ablaufsteuerung: inhalt gefundener Befehle ->
so ging's bis 12:25 weiter - ich habe es uns erspart alles hier rein zu kopieren.

Aktuell müsste der Dummy auf 110 gesetzt werden. Check condition:
Zitat
eingehender String:
[08:17-13:44] AND [Rolladen_Aktionen:state] < 110

If Anweisung Perl:
if ((1516259820 < 1516274820 && 1516274820 < 1516279440) && ReadingsVal('Rolladen_Aktionen', 'state', '00:00:00') < 110){$answer = 'true';} else {$answer = 'false';}

If Anweisung Perl Klarzeiten:
if ((08:17 < 12:27 && 12:27 < 13:44) && ReadingsVal('Rolladen_Aktionen', 'state', '00:00:00') < 110){$answer = 'true';} else {$answer = 'false';}

Bedingung ist Wahr und wird ausgeführt

States der geprüften Readings:
Reading: [Rolladen_Aktionen:state] - Inhalt: 102

Der Teil des FreeCmd's:
Zitat
Device: FreeCmd-AbsCmd8
cmd1: cmd set Rolladen_Aktionen 110
cmd2: cmd set Rolladen_Aktionen 100
cmd1 condition: [08:17-13:44] AND [Rolladen_Aktionen:state] < 110
cmd2 condition: [08:15-08:17] AND [Rolladen_Aktionen:state] < 100
cmd1 delay: 00:02:00
cmd2 delay: 00:00:00
repeats:
repeats delay:
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Viele Grüsse
Bäschdler

Byte09

Ok thx. Ich werde da aber nicht richtig schlau draus ... am Handy schon gar nicht. Würdest du mir nochmal die raw definition oder den config file geben ?

Ich spiele es dann bei mir mal ein ... mit Dummys ... und schaue es mir genau sn heute abend.


Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk


Byte09

hi bäschdler ,

ich habe gerade am laptop erst gesehen , dass du den trigger von 'global' umgestellt hast auf ein einzeldevice .

in diesem Fall sehen die ankommenden Events anders aus und du musst das anpassen, da kein gerätename mitgeliefert wird.

Ändere mal die beiden trigger von
.*:state:.*
nach
state:.*

das ist noch ein ( ätzendes ) überbleibsel aus einer ganz alten version des moduls ( damals noch 98_absent.pm ) und ich habe mich nie getraut das zu ändern, da das im grunde allle bestehenden konfugurationen betreffen würde .

auszug Helpbutton:
ZitatHier können manuell Events zugefügt werden , die in den Auswahllisten verfügbar sein sollen und auf die das Modul reagiert.
Grundsätzlich ist zu unterscheiden , ob das Device im Normal-, oder Globalmode betrieben wird
Im Normalmode bestehen die Events aus 2 Teilen , dem Reading und dem Wert "state:on"
Wenn sich das Device im GLOBAL Mode befindet müssen die Events aus 3 Teilen bestehen , dem Devicename, dem Reading und dem Wert "device:state:on".
Wird hier nur ein "*" angegeben , reagiert der entsprechende Zweig auf alle eingehenden Events.
Weitherhin sind folgende Syntaxmöglichkeiten vorgesehen :
device:state:*, device:*:*, *:state:* , etc.
Der Wert kann mehrere Auswahlmöglichkeiten haben , durch folgende Syntax: "device:state:(on/off)". In diesem Fal reagiert der Zweig sowohl auf den Wert on, als auch auf off.

auszug wiki:
Zitathier besteht die Möglichkeit, unabhängig von der Option, ankommende Events automatisch zu speichern, manuell Events anzulegen, die in den Dropdownliste zur Auswahl angeboten werden, ohne das entsprechendes Event erst vom Device geliefert werden muss.
Es können mehrere Events gleichzeitig eingegeben werden, eine Trennung erfolgt durch " , "
Hier ist zu unterscheiden, ob das gewählte triggernde Device ein einfaches Device ist oder ob der Trigger 'GLOBAL' ist.
Bei triggernden Devices können Events in folgendem Formaten zugefügt werden:

- * - Aktion erfolgt auf alle auftretende Events des entsprechenden Device
- reading:wert (z.b. state:on ) - Aktion erfolgt nur auf das Event "state:on"
- reading:* (z.b. state:* ) - Aktion erfolgt auf die Events "state:(on,off,etc.)
- reading:(wert1/wert2/wert3) (z.b. state:(left/right) - Aktion erfolgt nur auf Events "state:left" oder "state:right" etc.

Falls auf 'GLOBALE' Events getriggert wird, muss das auslösende Device vorangestellt werden:

- * - Aktion erfolgt auf alle auftretende Events des entsprechenden Device
- device:reading:wert (z.b. device:state:on ) - Aktion erfolgt nur auf das Event "device:state:on"
- device:reading:* (z.b. device:state:* ) - Aktion erfolgt auf die Events "device:state:(on,off,etc.)
- device:reading:(wert1/wert2/wert3) (z.b. device:state:(left/right) - Aktion erfolgt nur auf Events "device:state:left" oder "devicestate:right" etc.


zugegeben , das ist nicht wirklich schön - dieser unterschied . ggf. traue ich mich da irgendwann mal ran.

gruss Byte09

Bäschdler

HEUREKA !!!

Ich habe wie du mir geschrieben hast den Trigger geändert und es hat funktioniert. :-)

Der Dummy steht auf 270.


Jetzt kann ich schauen ob der Ablauf wirklich so tut wie ich geplant hatte ;-)


DANKE für die Hilfe !!!!

Byte09

Zitat von: Bäschdler am 18 Oktober 2018, 17:41:23
HEUREKA !!!

Ich habe wie du mir geschrieben hast den Trigger geändert und es hat funktioniert. :-)

Der Dummy steht auf 270.


Jetzt kann ich schauen ob der Ablauf wirklich so tut wie ich geplant hatte ;-)



DANKE für die Hilfe !!!!

ok ,wenn es nachwievor probleme gibt melde dich einfach.

ps: editiere doch bitte den vorherigen beitrag un nimm die raw raus , ich brauche sie dann nicht und sie ist eh irgendwie 'zerrissen'  ;)

gruss Byte09

Byte09

aktualisierte Testversion im GIT vorhanden.

wer mit der Testversion arbeitet sollte diese bitte entsprechend updaten ( siehe post 1 des threads )

gruss Byte09