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
(
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
inzwischen geht es auch ohne eigene sub:trigger WEB JS:location.reload(true)
gruss
andre
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
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.
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.