FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bigmo am 29 August 2017, 14:59:21

Titel: Steuerung einer Heizung mit 3 Icons
Beitrag von: bigmo am 29 August 2017, 14:59:21
Hallo,

ich möchte den Modus meiner Heizung per Klick auf Icons ändern können.
Es gibt 3 Modi (Auto, Tag und Nacht). Ich habe dazu drei Icons in einer RG erstellt.


Nun möchte ich
1) Das nur das jeweils aktive Icon in grün erscheint, die beiden anderen sollen schwarz sein
2) Das sich beim Klick auf eines der Icons dann der Zustand ändert bzw die Heizung dann in den entsprechenden Modus versetzt wird.

Was die Einfärbung angeht hab ich schon mal mit ValueIcon versucht, aber da wird ja quasi nur die Wert des Readings durch ein Icon ersetzt. Ich möchte ja die Farbe von drei Icons abhängig vom Wert einstellen und dann alle drei Icons ausgeben.
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: Otto123 am 29 August 2017, 15:52:02
Hi,

ich denke in den beiden Beschreibungen wirst Du ansatzweise fündig
https://wiki.fhem.de/wiki/DevStateIcon
https://fhem.de/commandref.html#devStateIcon

Gruß Otto
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: nils_ am 29 August 2017, 15:55:44
oder hier: https://wiki.fhem.de/wiki/ReadingsGroup
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: bigmo am 29 August 2017, 16:08:53
Also wenn ich DevStateIcon richtig verstehe dann kann ich damit ja auch nur ein Icon steuern, nämlich das vom Device....
ich möchte ja alle drei anzeigen lassen, aber nur eins in grün, nämlich das das den aktiven Modus repäsentiert.

Also quasi sowas if modus = auto {icon_auto = green; icon_sun = black; icon_moon = black}; elseif modus = day {icon_auto = black; icon_sun = green; icon_moon = black}......
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: MadMax-FHEM am 29 August 2017, 18:06:00
Ich glaube bei readingsGroup geht immer nur ein Icon pro Spalte.

Was du tun kannst ist in drei Spalten hintereinander folgendes eingeben:

<{my_SetHeatingModeIcon($DEVICE, "auto")}@controlMode>,<{my_SetHeatingModeIcon($DEVICE, "moon")}@controlMode>,<{my_SetHeatingModeIcon($DEVICE, "sun")}@controlMode>

Und dann in myUtils eine Sub wo du das icon und die Farbe bestimmst, in etwa so:


sub my_SetHeatingModeIcon($)
{
  my ($Device, $WhichIcon)  = @_;
  my $Icon = "%sani_heating_automatic\@black%set $Device controlMode manual";
  my $Reading = ReadingsVal($Device, "controlMode", "undef");

  if($Reading eq "manual" && $WhichIcon eq "auto")
    {$Icon = "%sani_heating_manual\@green%set $Device controlMode auto"}
  elsif($Reading eq "sun" && $WhichIcon eq "sun")
    {$Icon = "%sani_heating_sun\@green%set $Device controlMode sun"}
  elsif($Reading eq "moon" && $WhichIcon eq "moon")
    {$Icon = "%sani_heating_moon\@green%set $Device controlMode moon"}
  else
    {$Icon = "message_attention\@red"} 

  return $Icon;
}


Der Code funktioniert NICHT!
Er soll nur zeigen wie es gemeint ist.

So wie ich es verstehe wird für jedes Event controlMode bei in der readingsGroup definierten/passenden Geräten die Sub aufgerufen und zwar mit dem jeweils fest vergebenen Icon-Namen: "auto", "sun" und "moon".

D.h. du weißt in der Sub für welches Gerät der Aufruf erfolgte und für welches Icon (auto, sun, moon).

Das was ich hier geschrieben habe verwende ich so ähnlich in einer readingsGroup mit Homematic-Wandthermostaten...
D.h. wie bei dir/deinen Geräten die Dinge "controlMode" etc. heißen weiß ich nicht musst du umsetzen.
Ebenso welche Icons wann für was kommen sollen und nat. (falls gewünscht) welches Kommando bei Klick auf ein Icon erfolgen soll...

Das '%set $Device controlMode sun' hinter dem Icon ist was ausgeführt wird, wenn das Icon geklickt wird...

Wie gesagt der Code soll nur verdeutlichen wie es gehen könnte, es fehlen noch die Fälle wo der controlMode beispielsweise auf auto steht, der Aufruf aber für das Icon "sun" gekommen ist, das Icon also schwarz sein soll und bei Klick ein set sun ausgeführt werden soll usw.

Eine andere Idee habe ich nicht dazu...

Gruß, Joachim

P.S.: die Def meiner readingsGroup:


Internals:
   DEF        <Raum>,<Ist>,<Soll>,<>,<>,<Luft>,<Taupunkt>,<> NAME=Thermometer_Heizung_T1:temperature,temperature@Thermometer_Heizung_T2,<>,<>,<>,<>,<> NAME=Aussenthermometer:temperature,<>,<>,<>,humidity,dewpoint,<> NAME=Wand.*_Climate:measured-temp,desired-temp,<{my_HeatingUpDown($DEVICE,"up")}@desired-temp>,<{my_HeatingUpDown($DEVICE,"down")}@desired-temp>,humidity,dewpoint,<{my_SetHeatingModeIcon($DEVICE)}@controlMode>
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: MadMax-FHEM am 29 August 2017, 18:16:26
Und es sieht dann aus wie im Anhang...

das blaue und das rote Pfeil hoch/runter Icon wird ähnlich in einer anderen Sub "berechnet", eben ob der Aufruf für "up" oder "down" erfolgt ist...

Gruß, Joachim
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: Ellert am 01 September 2017, 18:22:36
Zitat von: bigmo am 29 August 2017, 16:08:53
Also wenn ich DevStateIcon richtig verstehe dann kann ich damit ja auch nur ein Icon steuern, nämlich das vom Device....
ich möchte ja alle drei anzeigen lassen, aber nur eins in grün, nämlich das das den aktiven Modus repäsentiert.

Also quasi sowas if modus = auto {icon_auto = green; icon_sun = black; icon_moon = black}; elseif modus = day {icon_auto = black; icon_sun = green; icon_moon = black}......

Vielleicht hilft das FHEM-Widget iconSelectRadio siehe https://forum.fhem.de/index.php/topic,75696.0.html
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: bigmo am 07 September 2017, 10:52:53
ja das klingt interessant, allerdings bräuchte ich da noch Hilfe.

Also schalten möchte ich den Modus der Heizung. Das reading dazu kommt vom Modul Buderus und heisst hk_modus. Es kann die Werte auto,day und night haben.
Ich habe jetzt schon mal die drei Icons die ich haben möchte eingefügt, das klappt:

setList iconselectradio:iconSelectRadio,green,3,time_automatic@black,auto,weather_sun@black,day,weather_moon_phases_2@black,night,

Aber natürlich stellt sich da noch nichts....Wie muss ich weiter vorgehen? Bräuchte da ein Beispiel damit ich die anderen Steuerungen für HK2 und WW dann selber machen kann...

Danke!
Titel: Antw:Steuerung einer Heizung mit 3 Icons
Beitrag von: Ellert am 14 September 2017, 21:33:01
Ich würde es mit DOIF lösen, für "Raw Definiton":


defmod brud DOIF ([$SELF:"C_modus: (modusA|modusB|modusC)"]) (set Bruderus hk_modus [$SELF:C_modus])
attr brud do always
attr brud readingList C_modus
attr brud room 0_Test
attr brud setList C_modus:iconSelectRadio,green,modusA,time_automatic@black,modusB,weather_sun@black,modusC,weather_moon_phases_2@black
attr brud webCmd C_modus


Die Set-Befehle und Modi müsstest Du an Deine Verhältnisse anpassen.