Neueste Beiträge

#11
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von peterboeckmann - 20 Mai 2026, 11:34:00
Hallo zusammen,

ich habe mal eine allgemeine Frage zur Einplanung eines Verbrauchers.

TL;DR: Wie bekomme ich den consumer16 sauber so konfiguriert, dass er bei ausreichender PV-Prognose maximal zwischen 9:30 und 19:00 läuft?

Langtext:

Hier geht es um einen Skimmer (Oberflächenabsauger) am Gartenteich.
Da ich die Fische zu festen Zeiten füttere (morgens ca. 9 Uhr, abends ca. 19 Uhr), darf der Skimmer nicht vor 9:30 und nicht nach 19:00 laufen.
Ich hatte gehofft, das mit folgendem attr hinzubekommen. Insbesondere die Schlüssel notbefore und notafter.
attr SolarForecast consumer16 HM_56E0D2_Sw_02
type=other
power=40
on=on
off=off
auto=Automatik
icon=debian
mode=can
mintime=SunPath:60:-60
interruptable=1
notbefore=09:30
notafter=19:00
locktime=300:300

Das notbefore wird auch sauber berücksichtigt. Zumindest habe ich noch nicht bemerkt, dass da was schief gelaufen wäre.
Das notafter scheint aber mit einer der anderen Einstellungen (vermutlich mintime=SunPath?) zu kollidieren.
Selbst wenn ich den Skimmer 19 Uhr "extern" ausschalte, wird er danach manchmal von der Logik wieder angeschaltet.

Vielen Dank für jeden Tipp!

Viele Grüße,
Peter
#12
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 20 Mai 2026, 11:23:38
...sowas hatte ich mir als Antwort schon gedacht bei meiner "kleine Einstellung".......

Im einem WP-Forum hatte mal einer geschrieben "Haben ist besser als Brauchen"  ;)


Jetzt weisst du auch warum ich zwischen 0.5- 2.0 Sekunden special_runTimeCentralTask habe.  8)

Diese Woche habe ich darin eigentlich eigentlich nur das mit Drift eingebaut.
#Test
Driftstatus:userFn_driftAmpel
:
:
CentralTask:special_runTimeCentralTask

Ich schaue mal ob es auch passiert wenn das "raus" ist - aber erst wenn ich wieder @home bin... ;D
#13
MQTT / Aw: Blink-Kameras MQTT-Bridge
Letzter Beitrag von JWRu - 20 Mai 2026, 11:05:48
Ich habe jetzt das selbe Setup wie @JoWiemann nach diesem Vorbild: https://forum.fhem.de/index.php?topic=143935.0 - hat auf Anhieb funktioniert.
Ich kann jetzt die einzelnen Kameras armen/disarmen, nur mit dem System funktioniert es nicht.
So sieht meine setList aus:
System:arm,disarm blink/sync/WeRu_1/cmd $EVTPART1
Flur:arm,disarm blink/cameras/Flur/cmd $EVTPART1
Terrasse:arm,disarm blink/cameras/Terrasse/cmd $EVTPART1

Vielleicht liegt's am Unterstrich im Systemnamen?
#14
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 20 Mai 2026, 11:03:37
@300P,

 :o ... is jetzt nicht dein Ernst  ;)

Da kann ich nichts finden. Vllt. gibt es mehr Infos wenn du global stacktrace=1 setzt.
Ansonsten mal schrittweise die letzten Änderungen in dem Attr zurücknehmen und testen damit es etwas eingekreist werden kann wo das Problem zu suchen ist.
#15
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 20 Mai 2026, 10:54:42
Hallo Wolfdieter,

Zitatwie lange muss das FC Modul eigentlich laufen bevor ein KI Training erfolgen kann?
Es werden aktuell mindestens 2000 Input Datensätze vorausgesetzt. Jede Stunde erzeugt das System einen neuen Datensatz.
D.h. 2000 Stunden -> das sind rund 84 Tage -> also fast 3 Monate bei 30 Tagen pro Monat.

Warum hast du alles gelöscht?
Ich meine das ist ja nicht schlimm, man muß jetzt nur etwas warten.  ;)

