FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jannis am 20 Februar 2020, 11:10:35

Titel: (Gelöst) sich selbst selbstlöschender Schalter)
Beitrag von: jannis am 20 Februar 2020, 11:10:35
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?

Titel: Antw:selbstlöschender Schalter
Beitrag von: frank am 20 Februar 2020, 11:17:04
deine if bedingung ist aber kein perlcode.

also zb => (ReadingsVal(...) eq "blabla")
Titel: Antw:sich selbst selbstlöschender Schalter
Beitrag von: rabehd am 20 Februar 2020, 11:26:25
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
Titel: Antw:sich selbst selbstlöschender Schalter
Beitrag von: frank am 20 Februar 2020, 11:30:46
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.
Titel: Antw:selbstlöschender Schalter
Beitrag von: jannis am 20 Februar 2020, 11:38:52
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?
Titel: Antw:sich selbst selbstlöschender Schalter
Beitrag von: frank am 20 Februar 2020, 12:07:19
map {
    FW_directNotify("FILTER=room=Wetter-Unwetter", "#FHEMWEB:$_", "location.reload('true')", "")
} devspec2array("WEB.*");


hiermit aktualisiere ich hin und wieder eine "raum_übersicht".
Titel: Antw:sich selbst selbstlöschender Schalter
Beitrag von: jannis am 20 Februar 2020, 12:25:45
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?

Titel: Antw:selbstlöschender Schalter
Beitrag von: jannis am 20 Februar 2020, 13:10:07
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?
Titel: Antw:sich selbst selbstlöschender Schalter
Beitrag von: frank am 20 Februar 2020, 15:37:00
keine ahnung was doif in geschweiften klammern erwartet oder zulässt.
es ist jedenfalls kein perl.
Titel: Antw:selbstlöschender Schalter
Beitrag von: Damian am 20 Februar 2020, 16:13:48
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.
Titel: Antw:sich selbst selbstlöschender Schalter
Beitrag von: jannis am 23 Februar 2020, 11:12:31
danke ... Problem gelöst  :)