FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Spook112 am 23 Februar 2025, 15:23:06

Titel: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: Spook112 am 23 Februar 2025, 15:23:06
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.
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: ergerd am 23 Februar 2025, 17:36:13
Gibt es das Device Solarstromproduktion ?
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: Spook112 am 23 Februar 2025, 20:14:32
In der Annahme, dass eine ReadingGroup auch ein Device ist - ja.
Siehe auch das Listing oben.

Liege ich in der Annahme etwa falsch ?
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: ergerd am 23 Februar 2025, 22:06:59
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
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: Spook112 am 23 Februar 2025, 23:28:45
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)
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: frank am 24 Februar 2025, 09:08:55
schon mal "attr alwaysTrigger" probiert?
ZitatalwaysTrigger
1 -> always trigger update events. even if not visible.
2 -> trigger events for calculated values.
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: Spook112 am 25 Februar 2025, 10:43:25
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?
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: frank am 25 Februar 2025, 11:28:03
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.
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: Spook112 am 27 Februar 2025, 12:51:27
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.
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: TomLee am 27 Februar 2025, 16:29:33
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
Titel: Aw: Aktualisieren von userReadings in einer readingsGroup
Beitrag von: Spook112 am 04 März 2025, 21:46:48
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.