Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Antworten
RaHe67
Beiträge: 23
Registriert: 19.03.2017, 17:18

Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von RaHe67 » 05.08.2018, 12:38

Hallo,

bei mir zieht sich ein Problem mit der Triggerung von Rolladen schon eine ganze Weile durch.
Ich hattte das schon mal vor längerer Zeit versucht zu lösen (bzw. auszudiskutieren :-) siehe hier

viewtopic.php?f=26&t=41062

War damals aber zu keiner Lösung gekommen und hatte auf Updates bzw. auf Hinweise anderer User gehofft (habe immer fleissig mitgelesen).
Wie dem auch sei, dass Problem besteht immer noch und ich wage nochmal einen neuen Anlauf rauszufinden ob ich noch ein Verständnisproblem habe.

Momentaner Stand, mein Programm wird täglich zu genau 2 Zeitpunkten getriggert:

Heute z.B.
Um 5:24 Uhr (Sonst, Getriggert von "Minuten_vor_SA > 30.00 Minunten") und um 7:03 Uhr (Wenn-Dann, getriggert von Tageszeit_hh.mm größter als 7:00 ) (ermittelt durch Schreiben von Systemvariablen im Wenn-Dann u. Sonst-Zweig.

Erwartet hätte ich aber noch eine zusätzliche Triggerung um kurz nach 6:00 (aus der Tageszeit_hh::mm > 6:00 Bedingung).

Alle beteiligten Systemvariablen arbeiten wie erwartet. Ausser dem Astro-Script (alle 3 Minuten getaktet) und diesem Jalousie Programm laufen keine weiteren Programme - ich denke das system sollte nicht hoch ausgelastet sein.
Die Variable SA_TRIGGERED ist dazu da, mehrfachaufrufe (Klicken des Relais) zu unterdrücken. Die Variable wird um Mitternacht zurückgesetzt.
Die Scripte im Dann und Sonst Zweig schreiben nur Zeitstempel damit ich erkennen kann, wann sie aufgerufen wurden.
Achtung: die Logik Jalousie Rauf/Runter ist aufgrund eines Verdrahtungsfehlers bei mir gedreht!

Wo ist der Fehler? Wird nur eine Triggerbedingung für Tageszeit_hh.mm intern gespeichert anstatt 2 für 2 verschiedenen Bedingungen? Sprich jedes Programm kann nur eine Triggerbedingung pro Systemvariable speichern (die erste)?

Oder bin ich gedanklich immer noch völlig auf dem falschen Dampfer?

Gruß Ralf

Raspberry Pi 3 Software Version 2.35.16.20180708
Dateianhänge
Programm.PNG
RaspberryMatic 3.63.8.20220330, Pi 3

Xel66
Beiträge: 14086
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von Xel66 » 05.08.2018, 22:10

RaHe67 hat geschrieben:
05.08.2018, 12:38
Alle beteiligten Systemvariablen arbeiten wie erwartet.
Wenn alle Systemvariablen wie erwartet arbeiten (würden), dann sollte das auch laufen. Du hältst, wie im anderen Thread schon angemerkt an diesen Hilfsworkarounds von in Dezimalzahlen umgewandelter Uhrzeiten fest, die auch noch zusätzlich im Takt des Scriptlaufes getriggert werden und deren Prüfung den Großteil des Tages ein "Wahr" ergeben (17 bzw. 18 Stunden) , baust eine Systemvariable ein, um die Auswirkungen dieser Benutzung zu begrenzen und wunderst Dich, dass es nicht so funktioniert, wie vorgesehen.

Würdest Du die für diesen Zweck vorgesehenen und vielfach erprobten Zeitmodule zur Definition von Schaltzeiten und Zeitbereichen benutzen, würde es wahrscheinlich auch funktionieren (das kollidiert auch nicht mit der Verwendung des Sonnenstandsscripts). Diese triggern zum programmierten Zeitpunkt bzw. zum Anfang und zum Ende eines programmierten Zeitbereiches die Prüfung der Bedingungen eines Programms. Somit entfiele schon mal das durch die Aktualisierung dieser Pseudozeiten verursachte Klicken. Für die vorgezogene Sonnenaufgangszeit könnte man auch eine logische Variable anlegen und diese per Programm bei Änderung des Zustandes umsteuern. Dann wäre das Klicken ganz beseitigt, da die Prüfung der Variablen maximal zu zwei Zeitpunkten ein "Wahr" ergibt und das dazugehörige "Dann" ausgeführt wird. Dieser Rat wurde Dir IRC aber schon im anderen Thread gegeben. Es hat sich nichts an der grundsätzlichen Ausgangslage geändert. Warum sollte dieser Thread dann erfolgreicher sein?

Wenn in einem Programm "bei Änderung" ausgewählt ist, es sich aber wie "bei Aktualisierung" verhält (zyklisches Klicken), dann hilft meist ein Neuanlegen (nicht bestehendes als neues Programm abspeichern) des Programms und Löschen des mit dem Fehlverhalten. Werden Programme häufig editiert, zeigt sich ab und zu dieses Verhalten.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
JRiemann
Beiträge: 3903
Registriert: 12.11.2015, 21:05
Wohnort: Aurich
Danksagung erhalten: 3 Mal

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von JRiemann » 06.08.2018, 08:27

Grundsätzlich müsste das Programm 4x getriggert werden (6 Uhr, 7 Uhr, betreten des Bereichs kleiner 30 SA, verlassen des Bereichs kleiner 30 SA).
Erfüllt sein kann aktuell höchstens der 1 Block. Sonnenaufgang ist bei mir aktuell um 5:58 Uhr, damit kann vor SA und später als 6 Uhr nicht erfüllt sein.
Viele Grüße!
Jörg

RaHe67
Beiträge: 23
Registriert: 19.03.2017, 17:18

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von RaHe67 » 06.08.2018, 09:53

Besten Dank für die Antworten:

@Xel66
Xel66 hat geschrieben:
05.08.2018, 22:10
Würdest Du die für diesen Zweck vorgesehenen und vielfach erprobten Zeitmodule zur Definition von Schaltzeiten und Zeitbereichen benutzen, würde es wahrscheinlich auch funktionieren (das kollidiert auch nicht mit der Verwendung des Sonnenstandsscripts).
Ja stimmt, das hatte ich tatsächlich etwas aus den Augen verloren. Ich bin da in der Tat etwas engstirnig. Ich stimme ja sogar zu, dass die vorhandenen Lösung ungünstig (aber nicht falsch!) ist. Der Punkt ist nur einfach ich implementiere nur ungern alternative Lösungen, wenn ich das eigentliche Problem weder eingegrenzt noch verstanden habe (darum ging es mir auch im alten Post, wohl eine Berufskrankheit :? ).
Xel66 hat geschrieben:
05.08.2018, 22:10
Wenn alle Systemvariablen wie erwartet arbeiten (würden), dann sollte das auch laufen.
Ich schaue mir die Systemvariablen ja schon eine Weile an 8-). Dort kann ich beim besten Willen kein fehlerhaftes Verhalten erkennen.
Bitte nicht falsch verstehen, aber ich habe bis jetzt nur Aussagen gehört, dass es laufen sollte oder dass niemand sonst ein vergleichbares Problem hat. Das weisst nur noch mehr auf ein Verständnisproblem meinerseits hin - welches ich gerne gelöst hätte.
Xel66 hat geschrieben:
05.08.2018, 22:10
baust eine Systemvariable ein, um die Auswirkungen dieser Benutzung zu begrenzen und wunderst Dich, dass es nicht so funktioniert, wie vorgesehen.
Ich wundere ich mich nach wir vor - da ich den Fehler bzw. Deinen Hinweis noch nicht versanden habe. Die Systemvariable SA_Triggered ist im wesentlichen hineingekommen, da die Triggerung "bei Änderung" nicht zuverlässig funktioniert hat. Deshalb habe ich das Script eine Zeitlang "bei Aktualisierung" betrieben. Ich habe sie beibehalten, weil ich es nicht für eine schlechte Idee halte eine Mehrfachausführung zu verriegeln, auch wenn sie in diesem konkreten Fall vielleicht nicht auftreten kann.
Xel66 hat geschrieben:
05.08.2018, 22:10
Wenn in einem Programm "bei Änderung" ausgewählt ist, es sich aber wie "bei Aktualisierung" verhält (zyklisches Klicken), dann hilft meist ein Neuanlegen (nicht bestehendes als neues Programm abspeichern) des Programms und Löschen des mit dem Fehlverhalten.
Habe ich schon mehrfach getan, kann ich eigentlich auch ausschliessen, da zu wenige Trigger kommen und nicht zu viele.

@JRiemann
JRiemann hat geschrieben:
06.08.2018, 08:27
Grundsätzlich müsste das Programm 4x getriggert werden
JRiemann hat geschrieben:
06.08.2018, 08:27
Erfüllt sein kann aktuell höchstens der 1 Block. Sonnenaufgang ist bei mir aktuell um 5:58 Uhr, damit kann vor SA und später als 6 Uhr nicht erfüllt sein.
Um kurz nach sechs sollte m.M. nach eigentlich der 2 Block erfüllt sein - nicht der 1te. Nach dem Sonnenaufgang wird Minuten_vor_SA negativ ==> d.h. es sollte eine Triggerung zwischen 6.00 Uhr bzw. 6.03 geben (bei 3 Minuten Taktung)

z.B für Sonnenaufgang 6.58
1. Trigger um 5.28 (Minuten_vor_SA wird kleiner 30) --> Sonst-Block Aktiv
2. Trigger um 6.00 Uhr (Tageszeit > 6.00 und Minuten_vor_SA = -2) ---> Oder-Block 2 sollte wahr liefern (Trigger kommt bei mir nicht)
3. Trigger um 7.00 Uhr (Tageszeit > 7.00 und Minuten_vor_SA = -62) --> Oder-Block 1 UND Oder-Block 2 wahr (bei Nichtbeachtung von SA_TRIGGERED, der ja beim mir mit dem 2.Trigger nicht gesetzt wurde), löst bei mir erstmalig den Dann-Block aus!

4. Weiterer Trigger wenn MINUTEN_VOR_SA wieder zurückgesetzt wird (viel später)

Viele Grüße

Ralf
RaspberryMatic 3.63.8.20220330, Pi 3

Benutzeravatar
JRiemann
Beiträge: 3903
Registriert: 12.11.2015, 21:05
Wohnort: Aurich
Danksagung erhalten: 3 Mal

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von JRiemann » 06.08.2018, 11:11

Der zweite Block kann erst erfüllt sein wenn der Sonnenaufgang irgendwann nach 6 Uhr liegt.
Die Bedingungen in dem Block sind per UND verbunden und darum müssen die Bedingungen alle zur selben Zeit erfüllt sein damit der Block erfüllt ist und das DANN ausgeführt wird.
Zur Zeit ist der Sonnenaufgang um 5:58 Uhr.
Also ist "kleiner als 30 Min vor SA" nur zwischen 5:28 Uhr und 5:58 Uhr erfüllt.
Die zweite verbundene Bedingung ist "später als 6 Uhr".
Logischerweise kann es nicht gleichzeitig früher und später wie 6 Uhr sein. Dieser Block ist in der aktuellen Jahreszeit also nie erfüllt und sorgt dafür das das SONST ausgeführt wird.
Aktuell kann das DANN höchstens ausgeführt werden wenn es das Programm um >7 Uhr ausgelöst wird.

Du machst den Fehler das Du Trigger und Bedingung vermischt. Das sind aber zwei unterschiedliche Dinge. Der Trigger bestimmt wann ein Programmdurchlauf ausgelöst und damit die Prüfung der Bedingungen angestoßen wird. Außerdem werden Bedingung die mit UND verknüpft sind zu einer Einheit die Insgesamt erfüllt sein muss.

Dein Programm macht chronologisch folgendes wenn der Sonnenaufgang um 5:58 Uhr ist:

1. Trigger um 5:28 weil "30 Min vor SA" beginnt. Durchlauf ab 1. Zeile:
"später als 7 Uhr" ist falsch, "SA_Trigger = falsch" ist erfüllt. Der Block ist aber unwahr weil nicht beide UND-verbundenen Bedingungen erfüllt sind.
Nun wird Block 2 geprüft: "größer als 6 Uhr" ist falsch, "30 Min vor SA" ist erfüllt, "SA Trigger = falsch" ist erfüllt. Auch hier sind nicht alle UND-verbundenen Bedingungen erfüllt. Da keiner der Blöcke erfüllt ist wird das SONST ausgeführt.

2. Trigger 5:58 weil "30 Min vor SA" verlassen wird. Durchlauf ab 1. Zeile:
"später als 7 Uhr" ist falsch, "SA_Trigger = falsch" ist erfüllt. Der Block ist aber unwahr weil nicht beide UND-verbundenen Bedingungen erfüllt sind.
Nun wird Block 2 geprüft: "größer als 6 Uhr" ist falsch, "30 Min vor SA" ist falsch, "SA Trigger = falsch" ist erfüllt. Auch hier sind nicht alle UND-verbundenen Bedingungen erfüllt. Da keiner der Blöcke erfüllt ist wird das SONST ausgeführt.

3. Trigger größer 6 Uhr. Durchlauf ab 1. Zeile:
"später als 7 Uhr" ist falsch, "SA_Trigger = falsch" ist erfüllt. Der Block ist aber unwahr weil nicht beide UND-verbundenen Bedingungen erfüllt sind.
Nun wird Block 2 geprüft: "größer als 6 Uhr" ist erfüllt, "30 Min vor SA" ist falscherfüllt, "SA Trigger = falsch" ist erfüllt. Auch hier sind nicht alle UND-verbundenen Bedingungen erfüllt und der Block ist unwahr. Da keiner der Blöcke erfüllt ist wird das SONST ausgeführt.Damit sind alle Bedingungen im Block erfüllt und das DANN wird ausgeführt.

4. Trigger größer 7 Uhr.Durchlauf ab 1. Zeile:
"später als 7 Uhr" ist wahr, "SA_Trigger = falsch" ist erfülltnicht erfüllt weil die Variable durch Punkt 3. auf true gesetzt wurde. Der Block ist aber wahr weil beide UND-verbundenen Bedingungen erfüllt sind. Das DANN wird ausgeführt und der Durchlauf beendet. Die Bedingungen im 2. Block werden nicht mehr geprüft.also nicht erfüllt und der Durchlauf geht in Block 2 weiter.

5. Außerdem müsste "Tageszeit" auch um 0 Uhr triggern weil der Zeitbereich größer 6 Uhr bzw. größer 7 verlassen wird. Auch in diesem Fall wären beide Blöcke nicht erfüllt und das SONST wird ausgeführt.

Edit: nachträglich Korrektur weil sich ein Gedankenfehler eingeschlichen hatte.
Zuletzt geändert von JRiemann am 06.08.2018, 15:25, insgesamt 1-mal geändert.
Viele Grüße!
Jörg

RaHe67
Beiträge: 23
Registriert: 19.03.2017, 17:18

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von RaHe67 » 06.08.2018, 14:13

Hallo Jörg,
JRiemann hat geschrieben:
06.08.2018, 11:11
Du machst den Fehler das Du Trigger und Bedingung vermischt. Das sind aber zwei unterschiedliche Dinge. Der Trigger bestimmt wann ein Programmdurchlauf ausgelöst und damit die Prüfung der Bedingungen angestoßen wird. Außerdem werden Bedingung die mit UND verknüpft sind zu einer Einheit die Insgesamt erfüllt sein muss.
Also Du meinst, dass

MINUTEN_VOR_SA im Wertebereich kleiner als 30.00 Minuten bei Änderung nur für den Trigger relevant ist? D.h. er wird von der Bedingung immer als wahr betrachtet wenn es der Auslösende Trigger war, ansonsten immer als unwahr?
Das hiesse der Vergleich "MINUTEN_VOR_SA < 30.00" würde in der Bedingungsabarbeitung gar nicht mehr geprüft?
Dann hätte ich in der Tat einen schwerwiegenden Gedankenfehler.

Bis jetzt habe ich es so gesehen:
JRiemann hat geschrieben:
06.08.2018, 11:11
3. Trigger größer 6 Uhr. Durchlauf ab 1. Zeile:
"später als 7 Uhr" ist falsch, "SA_Trigger = falsch" ist erfüllt. Der Block ist aber unwahr weil nicht beide UND-verbundenen Bedingungen erfüllt sind.
Nun wird Block 2 geprüft: "größer als 6 Uhr" ist erfüllt, "30 Min vor SA" ist falsch, "SA Trigger = falsch" ist erfüllt. Auch hier sind nicht alle UND-verbundenen Bedingungen erfüllt und der Block ist unwahr. Da keiner der Blöcke erfüllt ist wird das SONST ausgeführt.
3. Trigger größer 6 Uhr. Durchlauf ab 1. Zeile:
"später als 7 Uhr" ist falsch, "SA_Trigger = falsch" ist erfüllt. Der Block ist aber unwahr weil nicht beide UND-verbundenen Bedingungen erfüllt sind.
Nun wird Block 2 geprüft: "größer als 6 Uhr" ist erfüllt, "Minuten_vor_SA" ist kleiner 30.00 (-62.00) also erfüllt, "SA Trigger = falsch" ist erfüllt. Auch hier ist ist der Zweite mit ODER Verknüpfte Block erfüllt und somit der Gesamtblock wahr. Es sollte daher dass DANN ausgeführt werden.


Gruß Ralf
RaspberryMatic 3.63.8.20220330, Pi 3

Benutzeravatar
JRiemann
Beiträge: 3903
Registriert: 12.11.2015, 21:05
Wohnort: Aurich
Danksagung erhalten: 3 Mal

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von JRiemann » 06.08.2018, 15:15

