Hallo, ich möchte einen sich auf Klick selbst löschenden Schalter haben:
defmod tmpSchalter dummy
attr tmpSchalter webCmd loeschen
attr tmpSchalter devStateIcon { if ([tmpSchalter:"loeschen"]) { fhem("delete tmpSchalter") }}
attr tmpSchalter room Training
Fehlermeldung:
attr tmpSchalter devStateIcon: syntax error at (eval 187022) line 1, near "tmpSchalter:" syntax error at (eval 187022) line 1, near "}}"
Um zu sehen, ob die Bedingung evtl falsch gesetzt ist habe ich (1==1) eingesetzt:
attr tmpSchalter devStateIcon { if (1==1) { fhem("delete tmpSchalter") }}
... erhalte aber die gleiche Fehlermeldung
Man kann doch im devStateIcon Perl-Code ausführen. Was mach ich nur falsch?
deine if bedingung ist aber kein perlcode.
also zb => (ReadingsVal(...) eq "blabla")
ZitatMan kann doch im devStateIcon Perl-Code ausführen. Was mach ich nur falsch?
https://fhem.de/commandref_DE.html#devStateIcon (https://fhem.de/commandref_DE.html#devStateIcon)
Das lese ich da nicht raus.
Hier wird ein Icon bezogen auf State definert, von Funktionalität lese ich da nichts.
Lerne ich da wieder was dazu?
Edit: Ist wohl eine undokumentierte Funktion.
Interessant was es für UseCase gibt: Temporäre selbstlöschende Dummys :o
ausserdem muss die perl funktion etwas sinnvolles zurückliefern. etwas in der art, was ohne perl anzugeben wäre.
das eigene device zu löschen, ist irgendwie kein icon.
ich würde zb ein notify probieren, dass bei "löschen" triggert.
Zitat von: frank am 20 Februar 2020, 11:17:04
deine if bedingung ist aber kein perlcode.
also zb => (ReadingsVal(...) eq "blabla")
Probiert und klappt:
defmod tmpSchalter dummy
attr tmpSchalter webCmd loeschen
attr tmpSchalter devStateIcon { if (InternalVal("tmpSchalter", "STATE", "") eq "loeschen") { fhem("delete tmpSchalter") }}
attr tmpSchalter room Training
Klickt man "leoschen" an, ändert sich der STATE auf "loeschen". Nur der Schalter verschwindet nicht direkt vom Bildschirm sondern erst nachdem man einen Refresh des Browsers durchführt. Gäbe es da auch einen Trick, das zu automatisieren?
map {
FW_directNotify("FILTER=room=Wetter-Unwetter", "#FHEMWEB:$_", "location.reload('true')", "")
} devspec2array("WEB.*");
hiermit aktualisiere ich hin und wieder eine "raum_übersicht".
Habe eine Lösung gefunden und jetzt sehe ich, das Frank in die gleiche Richtung verweist :)
trigger WEB.* JS:location.reload(true)
... macht mich glücklich :)
Fertiger Code:
defmod tmpSchalter dummy
attr tmpSchalter webCmd loeschen
attr tmpSchalter devStateIcon { if (InternalVal("tmpSchalter", "STATE", "") eq "loeschen") { fhem("delete tmpSchalter ;; trigger WEB.* JS:location.reload(true)") }}
attr tmpSchalter room Training
Diese "selbstlöschenden Schalter" sind für mich Nachrichten, die ich mir von meinen Feuchtigkeitssensoren oder bei anderen Problemen in den Raum "Probleme" schreiben lasse. Und wenn ich eines der Probleme gelöst habe, will ich es wegklicken können. Meine Lösung gefällt mir ... oder wie macht ihr soetwas?
Zitat von: frank am 20 Februar 2020, 11:17:04
attr tmpSchalter devStateIcon { if ([tmpSchalter:"loeschen"]) { fhem("delete tmpSchalter") }}
deine if bedingung ist aber kein perlcode.
In der Commandref liest man jedoch:
define di_garage DOIF {if ([remotecontrol:"on"]) {fhem_set"garage on"} elsif ([remotecontrol:"off"]) {fhem_set"garage off"}}
Wird das Device in eckigen Klammern [remotecontrol:"on"] nur beim Perlcode von DOIF ersetzt, nicht aber im Perlcode von devStateIcon? Ist das Ersatzfeature [devspec] also nicht universell im Perlcode im gesamten FHEM nutzbar?
keine ahnung was doif in geschweiften klammern erwartet oder zulässt.
es ist jedenfalls kein perl.
Zitat von: jannis am 20 Februar 2020, 13:10:07
In der Commandref liest man jedoch:
define di_garage DOIF {if ([remotecontrol:"on"]) {fhem_set"garage on"} elsif ([remotecontrol:"off"]) {fhem_set"garage off"}}
Wird das Device in eckigen Klammern [remotecontrol:"on"] nur beim Perlcode von DOIF ersetzt, nicht aber im Perlcode von devStateIcon? Ist das Ersatzfeature [devspec] also nicht universell im Perlcode im gesamten FHEM nutzbar?
ja, Reading-/Ereignisangaben [...] sind DOIF-spezifisch, sie wurden zum Teil als set-Magic bezeichnete Angaben für set- und setreading-Kommando nachgebaut, sie sind aber nicht FHEM-weit gültig.
danke ... Problem gelöst :)