Bedingung für Programmausführung
Moderator: Co-Administratoren
Bedingung für Programmausführung
Hallo, ich habe längere Zeit gebraucht, um ein Problem zu lösen, welches mit dem Ausführen eines Programs, bzw. mit der Bedingung zum Ausführen zusammen hängt. Ich habe das Problem zwar durch trial-und-error lösen können, verstehe jedoch noch nicht, was tatsächlich das Problem war.
Und zwar habe ich einen Bewegungssensor im Einsatz und möchte bei Bewegung ein Licht für eine bestimmte Zeit einschalten. Zusätzlich habe ich zwei Systemvariablen, welche den Status zuhause/abwesend für mich und meine Frau abbilden. Diese habe ich in die Bedingung als zusätzliche Auslöser hinzugefügt. Das Licht sollte also entweder durch den Bewegungssensor, oder wenn jemand von uns nach Hause kommt auslösen.
Das nicht erwartete Verhalten war jedoch folgendes: Das Licht wurde in allen Fällen wie erwartet eingeschaltet. Wenn jedoch jemand das Licht innerhalb der 'Zeit nach der erkannte Bewegung zurückgesetzt wird' vom Bewegungsmelder (30 Sekunden) über den Taster ausgeschaltet hat, wird das Licht nach den 30 Sekunden wieder eingeschaltet. Das Program wird also beim Übergang von 'Bewegung erkannt' UND "Keine Bewegung erkannt" ausgeführt, was ich nicht erwartet hätte. Es macht diesbezüglich keinen Unterschied, ob ich 'bei Aktualisierung' oder 'bei Änderung auslösen' eingestellt habe.
Nehme ich die beiden Trigger der Systemvariablen für die Anwesenheit heraus, funktioniert alles wie erwartet. Wer kann mir erklären warum diese beiden zusätzlichen Trigger, welche offenbar das Programm ausführen lassen, wenn sich der Bewegungssensor auf den Status 'keine Bewegung erkannt' ändert? Und wie kann ich die Auslösung durch die Anwesenheit sauber ergänzen?
Und zwar habe ich einen Bewegungssensor im Einsatz und möchte bei Bewegung ein Licht für eine bestimmte Zeit einschalten. Zusätzlich habe ich zwei Systemvariablen, welche den Status zuhause/abwesend für mich und meine Frau abbilden. Diese habe ich in die Bedingung als zusätzliche Auslöser hinzugefügt. Das Licht sollte also entweder durch den Bewegungssensor, oder wenn jemand von uns nach Hause kommt auslösen.
Das nicht erwartete Verhalten war jedoch folgendes: Das Licht wurde in allen Fällen wie erwartet eingeschaltet. Wenn jedoch jemand das Licht innerhalb der 'Zeit nach der erkannte Bewegung zurückgesetzt wird' vom Bewegungsmelder (30 Sekunden) über den Taster ausgeschaltet hat, wird das Licht nach den 30 Sekunden wieder eingeschaltet. Das Program wird also beim Übergang von 'Bewegung erkannt' UND "Keine Bewegung erkannt" ausgeführt, was ich nicht erwartet hätte. Es macht diesbezüglich keinen Unterschied, ob ich 'bei Aktualisierung' oder 'bei Änderung auslösen' eingestellt habe.
Nehme ich die beiden Trigger der Systemvariablen für die Anwesenheit heraus, funktioniert alles wie erwartet. Wer kann mir erklären warum diese beiden zusätzlichen Trigger, welche offenbar das Programm ausführen lassen, wenn sich der Bewegungssensor auf den Status 'keine Bewegung erkannt' ändert? Und wie kann ich die Auslösung durch die Anwesenheit sauber ergänzen?
Zuletzt geändert von Roland M. am 21.03.2024, 10:31, insgesamt 1-mal geändert.
Grund: Thema verschoben
Grund: Thema verschoben
-
- Beiträge: 3748
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 67 Mal
- Danksagung erhalten: 122 Mal
Re: Bedingung für Programmausführung
Hallo
beantworten kann ich Dir die Frage nicht.
Ich kann aber Tips zur Fehleranalyse bzw. zur Erklärung des Verhaltens liefern.
- stell die 3 Bedingungen in den Geräteeinstellungenn auf "protokolliert" Dann kannst Du im Systemprotokoll sehen, welchen Zustand der BM und die beiden SysVar zum fraglichen Zeitpunkt haben und ggf. das Verhalten des Programms erklären.
- zum Einschalten würde mir noch einfallen, nur einen Befehl zu schicken, der das Licht für 1min einschaltet.
"einschaltdauer 1min"
"einschalten sofort"
Dann läuft der Timer im Gerät und das Programm ist beendet.
Grundsätzlich funktioniert sowas immer besser, wenn man eine Direktverknüpfung nutzt. Zumindest für BM und Aktor.
PS. jemand kommt nach hause
der BM schaltet das Licht an
später kommt erst die Sysvar "zuHause" und löst das Programm noch mal aus. das Licht wurde manuell abgeschaltet. Dann geht es durch die SysVar noch mal an. Deshalb die Protokollierung, um den Ablauf nachvollziehbar zu machen.
beantworten kann ich Dir die Frage nicht.
Ich kann aber Tips zur Fehleranalyse bzw. zur Erklärung des Verhaltens liefern.
- stell die 3 Bedingungen in den Geräteeinstellungenn auf "protokolliert" Dann kannst Du im Systemprotokoll sehen, welchen Zustand der BM und die beiden SysVar zum fraglichen Zeitpunkt haben und ggf. das Verhalten des Programms erklären.
- zum Einschalten würde mir noch einfallen, nur einen Befehl zu schicken, der das Licht für 1min einschaltet.
"einschaltdauer 1min"
"einschalten sofort"
Dann läuft der Timer im Gerät und das Programm ist beendet.
Grundsätzlich funktioniert sowas immer besser, wenn man eine Direktverknüpfung nutzt. Zumindest für BM und Aktor.
PS. jemand kommt nach hause
der BM schaltet das Licht an
später kommt erst die Sysvar "zuHause" und löst das Programm noch mal aus. das Licht wurde manuell abgeschaltet. Dann geht es durch die SysVar noch mal an. Deshalb die Protokollierung, um den Ablauf nachvollziehbar zu machen.
Zuletzt geändert von NickHM am 21.03.2024, 11:01, insgesamt 1-mal geändert.
-
- Beiträge: 9839
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 711 Mal
- Danksagung erhalten: 1666 Mal
Re: Bedingung für Programmausführung
Das ist richtig, da beides eine Änderung ist. Das Programm startet und dann werden die Bedingung geprüft. Bewegung ist dann zwar nicht wahr, aber wohl die Anwesenheit.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 3748
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 67 Mal
- Danksagung erhalten: 122 Mal
Re: Bedingung für Programmausführung
Also zwei Programme oder eine Direktverknüpfung für den BM und ein Programm für die SysVar.
Danke Micha. Es kann so einfach sein
-
- Beiträge: 3693
- Registriert: 14.07.2019, 20:49
- System: CCU
- Hat sich bedankt: 863 Mal
- Danksagung erhalten: 561 Mal
Re: Bedingung für Programmausführung
Du hast alle Bedingungen verODERt! D.h. sobald das Program getriggert wird, und nur eine der drei Bedingungen wahr ist, wird das Licht angeschaltet.pawi hat geschrieben: ↑21.03.2024, 10:22Nehme ich die beiden Trigger der Systemvariablen für die Anwesenheit heraus, funktioniert alles wie erwartet. Wer kann mir erklären warum diese beiden zusätzlichen Trigger, welche offenbar das Programm ausführen lassen, wenn sich der Bewegungssensor auf den Status 'keine Bewegung erkannt' ändert? Und wie kann ich die Auslösung durch die Anwesenheit sauber ergänzen?
Der Bewegungsmelder triggert das Programm auf "Änderung" - also auch wenn er in den Zustand "keine Bewegung erkannt" geht. Die erste Bedingung ist dann unwahr, aber wenn jemand anwesend ist, egal wer -> tadaaa -> Licht geht an <- eine der beiden anderen Bedingungen ist in dem Moment eben wahr, damit der gesamte WENN Block!
Trggern und Bedingungsprüfung sind zwei sequentielle Vorgänge -> siehe Thread zu Zentralenlogik!
-
- Beiträge: 400
- Registriert: 19.06.2017, 09:24
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 70 Mal
Re: Bedingung für Programmausführung
Mehrere "oder" Auslöser in einem Programm sind in den meisten Konstellationen ungünstig. Deshalb in Deinem Fall ein Programm/Direktverknüpfung für den BM und zusätzlich jeweils ein Programm für jede SysVar. Sonst geht das Licht nämlich auch an, wenn einer zuhause ist (bleibt) und der andere abwesend wird.
Von welchen Geräten reden wir, HM oder HmIP? Kanal 1 schalten klingt nach HM und damit kann es nämlich nochmal mehr tricky werden, weil man keine Kanalaktionen hat und deshalb das ausschalten über die Verzögerung machen muss. Außerdem fehlen die virtuellen Kanäle, man muss also zusätzlich dafür sorgen, dass sich manuelles und automatisches Ein- und Ausschalten nicht in die Quere kommen.
-
- Beiträge: 3693
- Registriert: 14.07.2019, 20:49
- System: CCU
- Hat sich bedankt: 863 Mal
- Danksagung erhalten: 561 Mal
Re: Bedingung für Programmausführung
Es könnte schonmal helfen, aus dem ersten ODER ein UND zu machen. Je nachdem, was das Programm machen soll, erscheint mir das sinnvoll.
-
- Beiträge: 400
- Registriert: 19.06.2017, 09:24
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 70 Mal
-
- Beiträge: 3693
- Registriert: 14.07.2019, 20:49
- System: CCU
- Hat sich bedankt: 863 Mal
- Danksagung erhalten: 561 Mal
Re: Bedingung für Programmausführung
Stimmt, muss man in dem vielen Text erstmal finden...
Ich würd's dann ggf. aufteilen: Steuerung durch BWM kann auch per DV erfolgen.
Die Anwesenheit steuern über ein (separates) Programm. Das erste ODER ist der Knackpunkt.
Re: Bedingung für Programmausführung
Hallo Leute,
Sorry für die späte Rückmeldung! Und herzlichen Dank für eure Unterstützung bzw. Erläuterungen. Nun macht alles Sinn
Ich war mir nicht bewusst, dass das Programm bei jeder Änderung gestartet (getriggert) wird, und erst dann die Bedingungen geprüft werden.
Direktverknüpfung geht leider nicht, da der BM HomeMaticIP ist und der Switch ein traditioneller HM (classic). Ich mache also zwei Programme draus.
Danke nochmals! Gruss
Sorry für die späte Rückmeldung! Und herzlichen Dank für eure Unterstützung bzw. Erläuterungen. Nun macht alles Sinn
Ich war mir nicht bewusst, dass das Programm bei jeder Änderung gestartet (getriggert) wird, und erst dann die Bedingungen geprüft werden.
Direktverknüpfung geht leider nicht, da der BM HomeMaticIP ist und der Switch ein traditioneller HM (classic). Ich mache also zwei Programme draus.
Danke nochmals! Gruss