(Gelöst) sich selbst selbstlöschender Schalter)

Begonnen von jannis, 20 Februar 2020, 11:10:35

Vorheriges Thema - Nächstes Thema

jannis

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?

+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

frank

deine if bedingung ist aber kein perlcode.

also zb => (ReadingsVal(...) eq "blabla")
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

rabehd

#2
ZitatMan kann doch im devStateIcon Perl-Code ausführen. Was mach ich nur falsch?

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
Auch funktionierende Lösungen kann man hinterfragen.

frank

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.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

jannis

#4
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?
+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

frank

map {
    FW_directNotify("FILTER=room=Wetter-Unwetter", "#FHEMWEB:$_", "location.reload('true')", "")
} devspec2array("WEB.*");


hiermit aktualisiere ich hin und wieder eine "raum_übersicht".
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

jannis

#6
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?

+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

jannis

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?
+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

frank

keine ahnung was doif in geschweiften klammern erwartet oder zulässt.
es ist jedenfalls kein perl.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jannis

+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?