Hallo,
leider wird nicht immer bei Änderung von state ein event generiert und somit der Bildschirm aktualisiert (bei setzen von mode enable / disable).
Ich habe das konfigurierbar mit dem Attribut event-on-state-enable gemacht.
Bei den eingebauten Funktionen von doif gibt es eine Fehlerbeldung, wenn z.B. bei Summe oder Anzal nichts zurück kommt.
Habe da noch eine Abrage auf $result ergänzt.
if ($mode eq "#") {
# Elektrolurch $result abfragen
if ($result && $format eq "d") {
Die drei Stellen sind mit Kommentar # Elektrolurch gekennzeichnet.
Elektrolurch
Zitat von: Elektrolurch am 17 Februar 2023, 11:22:18
Hallo,
leider wird nicht immer bei Änderung von state ein event generiert und somit der Bildschirm aktualisiert (bei setzen von mode enable / disable).
Ich habe das konfigurierbar mit dem Attribut event-on-state-enable gemacht.
Bei den eingebauten Funktionen von doif gibt es eine Fehlerbeldung, wenn z.B. bei Summe oder Anzal nichts zurück kommt.
Habe da noch eine Abrage auf $result ergänzt.
if ($mode eq "#") {
# Elektrolurch $result abfragen
if ($result && $format eq "d") {
Die drei Stellen sind mit Kommentar # Elektrolurch gekennzeichnet.
Elektrolurch
Kannst du mir ein Beispiel zeigen für eine Fehlermeldung, wenn nichts gefunden wird, bei mir kommt sauber 0.
Zitatleider wird nicht immer bei Änderung von state ein event generiert und somit der Bildschirm aktualisiert (bei setzen von mode enable / disable).
Auch hier kann ich bei mir kein Problem feststellen.
Sowohl bei disable als auch bei enable wird bei mir der Bildschirm mit dem Status des Devices aktualisiert, weil es jeweils ein Event auf das mode-Reading gibt.
Wenn $result leer ist, kommt eine perl - Warnung für die if-Abfrage.
Es geht nicht um das reading "mode", sondern um "state".
Der Aufruf im Orginal-Code von readingsSingleUpdate in der entsprechenden Zeile erfolgt mit dem Parameter "0", also wird kein event generiert und state auf dem Bildschirm nicht aktualisiert.
Zitat von: Elektrolurch am 18 Februar 2023, 11:10:59
Wenn $result leer ist, kommt eine perl - Warnung für die if-Abfrage.
Es geht nicht um das reading "mode", sondern um "state".
Der Aufruf im Orginal-Code von readingsSingleUpdate in der entsprechenden Zeile erfolgt mit dem Parameter "0", also wird kein event generiert und state auf dem Bildschirm nicht aktualisiert.
$result kann bei # nur leer sein, wenn du es so als default voreinstellst, sonst wird nach Zahlen gefiltert und es kommt 0 oder eine Zahl.
[#"^window":state:"open"] liefert 0, wenn nichts gefunden wird, sonst die Anzahl der Treffer aber nicht ""
[#"^window":state:"open",""] wird "" geliefert, wenn nichts gefunden wird, weil der Anwender es so wünscht.
Sonst brauche ich ein Beispiel, wo nicht gewollt bei # ein leerer String kommt.
Zum anderen Problem:
Ich versuche die Anzahl der Attribute in Grenzen zu halten, weil es inzwischen (im FHEM-Modus) viel zu viele gibt und das wäre ein neues Attribut für eine einzige Besonderheit - das will ich nicht.
Ich könnte das Update vom state mit event per default voreingestellen, in der Hoffnung, dass es keinen stört.
Welche Ansicht meinst du, wo du die Änderung des Readings status sehen willst? Das kann eigentlich nur die Detailansicht sein.
In der FHEMWEB-Geräteübersicht wird der "STATUS" eines Devices immer aktualisiert, sobald irgend ein Reading triggert.
Ich benutze für die Darstellung der verschiedenen Geräteklassen readingsGroup und arbeite für die Konfiguration (z.B. Rolladensteuerung, Klima) mit Unterräumen.
Viele der bis dato direkt in perl kodierten Regeln habe ich mit DOIF nun realisiert. Für die Konfiuration der einzelnen DOIF verwende ich userattr.
Die DOIF werden immer an zwei verschiedenen Stellen dargestellt.
a) In Kurzform, Name, state, letzte Änderung des State, comment (Erläuterung, was die Regel tut) und einen Knopf, mit dem ich mode zwischen enable / disable umschalte.
b) Ausfürliche Form (auch in readingsGroup), in der auch die Attribute für das DOIF setzbar sind.
In a) klickt man auf disable und der angezeigte Status wird nicht in der readingsGroup aktualisiert, (da readingsSingleUpdate mit 0 an dieser Stelle aufgerufen wird), nicht so schön, da der unbedarfte Nutzer keine Rückkoppelung auf seine Interaktion bekommt.
zu der perl-Warnung:
if ($mode eq "#") {
# Elektrolurch $result abfragen
if ($result && $format eq "d") {
# und so sieht es im Orginal aus:
if ($format eq "d") {
Jedenfalls macht es nur Sinn mit dem Format weiterzuarbeiten, wenn in $result auch ein Inhalt ist.
Nach dieser Änderung tritt jedenfalls die perl-Warnung nicht mehr auf.
Elektrolurch
Ich werde beim nächsten Update state mit event setzen.
if ($result && $format eq "d") {
ist schlecht, weil bei $result=0 keine Nachkommastellen ggf. gebildet würden.
Wenn dann, eher:
if (defined $result && $format eq "d") {
if (defined $result && $format eq "d") {
Stimmt.
Wäre schön, wenn die Änderungen da hinein kämen, denn dann kann ich das update von 98_DOIF wieder regulär durchführen.
Danke.
Zitat von: Elektrolurch am 20 Februar 2023, 10:27:10
if (defined $result && $format eq "d") {
Stimmt.
Wäre schön, wenn die Änderungen da hinein kämen, denn dann kann ich das update von 98_DOIF wieder regulär durchführen.
Danke.
Ist schon drin, kommt vermutlich heute noch.