"Sprechende" Reading DropDowns

Begonnen von freetz, 19 August 2021, 23:59:27

Vorheriges Thema - Nächstes Thema

ch.eick

#15
EDIT: Ich habe eine Lösung gefunden.
   Wenn man in dem Ausgelösten DOIF Zweig das auslösende reading "ui_command" mit z.B. "---" neu setzt,
   dann kann man es im pull down Menü direkt mehrfach auswählen und es wird jedes mal ein frischer Event erzeugt.

Zitat von: Damian am 04 September 2021, 10:51:45
Hier die angesprochene Lösung mit uiTable als Beispiel:

defmod di_dropdown DOIF {set_State([$SELF:mode])}\
{if ([$SELF:mode] eq "Ein") {\
  fhem_set "bla 1"\
} elsif ([$SELF:mode] eq "Aus") {\
  fhem_set "bla 2"\
} elsif ([$SELF:mode] eq "Eco") {\
  fhem_set "bla 3"\
} elsif ([$SELF:mode] eq "Max") {\
  fhem_set "bla 4"\
}\
}
attr di_dropdown uiTable {package ui_Table}\
\
"Auswahl"|widget([$SELF:mode],"uzsuDropDown,Ein,Aus,Eco,Max")


Das lässt sich ebenfalls eleganter mit Arrays oder hash statt mit if-elseif-Zweigen realisieren, wenn man über bestimmte Perlkenntnisse verfügt.

Man kann ebenfalls die Auswahl im Status des Moduls über setList, readingsList und  webcmd realisieren.

Der Vorteil dieser Lösung:

- Alles in einem Modul
-uiTable beliebig erweiterbar für weitere Visualisierungen https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg,
- beliebiger Perlcode zum Steuern von Devices abhängig von der Auswahl  https://wiki.fhem.de/wiki/DOIF/Automatisierung

Hey Damian,
Du hattest mir diese Tage ja bereits auch den Tip mit uiTable gegeben und ich habe dieses Beispiel in mein DDIF eingebaut.

Das sieht soweit auch gut aus, danke dafür.

Leider kann ich damit einen Event nur einmal ausführen. Danach muss ich erst etwas anderes auswählen, um dann wieder das gewünschte zu selektieren.
Kann ich es so konfigurieren, dass ich den selben Eintrag mehrfach auswähle und es jedes mal einen Event auslöst?

EDIT: Das DOIF Attribut "do always" ist übrigens bereits gesetzt.


uiTable
{package ui_Table}

"Kommando"|widget([$SELF:ui_command],"uzsuDropDown,smart_Laden start,smart_Laden beenden,3 Minuten Wiederholung")

Im DOIF ist es dann so...

<...>
################################################################################################################
## 6 Wiederhole alle 180s die Kommandos der ExternControl Steuerung
##
DOELSEIF
([$SELF:ui_command] eq "3 Minuten Wiederholung" or
  [WR_1_API:Battery_Control] > 0 and                                            ## Wenn die ExternControl am WR konfiguriert ist
  [$SELF:SpeicherCmdRepeatActive]  == 1 and                                     ## Wenn die ExternControl Aktiviert ist
  [$SELF:SpeicherCmdRepeatRunning] == 1 and                                     ## Wenn es  ExternControl Kommandos zum Senden gibt
  [  {sunrise_abs("HORIZON=+5.0",0,"6:00","08:35")}                             
   - {sunset_abs("HORIZON=+8.0",0,"15:00","21:00")} ] and [+180] )              ## alle 3 Minuten den Befehl wiederholen
 
  {
<...>


VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

ZitatLeider kann ich damit einen Event nur einmal ausführen. Danach muss ich erst etwas anderes auswählen, um dann wieder das gewünschte zu selektieren.
Kann ich es so konfigurieren, dass ich den selben Eintrag mehrfach auswähle und es jedes mal einen Event auslöst?

Das liegt wohl am widget selbst - das liegt allerdings nicht in meiner Hand.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

#17
Zitat von: Damian am 08 September 2021, 19:57:39
Das liegt wohl am widget selbst - das liegt allerdings nicht in meiner Hand.

Ich habe hier ja schon eine Lösung gefunden :-)
Zitat
EDIT: Ich habe eine Lösung gefunden.
   Wenn man in dem Ausgelösten DOIF Zweig das auslösende reading "ui_command" mit z.B. "---" neu setzt,
   dann kann man es im pull down Menü direkt mehrfach auswählen und es wird jedes mal ein frischer Event erzeugt.


<...>
################################################################################################################
## 6 Wiederhole alle 180s die Kommandos der ExternControl Steuerung
##
DOELSEIF
([$SELF:ui_command] eq "3 Minuten Wiederholung" or
  [WR_1_API:Battery_Control] > 0 and                                            ## Wenn die ExternControl am WR konfiguriert ist
  [$SELF:SpeicherCmdRepeatActive]  == 1 and                                     ## Wenn die ExternControl Aktiviert ist
  [$SELF:SpeicherCmdRepeatRunning] == 1 and                                     ## Wenn es  ExternControl Kommandos zum Senden gibt
  [  {sunrise_abs("HORIZON=+5.0",0,"6:00","08:35")}                             
   - {sunset_abs("HORIZON=+8.0",0,"15:00","21:00")} ] and [+180] )              ## alle 3 Minuten den Befehl wiederholen
 
  {
   CommandSetReading(undef, "$SELF ui_command ---");                    ## <<<<<<< Das setzt das reading nach dem Ausführen wieder zurück
   my $MaxChargePowerTime = 0;
   my $MaxChargePowerAbs_midday = 0;
<...>


Das läuft schon mal super, bis auf das hier
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick