76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

Begonnen von DS_Starter, 11 Februar 2024, 14:11:00

Vorheriges Thema - Nächstes Thema

DS_Starter

ZitatDann habe ich aber gelesen, dass der dritte Parameter ein Threshold ist und kein Rückgabewert für die Leistung. Oder sollte das mit Perlcode doch so funktionieren?
Der ist tatächlich nur ein threshold um z.B. einen Standby-Leistung von 0.5 W als "aus" definieren zu können.
Funktiniert also so nicht.
Da fällt mir adhoc auch keine Lösung ein, ist auch schon spät  ;) Morgen vllt....
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

kask

Kannst du mal den call zeigen oder sagen wie du deine sub aufrufst?
Da du ja immer nur ein Device bearbeitest könnte das andere Device ja noch den alten Wert haben.
Wäe es da nicht sinniger beide devices in der sub abzufrühstücken und wenn sich eines ändert das andere sich ändern muß?!
Wie gesagt, keine Ahnung wie du das verstrickt hast.

hugomckinley

Aufruf durch das jeweilige Device:
pcurr=Pool_Pin31_monotonic_count_PowerCurrent:W:{main::GetPCurr("pump_low",$VALUE)}
Ich müsste eben, den Verbrauch korrigieren, was so aber nicht funktioniert, da es ja nur ein Thresholdwert ist und keine Leistung die zurückgegeben wird.
Bezüglich alter Wert, würde das höchstens im Umschaltmoment des Zählers passieren und da dann nur für einen Zyklus. Sollte vernachlässigbar sein.
Natürlich wäre es "korrekter" wenn man es in einem Device machen würde, aber das ist nicht möglich und sicher auch gefährlich, wenn ein Consumer in den Leistungsdaten des anderen herumschreiben würde.
Ich hoffe ich habe die Frage richtig verstanden.
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

hugomckinley

#3573
Ich glaube ich habe einen Fehler bei der Berechnung des durchschnittlichen Überschusses gefunden:

Es werden die letzten drei Werte gemittelt. Der Durchschnitt steigt, obwohl die Einspeisung 0W ist.
025.07.21 12:48:00 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "07" ###############
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - ConsumptionRecommended calc method: average:3, surplus: 1173.66666666667
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate before switching: on
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate before switching: on
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - general switching parameters => auto mode: 1, Current household consumption: 4228 W, nompower: 1000, surplus: 0 W, planstate: switched on: 2025-07-21 07:31:53 - 2025-07-21 20:52:59, starttime: 21.07.2025 07:31:53
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - isInLocktime: 0
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch on' => swoncond: 1, on-command: pump_high on
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_High_On}"
-> Check successful
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - device 'dum_valve' is used as switching device
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Characteristic value: 3
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch off' => swoffcond: 0, off-command: pump_high off
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - is Consumption recommended: 1
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate after switching: on
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate after switching: on
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - cycleDayNum: 1
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - last cycle start time: 2025-07-21 07:31:53
2025.07.21 12:48:00 1: energy_mgmt DEBUG> consumer "07" - last cycle end time: still running

2025.07.21 12:49:00 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "07" ###############
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - ConsumptionRecommended calc method: average:3, surplus: 1545.66666666667
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate before switching: on
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate before switching: on
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - general switching parameters => auto mode: 1, Current household consumption: 4374 W, nompower: 1000, surplus: 0 W, planstate: switched on: 2025-07-21 07:31:53 - 2025-07-21 20:52:59, starttime: 21.07.2025 07:31:53
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - isInLocktime: 0
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch on' => swoncond: 1, on-command: pump_high on
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_High_On}"
-> Check successful
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - device 'dum_valve' is used as switching device
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Characteristic value: 3
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch off' => swoffcond: 0, off-command: pump_high off
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - is Consumption recommended: 1
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate after switching: on
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate after switching: on
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - cycleDayNum: 1
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - last cycle start time: 2025-07-21 07:31:53
2025.07.21 12:49:00 1: energy_mgmt DEBUG> consumer "07" - last cycle end time: still running

