76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

hugomckinley

@Heiko
Danke für den Denkanstoß, das Problem fand sich zwischen Sessel und Bildschirm, nach dem Motto: Als ichs mir dachte wars noch gut!

Ich Depp habe Variablen außerhalb der Sub deklariert, da ich sie an mehreren Stellen brauche. Das Problem war, dass es keine Config-Variablen waren, sondern, dass diese in der Definition ein ReadingsVal() enthielten. Das hat dazu geführt, dass jedes Speichern die aktuellen Werte gelesen hat und somit in diesem Moment "funktionierte".

Jetzt dürfte es tatsächlich funktionieren ;-)

Das mit der doppelten Ausführung der swoffcond muss ich mir noch anschauen, denn das ist noch immer der Fall.
Bewusst führe ich sie nicht zusätzlich aus, aber wer weiß ...

Danke,
Hugo

----------------------------------------------------
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, ...

Wolle02

Hallo Heiko,

Zitat von: DS_Starter am 24 August 2025, 22:25:56planControl->genPVdeviation ist erweitert um den Perspektivwechsel für die Darstellung der Abweichung zu ermöglichen:

genPVdeviation    Legt die Methode zur Berechnung der Abweichung von prognostizierter und realer PV Erzeugung fest.
   Das Reading Today_PVdeviation wird in Abhängigkeit dieser Einstellung erstellt.
   Der optionale Zusatz ':reverse' legt fest, dass PV-Erzeugung > Prognose als positiver statt negariver Wert dargestellt wird (Perspektivwechsel)
   daily[:reverse] - Berechnung und Erstellung von Today_PVdeviation erfolgt nach Sonnenuntergang (default)
   continuously[:reverse] - Berechnung und Erstellung von Today_PVdeviation erfolgt fortlaufend
   


scheint gut zu funktionieren. Vielen herzlichen Dank.

hugomckinley

ZitatDas mit der doppelten Ausführung der swoffcond muss ich mir noch anschauen, denn das ist noch immer der Fall.
Bewusst führe ich sie nicht zusätzlich aus, aber wer weiß ...
Ist bei swoffcond der Fall, aber bei swoncond beim selben Verbraucher nicht:
(auch dort habe ich die Log-Ausgabe genauso vor den returns eingefügt)
sub
Check_Pump_Low_Off{
my $bath_mode = ReadingsVal($pool_dummy,"bath_mode",0);
my $m3_l1 = ReadingsVal($water_counter_l1,"waterAmount",0);
my $m3_l2 = ReadingsVal($water_counter_l2,"waterAmount",0);
my $water_volume = AttrVal($pool_dummy,"water_volume",42); #42m³
my $desired_cf_l1 = AttrVal($pool_dummy,"desired_cf_l1",0); #circulation_factor_level1
my $desired_cf_l2 = AttrVal($pool_dummy,"desired_cf_l2",0); #circulation_factor_level2
my $bathmode_factor = AttrVal($pool_dummy,"bathmode_factor",1);
my $desired_amount_l1;
my $desired_amount_l2;
my $amount = $m3_l1 + $m3_l2;
if($bath_mode == 1){
$desired_amount_l1 = $desired_cf_l1 * $water_volume;
$desired_amount_l2 = $desired_cf_l2 * $water_volume;
}else{
$desired_amount_l1 = $desired_cf_l1 * $water_volume/$bathmode_factor;
$desired_amount_l2 = $desired_cf_l2 * $water_volume/$bathmode_factor;
}

if(($amount > $desired_amount_l1)
&& (ReadingsVal($pool_dummy,"pump_high","on") eq "off"  && ReadingsAge($pool_dummy,"pump_high",0) >160)
&& ReadingsVal($pool_dummy,"special_function","") eq "none"
&& ReadingsVal($pool_dummy,"valve_position","") eq "normal"
)
{
Log3 ("SolarForecast", 1, qq{SolarForecast: Pump Low swoffcond - true});
return 1;
}else{
Log3 ("SolarForecast", 1, qq{SolarForecast: Pump Low swoffcond - false});
return 0;
}
}
2025.08.25 09:00:04 1: SolarForecast: Pump Low swoncond - true
2025.08.25 09:00:04 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:00:04 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:01:00 1: SolarForecast: Pump Low swoncond - true
2025.08.25 09:01:00 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:01:00 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:02:00 1: SolarForecast: Pump Low swoncond - true
2025.08.25 09:02:00 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:02:00 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:03:00 1: SolarForecast: Pump Low swoncond - true
2025.08.25 09:03:00 1: SolarForecast: Pump Low swoffcond - false
2025.08.25 09:03:00 1: SolarForecast: Pump Low swoffcond - false

Definition des Consumers:
dum_valve:Pool+Low
aliasshort=Low
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=pump_low_power
power=250
surpmeth=median_13
switchdev=dum_valve
swoffcond=dum_valve:sf_true:{main::Check_Pump_Low_Off}
swoncond=dum_valve:sf_true:{main::Check_Pump_Low_On}
swstate=pump_low:on:off
type=other

Da es (anscheinend) keine Auswirkung hat und nur bei mir auftritt, irgnoriere ich es erstmal. Vielleicht finde ich mal etwas.
----------------------------------------------------
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, ...

Wolle02

Ich hätte eine Frage zu swoffcond bei den Consumern. Im Hilfetext ist nur von einem Device:Reading Paar die Rede. Kann ich hier auch auf mehrere, logisch verknüpfte Device:Reading Paare prüfen? Oder muss ich hier ein Userreading erstellen in dem das Ergebnis der Prüfung abgelegt wird und auf das dann in swoffcond geprüft wird?

hugomckinley

#3829
Ich mache diese Prüfungen in einer eigenen Funktion, deren Rückgabewert dann mit "true" aus einem Dummyreading, das immer 1 ist, verglichen wird. Somit sind beliebig aufwendige Prüfungen möglich.
Im Wiki kannst du dir anschauen, wie ich das mache: Wiki -Abschnitt Poolsteuerung ...

Grüße,
Hugo
----------------------------------------------------
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, ...