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
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?
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