Bildschirm aktualisieren nach Aktion von Knopf

Begonnen von Elektrolurch, 17 Januar 2015, 16:04:30

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo,

ich habe an mehreren readingsGroups unten Knöpfe zur Umschaltung der Darstellung implementiert. Beispiel:

[A-Z][a-z]_helper:state <{appendTrigger($DEVICE,"alle","Alle anzeigen");}>,<{appendTrigger($DEVICE,"offen","nur offene");}>,<{appendTrigger($DEVICE,"geschlossen","nur geschlossene");}>

Mit der perl-Routine wird dann per "modify" die readingsGroup neu definiert und so die Darstellung geändert.
Leider wird nach Drücken des Knopfes der Bildschirm nicht neu aufgebaut. Ich muss erst F5 im akt. FF drücken.

Ähnliches Beispiel:

an einer Liste hängt der Knopf "Alle Löschen". Die readings des dummys, der in der Liste dargestellt wird, werden mit "deletereading" gelöscht. Auch hier erfolgt keine Aktualisierung des Bildschirms.

Es gibt zwar die fhem - Funktion "inform", aber die Beschreibung ist dermaassen dürftig, dass ich daraus nicht schliessen kann, ob ich damit das Problem lösen kann und wie dich "inform" überhaupt aufrufen müsste.... ?
Eine Forumssuche  mit "inform" ergab auch nichts.

Hat jemand eine Idee, wie man einen Bildschirm-Refresh anstossen kann?

Elektrolurch
(
configDB und Windows befreite Zone!

justme1968

#1
in der aktuellen version kannst du ein reload der seite so anstossen:

das folgende in 99_myUtils:
sub                                                                                     
myUtils_refresh($)                                                                     
{                                                                                       
  my ($name) = @_;                                                                     
                                                                                       
  FW_directNotify("#FHEMWEB:$name", "location.reload(true);","" );
}


und dann so aufrufen:
myUtils_refresh("WEB")

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

inzwischen geht es auch ohne eigene sub:trigger WEB JS:location.reload(true)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ujaudio

Was muss ich hier genau triggern, um meinen Floorplan zu aktualisieren?

trigger WEB JS:location.reload(true)


Meine Interpretation:

trigger ist der FHEM-Befehl
WEB gibt an, dass etwas mit der dem Webinterface passieren soll
JS könnte JavaScript bedeuten??!?
location: ist mir unklar, der Versuch, dass es der Name meines Floorplans ist, war wohl falsch
reload sagt nur aus, dass eben die Seite aktualisiert werden soll - aber welche?
(true) ist mir völlig unklar
Einen lieben Gruß
Jürgen

justme1968

trigger ist das normale fhem trigger kommando um ein event zu erzeugen.

WEB ist das fhem device

JS: ist ein schlüsselwort damit fhemweb weiss das jetzt javascript kommt das direkt im browser ausgeführt werden soll

location.reload(true) ist javascript code um die aktuelle seite komplett neu vom server zu laden und muss in diesem fall genau so dort stehen

natürlich kann man so auch anderen javascript code an den browser schicken.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ujaudio

#5
Verstanden, nur wie sorge ich dafür, dass die aktuelle Seite (mein Floorplan) nun den Trigger auslöst? Auf der Eingabezeile eingeben will ich es nicht, es soll automatisch z.B. alle 5 Minuten passieren.

Ich kann mir die Frage selbst beantworten: wenn ich in meinem Browser 2 Tabs habe, einmal den Floorplan und einmal das fhem Grundbild mit der Befehlszeile, so wird bei Eingabe des o.g. Kommandos automatisch auch der Floorplan aktualisiert, weil eben WEB aktualisiert wird.

Eigentlich muss ich jetzt nur noch ein passendes "at" definieren...

Funktioniert nun einwandfrei - danke!

Das Danke geht sowohl an justme1968 für seine Antworten als auch an Rudolf König, der wohl erst kürzlich diese Funktion realisierte.
Einen lieben Gruß
Jürgen