LG,
Heiko
#16
Unterstützende Dienste / Aw: Telegram instant messaging...
Letzter Beitrag von Raven - 20 Mai 2026, 10:25:09
Herzlichen Dank für den Gedanken-Anstoß!

Auch wenn ich zuvor schon mal von FHEM2FHEM gehört hatte, gibt es nach über 10 Jahren FHEM-Nutzung immer wieder neue spannende Inspirationen zur Problemlösung!

 
#17
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 20 Mai 2026, 10:24:28
Zitat von: DS_Starter am 20 Mai 2026, 09:14:25Kannst mal zeigen was du alles drin stehen hast.

Danke für den Hinweis - hier meine "kleine Einstellung"

#aktuelle Werte
Netz aktuell:Current_GridConsumption
Einspeisung aktuell:Current_GridFeedIn
Netz Heute bis jetzt:special_todayGridConsumption
Einspeisung Heute bis jetzt:special_todayGridFeedIn
#Verbrauch
Heute bis jetzt:special_todayConsumption
Heute erwartet:special_todayConsumptionForecastDay
Heute bis Sonnenuntergang:special_todayConForecastTillSunset
Heute bis Sonnenaufgang :special_conForecastTillNextSunrise
#
:
:
:
Sonnenuntergang bis Sonnenaufgang :special_conForecastComingNight
#PV
Heute bis jetzt:Today_PVreal
Heute erwartet:Today_PVforecast
Morgen erwartet:Tomorrow_PVforecast
Übermorgen erwartet:special_dayAfterTomorrowPVforecast
#Batterie Gesamt
Ladung aktuell:special_BatPowerIn_Sum
Entladung aktuell:special_BatPowerOut_Sum
Ladung heute:special_todayBatInSum
Entladung heute:special_todayBatOutSum
#Batterie01 | 02
Bat01-Ladeanforderung:Battery_ChargeRequest_01
Bat01-Ladung empfohlen:Battery_ChargeUnrestricted_01
Bat02-Ladeanforderung:Battery_ChargeRequest_02
Bat02-Ladung empfohlen:Battery_ChargeUnrestricted_02
#
MaxPVForecastTime:Today_MaxPVforecastTime
Bat01-Ladeabbruch empfohlen:Battery_ChargeAbort_01
 :
Bat02-Ladeabbruch empfohlen:Battery_ChargeAbort_02
#
Bat01-Ladung heute:special_todayBatIn_01
Bat01-Entladung heute:special_todayBatOut_01
Bat02-Ladung heute:special_todayBatIn_02
Bat02-Entladung heute:special_todayBatOut_02
#
Bat01-Ladeleistung aktuell:Current_PowerBatIn_01
Bat01-Entladeleistung aktuell:Current_PowerBatOut_01
Bat02-Ladeleistung aktuell:Current_PowerBatIn_02
Bat02-Entladeleistung aktuell:Current_PowerBatOut_02
#
Bat01-Ladestatus aktuell:Current_BatCharge_01
Bat01-Restapazität aktuell:Current_CapBat_01
Bat02-Ladestatus aktuell:Current_BatCharge_02
Bat02-Restapazität aktuell:Current_CapBat_02
#Settings
Autokorrektur:pvCorrectionFactor_Auto
Wetter:graphicShowWeather
History:graphicHistoryHour
ShowNight:graphicShowNight
#
Beam1:graphicBeam1Content
Beam2:graphicBeam2Content
Überschuss:Current_Surplus
Heater:userFn_HeaterManagement
#
Beam3:graphicBeam3Content
Beam4:graphicBeam4Content
Aussen-T:boiler_data_outdoortemp@MQTT_EMSwp
Set aiDecTree:aiDecTree
#
Beam5:graphicBeam5Content
Beam6:graphicBeam6Content
Debug:ctrlDebug
ContribUpdate:userFn_LoadContribcUpdate
#aiControl
Activate:aiControl->aiConActivate
Alpha:aiControl->aiConAlpha
TrainStart:aiControl->aiConTrainStart
:
#
ActFunc:aiControl->aiConActFunc
HiddenLayers:aiControl->aiConHiddenLayers
LearnRate:aiControl->aiConLearnRate
Momentum:aiControl->aiConMomentum
#
ShuffleMode:aiControl->aiConShuffleMode
ShufflePeriod:aiControl->aiConShufflePeriod
Steepness:aiControl->aiConSteepness
TrainAlgo:aiControl->aiConTrainAlgo
#
Profile:aiControl->aiConProfile
BitFailLimit:aiControl->aiConBitFailLimit
ConAbsOversample:aiControl->aiConAbsOversample
:
#Drift
Retrain Empfehlung:userFn_DriftRetrainRecommendation
:
:
:
#Test
Driftstatus:userFn_driftAmpel
:
:
CentralTask:special_runTimeCentralTask
#WP-Warmwasser
Temperatur aktuell:boiler_data_dhw_curtemp@MQTT_EMSwp
aktuelle max Stoptemperatur:boiler_data_dhw_settemp@MQTT_EMSwp
Programm:thermostat_data_dhw_modetype@MQTT_EMSwp
Mode:thermostat_data_dhw_mode@MQTT_EMSwp

Dazu noch sicherheitshalber meine UserReading:


Current_BatCharge999 {((ReadingsNum("SBS37","chargestatus",0) * 10 * ReadingsNum("SBS37","bat_rated_capacity",0))  + (ReadingsNum("SBS25_2","chargestatus",0) * 10 * ReadingsNum("SBS25_2","bat_rated_capacity",0))) / ( (ReadingsNum("SBS37","bat_rated_capacity",0) * 1000)  + (ReadingsNum("SBS25_2","bat_rated_capacity",0)*1000))*100},
Current_CapBat_01 {ReadingsNum("SBS37","bat_residual_cap",0)*1},
Current_CapBat_02 {ReadingsNum("SBS25_2","bat_residual_cap",0)*1},

user_presence {if(ReadingsVal("Handy_Guenter","state","") eq "present") {return "present"} elsif (ReadingsVal("Handy_Barbara","state","") eq "present") {return "present"} else {return 0}},

user_wpmodus {if(ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "heating") {return "heating"} elsif (ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "defrost") {return "defrost"} elsif (ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "hot water") {return "hotwater"} elsif (ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "off") {return "off"} elsif (ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "cooling") {return "cooling"} elsif (ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "pool") {return "pool"} elsif (ReadingsVal("MQTT_EMSwp","boiler_data_hpactivity","") eq "pool heating") {return "poolheating"} else {return 0}},

userFn_DriftBias,
userFn_DriftBiasLive,
userFn_DriftFlag,
userFn_DriftIndex,
userFn_DriftLastRecalTime,
userFn_DriftRefBias,
userFn_DriftRefSlope,
userFn_DriftRmseRelRatio,
userFn_DriftScore,
userFn_DriftSlope,
userFn_DriftSlopeLive,
userFn_DriftWindowsize,
userFn_ModelAgeHours,
userFn_RetrainReason,
userFn_RetrainRecommendation

und auch der zugehörige ctrlUserExitFn -Bereich

