FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: steb am 22 Juni 2017, 09:52:52

Titel: GELÖST: Letzten drei Werte aus History (readingsHistory) lesen und Aktion able
Beitrag von: steb am 22 Juni 2017, 09:52:52
Hallo zusammen,

ich bin gerade dabei mit meiner kleinen Wetterstation die Sonneneinstrahlung zu messen und schicke die Werte per MQTT zu fhem. Nun möchte ich eine Aktion auf den letzten drei Werten ableiten. Sprich meine Rollos darüber steuern.

Per readingsHistory bekomme ich die Werte ausgelesen:
define readHistoryWeatherStation readingsHistory lightLevel rows 3 alwaysTrigger 1 noheading 1 style style="font-size:20px;;text-align:left;;color:white"

Was ich nicht verstehe und auch nach etlichen Stunden rumprobieren nicht rausbekomme, wie kann ich nun auf die einzelnen Werte des readingsHistory zugreifen.
Im Prinzip soll die Bedingung so aussehen:

if (VALUE_Past1 > 50000.00) && (VALUE_Past2 > 50000.00) && (VALUE_Past3 > 50000.00)  ){\
fhem "set Sonnenschutz on"\
}


VALUE_Past1 - 3 doll die letzten drei Werte aus der history darstellen.

Vielleicht hat jemand eine Idee.

Besten Dank schon einmal
Stefan
Titel: Antw:Letzten drei Werte aus History (readingsHistory) lesen und Aktion ableiten
Beitrag von: justme1968 am 22 Juni 2017, 14:50:06
das ist direkt noch nicht vorgesehen. du kannst aber mit get <name> history alle zeilen benommen und dann mit etwas perl die werte dort extrahieren.
Titel: Antw:Letzten drei Werte aus History (readingsHistory) lesen und Aktion ableiten
Beitrag von: steb am 23 Juni 2017, 11:08:40
Danke justme1968 für die schnelle Hilfe.

Habe Deinen Vorschlag versucht umzusetzen, scheitere aber daran:


define getHist notify readHistoryWeatherStation.* {\
my $testerX = fhem("get readHistoryWeatherStation history");;\
}


Meine Erwartung war, das mir der get Befehl die letzten Werte zurückgibt. Müsste das nicht funktionieren?

Danke und Grüße
Titel: Antw:Letzten drei Werte aus History (readingsHistory) lesen und Aktion ableiten
Beitrag von: justme1968 am 23 Juni 2017, 15:55:01
ja. genau so geht das. die rückgabe ist ein string mit mehreren zeilen. also genau das was das get auf kommandozeile auch zurück liefert.
Titel: Antw:Letzten drei Werte aus History (readingsHistory) lesen und Aktion ableiten
Beitrag von: steb am 25 Juni 2017, 11:40:17
Nochmals Danke, habe es jetzt gelöst. Und so sieht es aus:

Notify auf neue Temperaturwerte der Wetterstation:

define readHistoryWeatherStation readingsHistory weatherStation:lightLevel rows 5 alwaysTrigger 1 noheading 1

define weatherStation_notify notify weatherStation:lightLevel.* { \
analyzeWeatherStation();;\
}


Hier die 99_myUtils.pm

sub analyzeWeatherStation() {
  my @lighLevelArray = (-1) x 5; #Array Mit default-welten initialisieren
  my $outputFhem = fhem("get readHistoryWeatherStation history"); # Holt die letzten 5 Werte aus history
  my @terms = split /\n/, $outputFhem; # split auf neue Zeile
  my $i = 0;
  foreach my $loopVar (@terms) { # Einzelne Werte des Lichtsensors auslesen
    my $indexStart = index $loopVar, "weatherStation lightLevel:", 0;
    my $indexEnd = index $loopVar, "000000", ($indexStart + 28);
    $lighLevelArray[$i] = substr $loopVar, ($indexStart + 27), ($indexEnd - ($indexStart + 28));
    $i++;
  }
  # start them aktionen
}