2025.07.21 12:50:00 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "07" ###############
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - ConsumptionRecommended calc method: average:3, surplus: 2167
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate before switching: on
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate before switching: on
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - general switching parameters => auto mode: 1, Current household consumption: 4443 W, nompower: 1000, surplus: 0 W, planstate: switched on: 2025-07-21 07:31:53 - 2025-07-21 20:52:59, starttime: 21.07.2025 07:31:53
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - isInLocktime: 0
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch on' => swoncond: 1, on-command: pump_high on
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_High_On}"
-> Check successful
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - device 'dum_valve' is used as switching device
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Characteristic value: 3
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch off' => swoffcond: 0, off-command: pump_high off
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - is Consumption recommended: 1
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate after switching: on
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate after switching: on
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - cycleDayNum: 1
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - last cycle start time: 2025-07-21 07:31:53
2025.07.21 12:50:00 1: energy_mgmt DEBUG> consumer "07" - last cycle end time: still running

2025.07.21 12:51:00 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "07" ###############
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - ConsumptionRecommended calc method: average:3, surplus: 2959
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate before switching: on
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate before switching: on
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - general switching parameters => auto mode: 1, Current household consumption: 4342 W, nompower: 1000, surplus: 0 W, planstate: switched on: 2025-07-21 07:31:53 - 2025-07-21 20:52:59, starttime: 21.07.2025 07:31:53
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - isInLocktime: 0
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch on' => swoncond: 1, on-command: pump_high on
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_High_On}"
-> Check successful
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - device 'dum_valve' is used as switching device
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Characteristic value: 3
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - Check Context 'switch off' => swoffcond: 0, off-command: pump_high off
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - is Consumption recommended: 1
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - Interrupt Info:
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - current planning state: started
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - physical Switchstate after switching: on
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - logical Switchstate after switching: on
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - cycleDayNum: 1
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - last cycle start time: 2025-07-21 07:31:53
2025.07.21 12:51:00 1: energy_mgmt DEBUG> consumer "07" - last cycle end time: still running
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

hugomckinley

#3574
Kann es sein, dass swoffcond nicht ausgewertet wird bzw. nicht wirksam wird, wenn interruptable=0 gesetzt ist?

Ich habe einen Consumer, der am Morgen eingeschaltet wird, sobald der Überschuss reicht, aber spätestens wenn es 8:00 ist. (wird über swoncond gelöst)
Er darf dann nicht unterbrochen werden, bis eine externe Bedingung zutrifft. (swoffcond, welche die umgewälzte Wassermenge berücksichtigt. Laufzeit der Pumpe geht leider nicht, da die Wassermenge nicht nur von dieser Pumpe abhängt. Somit kann ich mintime nicht verwenden.)

Consumer:
Pool_Strom_Pumpe:Poolpumpe
asynchron=0
auto=pump_low_auto
icon=scene_pool
interruptable=0
mintime=SunPath:0:180
mode=must
noshow=0
notafter=08:00
off="pump_low off"
on="pump_low on"
pcurr=Pool_Pin31_monotonic_count_PowerCurrent:W
power=200
surpmeth=3
switchdev=dum_valve
swoffcond=Pool_Strom_Heizung:Pool_Pin31_monotonic_count_PowerCurrent:{main::Check_Pump_Low_Off}
swoncond=Pool_Strom_Heizung:Pool_Pin31_monotonic_count_PowerCurrent:{main::Check_Pump_Low_On}
swstate=pump_low:on:off
type=other

Wie kann ich denn den Consumer trotzdem ausschalten?

So sah das Log dazu aus:
Nach dem Umschalten von interruptable auf =1 wurde sofort ausgeschaltet.
2025.07.21 15:46:07 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: off
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 857 W, nompower: 200, surplus: 0 W, planstate: switched on: 2025-07-21 06:36:52 - 2025-07-21 23:52:58, starttime: 21.07.2025 06:36:52
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 1, on-command: pump_low on
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_Low_On}"
-> Check successful
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 0
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: on
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: off
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 3
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 15:35:02
2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: 2025-07-21 15:40:07