# BEGIN ############# Driftdaten ###################
{
  my $fanntyp = 'con';
 
  my $drift_window     = AiNeuralVal ($name, $fanntyp, 'DriftWindowSize',    '0');
  $drift_window          = (sprintf("%.2f", $drift_window));
  my $drift_score        = AiNeuralVal ($name, $fanntyp, 'DriftScore',         '0');
  $drift_score = (sprintf("%.2f", $drift_score));
  my $drift_index      = AiNeuralVal ($name, $fanntyp, 'DriftIndex',         '0');
  $drift_index = (sprintf("%.2f", $drift_index));
  my $drift_rmserel    = AiNeuralVal ($name, $fanntyp, 'DriftRmseRelRatio',  '0');
  $drift_rmserel = (sprintf("%.2f", $drift_rmserel));
  my $bias_ref         = AiNeuralVal ($name, $fanntyp, 'DriftRefBias',       '0');
  $bias_ref = (sprintf("%.2f", $bias_ref));
  my $drift_bias_live  = AiNeuralVal ($name, $fanntyp, 'DriftBiasLive',      '0');         
  $drift_bias_live = (sprintf("%.2f", $drift_bias_live));
  my $drift_bias       = AiNeuralVal ($name, $fanntyp, 'DriftBias',          '0');         
  $drift_bias = (sprintf("%.2f", $drift_bias));
  my $drift_flag       = AiNeuralVal ($name, $fanntyp, 'DriftFlag',          '0');
  ##$drift_flag = (sprintf("%.2f", $drift_flag));
  my $slope_ref        = AiNeuralVal ($name, $fanntyp, 'DriftRefSlope',      '0');
  $slope_ref = (sprintf("%.2f", $slope_ref));
  my $slope_live       = AiNeuralVal ($name, $fanntyp, 'DriftSlopeLive',     '0');         
  $slope_live = (sprintf("%.2f", $slope_live));
  my $drift_slope      = AiNeuralVal ($name, $fanntyp, 'DriftSlope',         '0');
  $drift_slope = (sprintf("%.2f", $drift_slope));
  my $model_age        = AiNeuralVal ($name, $fanntyp, 'ModelAgeHours',      'fresh_modell');
  $model_age = (sprintf("%.2f", $drift_slope));
  my $last_recaltm     = AiNeuralVal ($name, $fanntyp, 'DriftLastRecalTime', '0');
  $last_recaltm = (sprintf("%.2f", $last_recaltm));
  my $drift_retrecomd  = AiNeuralVal ($name, $fanntyp, 'RetrainRecommendation', 'keine');
  my $drift_retreason  = AiNeuralVal ($name, $fanntyp, 'RetrainReason',         'keiner');
 

  storeReading ('userFn_DriftWindowsize', $drift_window);
  storeReading ('userFn_DriftRmseRelRatio', $drift_rmserel);
  storeReading ('userFn_DriftRefSlope', $slope_ref);
  storeReading ('userFn_DriftSlopeLive', $slope_live);
  storeReading ('userFn_DriftSlope', $drift_slope);
  storeReading ('userFn_DriftRefBias', $bias_ref);
  storeReading ('userFn_DriftBiasLive', $drift_bias_live);
  storeReading ('userFn_DriftBias', $drift_bias);
  storeReading ('userFn_DriftScore', $drift_score);
  storeReading ('userFn_DriftIndex', $drift_index);
  storeReading ('userFn_DriftFlag', $drift_flag);
  storeReading ('userFn_DriftModelAgeHours', $model_age);
  storeReading ('userFn_DriftLastRecalTime', $last_recaltm);
  storeReading ('userFn_DriftRetrainRecommendation', $drift_retrecomd);
  storeReading ('userFn_DriftRetrainReason', $drift_retreason);
}
# END ################# Driftdaten Ende


#18
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von dieter114 - 20 Mai 2026, 09:58:28
Moin Heiko,
wie lange muss das FC Modul eigentlich laufen bevor ein KI Training erfolgen kann?
Ich habe vor 2 Tagen alles resettet und neu gestartet.
Bei COn  kommt immer noch
The AI for forecasting con is not yet operational.
Cause: the neural network for consumption forecasting is just being trained

LG WDS
#19
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 20 Mai 2026, 09:14:25
Moin,

@300P, das etwas mit deinen Definitionen graphicHeaderOwnspec zu tun. Da scheint etwas zu fehlen bzw. wird in einem Schlüssel nichts geliefert.
Kannst mal zeigen was du alles drin stehen hast.
#20
Solaranlagen / Aw: EASTRON SDM630-MODBUS fals...
Letzter Beitrag von Burny4600 - 20 Mai 2026, 08:59:29
Der Fehler wurde gefunden.

Laut www.eastrongroup.com ist ein falscher Algorithmus für den österreichischen EVU-Bereich Schuld daran, und dadurch kommt es zu diesen Messfehlern, wenn der Verbrauch sich ständig um 0W bewegt.

Dadurch stimmt der Energie-Import und Energie-Export mit dem EVU-Smartzähler nicht mehr überein und weicht gravieren ab.
Der falsche Algorithmus soll sich aber nur für die kWh und kVarh Berechnung auswirken.

Es ist beim Kauf der Eastron SDM630 immer abzuklären ob für den Einsatzort sich der richtige Algorithmus für den zum Einsatz kommenden EVU-Bereich passt.
Wie das geprüft werden kann gestalte sich schwierig, da meistens die Händler darüber keine Kenntnis haben.

Bei den zum Einsatz kommenden SDM630 für die Deye Inverter ist explizit darauf zu achten, dass sich ein Deye-Log auf dem SDM630 befindet.