FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bjoernar am 27 Juni 2016, 13:36:43

Titel: Höchstwert
Beitrag von: Bjoernar am 27 Juni 2016, 13:36:43
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
Titel: Antw:Höchstwert
Beitrag von: Ellert am 27 Juni 2016, 20:03:43
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.
Titel: Antw:Höchstwert
Beitrag von: Bjoernar am 27 Juni 2016, 20:04:32
Das gefällt mir besser. Schau ich mir an
Titel: Antw:Höchstwert
Beitrag von: Bjoernar am 28 Juni 2016, 08:47:06
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
Titel: Antw:Höchstwert
Beitrag von: CoolTux am 28 Juni 2016, 08:49:02
maxNum(Wert1,Wert2).

Case sensitiv
Titel: Antw:Höchstwert
Beitrag von: Bjoernar am 28 Juni 2016, 08:52:18
danke läuft.
Titel: Antw:Höchstwert
Beitrag von: Bjoernar am 28 Juni 2016, 09:34:45
...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.
Titel: Antw:Höchstwert
Beitrag von: marvin78 am 28 Juni 2016, 09:43:04
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).
Titel: Antw:Höchstwert
Beitrag von: Bjoernar am 28 Juni 2016, 09:48:06
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?
Titel: Antw:Höchstwert
Beitrag von: CoolTux am 28 Juni 2016, 09:57:06
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.
Titel: Antw:Höchstwert
Beitrag von: marvin78 am 28 Juni 2016, 10:00:00
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.
Titel: Antw:Höchstwert
Beitrag von: CoolTux am 28 Juni 2016, 10:03:28
Marvin ich glaube Du hast vergessen zu sagen wie das Reading ALTERWERT zu Stande kommt.
Titel: Antw:Höchstwert
Beitrag von: marvin78 am 28 Juni 2016, 10:06:28
Er sagte ja, er hätte ihn. Das muss ich glauben. ;)

Und eigentlich habe ich das schon gemacht. setreading war das Stichwort.
Titel: Antw:Höchstwert
Beitrag von: CoolTux am 28 Juni 2016, 10:18:33
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)
Titel: Antw:Höchstwert
Beitrag 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.
Titel: Antw:Höchstwert
Beitrag von: marvin78 am 28 Juni 2016, 10:22:01
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.
Titel: Antw:Höchstwert
Beitrag von: Bjoernar am 28 Juni 2016, 10:23:46
....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
Titel: Antw:Höchstwert
Beitrag von: CoolTux am 28 Juni 2016, 10:27:29
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!!
Titel: Antw:Höchstwert
Beitrag von: marvin78 am 28 Juni 2016, 10:29:03
maxNum ist für ihn schon der richtige Weg, denke ich. Mit statistics zu beschäftigen kann aber nicht schaden ;)
Titel: Antw:Höchstwert
Beitrag von: Icinger am 28 Juni 2016, 11:13:33
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)
Titel: Antw:Höchstwert
Beitrag von: CoolTux am 28 Juni 2016, 11:18:15
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
Titel: Antw:Höchstwert
Beitrag von: Ellert am 28 Juni 2016, 16:10:53
Also, dann:Max_Power__W {maxNum(ReadingsVal("Wechselrichter1","Max_Power__W","0"), ReadingsVal("Wechselrichter1","Power__W","0"))}