Moinsen,
ich habe ein seltsames Problem mit einem DOIF, von dem ich meine, dass es mal funktionierte.
Trigger ist zum einen ein Tasterkanal eines HM-Gerätes, welcher alle 25 Minuten, quasi als Watchdog, kurz short- oder long getriggert wird, zum anderen der Datenkanal eines 8-bit-HM-Moduls, der quasi acht Eingänge als Bits eines Byte-Wertes interpretiert. Die Werte entsprechen gewissen Stati der Alarmanlage. Das DOIF dient einzig als Gesamt-Anzeige des Status der Alarmanlage.
Bei einem Wechsel von AAZS werden die DOIF-Zweige 1-7 korrekt ausgeführt und cmd ändert sich entsprechend. Beim nächsten Eintreffen des Triggerimpulses "AlamanlagePowerTick" wird allerdings auf DOELSE erkannt, der Status von AAZS wird komplett ignoriert.
Eine ähnliche Konstellation hatte ich jahrelang mit dem 8-Kanal-Modul laufen. Dort wurden die Einzelleitungen (wie ein Fensterkontakt als "closed" oder "open" gemeldet mit event-on-change-reading) lediglich getrennt abgefragt und der Status blieb auch nach dem "powertick" immer korrekt.
DEF ([AlarmanlagePowerTick:state:sec] > 1900) ## ausgefallen
DOELSEIF (([AAZS:value] & 8) == 0 and ([AAZS:value] & 4) == 0 and ([AAZS:value] & 16) == 0) ## aus (unscharf, home, ok)
DOELSEIF (([AAZS:value] & 8) == 0 and ([AAZS:value] & 4) == 0 and [AAZS:value] & 16) ## Hilfebedarf (unscharf, home, help)
DOELSEIF ([AAZS:value] & 8 and [AAZS:value] & 16) ## Alarmauslösung (scharf, help)
DOELSEIF ([AAZS:value] & 8 and ([AAZS:value] & 4) == 0) ## Teilscharf (scharf, home)
DOELSEIF (([AAZS:value] & 8) == 0 and [AAZS:value] & 4) ## wird vollscharf (unscharf, away)
DOELSEIF ([AAZS:value] & 8 and [AAZS:value] & 4) ## Vollscharf (scharf, away)
DOELSE
Wo liegt mein Denkfehler?
Wie gesagt: Die Auswertung getrennter Trigger (also powertick und einige Statuskanäle) hat früher einwandfrei funktioniert, ich habe nur die Auswertekriterien auf das neue 8bit-Modul angepasst.
Könnte ein Update oder eine neue Funktion die Änderung ausgelöst haben?
[edit: Interna entfernt, da nicht für die Lösung relevant]
Wenn ein Event von AlarmanlagePowerTick kommt, dann wird die erste Bedingung ausgewertet, wenn sie nicht wahr ist, dann bleibt nur noch DOELSE übrig - das war schon immer so.
Zitat von: Pfriemler am 23 August 2017, 22:59:42
Bei einem Wechsel von AAZS werden die DOIF-Zweige 1-7 korrekt ausgeführt und cmd ändert sich entsprechend. Beim nächsten Eintreffen des Triggerimpulses "AlamanlagePowerTick" wird allerdings auf DOELSE erkannt, der Status von AAZS wird komplett ignoriert.
...
Wo liegt mein Denkfehler?
Bist Du sicher, dass Du früher auch ein DOELSE drin gehabt hast?
Das DOIF verhält sich so jedenfalls korrekt. Wenn ein PowerTick kommt, geht es in den ersten Zweig, der aber nicht zutrifft.
Die anderen Zweige werden ignoriert, weil dass Device AlarmanlagePowerTick darin nicht vorkommt.
Also bleibt nur DOELSE.
Hättest Du kein DOELSE, würde das DOIF aber einfach bei seinem bisherigen Status bleiben.
Alternative: Du setzt das Attribut checkall, dann werden immer alle Bedingungen geprüft, auch wenn sie das triggernde Device nicht beinhalten.
Edit: Damian war schneller... :)
Danke Euch beiden. Das war ja mal wieder zu einfach. Beide Lösungen sind ausreichend. Da muss ich dann mal noch mehr DOIFs durchforsten. Ich war bisher davon ausgegangen dass das mit checkall (was ich angesichts der erschlagenden Fülle von Features bislang erfolgreich ignorierte) erreichbare Verhalten Standard ist.
Nachtrag: Es hat mir keine Ruhe gelassen: Habe die Vordefinition nochmal gecheckt, die früher anstandslos funktioniert hat. Ihren Status habe ich am Handy Dutzende Male in der App HomePlus gelesen und der war immer in Ordnung. Eine Zeitlang liefen beide DOIFs parallel, dort habe ich das UNBEKANNT das erste Mal gesehen, was aber die eigentlich beabsichtigte Ausgabe wegen eines nichtdefinierten Bitzustands war, deswegen fiel es nicht auf. Irgendetwas muss das DOIF doch bewogen haben, regelmäßig den richtigen Zweig aufzusuchen...
Egal. Jetzt. Nun ist es klar definiert und einmal mehr: Kaum macht man es richtig, funktioniert es ...
Gesendet von meinem SM-G900FD mit Tapatalk