Bin froh dass es nun bei dir geht.defmod Nuki_SN MQTT2_DEVICE Nuki_SN
attr Nuki_SN alias FLU_Tuerschloss
attr Nuki_SN devStateIcon \
geschlossen:smartlock_locked@green \
offen:smartlock_unlocked@red \
öffnet:smartlock_unlocked@blue \
schließt:smartlock_locked@blue \
falle_geöffnet:smartlock_unlocked@red \
blockiert:general_warning@yellow \
undefiniert:general_question@grey
attr Nuki_SN event-min-interval battery:3600
attr Nuki_SN event-on-change-reading .*
attr Nuki_SN genericDeviceType lock
attr Nuki_SN icon nuki_lockjavascript:void(0);
attr Nuki_SN room 01_Wohnraum->Flur,Homekit
Nuki_SN:nuki/SN/connected:.* connected
Nuki_SN:nuki/SN/timestamp:.* timestamp
Nuki_SN:nuki/SN/deviceType:.* deviceType
Nuki_SN:nuki/SN/name:.* name
Nuki_SN:nuki/SN/firmware:.* firmware
Nuki_SN:nuki/SN/batteryChargeState:.* batteryChargeState
Nuki_SN:nuki/SN/batteryCritical:.* batteryCritical
Nuki_SN:nuki/SN/batteryCharging:.* batteryCharging
Nuki_SN:nuki/SN/keypadBatteryCritical:.* keypadBatteryCritical
Nuki_SN:nuki/SN/doorsensorBatteryCritical:.* doorsensorBatteryCritical
Nuki_SN:nuki/SN/state:.* state
Nuki_SN:nuki/SN/mode:.* mode
Nuki_SN:nuki/SN/serverConnected:.* serverConnected
Nuki_SN:nuki/SN/lockActionEvent:.* lockActionEvent
Nuki_SN:nuki/SN/commandResponse:.* commandResponse
{
my %map = (
# numerische Nuki-States
0 => "unkalibriert",
1 => "geschlossen",
2 => "öffnet",
3 => "offen",
4 => "falle_geöffnet",
5 => "falle_geöffnet",
7 => "schließt",
254 => "blockiert",
255 => "undefiniert",
# string-basierte Nuki-States
"lock" => "geschlossen",
"locking" => "schließt",
"unlock" => "öffnet",
"unlocking" => "öffnet",
"unlatch" => "falle_geöffnet",
"unlatching" => "falle_geöffnet",
"motorblocked" => "blockiert",
"undefined" => "undefiniert"
);
my $v = ReadingsVal($name, "state", "255");
return $map{$v} // $v;
}
clear
LockCurrentState=state,values=1:SECURED;2:SECURED;3:UNSECURED;4:UNSECURED;5:UNSECURED;7:SECURED;254:JAMMED;255:UNKNOWN;lock:SECURED;locking:SECURED;unlock:UNSECURED;unlocking:UNSECURED;unlatch:UNSECURED;unlatching:UNSECURED;motorblocked:JAMMED;undefined:UNKNOWN
LockTargetState=state,values=1:SECURED;3:UNSECURED;4:UNSECURED;2:UNSECURED;7:UNSECURED;lock:SECURED;unlock:UNSECURED;unlatch:UNSECURED,cmds=SECURED:lock;UNSECURED:unlatch
2026.01.19 21:49:29 1: PERL WARNING: Use of uninitialized value $comp in concatenation (.) or string at ./FHEM/36_Shelly.pm line 4940.
2026.01.19 21:49:29 1: stacktrace:
2026.01.19 21:49:29 1: main::__ANON__ called by ./FHEM/36_Shelly.pm (4940)
2026.01.19 21:49:29 1: main::Shelly_status2G called by ./FHEM/36_Shelly.pm (7615)
2026.01.19 21:49:29 1: main::Shelly_HttpResponse called by FHEM/HttpUtils.pm (756)
2026.01.19 21:49:29 1: main::__ANON__ called by fhem.pl (786)
2026.01.19 21:49:29 1: PERL WARNING: Use of uninitialized value $comp in string eq at ./FHEM/36_Shelly.pm line 4941.
2026.01.19 21:49:29 1: stacktrace:
2026.01.19 21:49:29 1: main::__ANON__ called by ./FHEM/36_Shelly.pm (4941)
2026.01.19 21:49:29 1: main::Shelly_status2G called by ./FHEM/36_Shelly.pm (7615)
2026.01.19 21:49:29 1: main::Shelly_HttpResponse called by FHEM/HttpUtils.pm (756)
2026.01.19 21:49:29 1: main::__ANON__ called by fhem.pl (786)
2026.01.19 21:49:29 1: PERL WARNING: Use of uninitialized value $comp in string eq at ./FHEM/36_Shelly.pm line 4958.
2026.01.19 21:49:29 1: stacktrace:
2026.01.19 21:49:29 1: main::__ANON__ called by ./FHEM/36_Shelly.pm (4941)
2026.01.19 21:49:29 1: main::Shelly_status2G called by ./FHEM/36_Shelly.pm (7615)
2026.01.19 21:49:29 1: main::Shelly_HttpResponse called by FHEM/HttpUtils.pm (756)
2026.01.19 21:49:29 1: main::__ANON__ called by fhem.pl (786)
Zitat von: DS_Starter am 19 Januar 2026, 21:51:10Edit: Oder meinst du dass man mehrere Versionen sichern kann?

