FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: der-sigi am 28 Juli 2017, 11:11:41

Titel: Tendenz von Messwerten wie Temperatur, Feuchte etc.
Beitrag von: der-sigi am 28 Juli 2017, 11:11:41
Hallo

habe mir zur schnellen Übersicht eine Tendenz Ausgabe für meine Sensoren gebaut. Vielleicht hilft das jemand.

In die "./FHEM/99_myUtils.pm" folgendes eintüdeln:


# --- calculate tendency
# --- 2017-07-20 Siegfried Kerkow
#
# my $tendency = calcTendency(device,sourcereading,ageinseconds);
#
# uses device readings from "sourcereading" enhanced to
# "sourcereading"old"ageinseconds" and "sourcereading"tendency"ageinseconds"
# like in a notify for the device "LACROSSEONE"
#
#   my $tendency = calcTendency("LACROSSEONE","temperature",120);
#   fhem("set LACROSSEONE temperaturetendency120 $tendency");
#
# Uses readings "temperature" to read, "temperatureold120" to
# read/write and "temperaturetendency120" to read in device "LACROSSEONE".
# If the "age" readings not exist they would be set.
#
sub calcTendency($$$) {
  # --- get parameter
  my ($deviceName,$valueName,$useAge) = @_;
  # --- get current value
  my $newValue = ReadingsVal($deviceName,$valueName,0);
  # --- build names
  my $tendencyName = $valueName."tendency".$useAge;
  my $oldValueName = $valueName."old".$useAge;
  # --- get old tendency
  my $tendency = ReadingsVal($deviceName,$tendencyName,"?");
  # --- get age of old value
  my $oldAge = ReadingsAge($deviceName,$oldValueName,0);
  # --- run on parts
  # --- reading not exists ?
  if ($oldAge == 0) {
    # --- set reading to work with
    fhem("setreading $deviceName $oldValueName $newValue");
  }
  # --- usable ?
  if ($oldAge > $useAge) {
    # --- old enough - get old value
    my $oldValue = ReadingsVal($deviceName,$oldValueName,0);
    # --- preset tendency
    $tendency = "=";
    # --- check tendency
    if ($oldValue < $newValue) { $tendency = "+"; }
    if ($oldValue > $newValue) { $tendency = "-"; }
    # --- recalculate old value
    my $oldValue = ($oldValue + $newValue) / 2;
    # --- return current tendency
    fhem("setreading $deviceName $oldValueName $oldValue");
  }
  # --- return current tendency
  return $tendency;
}


Das ergibt dann beispielsweise folgende (zusammengebaute) State Ausgaben:


AUSSEN: 19.2|=|+|73|=|-|14.2|ok
KUECHE: 21.6|=|+|64|=|-|14.5|20.8|67.0|-|-|ok


Bei AUSSEN haben wir Temperatur, Feuchte, Taupunkt und Batteriestatus. Hinter Temperatur und Feuchte gibt es jeweils zwei Felder mit einer Tendenz mit 60 und 3600 Sekunden. Somit sieht man einen schnellen und einen Langzeit Wechsel. Hier sieht man, dass die Temperatur langsam steigt und die Feuchte langsam sinkt. Bei der KUECHE ist es ähnlich, da kommt vor dem Batteriestatus noch die errechnete Wand-Temperatur und Feuchte. Letztere hat auch die Tendenz-Angaben. Hier sieht man ein identisches Verhalten wie bei den AUSSEN-Angaben, die Wandfeuchte sinkt allerdings schneller. Mit den Tendenz-Angaben ist es leichter die Lüftung und/oder Heizung zu regeln und entsprechende Infos auszugeben.

Viele Grüße
Sigi
Titel: Antw:Tendenz von Messwerten wie Temperatur, Feuchte etc.
Beitrag von: Skusi am 02 August 2017, 20:06:18
Seehr schön.

Sowas hab ich schon lange gesucht.
Schon eingebaut !

Vielen herzlichen Dank...

Einfach toll, das man nicht jedes Rad neu erfinden muß !
Titel: Antw:Tendenz von Messwerten wie Temperatur, Feuchte etc.
Beitrag von: Skusi am 18 Februar 2020, 17:54:00
Seit kurzem meckert Fhem im Log folgendes:

PERL WARNING: "my" variable $oldValue masks earlier declaration in same scope at ./FHEM/99_myUtils.pm line 105.

Die Zeile ist folgende und gehört zu Deine Script das ich schon lange erfolgreich benutze:

    my $oldValue = ($oldValue + $newValue) / 2;

Was ist denn nun plötzlich an der Zeile falsch ?
Ich kann ehrlich gesagt die Fehlermeldung nicht deuten.

Jemand einen Hinweis ???
Titel: Antw:Tendenz von Messwerten wie Temperatur, Feuchte etc.
Beitrag von: Maista am 18 Februar 2020, 18:27:05
@Skusi

my $oldValue = ($oldValue + $newValue) / 2;


Hier eventuell das "my" entfernen und schauen was passiert.

Die variable wird dadurch zum zweiten mal definiert.
Was vermutlich nicht gewollt ist?!

Gruß Gerd
Titel: Antw:Tendenz von Messwerten wie Temperatur, Feuchte etc.
Beitrag von: der-sigi am 18 Februar 2020, 19:55:01
Maista hat recht, das wurde zweimal deklariert. Mein Fehler. Tschuldigung. Gruß Sigi