2025.07.21 15:47:01 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: on
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 850 W, nompower: 200, surplus: 0 W, planstate: switched on: 2025-07-21 06:36:52 - 2025-07-21 23:52:58, starttime: 21.07.2025 06:36:52
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 1, on-command: pump_low on
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_Low_On}"
-> Check successful
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 1
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 15:47:01 1: energy_mgmt DEBUG> consumer "05" - send switch command now: "set dum_valve pump_low off"
2025.07.21 15:47:02 1: energy_mgmt DEBUG> consumer "05" - current planning state: interrupting
2025.07.21 15:47:02 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: off
2025.07.21 15:47:02 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: off
2025.07.21 15:47:02 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 3
2025.07.21 15:47:02 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 15:35:02
2025.07.21 15:47:02 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: 2025-07-21 15:40:07
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

300P

Zitat von: hugomckinley am 21 Juli 2025, 16:01:09Kann es sein, dass swoffcond nicht ausgewertet wird bzw. nicht wirksam wird, wenn interruptable=0 gesetzt ist?

Meines Wissens nach geht swoffcond vor !  :)
Das würde aber auch deinem Ansinnen - nach dem Start IMMER auf den externen OFF-Befehl warten - entgegenstehen wenn du interruptable=1 einstellst.


Zitat von: hugomckinley am 21 Juli 2025, 16:01:09Laufzeit der Pumpe geht leider nicht, da die Wassermenge nicht nur von dieser Pumpe abhängt. Somit kann ich mintime nicht verwenden.)

Du hast aber "mintime" doch definiert, was den ganzen Tag von Morgens bis Abend heißt ?
Das ist sicherlich etwas lang => ;) - ich würde eine ermittelte max-Laufzeit eintragen.  

mintime=SunPath:0:180Demnach aktuell :  von Sonnenaufgang (+ 0 Minuten) bis zum Sonnenuntergang (+ 180 Minuten)

Vorschlag: mintime=360  (das sind schon 6 Stunden lang)  ;D

Zusätzlich vorerst dann einen Eintrag notbefore=06:00 um die Einschaltzeit etwas einzugrenzen.
Dann hast du nach dem Einschalten von attr "crtlDebug" =>> consumerSwitching01 nachts evtl. auch weniger Daten beim SF-ctrldebug.

Damit solltest du evtl. dann morgen im Log erkennen können warum nicht geschaltet wird.
Einen Versuch wäre es Wert.

Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

300P

Zitat von: hugomckinley am 21 Juli 2025, 16:01:09So sah das Log dazu aus:
Nach dem Umschalten von interruptable auf =1 wurde sofort ausgeschaltet.


logisch =>> Surplus = 0

2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

hugomckinley

Zitatlogisch =>> Surplus = 0
Stimmt, war nicht die swoffcond
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

hugomckinley

#3578
ZitatDas würde aber auch deinem Ansinnen - nach dem Start IMMER auf den externen OFF-Befehl warten - entgegenstehen wenn du interruptable=1 einstellst.
Das ist ja mein Problem, dass ich interruptable=0 setzen muss.

ZitatDu hast aber "mintime" doch definiert, was den ganzen Tag von Morgens bis Abend heißt ?
Das ist sicherlich etwas lang => ;) - ich würde eine ermittelte max-Laufzeit eintragen. 
Ich meine, dass ich keine sinnvolle mintime in Minuten angeben kann.
Das Problem ist, dass sich keine maximale Laufzeit ermitteln lässt. Sie kann irgendwo zwischen 5 und 16 Stunden liegen. Derzeit bei meiner Steuerung: Start: über 250W Überschuss, Ende: spätestens 23:59 wenn die Menge nicht erreicht wurde, ansonsten früher. Kann auch mal 13:00 sein.

