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
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.
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
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.
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
}