Programm ausführen mit Systemvariable als Bedingung

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Dani3000
Beiträge: 81
Registriert: 14.03.2020, 16:47
Hat sich bedankt: 11 Mal
Danksagung erhalten: 1 Mal

Programm ausführen mit Systemvariable als Bedingung

Beitrag von Dani3000 » 10.03.2021, 21:43

Hallo ich habe ein Problem bei dem ich nicht weiter weiß.

Durch das Drücken eines Button in AIO NEO möchte in einem Programm eine Variable auf "0" prüfen und wenn dem so ist einen Aktor kurz schalten und anschließend die Variable auf den "1" setzen. Den Wert "1" soll die Variable dann 15min beibehalten.
Wenn in dieser Zeit von 15min (variable="1") das Programm wieder von AIO NEO mit dem Button aktiviert wird soll der Aktor wieder kurz schalten und die Variable (Bis zum nächsten Ereignis) auf "0" gesetzt werden.

Die Systemvariable nutze ich um in AIO NEO einen Status anzuzeigen.

Aber es wird, egal welchen Wert die Variable hat, nur die erste Aktivität durchlaufen. Der Wert der Systemvariable scheint die Prüfung nicht zu interessieren. Ich kann innerhalb der 15min nicht durch erneutes Drücken des Button den Aktor schalten und die Variable auf "0" setzen.

Ich hoffe es ist verständlich?!
Programm1.jpg

Hausmeister
Beiträge: 692
Registriert: 20.09.2017, 23:08
Hat sich bedankt: 11 Mal
Danksagung erhalten: 88 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Hausmeister » 10.03.2021, 23:13

Nur prüfen wird nicht helfen.

Der Trigger für ein Programm sollte "bei Änderung auslösen" sein, das wird dich deinem Vorhaben näher bringen
CCU3 und CCU2 für Heizung, Sicherheit, Energiesparen, Anwesenheit und Klingel
IOBroker und Google Home zur Einbindung Klimaanlage, Smartspeaker, SPS, Arduino D1 Mini...
Datenauswertung ECharts
Smart-Home sollte nicht "bedient" werden müssen!
Bitte immer Kirche mit Dorf direkt verknüpfen!!!

Benutzeravatar
Baxxy
Beiträge: 10739
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 599 Mal
Danksagung erhalten: 2196 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Baxxy » 10.03.2021, 23:32

Hausmeister hat geschrieben:
10.03.2021, 23:13
Nur prüfen wird nicht helfen.
Jein. :wink:
Er hat ja im Sonst wenn nochmal die gleiche Systemvariable als Trigger mit bei Änderung auslösen.
Dani3000 hat geschrieben:
10.03.2021, 21:43
Aber es wird, egal welchen Wert die Variable hat, nur die erste Aktivität durchlaufen.
Das Problem wird vermutlich sein das du aus NEO heraus das Programm direkt startest und somit immer das erste DANN ausgeführt wird.

Wenn man aus NEO heraus die virtuellen Zentralen-Tasten (HM-RCV-50 BidCoS-RF oder HmIP-RCV-50 HmIP-RCV-1) drücken kann würde ich eine solche im WENN und SONST Wenn einbauen und diese mit der Prüfung der Systemvariablen verUNDen.

Dani3000
Beiträge: 81
Registriert: 14.03.2020, 16:47
Hat sich bedankt: 11 Mal
Danksagung erhalten: 1 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Dani3000 » 11.03.2021, 09:15

