FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Bootscreen am 09 Februar 2016, 10:53:58

Titel: Thermostat Widget und Structure
Beitrag von: Bootscreen am 09 Februar 2016, 10:53:58
Moin,

ich hab mal ne Frage: Wie bekomme ich es hin das mir das Thermostat Widget die Temperatur und Position meiner Structure anzeigt?
Ich hab nämlich bei Räumen mit 2 HM Thermostaten ein Structure erstellt damit beide gleichzeitig geschaltet werden. Schalten kann ich diese auch über das thermostat widget. aber mir werden keine ist, soll bzw. valve werte angezeigt.

Weiß da jemand Rat?
Titel: Antw:Thermostat Widget und Structure
Beitrag von: Amenophis86 am 11 Februar 2016, 19:20:15
Also ich habe es bisher geschafft, dass die desired-temp und auch die gemessene Temperatur angezeigt wird. Die Valve lasse ich weg, warum wirst du gleich sehen.

Meine Structure ist wie folgt aufgebaut:


Internals:
   ATTR       room
   DEF        room WZ.Heizung.L_Clima WZ.Heizung.R_Clima AZ.Heizung_Clima EZ.Heizung_Clima
   NAME       WR.Heizung.Alle
   NR         466
   NTFY_ORDER 50-WR.Heizung.Alle
   STATE      T: 22.35 Einstellung: desired-temp 19
   TYPE       structure
   Content:
     AZ.Heizung_Clima 22.0
     EZ.Heizung_Clima 22.0
     WZ.Heizung.L_Clima 22.0
     WZ.Heizung.R_Clima 22.0
   Readings:
     2016-02-11 19:15:45   LastDevice      EZ.Heizung_Clima
     2016-02-11 19:15:45   LastDevice_Abs  EZ.Heizung_Clima
     2016-02-11 19:15:37   Temperatur      22.35
     2016-02-11 19:16:48   desired-temp    19
     2016-02-11 19:16:48   state           desired-temp 19
Attributes:
   alias      Wohnzimmer Heizung
   event-on-change-reading state,measured-temp,desired-temp,ValvePosition
   group      Heizung
   room       S_Wohnraum,Wohnzimmer
   stateFormat T: Temperatur Einstellung: state
   userattr   room_map structexclude
   webCmd     desired-temp


Das Reading Temperatur wirde über ein DOIF erzeugt, welches regelmäßig die Temperatur aller Thermostate zusammen rechnet, durch 4 (Da 4 Thermostate) teilt und dann mittels setreading ins Structure schreibt.

Das Reading disred-temp lasse ich über folgendes notify erstellen:


Internals:
   DEF        WR.Heizung.Alle:desired-temp.* setreading WR.Heizung.Alle desired-temp $EVTPART1
   NAME       WR.Heizung.Desired
   NOTIFYDEV  WR.Heizung.Alle
   NR         530
   NTFY_ORDER 50-WR.Heizung.Desired
   REGEXP     WR.Heizung.Alle:desired-temp.*
   STATE      2016-02-11 19:16:48
   TYPE       notify
   Readings:
     2016-02-11 19:07:59   state           active
Attributes:
   DbLogExclude .*


Das Widget habe ich wie folgt aufgebaut:

<div data-type="thermostat" data-device="WR.Heizung.Alle" data-get="desired-temp" data-temp="Temperatur" data-min="8" class="cell left"></div>

damit holt es sich über "desired-temp" die disred-temp und über "Temperatur" die errechnete Temperatur.


Vielleicht gibt es auch einen eleganteren Weg, aber ich habe erst heute mit der TabletUI angefangen und bisher noch nichts besseres gefunden.
Titel: Antw:Thermostat Widget und Structure
Beitrag von: Bootscreen am 22 Februar 2016, 12:28:18
Hey,

dank dir. Das hat mir als Denkanstoß gefehlt.

ich hba mir jetzt ein Notify zusammengebaut was mir die Readings bei Änderungen der einzelnen Thermostate setzt. controlMode und desired-temp direkt und ValvePosition und measured-temp den Durchschnitt.
Die Namensgebung:
Heizung.Wohnzimmer.1_Clima Thermostat
Heizung.Wohnzimmer.2_Clima Thermostat
Heizung.Wohnzimmer_Clima Structure

Falls es jemand in Zukunft mal braucht, hier der Notify:
Heizung..*.1_Clima:controlMode:.*|Heizung..*.1_Clima:desired-temp:.*|Heizung..*.1_Clima:measured-temp:.*|Heizung..*.1_Clima:ValvePosition:.*|Heizung..*.2_Clima:controlMode:.*|Heizung..*.2_Clima:desired-temp:.*|Heizung..*.2_Clima:measured-temp:.*|Heizung..*.2_Clima:ValvePosition:.* {
my $struktur = $NAME;
$struktur =~ s/.1//;
$struktur =~ s/.2//;
my $value = $EVTPART1;
my $command = $EVTPART0;
$command =~ s/://;
if($command eq "measured-temp" or $command eq "ValvePosition")
{
my $device_1 = $struktur;
my $device_2 = $struktur;
$device_1 =~ s/_Clima/.1_Clima/;
$device_2 =~ s/_Clima/.2_Clima/;
my $value_1 = ReadingsVal($device_1,$command, "0");
my $value_2 = ReadingsVal($device_2,$command, "0");
if($value_1 == 0 and $value_2 == 0)
{
$value = 0;
}
else
{
if($command eq "ValvePosition")
{
$value = sprintf "%.0f",  (($value_1 + $value_2) / 2);
}
else
{
$value = sprintf "%.1f",  (($value_1 + $value_2) / 2);
}
}
}
fhem("setreading $struktur $command $value");
# Log 3, "$NAME: setreading $struktur $command $value";
}