RaHe67 hat geschrieben:
06.08.2018, 14:13
MINUTEN_VOR_SA im Wertebereich kleiner als 30.00 Minuten bei Änderung nur für den Trigger relevant ist? D.h. er wird von der Bedingung immer als wahr betrachtet wenn es der Auslösende Trigger war, ansonsten immer als unwahr?
NEIN! Natürlich nicht.
Die Zeile ist Auslöser und Bedingung zugleich.
Ausgelöst wird wenn sich der Wahrheitsgehalt der Bedingung (0 bis kleiner 30 Minuten vor SA) ändert. Also von wahr zu falsch oder von falsch zu wahr. Z.B. der Wechsel von 31 auf 29 oder der Wechsel von 1 auf -1. Nach dem auslösen wird JEDE Zeile behandelt als würde "nur prüfen" dahinter stehen.
Bedingung ist das Zeitfenster. Beim Prüfen ist alles innerhalb des Fensters wahr und alles außerhalb des Fensters ist falsch. Also jeder Wert zwischen 29 Minuten 59 Sekunden und 0 Sekunden ist wahr.
RaHe67 hat geschrieben:
06.08.2018, 14:13
Minuten_vor_SA" ist kleiner 30.00 (-62.00) also erfüllt,
Sorry, Du hast Recht, ich nutze das Skript nicht und habe übersehen das die Variable vor_SA bis 12:00 Uhr gültig ist und auch solange befüllt wird.

P.S. Da das Zitat mit dem Fehler in der Antwort enthalten ist berichtige ich den Fehler oben damit andere Leser total verwirrt werden.
Viele Grüße!
Jörg

RaHe67
Beiträge: 23
Registriert: 19.03.2017, 17:18

Re: Nicht alle Trigger von Programmen "bei Änderung" werden durchgeführt

Beitrag von RaHe67 » 06.08.2018, 16:05

Puuh, ich hab schon an mir gezweifelt. Ist etwas zu heiss hier.

Nur zur Klärung - da Du Das ASTRO Script ja nich vor Augen haben kannst:
JRiemann hat geschrieben:
06.08.2018, 15:15
Also jeder Wert zwischen 29 Minuten 59 Sekunden und 0 Sekunden ist wahr.

Ich denke richtig wäre:
Jeder Wert zwischen 29 Minuten 59 Sekunden (enspricht dem REAL 29.59 in dem Script) und höchstens -999.00 das ist der Maximale Negative Wert um 12 Uhr Mittags, den er annehmen kann. Negativen Werte sollten doch auch ein Wahr liefern (MINUTEN_VOR_SA < 30.00).

siehe:
download/file.php?id=27885&t=1

Edit: Also nocheinmal zusammengefasst die TriggerBedingungen:
bei Annahme von 1 Minuten Zyklus (meine komische Astro-Zeit und 5:58 errechneter Sonnenaufgang)

a: Tageszeit > 7.00 bei Änderung (7:00 auf 7:01 und bei 23:59 auf 00.00),
b: Tageszeit > 6.00 bei Änderung (von 6:00 auf 6:01 und bei 23:59 auf 00:00)
c: Minuten_vor_SA < 30:00 bei Änderung ( von 5:28 auf 5:29 Uhr und von 11:59 auf 12:59 (siehe Bild))

Danke dir Jörg für die Mühe, damit habe ich zumindest jetzt erstmal eine Bestätigung von einem Erfahrenen Nutzter, dass ich das Program richtig aufgezogen habe und die Ursache vermutlich woanders suchen muss - das war ja ein Ziel meines Posts und mir wichtig bevor ich Alternativlösungen suche.

Ich hatte ja in meinem ersten Post damals erwähnt dass sich dieses Verhalten teilweise erst nach ein paar Tagen Laufzeit eingestellt hat und es 2-5 Tage ordnungsgemäß lief. Dies ist aber mit neueren Firmwares nicht mehr nachvollziehbar (da fehlt der Trigger zumindest bei momentan immer).

Ich vermute hier einfach ein Problem, da eine Systemvariable aus demselben Script mit unterschiedlichen Bedingungen verknüpft sind, da bei mir der beschriebene 3.Trigger fehlt und die Jalousie erst mit dem 4.Trigger ausgelöst wird.

Ich werde zur weiteren Fehlersuche dann mal einen Logserver aufsetzen und versuchen darüber weitere Erkenntnisse zu sammeln, bevor ich die Zeitvariablen umstelle. Ich melde mich dann wieder bei Erkenntnissen.

Edit: Typos

Gruß Ralf
RaspberryMatic 3.63.8.20220330, Pi 3

Antworten

Zurück zu „RaspberryMatic“