Problem ReadingsVal

Begonnen von dougie, 25 Juni 2014, 09:25:57

Vorheriges Thema - Nächstes Thema

dougie


...ich hab gestern mal ein Update gemacht (das letzte war im Februar).

Was sofort auffiel war, das meine Heizungsteuerung nicht mehr lief.
Grund war, das ein ReadingsVal meiner HM-CC-TC nach dem actuator Wert einen leeren String zurück lieferte.

Da hier alles am Boden lag, musste ich das Backup schnell wieder einspielen, danach war wieder alles ok.

Ich hab auch versucht das ReadingsVal in der Kommandozeile zu prüfen -> gleiches Problem.

Frage: wo kann ich hier Ansetzen? HM Problem? fhem Problem?

VG
Ralf

martinp876

Hallo Ralf,

da sollte sich nichts geändert haben.
was stand im Climate channel "state"?
empty string wird eigentlich nie nach actuator geschrieben. Konnte es sein, dass deine message zu kurz ist? Kannst du ggf einmal loggen?
Gruss Martin

dougie



Danke dir für die schnelle Antwort, martin!

Die entsprechende Programmsequenz ist hier und der Fehler tritt auf bei "  if ($ventil > 40) "
Da wird gemeckert, das ich einen String Wert mit einer Zahl vergleiche (> versus gt)
Meine kurzen Nachforschungen ergaben, das z.B. ein

{ReadingsVal("Bad", "actuator", "101 %")}

in der Kommandozeile einfach nichts zurück gaben.
Danach musste ich meine Versuche einstellen und das Backup einspielen.



#
my $brauche_waerme=0;
my $ventile_im_leerlauf=0;
my $hum=0;
my @HMCCTC=devspec2array("model=HM-CC-TC");
#
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
my $we = (($wday==0 || $wday==6) ? 1 : 0);
#
#my $t_tmp = (strftime "%H:%M", localtime);
#my $hr = (substr($t_tmp,0,2));
#
foreach(@HMCCTC) {
    my $ventil=ReadingsVal($_, "actuator", "101%");
    my $mtemp=ReadingsVal($_,"measured-temp","101");
    my $hum=ReadingsVal($_,"humidity","0");
    $ventil=(substr($ventil, 0, (length($ventil)-2)));
    if ($ventil > 40) {
      $brauche_waerme=1;
      Log 3,"$_ ist zu kalt. ($mtemp)-($ventil%)"
    }
    if ($ventil < 35) {
      $ventile_im_leerlauf++
    }
    if ($hum > 69) { Log 1,"Check Humidity: $_" };
  }



Mehr kann ich leider auch nicht sagen. Ich hatte gehofft, das es andere mit dem gleichen Problem gab/gibt.


VG
Ralf

betateilchen

Zitat von: martinp876 am 25 Juni 2014, 09:46:46
da sollte sich nichts geändert haben.

Doch, es hat sich was geändert. Du schreibst keine Unit mehr in das Reading.

Der Anwender sollte also tunlichst vermeiden, mit substr() die beiden letzten Stellen abzuschneiden, denn genau in diesen zwei letzten Stellen steckt der ausgelesene Value des readings.

    $ventil=(substr($ventil, 0, (length($ventil)-2)));
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dougie


Ja, das war tatsächlich EINES der Probleme.

Das andere lag bei meiner Auswahl der Devices...


# my @HMCCTC=devspec2array("model=HM-CC-TC");
my @HMCCTC=devspec2array("subType=thermostat");


Ich hatte die obere (jetzt auskommentierte) Zeile in Verwendung, um alle meine HM-CC-TCs abzufragen.
Das führte dazu das sowohl alle meine Devices in der Gruppe "thermostat" als auch die "Climate" Devices abgefragt wurden.

Das fiel in der Vergangenheit nicht auf, weil beides mal der gleiche Wert zurück geliefert wurde.

Jetzt aber lieferte das ReadingsVal des thermostat Devices den korrekten Wert, aber das Climate Device 101  wegen   

my $ventil=ReadingsVal($_, "actuator", "101");

und weil das Climate kein actuator reading hat.

Ich hab die Auswahl oben jetzt auf subType=thermostat geändert und hoffe das es das jetzt war....

VG
Ralf

betateilchen

Zitat von: dougie am 25 Juni 2014, 13:42:04
und weil das Climate kein actuator reading hat.

vermutlich deshalb hatte martin Dich auch nach "state" des Climate gefragt ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!