ZitatKannst du evtl. die Datei des Traininglaufes in deine Backuproutine operatingMemory dort noch mit einbauen ?Das ist schon passiert denn die KI Daten müssen ja einen FHEM Restart überleben.
update delete https://rm.byterazor.de/upd-fhem-ntfy/controls_byterazor-fhem-ntfy.txt
Zitat von: DS_Starter am 19 Januar 2026, 20:19:41Abhilfe wäre z.B. ein "Füllsensor" der Schmutzwäsche. Ab x% wird der Wama Betrieb wahrscheinlich ....
.
ZitatNun ist es so, dass für die Berechnung der Heizkurve (d.h. Abweichung SOLL zu IST) eben diese Durchschnittstemperatur verwendet wird, für die Wärmeleistung, die die Wärmepumpe gerade liefern kann, ist aber die tatsächliche Außentemperatur relevant.Ihr lasst am Besten nur die gemessene Temperatur mitteilen. Diese Werte werden für jede Stunde in den Rohdaten gespeichert. Daraus werden dann aber 1h / 3h Deltas oder bei Bedarf und Feature-Implementierung rollierende 3h / 6h oder 12h Durchschnitte der KI zur Verfügung gestellt. Das passiert aber alles bei der Semantik/Feature-Implementierung die ich gemeinsam mit euch baue und testen... Schritt für Schritt.
Was macht für die KI nun Sinn "bekanntzumachen"?
ZitatWas ist künftig mit der Kühlung über die Wärmepumpe? Auch die habe ich in einem separaten Gerät abgebildet. Zum Einen, weil die Leistungsaufnahme im Kühlbetrieb höher ist, und zum Anderen um der Prognose die Chance zu geben die Abhängigkeiten richtig zu lernen.Ja, genau eine Kombination. Auch wenn der heatpump-Consumer ein paar Besonderheiten hat, gelten die grundsätzlichen Schlüssel-Möglichkeiten. Also hier speziell der pcurr-Schlüssel, den man mit einem <Schwellenwert> (W) angeben kann, ab dem der Verbraucher als aktiv gewertet wird. Über swstate bekommt das Modul mit dass der Consumer "physisch" on/off ist und über den optionalen Schwellenwert ob er logisch! on/off ist.
Allerdings - und das ist der große Unterschied zum Heizen - ist der Kühlbetrieb da auch "ein", wenn der Verdichter nicht läuft:
Im Kühlbetrieb wird permanent das Wasser durch die Kühlkreise gepumpt, der Verdichter schaltet zyklisch ein, um es abzukühlen. Ein/Aus über "swstate" zu erkennen, wäre dann eher kontraproduktiv, weil das die Info zum Stromverbrauch ad absurdum führt. Hierfür wäre dann doch die Schwelle des Energiebedarfs sinnvoll, von mir aus auch eine Kombination aus beidem?
ZitatFür mich ist noch nicht klar, wie die realen Werte der Energie in den KI-Algorithmus eingehen. Stellt die aktuelle Gesamtleistung die Berechnungsgrundlage dar oder fließen die einzelnen Verbraucher - also nicht nur type=heatpump - mit ihren jeweils aktuell anstehenden Leistungen getrennt ein?Das ist generell ein schwieriges Thema. Grundsätzlich kann man dem neuronalen Netz nur Verknüpfungen/Sematiken bereitstellen, die das Verhandensein eines bestimmten Energieverbrauchs erklären. Das sind zum Beispiel:
# --------------------------------------------------------
# Semantik: Menschlicher Tagesrhythmus (PV-unabhängig)
# --------------------------------------------------------
semantics_human_rhythm => sub {
my ($f) = @_;
return [
# --- MORGEN ---
softplus($f->{delta1_norm_pos} * $f->{hour_class_morning}), # Aufstehen / Geräte an
# --- MITTAG ---
softplus($f->{delta1_norm_pos} * $f->{hour_class_noon}), # Kochen / Haushalt
# --- ABEND ---
softplus($f->{delta1_norm_pos} * $f->{hour_class_evening}), # Kochen / Abendaktivität
# --- SPÄTER ABEND ---
softplus($f->{delta1_norm_neg} * $f->{hour_class_lateevening}), # Geräte gehen aus
];
},
ZitatBei getrennter Erfassung könnte die Auswertung von EIN/AUS-Signalen auch anderer großer Verbraucher durch die eindeutige Zuordnung der Verbräuche die Mustererkennung und damit die Treffsicherheit der Prognose für die Wärmepumpe aber auch insgesamt u U. weiter verbessern.