DOIF mit Berechnung (PERL) im Ausführungsteil

Begonnen von stripeset, 29 April 2025, 18:17:49

Vorheriges Thema - Nächstes Thema

stripeset

Hello allerseits,
ich habe mir bisher ganz gut mit euren sehr hilfreichen Forumseinträgen und Command-Ref durchschlagen können,
aber jetzt stehe ich grade im Wald und seh den Baum nicht mehr...

Folgende Aufgabenstellung (sehr einfach):
Die PV (SolarEdge API) ruft alle 3 Minuten die Werte (status-pv_power) ab, dazu gibt es ein entsprechendes event-on-update-reading.
Das DOIF soll nun einen Wert "ESP_PWM" setzen, der aus meinen beiden PV-Anlagen-Output errechnet wird (PWM-Steuerung des Boiler-Heizstabes).
Triggere ich das DOIF manuell (über "checkall") wird die Berechnung ausgeführt, und der Wert korrekt gesetzt.
Erfolgt der Trigger aus dem SolarEdge Device, sehe ich zwar das event mit dem Zeitstempel, aber es passiert NIX.
Setze ich testweise einfach nur anstelle der {}-Berechnung einfach eine Zahl ein, dann funktioniert es.

Ich versteh es nicht, warum der Trigger nicht auslöst, wenn der PERL-Berechnungsteil drin ist.

Die DOIF Definition:
defmod do_PV_Boiler_Control_PWM DOIF ( [SolarEdge:status-pv_power] ) ( set ESP_PWM {( ( [Tasmota_30A_WR:ENERGY_Power]/1000+[SolarEdge:status-pv_power]) * 170 )} )
attr do_PV_Boiler_Control_PWM room Photovoltaik

Hier das "list" (letzte manuelle Ausführung 18:15:05, Trigger 18:16:25)
fhem> list do_PV_Boiler_Control_PWM
Internals:
   DEF        ( [SolarEdge:status-pv_power] ) ( set ESP_PWM {( ( [Tasmota_30A_WR:ENERGY_Power]/1000+[SolarEdge:status-pv_power]) * 170 )} )
   FUUID      6810c808-f33f-7490-2232-b8b09c8c280baec4
   MODEL      FHEM
   NAME       do_PV_Boiler_Control_PWM
   NOTIFYDEV  SolarEdge,global
   NR         427
   NTFY_ORDER 50-do_PV_Boiler_Control_PWM
   STATE      cmd_1
   TYPE       DOIF
   VERSION    29460 2024-12-29 20:25:48
   eventCount 54
   READINGS:
     2025-04-29 18:16:25   Device          SolarEdge
     2025-04-29 18:15:05   cmd             1
     2025-04-29 18:15:05   cmd_event       do_PV_Boiler_Control_PWM
     2025-04-29 18:15:05   cmd_nr          1
     2025-04-29 18:16:25   e_SolarEdge_status-pv_power 1.64
     2025-04-29 18:15:04   mode            enabled
     2025-04-29 18:15:05   state           cmd_1
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       SolarEdge:
         0:
           status-pv_power ^SolarEdge$:^status-pv_power:
   attr:
     cmdState:
     cmdpause:
     wait:
     waitdel:
   condition:
     0           ::ReadingValDoIf($hash,'SolarEdge','status-pv_power')
   do:
     0:
       0           set ESP_PWM {( ( [Tasmota_30A_WR:ENERGY_Power]/1000+[SolarEdge:status-pv_power]) * 170 )}
     1:
   helper:
     NOTIFYDEV  SolarEdge,global
     event      status-load_power: 0.9,status-pv_power: 1.64,status-grid_power: -0.74
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   SolarEdge
     timerevent status-load_power: 0.9,status-pv_power: 1.64,status-grid_power: -0.74
     triggerDev SolarEdge
     timerevents:
       status-load_power: 0.9
       status-pv_power: 1.64
       status-grid_power: -0.74
     timereventsState:
       status-load_power: 0.9
       status-pv_power: 1.64
       status-grid_power: -0.74
     triggerEvents:
       status-load_power: 0.9
       status-pv_power: 1.64
       status-grid_power: -0.74
     triggerEventsState:
       status-load_power: 0.9
       status-pv_power: 1.64
       status-grid_power: -0.74
   internals:
   readings:
     all         SolarEdge:status-pv_power
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Photovoltaik


Damian

Dass die Ausführung nur einmal vorgenommen wird, wenn du das Attribut do always nicht gesetzt hast und der Zustand sich nicht ändert (cmd1 auf cmd2), ist dir bekannt?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stripeset

Vielen Dank das wars... das meinte ich mit "ich steh im Wald"...  ::)
hatte vorher Probleme mit der Ausführung und das DOIF dann neu angelegt, dabei aber das do-always anscheinend vergessen...
meine DOIFs laufen nämlich fast alle damit.


Nochmal danke für den Wink mit dem Brett