Baxxy hat geschrieben:
10.03.2021, 23:32
Hausmeister hat geschrieben:
10.03.2021, 23:13
Nur prüfen wird nicht helfen.
Jein. :wink:
Er hat ja im Sonst wenn nochmal die gleiche Systemvariable als Trigger mit bei Änderung auslösen.
Dani3000 hat geschrieben:
10.03.2021, 21:43
Aber es wird, egal welchen Wert die Variable hat, nur die erste Aktivität durchlaufen.
Das Problem wird vermutlich sein das du aus NEO heraus das Programm direkt startest und somit immer das erste DANN ausgeführt wird.
Das mit dem "Prüfen" hab ich mir schon gedacht. Mit "bei Änderung auslösen" hab ich auch probiert, dann geht das Programm in eine Schleife und triggert sich selbst bis der DutyCycle auf 99% geht. Ich verstehe dann aber nicht die Logik, wenn ich in einer Bedingung etwas "prüfe" dann soll es doch erst in die "Dann" gehen wenn die Bedingung/Prüfung erfüllt ist!?
Wenn man aus NEO heraus die virtuellen Zentralen-Tasten (HM-RCV-50 BidCoS-RF oder HmIP-RCV-50 HmIP-RCV-1) drücken kann würde ich eine solche im WENN und SONST Wenn einbauen und diese mit der Prüfung der Systemvariablen verUNDen.
Da bin ich jetzt raus. Ich starte doch aus dem NEO heraus das Programm und nicht virtuelle "Tasten"? Wie meinst Du das? ich verstehe den letzten Satz nicht!? :?

Benutzeravatar
shartelt
Beiträge: 7421
Registriert: 14.01.2015, 14:59
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 524 Mal
Danksagung erhalten: 753 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von shartelt » 11.03.2021, 09:22

ein manuell gestartetes Programm führt immer das Dann aus, egal was die Bedingung sagt. Daher sollst Du nicht das Programm starten sondern es über eine Taste umbauen, die dann eine Prüfung gewährleistet.

Matsch
Beiträge: 5416
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 114 Mal
Danksagung erhalten: 731 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Matsch » 11.03.2021, 10:37

Das ist das unverständliche Dilemma, dass ja gar nicht das (komplette) Programm gestartet wird, wie man erwarten sollte, sondern ausschließlich die Anweisungen, die im DANN-Pfad stehen (genauso wie es bei "Status/Bedienung" -> "Programme" passiert).
In solchem Fall kann man aber auch ein spezielles Programm anlegen, das nur aus einem DANN-Pfad besteht (keinerlei Triggerereignisse) und wo die ganze WENN-Logik dort in einem Skript untergebracht ist. Dann braucht man auch die virtuellen Tasten nicht zu bemühen.
Wenn du rückschalten willst, mußt du dann doch dieses einzelnen Ereignis triggern, das spielt aber beim Aufruf aus Neo heraus keine Rolle.

Dani3000
Beiträge: 81
Registriert: 14.03.2020, 16:47
Hat sich bedankt: 11 Mal
Danksagung erhalten: 1 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Dani3000 » 11.03.2021, 10:58

shartelt hat geschrieben:
11.03.2021, 09:22
ein manuell gestartetes Programm führt immer das Dann aus, egal was die Bedingung sagt. Daher sollst Du nicht das Programm starten sondern es über eine Taste umbauen, die dann eine Prüfung gewährleistet.
Okay verstanden, das muss ich mir anschauen ob ich das hin bekomme. Ich bediene also aus dem Neo einen Virt.Taster der Schaltplatine (bekomme ich den ins Neo?) und mache dazu ein Programm das diese Bedienung dann "abfängt" und reagiert. Dann kann ich also auch Systemvariablen "Prüfen" und als Bedingung wie ich es möchte einbauen?! So nach der Art... "wenn" VirtTaster ein "und" SystVariable =XX (nur Prüfen?) "dann" Schaltkanal der Platine ein "sonst wenn" usw...
Na mal schauen...
Das ist das unverständliche Dilemma, dass ja gar nicht das (komplette) Programm gestartet wird, wie man erwarten sollte, sondern ausschließlich die Anweisungen, die im DANN-Pfad stehen (genauso wie es bei "Status/Bedienung" -> "Programme" passiert).
In solchem Fall kann man aber auch ein spezielles Programm anlegen, das nur aus einem DANN-Pfad besteht (keinerlei Triggerereignisse) und wo die ganze WENN-Logik dort in einem Skript untergebracht ist. Dann braucht man auch die virtuellen Tasten nicht zu bemühen.
Wenn du rückschalten willst, mußt du dann doch dieses einzelnen Ereignis triggern, das spielt aber beim Aufruf aus Neo heraus keine Rolle.
Okay, auch das "verstehe" ich. Dazu muss ich aber auch ein Skript schreiben, naja und skripten kann ich (noch) nicht. Programmieren geht, aber der Syntax ist mir nicht noch nicht klar.