ZitatDamit solltest du evtl. dann morgen im Log erkennen können warum nicht geschaltet wird.
Ich sehe den Grund leider nicht:
Zuerst ist der logic state on und dann off, aber es wird nie geschaltet. Erst als ich interruptable auf =1 gesetzt habe wurde wegen surplus=0 geschaltet.
Es wird last cycle end time: 2025-07-21 15:28:07 gesetzt, was ja heißen würde, dass die Einplanung beendet wurde, oder?
Man sieht aber nicht, dass das swoffcond zur Ausplanung geführt hätte.
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low offAber der physical Switchstate ändert sich nicht und es bleibt immer so.
2025.07.21 15:28:07 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: on
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 860 W, nompower: 200, surplus: 0 W, planstate: switched on: 2025-07-21 06:36:52 - 2025-07-21 23:52:58, starttime: 21.07.2025 06:36:52
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 1, on-command: pump_low on
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_Low_On}"
-> Check successful
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 0
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: on
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: on
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 2
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 15:23:07
2025.07.21 15:28:07 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: still running

2025.07.21 15:29:08 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: off
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 865 W, nompower: 200, surplus: 0 W, planstate: switched on: 2025-07-21 06:36:52 - 2025-07-21 23:52:58, starttime: 21.07.2025 06:36:52
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 1, on-command: pump_low on
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_Low_On}"
-> Check successful
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 0
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: on
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: off
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 2
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 15:23:07
2025.07.21 15:29:08 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: 2025-07-21 15:28:07

2025.07.21 15:29:29 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: off
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 846 W, nompower: 200, surplus: 0 W, planstate: switched on: 2025-07-21 06:36:52 - 2025-07-21 23:52:58, starttime: 21.07.2025 06:36:52
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 1, on-command: pump_low on
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - isAddSwitchOnCond Info: The value "" resulted in 'true' after exec "{main::Check_Pump_Low_On}"
-> Check successful
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 0
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - current planning state: started
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: on
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: off
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 2
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 15:23:07
2025.07.21 15:29:29 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: 2025-07-21 15:28:07

Nachdem ich meine Check_Pump_Low_On so geändert habe, dass sie 0 liefert, schaut es im Log genauso aus wie bei Check_Pump_Low_Off.
Ich glaube, dass bei interruptable=0 die swoffcond auf 0 gesetzt wir und nicht ausgewertet wird. Sie liefert definitiv 1.
2025.07.21 19:17:12 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - current planning state: continued
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: off
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 936 W, nompower: 250, surplus: 0 W, planstate: continued:, starttime: 21.07.2025 06:36:52
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 0, on-command: pump_low on
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 0
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - current planning state: continued
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: on
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: off
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 7
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 18:09:10
2025.07.21 19:17:12 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: 2025-07-21 18:12:10

----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

300P

Es gibt doch auch eine artähnliche Lösung im WIKI:  ;)
Schau mal dort - das müsste auf jeden Fall bei dir passen.

siehe WIKI: Fallstudie: Umwälzpumpe Pool soll X Stunden am Tag laufen. Ist kein PV-Überschuß vorhanden, müssen die X Stunden/Tag trotzdem erreicht werden


Alternativ schaue dir auch mal die Option "spignorecond" an :

Bedingung um einen fehlenden PV Überschuß zu ignorieren (optional). Bei erfüllter Bedingung wird der Verbraucher entsprechend
der Planung eingeschaltet auch wenn zu dem Zeitpunkt kein PV Überschuß vorliegt.
ACHTUNG: Die Verwendung beider Schlüssel spignorecond und interruptable kann zu einem unerwünschten Verhalten führen!
Device - Device zur Lieferung der Bedingung
Reading - Reading welches die Bedingung enthält
Die Bedingung kann als regulärer Ausdruck oder als in {..} eingeschlossener Perl-Code formuliert sein:
Regex - regulärer Ausdruck der für eine 'wahre' Bedingung erfüllt sein muß
{Perl-Code} - der in {..} eingeschlossene Perl-Code muß 'wahr' liefern um die Bedingung zu erfüllen. Er darf keine Leerzeichen enthalten.
Der Wert von Device:Reading wird dem Code mit der Variable $VALUE übergeben.
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

DS_Starter

Hallo zusammen,

ZitatKann es sein, dass swoffcond nicht ausgewertet wird bzw. nicht wirksam wird, wenn interruptable=0 gesetzt ist?
Nein. Wie 300P schon schrieb ist swoffcond priorisiert. 

Es wird aber swoffcond "false" ermittelt:

2025.07.21 15:46:07 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off

ZitatIch glaube ich habe einen Fehler bei der Berechnung des durchschnittlichen Überschusses gefunden:

Es werden die letzten drei Werte gemittelt. Der Durchschnitt steigt, obwohl die Einspeisung 0W ist.
Fehler nicht, aber eine ungünstige Implementierung meinerseits. Der Durchschnitt wird aktuell über die ältesten X Werte gebildet wenn X<20 gesetzt ist. Das ändere ich in Verwendung der neuesten/letzten Werte um.

LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

hugomckinley

ZitatNein. Wie 300P schon schrieb ist swoffcond priorisiert. 
Sehr gut. Es hat auch schon so funktioniert bilde ich mir ein. (aber bei einem anderen Consumer)

Aber ein
{Check_Pump_Low_Off}in der Befehlszeile von FHEM
ergibt 1.
Das ist ja das merkwürdige.
Ich bin verwirrt ...

Log(im gleichen Zustand):
2025.07.21 20:47:22 1: energy_mgmt DEBUG> ############### consumerSwitching consumer "05" ###############
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - ConsumptionRecommended calc method: average:3, surplus: 0
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - additional consumption after switching on (if currently 'off'): 0 W
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - current planning state: suspended
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate before switching: on
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate before switching: on
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - general switching parameters => auto mode: 1, Current household consumption: 969 W, nompower: 250, surplus: 0 W, planstate: suspended:, starttime: 21.07.2025 19:58:05
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - isInLocktime: 0
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch on' => swoncond: 0, on-command: pump_low on
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - device 'dum_valve' is used as switching device
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - Interrupt Characteristic value: 0
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - Check Context 'switch off' => swoffcond: 0, off-command: pump_low off
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - is Consumption recommended: 0
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - current planning state: suspended
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - physical Switchstate after switching: on
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - logical Switchstate after switching: on
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - cycleDayNum: 15
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - last cycle start time: 2025-07-21 20:43:22
2025.07.21 20:47:22 1: energy_mgmt DEBUG> consumer "05" - last cycle end time: still running

ZitatDas ändere ich in Verwendung der neuesten/letzten Werte um.
Herzlichen Dank.
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

DS_Starter

Naja, der Aufruf von {Check_Pump_Low_Off} ohne Argumente? ... was wäre zu erwarten?
Wie sieht diese Sub denn aus?
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

hugomckinley

sub
Check_Pump_Low_Off{
if(((((ReadingsVal("pump_l1_hc","waterAmount",0) + ReadingsVal("pump_l2_hc","waterAmount",0)) > 90)
&& (ReadingsVal("dum_valve","bath_mode","0") == 1)
)
|| (((ReadingsVal("pump_l1_hc","waterAmount",0) + ReadingsVal("pump_l2_hc","waterAmount",0)) > 45)
&& ReadingsVal("dum_valve","bath_mode","1") == 0
)
)
&& ReadingsVal("dum_valve","heatpump","on") eq "off"
&& ReadingsVal("dum_valve","special_function","") eq "none"
&& ReadingsVal("dum_valve","valve_position","") eq "normal"
)
{return 1}
else
{return 0}
}
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

DS_Starter

Es wird ja

swoffcond=<Device>:<Reading>:<Bedingung>
angegeben. Das Device/Reading muß den Vergleichswert liefern der mit der Bedingung verglichen wird.
Dabei kann Bedingung ein Regex oder, wie bei dir, eine Funktion sein.

D.h. du müsstest mal "Pool_Strom_Heizung" Reading "Pool_Pin31_monotonic_count_PowerCurrent" checken ob die Kombi den Vergleichswert "1" liefert.

Ich werde die Commandref noch etwas präziser formulieren.

 
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter