Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

Gelöst: Refresh der Anzeige eines FHEMWEB Raums von einem notify aus triggern ?

Begonnen von hasselh, 24 August 2024, 11:38:41

Vorheriges Thema - Nächstes Thema

hasselh

Hallo zusammen,

ich zeige in bestimmten Situationen zusätzliche Devices in meinem defaultRoom (bei mir heisst der: Start). Ein Beispiel:

defmod room_updater notify (auto|Party|heating_away):(on|off) { \
  if ( $attr{"$NAME"}{"myRoom"} ) { \
    if ($EVTPART0 eq 'on') { \
      $attr{"$NAME"}{"room"}=$attr{"$NAME"}{"myRoom"}.',Start' } \
    else { $attr{"$NAME"}{"room"}=$attr{"$NAME"}{"myRoom"} } \
    FW_updateHashes();; return undef } }

Das funktioniert auch wunderbar, hat den Vorteil, das so auch keine geänderte Konfiguration erkannt wird (es wird im FHEMWEB kein rotes Fragezeichen angezeigt). Allerdings erscheinen die Devices auch erst nach einem Refresh der FHEMWEB Seite. Aktuell mache ich das über ein:

attr WEBphone refresh 300

Das hat nur den Nachteil, das der Refresh nun für alle Seiten gilt. Und es dauert eben seine Zeit, bis die neue Seite angezeigt wird.

Jetzt zu meiner Frage: Geht das evtl. auch eleganter.. z.B. dass der Refresh vom notify aus getriggert werden kann ?


TomLee

ZitatGeht das evtl. auch eleganter.. z.B. dass der Refresh vom notify aus getriggert werden kann ?

Hallo,

wenn Du den Codeschnipsel in deinem ergänzt sollte deine Start-Seite bei einem on|off aktualisiert werden. Zumindest hab ich deinen Code bei mir so erfolgreich nachvollzogen.

Zitat(d|d1|d2):(on|off) {
my $reload = map { FW_directNotify("FILTER=room=Start", "#FHEMWEB:$_", "location.reload('true')", "")} devspec2array("WEB.*");
  if ( $attr{"$NAME"}{"myroom"} ) {
    if ($EVTPART0 eq 'on') {
    $attr{"$NAME"}{"room"}=$attr{"$NAME"}{"myroom"}.',Start';
    $reload;}
    else {
    $attr{"$NAME"}{"room"}=$attr{"$NAME"}{"myroom"};
    $reload;}
    FW_updateHashes(); return undef } }

Gruß Thomas

hasselh

OK, WOW, das hat funktioniert. Und der Aufruf von FW_updateHashes() scheint auch nicht mehr nötig zu sein.
Der fertige Code sieht bei mir jetzt folgendermaßen aus:

(d|d1|d2):(on|off) {
  if ( $attr{"$NAME"}{"myRoom"} ) {
    if ($EVTPART0 eq 'on') {
      $attr{"$NAME"}{"room"}=$attr{"$NAME"}{"myRoom"}.',Start' }
    else { $attr{"$NAME"}{"room"}=$attr{"$NAME"}{"myRoom"} }
    map { FW_directNotify("FILTER=room=Start", "#FHEMWEB:$_",
  "location.reload('true')", "")} devspec2array("WEB.*") } }

Einen ganz lieben Dank und einen schönen Abend !!
Hayo