Doch erst mal vielen Dank für Eure Hilfe!

Matsch
Beiträge: 5416
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 114 Mal
Danksagung erhalten: 731 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Matsch » 11.03.2021, 11:24

Dani3000 hat geschrieben:
11.03.2021, 10:58
Dazu muss ich aber auch ein Skript schreiben, naja und skripten kann ich (noch) nicht. Programmieren geht, aber der Syntax ist mir nicht noch nicht klar.
Einfach mal die Dokumentation lesen (ok, da steht auch vieles gar nicht drin ...) und anfangen. Die Skriptsprache ist zwar an einigen Stellen genauso unverständlich wie das Verhalten beim Starten von Programmen (insbesondere die komplett fehlenden Vorrangregeln in Ausdrücken können einen zur Verzweiflung treiben!), aber man kann vieles damit machen, was in der Programmebene gar nicht oder sehr umständlich geht. Es lohnt sich.

Noch eine Möglichkeit für meinen Vorschalg:
Ich mache es generell so, dass ich für Programme, die aus Neo heraus aufgerufen werden sollen, welche erstelle, die komplett nur aus dem DANN bestehen.
Wenn du hier eine Variable unabhängig von der Neo-Bedienung zeitlich verzögert rückstellen willst, dann kannst du das Rücksetzen ja in einem gesonderten WebUI-Programm erledigen, dann brauchst du auch hierin keinerlei WENN und keinerlei Trigger.

Dani3000
Beiträge: 81
Registriert: 14.03.2020, 16:47
Hat sich bedankt: 11 Mal
Danksagung erhalten: 1 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Dani3000 » 11.03.2021, 11:30

Matsch hat geschrieben:
11.03.2021, 11:24

Einfach mal die Dokumentation lesen (ok, da steht auch vieles gar nicht drin ...) und anfangen. Die Skriptsprache ist zwar an einigen Stellen genauso unverständlich wie das Verhalten beim Starten von Programmen (insbesondere die komplett fehlenden Vorrangregeln in Ausdrücken können einen zur Verzweiflung treiben!), aber man kann vieles damit machen, was in der Programmebene gar nicht oder sehr umständlich geht. Es lohnt sich.

Noch eine Möglichkeit für meinen Vorschalg:
Ich mache es generell so, dass ich für Programme, die aus Neo heraus aufgerufen werden sollen, welche erstelle, die komplett nur aus dem DANN bestehen.
Wenn du hier eine Variable unabhängig von der Neo-Bedienung zeitlich verzögert rückstellen willst, dann kannst du das Rücksetzen ja in einem gesonderten WebUI-Programm erledigen, dann brauchst du auch hierin keinerlei WENN und keinerlei Trigger.
Das ich irgendwann ans skripten muss war klar, aber solch ein einfaches Programm, dachte nicht das das solche Schwierigkeiten macht.
Danke für den Tipp mit dem separaten Programm für das Rücksetzen.

ich werde heute Abend noch mal bissel testen.

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: Programm ausführen mit Systemvariable als Bedingung

Beitrag von Fonzo » 11.03.2021, 11:36

Dani3000 hat geschrieben:
11.03.2021, 10:58
Dazu muss ich aber auch ein Skript schreiben, naja und skripten kann ich (noch) nicht.
Das kannst Du mit Skripten lösen wenn Du das willst. Falls Du eine CCU3 nutzten solltest, wäre optional auch eine mögliche Alternative einen Task im NEO Server zu erstellen und diesen mit einem HTTP Request auf dem Button zu triggern. Im Task prüfst Du dann im Falls Block auf die Bedingung, dann braucht Du auch in dem Fall kein weiteres Skript.

Antworten

Zurück zu „mediola“