Hallo,
ich möchte gerne den Höchstwert für meine PV Anlage mit Datum loggen.
Momentan mache ich das über ein notify das prüft ob der Aktuelle wert höher ist als der alte.
define n_Wechselrichter1_Max_Leistung notify Wechselrichter1:Power__W.* {\
my $temp=ReadingsVal("Wechselrichter1","Power__W","0");;;;\
if ($temp > Value("Wechselrichter1_Max_Leistung") ) {\
fhem("set Wechselrichter1_Max_Leistung $temp");;;;\
}\
}
Ist das so der richtige weg?
Gruß
Björnar
Warum nicht, wenn es funktioniert. Es gibt aber auch die Funktion maxNum(Wert1,Wert2).
Du könntest ein userReading im Wechselrichter1 anlegen, dann sparst Du das notify.
Das gefällt mir besser. Schau ich mir an
Morgen,
dachte es müsste so klappen:
attr Wechselrichter1 userReadings Max_Power__W {maxnum(ReadingsVal("Wechselrichter1","Power__W","0"))}
Leider kommt da aber nur das Error evaluating Wechselrichter1 userReading Max_Power__W: Undefined subroutine &main::maxnum called at (eval 21869) line 1.
dabei raus.
Gruß
Björner
maxNum(Wert1,Wert2).
Case sensitiv
danke läuft.
...liefert doch nicht den Höchstwert sondern immer den Aktuellen.
Max_Power__W {maxNum(ReadingsVal("Wechselrichter1","Power__W","0"))},
Kann es sein das die Funktion nur den höchsten Wert von einer Anzahl von Readings liefert und nicht den höchsten Wert von einem Reading.
So ist es. Wie hier im Thread beschrieben, kannst du der Funktion Werte übergeben und aus diesen wird dann der höchste Wert ermittelt.
Was du willst, ist offenbar etwas anderes (was du aber nicht wirklich gut ausgedrückt hast). Wenn du so etwas machen möchtest, kannst du entweder das fertige statistics Modul verwenden (siehe commandref) oder eine eigene sub dafür bauen und in userReadings verwenden. Dafür musst du dir aber erst einmal im klaren darüber sein, was du eigentlich möchtest. So einen Höchstwert ermittelt man ja nicht ins Blaue. Man möchte ja sicher auch noch einen Zeitraum definieren, aus dem dieser Höchstwert kommen soll.
Es geht aber auch mit maxNum. Du musst nur den alten Höchstwert kennen (also zwischenspeichern mit setreading).
ZitatIch möchte gerne den Höchstwert für meine PV Anlage mit Datum loggen.
Ist doch eigentlich klar, oder? Der Höchste Wert der je erreicht wurde und wann das war.
Zitat...alten Höchstwert kennen
der steht ja in dem Reading.
Hast du ein Beispiel für mich?
Was Du machen möchtest nennt man Statistik. Und Statistiken werden in der Regel über einen gewissen Zeitraum erhoben.
Was du machen kannst, wenn dich über Jahrhunderte nur der jemals festgestellte Höchstwert interessiert, ist den alten gegen den neuen Wert zu vergleichen. Und wenn der neue höher ist wie der alte ein userReading zu schreiben.
Und nein du hast nicht den alten Wert. Eine Aktion, schreiben eines User Readings zum Beispiel, ist Eventbasiert. Das setzen eines Readings kann so ein Event sein, doch dann steht schon der neue Wert im Reading. Daher den alten irgendwohin schupsen.
Ein Beispiel steht doch oben. maxNum nimmt den (alten) Höchstwert und den neuen Wert/die neuen Werte auf (in der Reihenfolge). Wenn der alte Wert in einem Reading steht:
Max_Power__W {maxNum(ReadingsVal("Wechselrichter1","ALTERWERT","0"), ReadingsVal("Wechselrichter1","Power__W","0"))}
Andernfalls musst du dir den alten Wert "schaffen". Dazu wurde hier ja aber schon etwas gesagt.
Ein wenig Mitdenken ist schon erlaubt. Die Funktionen der Utils sind übrigens in der commandref beschrieben!
Edit: für den Zeitpunkt ist dann timestamp-on-change-reading sicher hilfreich.
Marvin ich glaube Du hast vergessen zu sagen wie das Reading ALTERWERT zu Stande kommt.
Er sagte ja, er hätte ihn. Das muss ich glauben. ;)
Und eigentlich habe ich das schon gemacht. setreading war das Stichwort.
Voll der geheime Geheimtext nur für Marvin mit spezieller Brille richtig zu lesen
Grüße
Leon
(auch nicht mein richtiger Name, verrate ich aber gerne mal per PM oder Mail)
Bjoernar, du kannst dir aber auch das statistics-Modul mal zu Gemüte führen.
Da könntest du dann auch Tage, Wochen, Monatsweise jeweils den höchsten, niedrigsten, Mittel-Wert usw bekommen.
Zitat von: Icinger am 28 Juni 2016, 10:20:57
Bjoernar, du kannst dir aber auch das statistics-Modul mal zu Gemüte führen.
Da könntest du dann auch Tage, Wochen, Monatsweise jeweils den höchsten, niedrigsten, Mittel-Wert usw bekommen.
Das habe ich oben auch schon empfohlen. Aber es wird nicht richtig gelesen.
....das habe ich schon gelesen... Werde ich auch machen aber wenn ich das so gelöst bekomme lerne ich ja auch was dazu und kann es für was auch immer verwenden falls ich es doch mit statistics mache. Das scheint aber doch recht mächtig zu sein
Zitat von: Icinger am 28 Juni 2016, 10:20:57
Bjoernar, du kannst dir aber auch das statistics-Modul mal zu Gemüte führen.
Da könntest du dann auch Tage, Wochen, Monatsweise jeweils den höchsten, niedrigsten, Mittel-Wert usw bekommen.
Er will doch den jemals auf Lebenszeit höchsten gemessenen Wert haben!!
maxNum ist für ihn schon der richtige Weg, denke ich. Mit statistics zu beschäftigen kann aber nicht schaden ;)
ZitatEr will doch den jemals auf Lebenszeit höchsten gemessenen Wert haben!!
Ok, ob statistics mit Jahrtausendwerten umgehen kann? Wär mal ne Herausforderung.
Wer meldet sich freiwillig zum Überprüfen, obs nicht kurz vom Wechsel nen Überlauf gibt? 8)
Du gehst ja so richtig in die vollen. Ich rede von Lebenszeit und Du gleich von Jahrtausend. ;D
Da gibt es bestimmt noch ein paar Jahrtausendbugs zu korrigieren.
Grüße
Also, dann:Max_Power__W {maxNum(ReadingsVal("Wechselrichter1","Max_Power__W","0"), ReadingsVal("Wechselrichter1","Power__W","0"))}