[GELÖST] Ausführen bei Aktualisierung...

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

Moderatoren: jmaus, Co-Administratoren

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Ausführen bei Aktualisierung...

Beitrag von DrTob » 04.03.2018, 13:10

Das Programm wird hier getriggert wenn sich eine der Bedingungen ändert (d.h. Eines der Fenster auf oder zu geht) ist irgendein Fenster offen wird das Dann ausgeführt. Damit das dann auch ausgeführt wird wenn das letzte Fenster zugemacht wird reicht es wenn du eines der Fenster zusätzlich mit „wenn Fenster x geschlossen (nur prüfen)“ hinzufügst. (Oder einfach die Meldung „alles zu“ im Sonst-Zweig verschickst.

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

Re: Ausführen bei Aktualisierung...

Beitrag von JRiemann » 04.03.2018, 13:18

Mike42 hat geschrieben:Mein Screenshot im ersten Post zeigt wie das Programm vorher auf der CCU problemlos lief
Wenn das DANN im Programm ausgeführt wurde obwohl alle Fenster geschlossen waren, dann war irgendwas faul. Oder es war immer mindestens 1 Fenster geöffnet wenn Du den Ablauf beobachtet hast.
Mike42 hat geschrieben:Ich dachte bei "Aktualisierung" wird getriggert, egal welcher Zustand eingenommen wird... Und genau so hat es auch auf der CCU funktioniert.
Ja, das ist auch so... Aber das wäre auch bei "Änderung" so.
Wenn "bei Aktualisierung" gewählt wurde wird zusätzlich auch getriggert wenn einer der Sensoren eine zyklische Statusmeldung sendet. Bei einem optischen TFK findet dies 1x pro Stunde statt.

"bei Änderung auslösen" = TFK wechselt von offen auf geschlossen oder von geschlossen auf offen.
"bei Aktualisierung auslösen" Statuswechsel offen>geschlossen, gescholssen>offen UND jede Statusmeldung auch ohne geänderte Werte.

Aber egal wie getigert wurde, die Bedingung muss erfüllt sein damit das DANN ausgeführt wird. Also egal wie der Programmdurchlauf ausgelöst wurde, es muss mind. 1 Fenster offen sein damit das DANN ausgeführt wird.
Darum habe ich Dir bereits weiter vorne geraten das "Fensterskript" im DANN und im SONST einzufügen damit es bei wirklich jeder Änderung eines TFK ausgeführt wird.
Mike42 hat geschrieben:ich habe das Programm jetzt so umgestellt
Das Programm wird sicher funktionieren, die Programmierung wäre so aber nicht nötig!
Es hätte völlig gereicht jedes Fenster mit 1 Status einzufügen und im DANN und im SONST das Skript einzufügen.
Viele Grüße!
Jörg

Mike42
Beiträge: 39
Registriert: 31.12.2013, 13:48
Wohnort: Lauf an der Pegnitz
Danksagung erhalten: 2 Mal

Re: Ausführen bei Aktualisierung...

Beitrag von Mike42 » 04.03.2018, 13:22

yep, danke für euren Input... den "sonst"-Zweig hatte ich gar nicht so richtig auf dem Schirm...

Grüße

Mika

Benutzeravatar
Black
Beiträge: 5552
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 435 Mal
Danksagung erhalten: 1097 Mal
Kontaktdaten:

Re: Ausführen bei Aktualisierung...

Beitrag von Black » 04.03.2018, 14:22

Alternative zu sonst ist noch:

Du legst eine SystemVariable an, bei mir heisst die AllwaysTrue Typ Bool, immer wahr.
Zu deiner Oder Kette der Bedingungen fügst du als letztes noch an:

Oder AllWaystrue bei true (nur Prüfen)

Ein Trigger führt nun immer zum Ausführen des Dann teiles.
im Script kommst dan mit $src$ auf den Auslöser bzw weisst du, wenn $src$ niht gültig, dann Aufruf beim Booten oder Handaufruf.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

NickHM
Beiträge: 3748
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 67 Mal
Danksagung erhalten: 122 Mal

Re: Ausführen bei Aktualisierung...

Beitrag von NickHM » 04.03.2018, 15:25

Mike42 hat geschrieben: Sinn des Programms: wenn ein Fensterkontakt seinen Status ändert (egal ob auf oder zu) dann soll das Skript gestartet werden, welches das Gewerk abklappert und schaut ob irgendein Fenster auf ist oder alle zu sind. Wenn mindestens ein Fenster auf ist, wird eine LED eingeschaltet, wenn alles zu ist, wird die LED ausgeschaltet.
Mika
Guten Abend,

es gibt ja nichts, was man nicht besser machen könnte.
Dein Script läuft auch wenn alle Fenster zu sind, Du hast doppelt so viele Bedingungen wie nötig und das Script macht genau noch mal das, was vorher das WebUi Programm auch schon gemacht hat.

Code: Alles auswählen

Wenn Fenster 1 offen (bei Änderung)
ODER
Fenster 2 offen (bei Änderung)
ODER
Fenster 3 offen  (bei Änderung)
...

DANN
LED  anschalten
SONST
LED aus schalten
Halbe Länge, kein Script

Oder hast Du eine Randbedingung, die das Script erledigt nicht erwähnt?

Mike42
Beiträge: 39
Registriert: 31.12.2013, 13:48
Wohnort: Lauf an der Pegnitz
Danksagung erhalten: 2 Mal

Re: Ausführen bei Aktualisierung...

Beitrag von Mike42 » 04.03.2018, 19:53

Hi NickHM,

das ist verblüffend einfach - trotz der Einfachheit verstehe ich das Verhalten des "SONST"-Zweiges nicht.

Code: Alles auswählen

Wenn Fenster 1 offen (bei Änderung)
ODER
Fenster 2 offen (bei Änderung)
ODER
Fenster 3 offen  (bei Änderung)
...

DANN
LED  anschalten
SONST
LED aus schalten
Das Anschalten ist klar... eine der Bedingungen tritt ein --> LED an
Wenn ein Fenster geschlossen wird, dann geht es zu "SONST", da keine der Bedingungen zutrifft - daher muss EIN Fenster geschlossen worden sein. Bei mehreren offenen Fenstern hätte ich erwartet, dass die LED ausgeschaltet wird, obwohl noch ein anderes Fenster auf ist... aber die LED bleibt an und geht erst aus wenn alle Fenster zu sind.
Aber wo ist die Logik, dass die LED erst ausgeschaltet wird, wenn das LETZTE Fenster geschlossen wird?
Ich würde mich freuen, wenn du das versuchen würdest kurz zu erklären...

Danke & Grüße

Mika

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

Re: Ausführen bei Aktualisierung...

Beitrag von JRiemann » 04.03.2018, 20:02

Du hast alle Fenster mit ODER verbunden und die Bedingung heißt „offen“ was dann bedeutet das jedes einzelne Fenster eine eigenständige Bedingung ist. Es reicht also das eines der Fenster geöffnet ist damit der gesamte WENN-Block erfüllt ist und das DANN ausgeführt wird.
Erst wenn alle Fenster geschlossen sind ist keine Bedingung erfüllt und das SONST wird ausgeführt.
Das SONST kommt immer dann zum Zug sobald im WENN keine erfüllte Bedingung gefunden wird.

Du könntes umgekehrt auch so arbeiten:
WENN - Fenster 1 - geschlossen - bei Änderung
UND - Fenster 2 - geschlossen - bei Änderung
UND - Fenster 3 - geschlossen - bei Änderung
DANN - LED - aus
SONST - LED - ein

In dieser Konstellation ist es eine „Gruppenbedingung“. Also ALLE Zustände müssen gemeinsam erfüllt sein damit das WENN erfüllt ist und ein DANN ausgeführt wird.
Hier würde das SONST ausgeführt werden sobald mind. 1 Fenster offen ist.
Zuletzt geändert von JRiemann am 04.03.2018, 20:16, insgesamt 1-mal geändert.
Viele Grüße!
Jörg

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Ausführen bei Aktualisierung...

Beitrag von DrTob » 04.03.2018, 20:05

Die Logik ist:


Wenn Fenster 1 = auf
ODER
Fenster 2 = auf

Dann ein



Also wenn Fenster 1 oder Fenster 2 auf ist wird die LED eingeschaltet.


Durch was das Programm ausgelöst wurde ist hier nicht relevant. Auch wenn das Schließen von Fenster 2 das Programm auslöst und Fenster 1 noch offen ist ist „Fenster 1 oder Fenster2 offen“.

Mike42
Beiträge: 39
Registriert: 31.12.2013, 13:48
Wohnort: Lauf an der Pegnitz
Danksagung erhalten: 2 Mal

Re: Ausführen bei Aktualisierung...

Beitrag von Mike42 » 04.03.2018, 20:20

wenn ich das richtig verstehe, dann muss man die auslösenden Ereignisse getrennt von der Logik sehen...

Vielen Dank an alle, das hat mir wirklich weiter geholfen... :)

Grüße

Mika

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

Re: Ausführen bei Aktualisierung...

Beitrag von JRiemann » 04.03.2018, 20:32

Ja!
Auslöser und Bedingung sind zwei unabhängige Dinge.

Als Auslöser dient ein Statuswechsel egal in welche Richtung. Dabei ist auch egal welches Objekt im Programm den Durchlauf auslöst...
Der Durchlauf startet dann in der ersten Zeile des Programms und es werden ALLE Bedingungen geprüft bis eine erfüllte Bedingung gefunden wird und das folgende DANN startet. Wird keine erfüllte Bedingung gefunden startet das SONST wenn es vorhanden ist.

Die Bedingung lautet in Deinem Fall „offen“. Offen = Bedingung erfüllt, geschlossen = Bedingung nicht erfüllt.
Viele Grüße!
Jörg

Antworten

Zurück zu „RaspberryMatic“