Hallo liebe Gemeinde,
ich bastele schon seit geraumer Zeit an einer readingsGroup rum und komme nicht ganz zum Ziel.
Ich hoffe ich finde hier ein paar hilfreiche Anregungen :-)
Aufgabenstellung:
Ich habe zwei Solaranlagen mit jeweils 2 Panels, deren Werte (aus verschiedenen Readings) ich in einer gemeinsamen readingsGroup darstellen möchte. Das klappt alles so weit.
Jetzt möchte ich in dieser readingsGroup noch eigene userReadings befüllen mit den Summenwerten der aus den beiden Solaranlagen gelieferten Einzelwerte. Das klappt auch.
Die userReadings der readingsGroup werden getriggert und befüllt wenn sich in den Readings der Solaranlagen-Devices etwas ändert.
So weit so gut.
Was aber nicht klappt - diese Werte (userReadings der readingsGroup) werden in der readingsGroup-Darstellung nicht automatisch aktualisiert.
WIe man in dem größeren Bild unten sieht werden die rot angezeigten Werte regelmäßig automatisch aktualisiert.
Die unteren vier Werte aber nicht. Jedenfalls nicht in dieser Darstellung.
Im Device werden die Readings sehr wohl kontinuierlich aktualisiert wie man im zweiten Bild sieht.
DIe Peak-Werte werden natürlich nur dann aktualisiert wenn die aktuelle Stromproduktion höher ist als der letzte Höchstwert. Das funktioniert an sich einwandfrei - nur eben für die 4 unteren Werte nicht in der Übersicht.
Hat jemand eine Idee woran das liegen könnte und was zu tun ist, um eine entsprechende automatische Aktualisierung dieser vier Werte hin zu bekommen?
Hier nich das Listing der readingsGroup Devices:
Internals:
CFGFN
DEF EZ1_inverter_HWR:p1
EZ1_inverter_HWR:p2
EZ1_inverter_HWR:total_power
EZ1_inverter_HWR:total_power_peak
EZ1_inverter_HWR:e1
EZ1_inverter_HWR:e2
EZ1_inverter_HWR:energy_today
EZ1_inverter_GaHa:Panel_1
EZ1_inverter_GaHa:Panel_2
EZ1_inverter_GaHa:total_power
EZ1_inverter_GaHa:total_power_peak
EZ1_inverter_GaHa:e1
EZ1_inverter_GaHa:e2
EZ1_inverter_GaHa:energy_today
Solarstromproduktion:Gesamtproduktion_aktuell
Solarstromproduktion:Gesamtproduktion_today
Solarstromproduktion:ProduzierteLeistung_momentan
Solarstromproduktion:total_power_peak
FUUID 67b5041a-f33f-5fc3-25c3-a07f2866aa6f32fc
NAME Solarstromproduktion
NR 578
NTFY_ORDER 50-Solarstromproduktion
STATE Initialized
TYPE readingsGroup
changed 0
eventCount 85992
mayBeVisible 1
CONTENT:
EZ1_inverter_GaHa 1
EZ1_inverter_HWR 1
Solarstromproduktion 1
CONTENT2:
DEVICES:
ARRAY(0x8f2dad0)
ARRAY(0x82d7f40)
ARRAY(0x8f3e4c0)
ARRAY(0x8fa84c8)
ARRAY(0x8ed9938)
ARRAY(0x916e120)
ARRAY(0x8fb5f28)
ARRAY(0x24d2c70)
ARRAY(0x82d75b0)
ARRAY(0x8edd8e8)
ARRAY(0x86bf2b8)
ARRAY(0x8e2f038)
ARRAY(0x8f2d158)
ARRAY(0x542c1f0)
ARRAY(0x82b42b0)
ARRAY(0x8f8b340)
ARRAY(0x8fb0588)
ARRAY(0x8f895f0)
OLDREADINGS:
READINGS:
2025-02-23 15:18:39 Gesamtproduktion_aktuell 1.19545
2025-02-23 15:18:39 Gesamtproduktion_today 1.19545
2025-02-23 15:18:39 ProduzierteLeistung_momentan 247
2025-02-23 15:18:39 Trigger 55
2025-02-23 13:14:37 total_power_peak 819
fhem:
lastDefChange 397
last_update 1740318694.39275
helper:
DEF
positions:
EZ1_inverter_GaHa.Panel_1 8:1
EZ1_inverter_GaHa.Panel_2 9:1
EZ1_inverter_GaHa.e1 12:1
EZ1_inverter_GaHa.e2 13:1
EZ1_inverter_GaHa.energy_today 14:1
EZ1_inverter_GaHa.total_power 10:1
EZ1_inverter_GaHa.total_power_peak 11:1
EZ1_inverter_HWR.e1 5:1
EZ1_inverter_HWR.e2 6:1
EZ1_inverter_HWR.energy_today 7:1
EZ1_inverter_HWR.p1 1:1
EZ1_inverter_HWR.p2 2:1
EZ1_inverter_HWR.total_power 3:1
EZ1_inverter_HWR.total_power_peak 4:1
Solarstromproduktion.Gesamtproduktion_aktuell 15:1
Solarstromproduktion.Gesamtproduktion_today 16:1
Solarstromproduktion.ProduzierteLeistung_momentan 17:1
Solarstromproduktion.total_power_peak 18:1
recalc:
undef
ARRAY(0x8fa4438)
valueFormat:
Gesamtproduktion_aktuell %.2f kWh
Gesamtproduktion_today %.2f kWh
Panel_1 %.0f W
Panel_2 %.0f W
ProduzierteLeistung_momentan %.0f W
e1 %.2f kWh
e2 %.2f kWh
energy_today %.2f kWh
p1 %.0f W
p2 %.0f W
total_power %.0f W
total_power_peak %.0f W
values:
formated:
undef
ARRAY(0x8e297a8)
orig:
undef
ARRAY(0x8f8a318)
prefixsuffix:
undef
ARRAY(0x8ed7ac8)
Attributes:
group Solaranlagen
icon measure_photovoltaic_inst
room Solar
sortby 30
userReadings ProduzierteLeistung_momentan:.* { ReadingsVal("EZ1_inverter_HWR", "p1", 0) + ReadingsVal("EZ1_inverter_HWR", "p2", 0) + ReadingsVal("EZ1_inverter_GaHa", "Panel_1", 0) + ReadingsVal("EZ1_inverter_GaHa", "Panel_2", 0) },
Gesamtproduktion_today:.* { ReadingsVal("EZ1_inverter_HWR", "energy_today", 0) + ReadingsVal("EZ1_inverter_GaHa", "energy_today", 0) },
Gesamtproduktion_aktuell:.* { ReadingsVal("EZ1_inverter_HWR", "e1", 0) + ReadingsVal("EZ1_inverter_HWR", "e2", 0) + ReadingsVal("EZ1_inverter_GaHa", "e1", 0) + ReadingsVal("EZ1_inverter_GaHa", "e2", 0) },
total_power_peak:.* { if (ReadingsVal($name, "total_power_peak", 0) < ReadingsVal($name, "ProduzierteLeistung_momentan", 0)) {ReadingsVal($name, "ProduzierteLeistung_momentan", 0)} elsif (ReadingsVal($name, "total_power_peak", 0) >= ReadingsVal($name, "ProduzierteLeistung_momentan", 0)){} }
valueFormat { total_power_peak => "%.0f W", total_power => "%.0f W", ProduzierteLeistung_momentan => "%.0f W", Panel_1 => "%.0f W", Panel_2 => "%.0f W", p1 => "%.0f W", p2 => "%.0f W", energy_today => "%.2f kWh", Gesamtproduktion_today => "%.2f kWh", Gesamtproduktion_aktuell => "%.2f kWh", e1 => "%.2f kWh", e2 => "%.2f kWh"}
Danke im Voraus für Eure Hilfe/Vorschläge.
Gibt es das Device Solarstromproduktion ?
In der Annahme, dass eine ReadingGroup auch ein Device ist - ja.
Siehe auch das Listing oben.
Liege ich in der Annahme etwa falsch ?
Ich habe noch nie UserReadings in einer ReadingGroup angelegt, ich
habe immer Dummy benutzt um Daten zu kumulieren und den dann
in die ReadingGroup eingebaut.
Ich denke in einer ReadingGroup fehlt der Trigger zur Aktualisierung
Das es da keinen Trigger gibt ist mir auch aufgefallen.
Deshaln habe ich ein zusätzliches userReadings "Trigger" angelegt, das bei Veränderungen in den Readings der Solaranlagendevices "EZ1_inverter_GaHa" und "EZ1_inverter_HWR" gesetzt wird und damit zu einer automatischen Aktualisierung der anderen userReadings in der readingsGroup führt.
Wie geschrieben.
Die userReadings aktualisieren sich dann auch, nur nicht die Werte in der angezeigten readingsGroup (siehe großes Bild oben)
schon mal "attr alwaysTrigger" probiert?
ZitatalwaysTrigger
1 -> always trigger update events. even if not visible.
2 -> trigger events for calculated values.
Nein - habe ich noch nicht.
Ich habe zugegebenermassen auch das Prinzip oder die Bedeutung von alwaysTrigger noch nicht ganz verstanden.
Müsste ich das in der readingsGroup setzen - oder in den "Quell-Devices" die ja eigentlich die Readings erzeugen/aktualisieren?
das attr gehört zur readingsgroup.
ein userreading wird immer nur von events des eigenen devices gtriggert.
wenn die readingsgroup keine eigenen events erzeugt, kann das userreading auch nicht "aktualisiert/erzeugt" werden.
schau in den eventmonitor, dazu ist er da.
Zitat von: frank am 24 Februar 2025, 09:08:55schon mal "attr alwaysTrigger" probiert?
ZitatalwaysTrigger
1 -> always trigger update events. even if not visible.
2 -> trigger events for calculated values.
Ich habe es jetzt ausprobiert mit alwaysTrigger 2
Dsa hat aber nichts verändert.
Hallo,
was spricht denn dagegen die userReadings (
mit trigger!) einfach in einem der Inverter-Devices vorzunehmen und die in der rG dann "einzulesen"?
Zitat von: commandrefuserReadings
A comma-separated list of definitions of user-defined readings. Each definition has the form:
<reading>[:<trigger>] [<modifier>] { <perl code> }
After a single or bulk readings update, the user-defined readings are set by evaluating the perl code { <perl code> } for all definitions and setting the value of the respective user-defined reading <reading> to the result. If <trigger> is given, then all processing for this specific user reading is only done if one of the just updated "reading: value" combinations matches <trigger>, which is treated as a regexp.
Examples:
attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
attr myMultiMeter userReadings energy1:counters.A.* { ReadingsVal("myMultiMeter","counters.A",0)/1250.0;; }, energy2:counters.B.* { ReadingsVal("myMultiMeter","counters.B",0)/1250.0;; }
Gruß Thomas
Ich weiss nicht, ob ich Dich richtig verstanden habe.
Meinst Du in einem der beiden Inverter Devices auch in einem (oder mehreren) zusätzlichen userReadings das Aufsummieren der beiden Inverter Devices vorzunehmen ?
Wenn das geht könnte das ein Ansatz sein.
Werde ich mal am WE versuchen.