Hauptmenü

Taster im FHEMWEB

Begonnen von loescher, 29 April 2019, 21:44:17

Vorheriges Thema - Nächstes Thema

loescher

Hi!

Nachdem ich unzählige Stunden mit Forums-Suche und Commandref verbracht habe, habe ich es nun doch hinbekommen.
Und falls es jemand brauchen kann, kann er sich evtl. Zeit sparen.

Ich wollte einfach nur einen Taster im FHEMWEB bauen, der bei einem Klick darauf eine Aktion auslöst, das Klicken optisch anzeigt und wieder auf
die Ausgangsstellung zurückgeht.
Für mich eine echte Herausforderung, die ich bisher immer mit einem Dummy plus Notify gelöst hatte, das aber nun gerne auf ein Gerät reduzieren wollte.
So geht es: Beispiel:

define lamp dummy
attr lamp room Test

defmod di_taster DOIF (1) (set lamp on) DOELSEIF ([$SELF] eq "on")
attr di_taster wait 0:0.7
attr di_taster selftrigger wait
attr di_taster cmdState on|off
attr di_taster devStateIcon on:radio_checked@gold:cmd_2 initialized|off:radio_checked:cmd_1
attr di_taster room Test


Statt der Dummy Lampe einzuschalten, kann man natürlich alles mögliche machen.

Falls ein DOIF-Profi hier noch Optimierungs-Potenzial sieht, dann gerne her damit!

@Damian: Evtl. könntest du das in der DOIF-commandref als Beispiel einbauen?
Dort ist zwar schon etwas ähnliches drin ("Schaltbare Lampe über Fernbedienung und Webinterface"), aber ich hatte wie gesagt "ewig" gebraucht, das auf einen solchen "Taster mit nur einer Aktion" umzubauen.

LG,
Stephan.

Damian

#1
Das kann man so machen, allerdings braucht ein Außenstehender etwas Zeit um es zu verstehen.
Ich bin mir sicher, dass es noch viele andere Lösungen dazu gibt, z. B.

Zitatdefmod di_taster2 DOIF init {set_State("off")}\
{["$SELF:bla"];;set_State("on");;fhem_set"lamp on";;set_Exec("",0.7,'set_State("off")')}

attr di_taster2 devStateIcon on:radio_checked@gold off:radio_checked:bla
attr di_taster2 room Test

Das ist Perl-Modus.

Edit: Diese Lösung ist zwar nicht viel kürzer, allerdings kommt man im Gegensatz zu der ersten ohne einen "rekursiven Automaten" aus.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

#2
Zitat von: Damian am 29 April 2019, 22:24:20ohne einen "rekursiven Automaten"
Sollte das nicht auch mit einem einfachen wait gehen?

defmod di_taster DOIF (1) (set lamp on) ()
attr di_taster do always
attr di_taster wait 0,0.7
attr di_taster cmdState on,off


devStateIcon habe ich jetzt mal absichtlich weggelassen.

@Damian: danke für das Nachliefern von devStateIcon. Ohne Fhem-System wollte ich da nix Halbgares einstellen.

Damian

Zitat von: Per am 30 April 2019, 12:56:12
Sollte das nicht auch mit einem einfachen wait gehen?

defmod di_taster DOIF (1) (set lamp on) ()
attr di_taster do always
attr di_taster wait 0,0.7
attr di_taster cmdState on,off


devStateIcon habe ich jetzt mal absichtlich weggelassen.

Ja, diese Lösung im FHEM-Modus ist wohl noch einfacher und funktioniert, wie meine, ohne Selbsttrigerung mit:

attr di_taster devStateIcon on:radio_checked@gold initialized|off:radio_checked:cmd_1
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

loescher

Sehr schön kompakt und funktionell!
Das wäre es aber jetzt doch Wert, den Weg in die DOIF commandref als Beispiel zu finden, oder?
LG,
Stephan.

Damian

Zitat von: loescher am 01 Mai 2019, 20:59:36
Sehr schön kompakt und funktionell!
Das wäre es aber jetzt doch Wert, den Weg in die DOIF commandref als Beispiel zu finden, oder?
LG,
Stephan.

Ich denke, dieses Beispiel ist besser im Wiki aufgehoben, denn es erklärt nicht eine bestimmte Funktion des DOIF-Moduls. Ich versuche nur noch notwendige Dinge in die Commandref aufzunehmen, um sie nicht unnötig aufzublähen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF