FHEM Forum

FHEM => Automatisierung => Thema gestartet von: satprofi am 24 Mai 2024, 16:49:05

Titel: Maximal- u. Minimalwert suchen
Beitrag von: satprofi am 24 Mai 2024, 16:49:05
Hallo.
Ich möchte gerne den SOC meiner Pylons überwachen, um ein zu weites auseinander driften zu verhindern.
Wie schaffe ich es , den MAX-Wert u. MIN-Wert abzufragen? Habe ein readingsGroup angelegt. Oder muss man alle Devices extra abfragen?

[edit]
habe ein DOIF angelegt,

define writeSOC DOIF ([US2000_1:packSOC]) ( ({ my $sld1 = (ReadingsNum('US2000_1','packSOC','')); fhem("setreading SOC US2000_1 $sld1");})
({ my $sld2 = (ReadingsNum('US2000_2','packSOC','')); fhem("setreading SOC US2000_2 $sld2");})
({ my $sld3 = (ReadingsNum('US2000_3','packSOC','')); fhem("setreading SOC US2000_3 $sld3");})
({ my $sld4 = (ReadingsNum('US2000_4','packSOC','')); fhem("setreading SOC US2000_4 $sld4");})
({ my $sld5 = (ReadingsNum('US2000_5','packSOC','')); fhem("setreading SOC US2000_5 $sld5");})
({ my $sld6 = (ReadingsNum('US2000_6','packSOC','')); fhem("setreading SOC US2000_6 $sld6");})
({ my $sld7 = (ReadingsNum('US2000_7','packSOC','')); fhem("setreading SOC US2000_7 $sld7");})
({ my $sld8 = (ReadingsNum('US2000_8','packSOC','')); fhem("setreading SOC US2000_8 $sld8");})
({ my $sld9 = (ReadingsNum('US2000_9','packSOC','')); fhem("setreading SOC US2000_9 $sld9");})
({ my $sld10 = (ReadingsNum('US2000_A','packSOC','')); fhem("setreading SOC US2000_A $sld10");})
({ my $sld11 = (ReadingsNum('US2000_B','packSOC','')); fhem("setreading SOC US2000_B $sld11");})
({ my $sld12 = (ReadingsNum('US2000_C','packSOC','')); fhem("setreading SOC US2000_C $sld12");})
({; fhem ("setreading SOC max [#max:"SOC":"US.*"]");})
({; fhem ("setreading SOC min [#min:"SOC":"US.*"]");})
)

LG
Titel: Aw: Maximal- u. Minimalwert suchen
Beitrag von: rudolfkoenig am 24 Mai 2024, 17:49:47
{ my $max=0;; map { $max=maxNum($max,ReadingsNum("SOC",$_,0)) } grep(/^US.*/, keys %{$defs{SOC}{READINGS}});; setReadingsVal($defs{SOC},"max",$max,TimeNow()) }

Und wenn moeglich, bitte im obigen Beispiel die Anzahl der Klammern  ({...}) reduzieren, einem Programmierer wirds beim zuschauen schlecht.
Titel: Aw: Maximal- u. Minimalwert suchen
Beitrag von: betateilchen am 24 Mai 2024, 17:51:14

Edit: Rudi war schneller.
Titel: Aw: Maximal- u. Minimalwert suchen
Beitrag von: Damian am 24 Mai 2024, 19:51:10
Hat es eine Bewandtnis, dass du die Readings alle in ein Device umkopierst?

Wenn du nur das Maximum bilden willst, dann reicht einfach:

[#max:"^US2000":"^packSOC$"]
#max kann ja über verschiedene Devices das Maximum bilden und entsprechend mit #min für Minimum


Titel: Aw: Maximal- u. Minimalwert suchen
Beitrag von: satprofi am 25 Mai 2024, 10:03:31
Zitat von: Damian am 24 Mai 2024, 19:51:10Hat es eine Bewandtnis, dass du die Readings alle in ein Device umkopierst?

Wenn du nur das Maximum bilden willst, dann reicht einfach:

[#max:"^US2000":"^packSOC$"]
#max kann ja über verschiedene Devices das Maximum bilden und entsprechend mit #min für Minimum




jeses US2000 ist ein eigenes Device, PylonLowVoltage.pm , deshalb meine Frage. Aber wie kann man über verschiedene Devices werte suchen?
Das Beispiel habe ich von einem DOIF für Strompreis aktuelle Stunde.

Und nochmals sorry, bin nur laienprogrammierer.
Titel: Aw: Maximal- u. Minimalwert suchen
Beitrag von: Damian am 25 Mai 2024, 10:50:58
Zitat von: satprofi am 25 Mai 2024, 10:03:31jeses US2000 ist ein eigenes Device, PylonLowVoltage.pm , deshalb meine Frage. Aber wie kann man über verschiedene Devices werte suchen?

Die Lösung habe ich dir schon geschrieben:

[#max:"^US2000":"^packSOC$"]
Und hier eine komplette Definition im DOIF-Perlmodus:

defmod minmaxSOC DOIF {set_Reading("max",[#max:"^US2000":packSOC])}\
{set_Reading("min",[#min:"^US2000":packSOC])}

Getriggert wird das DOIF-Device durch Events, die von Devices beginnend mit US2000 kommen. Da es offenbar in allen Devices das Reading packSOC ist, kann man es direkt ohne Regex angeben. set_Reading schreibt dann das errechnete Maximum bzw. Minimum in das Reading max bzw. min des DOIF-Devices. Das war es, mehr muss man nicht machen, um von verschiedenen Devices das Maximum bzw. Minimum eines bestimmten Readings zu bilden.

Und hier die Doku zu den Aggregationsfunktionen von DOIF:

https://fhem.de/commandref_DE.html#DOIF_aggregation
Titel: Aw: Maximal- u. Minimalwert suchen
Beitrag von: DS_Starter am 25 Mai 2024, 17:30:57
ZitatIch möchte gerne den SOC meiner Pylons überwachen, um ein zu weites auseinander driften zu verhindern.

@satprofi, sorry wenn die Frage nicht ganz zur Aufgabenstellung passt bzw. etwas weiter führt.
Aber mich interessiert, was genau du tust wenn du ein zu weites Driften der einzelnen SOC feststellst?
Welchen Wert definierst du als "zu weit"?

LG