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?
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.
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";
}