Hallo Martin,
ich versuche gerade abhängig vom Modus des TC Aktionen durchzuführen.
Bei einem TC habe ich Probleme. Der Wert von Reading controlMode ist scheinbar "central". Jedoch nur in der Anzeige. Beim Vergleichen auf den Wert kommt ein false raus.
folgende Reaktion erhalte ich im Telnet
{ReadingsVal("DG_WZ_Heizung","controlMode","notdef")}
central
Bei dem Vergleich auf den String bekomme ich keine 1 als Rückgabe
{(ReadingsVal("DG_WZ_Heizung","controlMode","notdef") eq "central")}
An einem anderen TC funktioniert die Abfrage mit dem modus "auto".
{(ReadingsVal("DG_SZ_Heizung","controlMode","notdef") eq "auto")}
1
Was kann hier das Problem sein?
Danke & Viele Grüße,
Merhan
passt alles.
wenn du das Reading "controlMode" ausliest bekommst du dessen Wert, also "central"
was für einen wert willst du bei der Bedingung erhalten?
probiere
{(ReadingsVal("DG_SZ_Heizung","controlMode","notdef") eq "auto")?"true":"false"}{(ReadingsVal("DG_SZ_Heizung","controlMode","notdef") eq "central")?"true":"false"}
naja bei dem ersten TC (DG_WZ_Heizung) ist der Wert central. Wenn ich auf eq "central" prüfe bekomme ich keine 1.
bei dem zweiten TC (DG_SZ_Heizung) ist der Wert auto. Wenn ich hier auf "auto" prüfe bekomme ich eine 1. Irgendetwas scheint mit dem Reading nicht in Ordnung zu sein.
list controlMode=auto liefert mir alle TCs die auf auto stehen.
Dieser eine steht auf central.
list controlMode=central ist leer
seltsam...
Hallo Merhan,
ich meine auch bei der Auswertung mal Leerzeichen im Reading gesehen zu haben. Ich verwende folgende Routine:
Zitat
sub
GetThermostatStatus() {
Log 5, "GetThermostatStatus()";
my $GesamtStatus = "Smily";
my $EinzelStatus = "Unbekannt";
my @Messpunkte = ("TC1", "TC2");
foreach(@Messpunkte) {
$EinzelStatus = trim(ReadingsVal($_, "controlMode", "Lesefehler"));
if ( $EinzelStatus ne "auto" ) {
Log 3, "GetThermostatStatus: $_ steht auf ($EinzelStatus)";
if ( $GesamtStatus eq "Smily" ) {
$GesamtStatus = "$_($EinzelStatus)";
} else {
$GesamtStatus .= ", $_($EinzelStatus)";
}
}
}
Log 4, "GetThermostatStatus() - return $GesamtStatus";
return($GesamtStatus);
}
#End GetThermostatStatus()
Viel Erfolg!
Gerhard
In der Tat. Bei genau einem TC hängt immer ein Leerzeichen hintendran. Egal in welchem Modus (auto, manual, central) der Kollege ist.
Folgendes liefert gerade eine 1:
{(ReadingsVal("DG_WZ_Heizung","controlMode","nix") eq "auto "}
1
Egal, ob ich den Modus über die FHEMWEB oder Telnet absetze - und aktuell fällt es mir nur bei diesem TC auf.
Seltsam.
trim() nimmt sich der Leerzeichen an :-)
Gruss
Gerhard
{(ReadingsVal("DG_WZ_Heizung","controlMode","nix") =~ m/auto/}
Vielen Dank damit komme ich erst mal zurecht. Trotzdem ist es seltsam, oder?
z.B. funktioniert
list controlMode=auto auch nicht. Da muss dann auch ein Workaround her
list trim(controlMode)=auto geht schon mal nicht ;-)
list controlMode=~m/auto/