Hallo zusammen, bestimmt habe ich mal wieder ein Brett vor dem Kopf, aber ich verstehe nicht wo das Problem liegt.
Ich habe hier folgendes monitoring-Device:
Internals:
DEF .*:open .*:closed
FUUID 5e85d7db-f33f-bf2d-6d1f-c52d30b51cfa00da
FVERSION 98_monitoring.pm:0.256460/2022-02-07
NAME Fenster_allg
NR 97
NTFY_ORDER 50-Fenster_allg
STATE Anzahl geöffneter Fenster: 2
TYPE monitoring
READINGS:
2022-03-10 17:30:21 allCount 2
2022-03-10 17:30:21 error F_EG_Kueche,F_EG_WZ_Nord_re
2022-03-10 17:30:21 errorCount 2
2022-03-10 17:30:21 state error remove: F_UG_Gaestezimmer
2020-04-19 08:25:48 warning
2020-04-19 08:25:48 warningCount 0
hmccu:
Attributes:
appOptions {"panel": {"status": ["allCount:0:geschlossen:100:success", "allCount::%n Fenster geöffnet:50:warning"], "btn": "mdi-chevron-right", "link": "/devices/group=Fenster"},"name":"Fenster" }
blacklist .*_RK R_.* global Rollladen_alle Alarm_.* Eingang_.* Fenster_schliessen_.*
errorReturn {return unless(@errors);
$_ = AttrVal($_, "alias", $_) foreach(@errors);
return("Das Fenster \"$errors[0]\" ist geöffnet.") if(int(@errors) == 1);
@errors = sort {lc($a) cmp lc($b)} @errors;
return(join("\n - ", "Die folgenden ".@errors." Fenster sind geöffnet:", @errors))
}
errorWait 0
room Steuerungen
stateFormat Anzahl geöffneter Fenster: allCount
warningReturn {return unless(@warnings);
$_ = AttrVal($_, "alias", $_) foreach(@warnings);
return("Das Fenster \"$warnings[0]\" ist seit kurzem geöffnet.") if(int(@warnings) == 1);
@warnings = sort {lc($a) cmp lc($b)} @warnings;
return(join("\n - ", "Die folgenden ".@warnings." Fenster sind seit kurzem geöffnet:", @warnings))
}
whitelist F_.*
Im Reading allCount steht die aktuelle Anzahl an Fenstern, die geöffnet sind. Ich möchte den Wert dieses Readings nun gerne auch in einem anderen Device haben. Dazu habe ich in folgendem Device ein Userreading erstellt, das mir mittels ReadingsNum (ich habe auch ReadingsVal ausprobiert) den Wert "rüberziehen" soll:
Internals:
ATTR Fenster
CHANGEDCNT 4104
DEF Fenster F_.*
DEVSPECDEF 1
FUUID 6096a167-f33f-bf2d-f935-c96dba01991f8b20
FVERSION 98_structure.pm:0.249990/2021-09-21
NAME Fenster_alle
NOTIFYDEV global,F_EG_Flur,F_OG_Bad,F_DG_West,F_OG_Kinderzimmer_Nord,F_OG_Schlafzimmer_Ost,F_OG_Kinderzimmer_West,F_EG_WZ_Ost,F_OG_Schlafzimmer_Nord,F_UG_HWR,F_UG_Bad,F_EG_WZ_Nord_re,F_EG_WZ_Nord_Mitte,F_UG_Buero,F_UG_Gaestezimmer,F_EG_Kueche,F_UG_Flur,F_OG_Ankleide,F_EG_WZ_West,F_DG_Ost,F_EG_WZ_Nord_li,F_DG_Nord
NR 425
NTFY_ORDER 50-Fenster_alle
STATE undefined
TYPE structure
READINGS:
2022-03-10 17:30:21 Anzahl_Fenster_offen 3
2022-03-10 17:30:21 LastDevice F_UG_Gaestezimmer
2022-03-10 17:30:21 LastDevice_Abs F_UG_Gaestezimmer
2022-03-10 17:30:21 state undefined
hmccu:
Attributes:
alias Fenster
appOptions {"panel": {"status": ["state:closed:geschlossen:100:success", "state::teilweise geöffnet:50:warning"], "btn": "mdi-chevron-right", "link": "/devices/group=Fenster"},"name":"Fenster" }
room FhemApp
userReadings Anzahl_Fenster_offen {ReadingsNum("Fenster_allg","allCount",0)}
Im Reading Anzahl_Fenster_offen steht jetzt allerdings 3, obwohl im Reading allCount eine 2 steht. Öffne ich nun ein Fenster so steht im Reading allCount jetzt eine 3, allerdings in meinem Userreading eine 2. Schließe ich das Fenster wieder ist es wieder andersrum. Wenn ich alle Fenster schließe, dann steht im Reading allCount eine 0 und in meinem Userreading eine 1.
Also kurz gesagt in meinem Userreading steht immer der vorherige Wert vom Reading allCount.
Warum ist das so und wie bekomme ich den aktuellen Wert in das Userrreading?
Zitat von: Wolle02 am 10 März 2022, 17:54:32
Hallo zusammen, bestimmt habe ich mal wieder ein Brett vor dem Kopf, aber ich verstehe nicht wo das Problem liegt.
[...]
Warum ist das so und wie bekomme ich den aktuellen Wert in das Userrreading?
Das ist nicht die Kategorie "Brett"...
Es handelt sich einmal mehr um ein Reihenfolge-Problem bei der Abarbeitung von Event-Handlern, wobei hier noch die "Spezialität" dazukommt, dass einer mit gesetztem NOTIFYDEV mit einem ohne kombiniert wird.
Vielleicht reicht es aus, wenn du das "monitoring"-Gerät durch umbenennen "vor" die structure bringst (die Abarbeitungsreihenfolge kann man aus "NTFY_ORDER" ablesen, und da kommt halt am Ende das "e" vor dem "g"). Vielleicht musst du das monitoring zusätzlich so ändern, dass es ein NOTIFYDEV gesetzt bekommt.
Vielen Dank für deine Erklärung. Ich werde das mit der Abarbeitungsreihenfolge mal ausprobieren.
ZitatVielleicht musst du das monitoring zusätzlich so ändern, dass es ein NOTIFYDEV gesetzt bekommt.
Kann ich das irgendwo nachlesen wie das geht, das sagt mir nämlich gar nix.
Zitat von: Wolle02 am 14 März 2022, 17:03:36
Kann ich das irgendwo nachlesen wie das geht, das sagt mir nämlich gar nix.
Bin auch erst dabei, mich da einzudenken, was monitoring angeht und bin nicht sicher, ob das mit der akutellen svn-Version überhaupt funktioniert. Vielleicht magst du mittesten: https://forum.fhem.de/index.php/topic,126515.0.html
Zu den Hintergründen zu NOTIFYDEV allg. siehe z.B. https://forum.fhem.de/index.php/topic,125381.0.html
Alles klar, den Test schaue ich mir mal an. Dazu muss ich erstmal wieder mein Testsystem aktivieren.
Bei dem Thread über Notifydev braucht ich mal ne ruhige Minute. Ich versteh da ziemlich viel nicht.
Zitat von: Wolle02 am 15 März 2022, 16:59:43
Bei dem Thread über Notifydev braucht ich mal ne ruhige Minute. Ich versteh da ziemlich viel nicht.
Schwerer Stoff, schon klar. Quintessenz: Wenn möglich dafür sorgen, dass NOTIFYDEV gesetzt ist. Für monitoring in der jetzigen Fassung wäre dafür das whitelist-Attribut passend zu füllen (das ist im einfachsten Fall eine simple Geräteliste).