Geschirrspühler 2024

Begonnen von eisman, 12 Dezember 2024, 15:21:17

Vorheriges Thema - Nächstes Thema

eisman

Hi,

ich habe heute meinen Geschirrspüler bekommen, was mich auf die Idee brachte,
mir mal Home Connect anzuschauen. Die erste Hürde ein Login anzulegen,
auf der Webseite geht es nicht, und auf meinem Handy spiele ich solche Software nicht,
(Sicherheit). Oder ich müsste mir von einem Anwalt die Richtlinien für den Einsatz der
Software durchlesen.

dann Geht das ganze nur über Internet. Lokal keine Möglichkeit, also wieder eine Möglichkeit ein gerät vom Hersteller abzuschalten. Geht nicht, doch das geht einen TV bist zu Tag X war eine Verbindung möglich nach dem Tag X gab es die Funktion nicht mehr. Hersteller gab dazu eine Info, wenn man dieses weiter nutzen Möchte, muss man das business model kaufen (....).

also stufe ich für mich Home Connect als sinnloses und nicht nutzbares Werkzeug ein.
auch für die Einrichtung gibt es ein NoGo.....

gehe ich halt und schau ob der Meister fertig mit dem Abwasch ist.

gruss

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

enno

Moin,

Ich messe den Verbrauch des Geschirrspülers. Wenn die "Kurve" passt, schickt mir FHEM über SIGNAL eine Nachricht. Alles ohne Cloud. Gleiches System bei Wäschetrockner und Waschmaschine.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

eisman

hi,

danke, klar werde ich auch machen.
Ist nur schade das man Ressourcen für nichts verschwendet.

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Frank_Huber

seit der Geschirrspüler von alleine auf geht ist mir egal wann er fertig wird.
Eine Benachrichtigung ist damit ebenso wie die Cloud Anbindung unnötig.

aber die Frau mag es, also darf die Spülmaschine ihren Server kontaktieren damit die App auch funktioniert...

tobi01001

Von alleine auf geht unserer noch nicht.

Dafür startet unserer (meist Nachts) von selbst im Zeitfenster in welchem der Strom am günstigsten ist. Eingestellt ist nur, ab wann er starten darf und wann ich gerne das Geschirr fertig hätte (Werktags und Wochenende). Tab rein, Tür zu. Den Rest macht fhem - (ok, über die BSH cloud) - dann ganz alleine.

Wenn der dann noch selbst aufgehen würde, sich selber ein- und ausräumen und ohne cloud auskäme, wäre die Geschirrspülwelt halbwegs perfekt.  ;D
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

eisman

Zitat von: tobi01001 am 13 Dezember 2024, 16:29:48Wenn der dann noch selbst aufgehen würde, sich selber ein- und ausräumen und ohne cloud auskäme, wäre die Geschirrspülwelt halbwegs perfekt.  ;D

das macht er alles...

und für den Rest, braucht man dann eine KI....

worum ging das eigentlich:

Möglichkeiten des eingriff in Geräte über Internet
Leider sind Menschen so, das wenn es um Geld geht, werden Ressourcen verschwendet ohne ende. Aber jeder schreit das die Umwelt geschützt werden muss. Mein Geschirrspüler lief 20 Jahre ohne Probleme, leider war jetzt die Reparatur teurer als ein neuer. Mein Handy ist erst ein paar Jahre, sieht aus wie Neu (ohne gebrauchsspuren), von den Parametern würde es auch noch 10 Jahre mithalten, bekommt aber keine Updates mehr (3 Jahre maximal), also entsorgen und eine neues kaufen. 

zusammengefasst:

mein Geschirrspüler hat alles was man nicht braucht, vom Wlan bis offene Tür
(alleine ausräumen, geht leider nicht).
Mein alter hat durch einen Ton signalisiert das er fertig ist. Ja ich war erstaunt, ohne die Funktionen hätte ich fast das doppelte bezahl.....

ein hoch auf die Umwelt

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Adimarantis

Habe jetzt auch unseren neuen Siemens Geschirrspüler in Betrieb genommmen und würde gerne so was ähnliches implementieren:
Also Abends statt "Start" auf "Fernstart" und dann erst so starten, dass er morgends kurz nach dem Aufstehen fertig ist (wo im Sommer evtl schon Solarstrom da ist bzw. die Maschine zumindest frisch fertig ist, so dass ich sie dann öffnen kann und es (noch heiss) besser trocknet.
Ich verstehe das so, dass man mit
set <device> BSH.Common.Option.StartInRelative <Sekunden>für einen verzögerten Start sorgen kann.
Muss man dann noch
set <device> startProgram machen? Da muss ich aber scheinbar das Programm angeben - ich möchte aber einfach das vom Anwender an der Maschine gewählte Progamm verzögert starten - weiss jemand wie das geht?
Auch das Berechnen der Verzögerung ist nicht gerade trivial. Ich habe mir dazu jetzt eine kleine Routine geschrieben:
use DateTime;
sub calcStartDelay($$$) {
  my ($duration,$targethour,$targetminute) = @_;
   $duration=~s/ seconds//g;
   my $tm=DateTime->now();
   my $day=$tm->day;
   $day+=1 if $tm->hour>$targethour;
   $tm->set (day => $day, hour => $targethour, minute => $targetminute, second => 0);
   my $dur=DateTime::Duration->new(seconds=>$duration);
   $tm->subtract_duration($dur);
   my $res=$tm->subtract_datetime_absolute(DateTime->now());
   return $res->seconds;
}
Oder mache ich mir das jetzt zu kompliziert und es geht einfacher?

Danke für eventuell Hinweise/Hilfe

Jörg


Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

tobi01001

Zitat von: Adimarantis am 18 Dezember 2024, 15:57:18Ich verstehe das so, dass man mit
Code Auswählen Erweitern
set <device> BSH.Common.Option.StartInRelative <Sekunden>für einen verzögerten Start sorgen kann.
Ja.
Zitat von: Adimarantis am 18 Dezember 2024, 15:57:18Muss man dann noch
Code Auswählen Erweitern
set <device> startProgram machen? Da muss ich aber scheinbar das Programm angeben - ich möchte aber einfach das vom Anwender an der Maschine gewählte Progamm verzögert starten - weiss jemand wie das geht?
Bei mir geht das ohne ein Programm mit anzugeben - allerdings ist dabei bereits eins gewählt (ich mach normal nur eins).
Was aber geht: Einschalten, Programm wählen, ausschalten. Dann nimmt er für die Automatik das gewählte Programm. Man könnte es natürlich auch über fhem einstellen - sofern es denn immer gleich ist oder gewissen Kriterien folgt.

Zitat von: Adimarantis am 18 Dezember 2024, 15:57:18Oder mache ich mir das jetzt zu kompliziert und es geht einfacher?
Ich habs am Ende noch viel komplizierter. Letztendlich brauchst du aber irgendwoher die Startzeit in Sekunden und in deinem Fall zurückgerechnet von dem Punkt wo du es fertig haben möchtest. Das hast du ja gemacht.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Adimarantis

Danke.

Also dann probiere ich das mal mit einem DOIF
([device:BSH.Common.Status.RemoteControlStartAllowed] eq 1 and
 [device:BSH.Common.Status.DoorState] eq "BSH.Common.EnumType.DoorState.Closed") ({
   my $tm="[device:BSH.Common.Option.RemainingProgramTime]";
   my $delay=calcStartDelay($tm,7,0);
   fhem("set device BSH.Common.Option.StartInRelative $delay");
   fhem("set device startProgram");
 })

Das müsste dann gehen, oder?
mein "calcStartDelay" berechnet dann die Verzögerung, so dass er um 7:00 fertig ist.

Wenn du magst, kannst du ja mal deine "viel kompliziertere" Lösung teilen?
Der Aspekt mit Stromverbrauch wenn die Solaranlage was liefert ist bei mir auch interessant - zumindest dann im Sommer :)

Danke,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

tobi01001

Ich glaube den ersten Teil [device:BSH.Common.Status.RemoteControlStartAllowed] eq 1 kannst du dir sparen. Wenn die Remote Steuerung aus ist, kann das DOIF eh nichts ausrichten.

Ich habe noch ein "nichtVor" eingebaut um zu verhindern, dass der Spüler vorher schon (mit Verzögerung) gestartet wird. Und das startProgram habe ich noch 10 Sekunden verzögert. Warum weiß ich nicht mehr genau, abgebrochen wird da nichts ;)



define di_SPM_Tibber_Start DOIF SPM_Start {\
my $atName   = "at_di_SPM_TibberStart";;\
my $atDelay  = 10;;\
my $logLevel = [$SELF:loglevel,5];;\
my $doState  = [SN75ZX49CE:doorState];;\
my $opState  = [SN75ZX49CE:operationalState];;\
my $startSec = [$SELF:starttimeseconds];;\
\
my ( $s, $mi, $h, $d, $m, $y, $wday) = localtime();;\
my $hour = [$SELF:nichtVor,16];;\
\
if($doState eq "Closed" and $opState eq "Ready" and $h > $hour)\
{\
Log3("$SELF", $logLevel, "SN75ZX49CE door $doState and SN75ZX49CE started with state $opState");;\
fhem("set SN75ZX49CE BSH.Common.Option.StartInRelative $startSec");;\
fhem("defmod $atName at +00:00:$atDelay set SN75ZX49CE startProgram");;\
Log3("$SELF", $logLevel, "defmod $atName at +00:00:$atDelay set SN75ZX49CE startProgram");;\
}\
else\
{\
Log3("$SELF", $logLevel, "Nothing to do for SN75ZX49CE: door $doState and state $opState");;\
}\
}
attr di_SPM_Tibber_Start DOIF_Readings starttimeseconds:{\
my $Trigger = [n_EVU_Tibber_2:tb_price_now];;\
my $opState = [SN75ZX49CE:operationalState];;\
\
\
my $loglevel = [$SELF:loglevel,5];;\
\
\
\
my ( $s, $mi, $hour, $d, $m, $y, $wday) = localtime();;\
my $fertigUm = [$SELF:FertigUmWertags,6];;\
$fertigUm = [$SELF:FertigUmWE,8] if ($wday>4);;\
\
my $startInSeconds = $hour;;\
$hour = [$SELF:nichtVor,16] if ($hour<[$SELF:nichtVor,16]);;\
my $startIn = ($hour - $startInSeconds);;\
$startInSeconds = ($hour - $startInSeconds)*3600-$mi*60;;\
\
if($startInSeconds < 0) \
{\
$startInSeconds = 0;;\
}\
my $avgPriceMin = [n_EVU_Tibber_2:pMax_today];;\
my $minTimeStart = $hour;;\
\
$fertigUm = $fertigUm>$hour?$fertigUm-$hour:$fertigUm;;\
\
my $rtHours = [$SELF:rtHours,3];;\
$rtHours = $rtHours>0?$rtHours:1;;\
\
my $end = ($fertigUm-$rtHours)+(24-$hour);;\
\
Log3("$SELF", $loglevel, "userReading starttimeseconds:\n\tstartIn = $startIn\n\thour = $hour\n\tfertigUm = $fertigUm\n\tend = $end");;\
\
for(my $i=$startIn;; $i <= $end;; $i++)\
{\
my $avg = 0;;\
my $rtHours = [$SELF:rtHours,3];;\
$rtHours = $rtHours>0?$rtHours:1;;\
for my $y (0..($rtHours-1))\
{\
my $pHour = ($i+$y)<24?($i+$y):($i+$y)-24;;\
my $reading = "tb_price_next_".sprintf("%02d", $i+$y);;\
my $price = ReadingsVal("n_EVU_Tibber_2", "$reading", "N/A");;\
if($price eq "N/A")\
{\
$price = [n_EVU_Tibber_2:pMax_today];;\
}\
\
$avg = $avg + $price;;\
}\
$avg = $avg/$rtHours;;\
Log3("$SELF", $loglevel, "$i : $avg");;\
if($avg < $avgPriceMin)\
{\
$avgPriceMin = $avg;;\
\
$startInSeconds = $i>0?$i*3600-$mi*60:$startInSeconds;;\
$minTimeStart = ($i+$hour)<24?($i+$hour):($i+$hour)-24;;\
Log3("$SELF", $loglevel, "Result in $i hours:\n\tavgPriceMin = $avgPriceMin \n\tstartInSeconds = $startInSeconds \n\tminTimeStart = $minTimeStart");;\
}\
\
}\
\
fhem("set $SELF avgPrice $avgPriceMin");;\
fhem("set $SELF minPriceHour $minTimeStart");;\
return $startInSeconds;;\
},\
rtHours:{\
if(([SN75ZX49CE:doorState] eq "Open") and ([SN75ZX49CE:operationalState] eq "Ready"))\
{\
int(((ReadingsNum("SN75ZX49CE", "BSH.Common.Option.RemainingProgramTime", 9121)-1200)/3600)+0.5);;\
}\
else\
{\
[$SELF:rtHours];;\
}\
}
attr di_SPM_Tibber_Start DbLogExclude .*
attr di_SPM_Tibber_Start event-on-change-reading .*
attr di_SPM_Tibber_Start readingList avgPrice minPriceHour FertigUmWerktags NichtVor FertigUmWE loglevel
attr di_SPM_Tibber_Start room Kueche
attr di_SPM_Tibber_Start setList FertigUmWerktags:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 nichtVor:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 FertigUmWE:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 loglevel:0,1,2,3,4,5
attr di_SPM_Tibber_Start stateFormat {sprintf("Start um %02d:00 Uhr mit %.3f € durchschnittlich!", ReadingsVal("$name", "minPriceHour", "N/A"), ReadingsVal("$name", "avgPrice", "N/A"));;}
#   DEF        SPM_Start {
# my $atName   = "at_di_SPM_TibberStart";
# my $atDelay  = 10;
# my $logLevel = [$SELF:loglevel,5];
# my $doState  = [SN75ZX49CE:doorState];
# my $opState  = [SN75ZX49CE:operationalState];
# my $startSec = [$SELF:starttimeseconds];
#
# my ( $s, $mi, $h, $d, $m, $y, $wday) = localtime();
# my $hour = [$SELF:nichtVor,16];
#
# if($doState eq "Closed" and $opState eq "Ready" and $h > $hour)
# {
# Log3("$SELF", $logLevel, "SN75ZX49CE door $doState and SN75ZX49CE started with state $opState");
# fhem("set SN75ZX49CE BSH.Common.Option.StartInRelative $startSec");
# fhem("defmod $atName at +00:00:$atDelay set SN75ZX49CE startProgram");
# Log3("$SELF", $logLevel, "defmod $atName at +00:00:$atDelay set SN75ZX49CE startProgram");
# }
# else
# {
# Log3("$SELF", $logLevel, "Nothing to do for SN75ZX49CE: door $doState and state $opState");
# }
#}
#   FUUID      674a2411-f33f-bc77-9261-1a4300cb4d40048b
#   MODEL      Perl
#   NAME       di_SPM_Tibber_Start
#   NOTIFYDEV  di_SPM_Tibber_Start,SN75ZX49CE,n_EVU_Tibber_2,global
#   NR         586
#   NTFY_ORDER 50-di_SPM_Tibber_Start
#   STATE      Start um 03:00 Uhr mit 0.181 € durchschnittlich!
#   TYPE       DOIF
#   VERSION    28546 2024-02-23 20:11:05
#   eventCount 122
#   DOIF_Readings:
#     rtHours    { if((::ReadingValDoIf($hash,'SN75ZX49CE','doorState') eq "Open") and (::ReadingValDoIf($hash,'SN75ZX49CE','operationalState') eq "Ready")) { int(((ReadingsNum("SN75ZX49CE", "BSH.Common.Option.RemainingProgramTime", 9121)-1200)/3600)+0.5); } else { ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','rtHours'); } }
#     starttimeseconds { my $Trigger = ::ReadingValDoIf($hash,'n_EVU_Tibber_2','tb_price_now'); my $opState = ::ReadingValDoIf($hash,'SN75ZX49CE','operationalState'); my $loglevel = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','loglevel','5'); my ( $s, $mi, $hour, $d, $m, $y, $wday) = localtime(); my $fertigUm = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','FertigUmWertags','6'); $fertigUm = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','FertigUmWE','8') if ($wday>4); my $startInSeconds = $hour; $hour = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','nichtVor','16') if ($hour<::ReadingValDoIf($hash,'di_SPM_Tibber_Start','nichtVor','16')); my $startIn = ($hour - $startInSeconds); $startInSeconds = ($hour - $startInSeconds)*3600-$mi*60; if($startInSeconds < 0)  { $startInSeconds = 0; } my $avgPriceMin = ::ReadingValDoIf($hash,'n_EVU_Tibber_2','pMax_today'); my $minTimeStart = $hour;  $fertigUm = $fertigUm>$hour?$fertigUm-$hour:$fertigUm; my $rtHours = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','rtHours','3'); $rtHours = $rtHours>0?$rtHours:1; my $end = ($fertigUm-$rtHours)+(24-$hour);  Log3("di_SPM_Tibber_Start", $loglevel, "userReading starttimeseconds:\n\tstartIn = $startIn\n\thour = $hour\n\tfertigUm = $fertigUm\n\tend = $end");  for(my $i=$startIn; $i <= $end; $i++) { my $avg = 0; my $rtHours = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','rtHours','3'); $rtHours = $rtHours>0?$rtHours:1; for my $y (0..($rtHours-1)) { my $pHour = ($i+$y)<24?($i+$y):($i+$y)-24; my $reading = "tb_price_next_".sprintf("%02d", $i+$y); my $price = ReadingsVal("n_EVU_Tibber_2", "$reading", "N/A"); if($price eq "N/A") { $price = ::ReadingValDoIf($hash,'n_EVU_Tibber_2','pMax_today'); } $avg = $avg + $price; } $avg = $avg/$rtHours; Log3("di_SPM_Tibber_Start", $loglevel, "$i : $avg"); if($avg < $avgPriceMin) { $avgPriceMin = $avg; $startInSeconds = $i>0?$i*3600-$mi*60:$startInSeconds; $minTimeStart = ($i+$hour)<24?($i+$hour):($i+$hour)-24; Log3("di_SPM_Tibber_Start", $loglevel, "Result in $i hours:\n\tavgPriceMin = $avgPriceMin \n\tstartInSeconds = $startInSeconds \n\tminTimeStart = $minTimeStart"); } } fhem("set di_SPM_Tibber_Start avgPrice $avgPriceMin"); fhem("set di_SPM_Tibber_Start minPriceHour $minTimeStart"); return $startInSeconds; }
#   READINGS:
#     2024-12-18 19:50:28   Device          SN75ZX49CE
#     2024-11-30 10:33:22   FertigUmWE      8
#     2024-11-30 10:33:27   FertigUmWerktags 6
#     2024-12-18 20:02:29   avgPrice        0.1815
#     2024-12-18 20:02:29   block_SPM_Start executed
#     2024-12-18 19:50:08   e_SN75ZX49CE_doorState Closed
#     2024-12-18 19:50:28   e_SN75ZX49CE_operationalState DelayedStart
#     2024-12-05 14:14:01   e_di_SPM_Tibber_Start_loglevel 5
#     2024-12-18 20:02:29   e_di_SPM_Tibber_Start_starttimeseconds 25080
#     2024-12-05 14:14:01   loglevel        5
#     2024-12-18 20:02:29   minPriceHour    3
#     2024-12-04 20:01:37   mode            enabled
#     2024-12-18 06:25:35   rtHours         2
#     2024-12-18 20:02:29   starttimeseconds 25080
#     2024-12-04 20:01:37   state           initialized
#   Regex:
#     DOIF_Readings:
#       SN75ZX49CE:
#         rtHours:
#           doorState  ^SN75ZX49CE$:^doorState:
#           operationalState ^SN75ZX49CE$:^operationalState:
#         starttimeseconds:
#           operationalState ^SN75ZX49CE$:^operationalState:
#       di_SPM_Tibber_Start:
#         rtHours:
#           rtHours    ^di_SPM_Tibber_Start$:^rtHours:
#         starttimeseconds:
#           FertigUmWE ^di_SPM_Tibber_Start$:^FertigUmWE:
#           FertigUmWertags ^di_SPM_Tibber_Start$:^FertigUmWertags:
#           loglevel   ^di_SPM_Tibber_Start$:^loglevel:
#           nichtVor   ^di_SPM_Tibber_Start$:^nichtVor:
#           rtHours    ^di_SPM_Tibber_Start$:^rtHours:
#       n_EVU_Tibber_2:
#         starttimeseconds:
#           pMax_today ^n_EVU_Tibber_2$:^pMax_today:
#           tb_price_now ^n_EVU_Tibber_2$:^tb_price_now:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       SN75ZX49CE:
#         0:
#           doorState  ^SN75ZX49CE$:^doorState:
#           operationalState ^SN75ZX49CE$:^operationalState:
#       di_SPM_Tibber_Start:
#         0:
#           loglevel   ^di_SPM_Tibber_Start$:^loglevel:
#           nichtVor   ^di_SPM_Tibber_Start$:^nichtVor:
#           starttimeseconds ^di_SPM_Tibber_Start$:^starttimeseconds:
#   condition:
#     0         
# my $atName   = "at_di_SPM_TibberStart";
# my $atDelay  = 10;
# my $logLevel = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','loglevel','5');
# my $doState  = ::ReadingValDoIf($hash,'SN75ZX49CE','doorState');
# my $opState  = ::ReadingValDoIf($hash,'SN75ZX49CE','operationalState');
# my $startSec = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','starttimeseconds');
#
# my ( $s, $mi, $h, $d, $m, $y, $wday) = localtime();
# my $hour = ::ReadingValDoIf($hash,'di_SPM_Tibber_Start','nichtVor','16');
#
# if($doState eq "Closed" and $opState eq "Ready" and $h > $hour)
# {
# Log3("di_SPM_Tibber_Start", $logLevel, "SN75ZX49CE door $doState and SN75ZX49CE started with state $opState");
# fhem("set SN75ZX49CE BSH.Common.Option.StartInRelative $startSec");
# fhem("defmod $atName at +00:00:$atDelay set SN75ZX49CE startProgram");
# Log3("di_SPM_Tibber_Start", $logLevel, "defmod $atName at +00:00:$atDelay set SN75ZX49CE startProgram");
# }
# else
# {
# Log3("di_SPM_Tibber_Start", $logLevel, "Nothing to do for SN75ZX49CE: door $doState and state $opState");
# }
#
#   helper:
#     NOTIFYDEV  di_SPM_Tibber_Start,SN75ZX49CE,n_EVU_Tibber_2,global
#     event      starttimeseconds: 25080
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#     triggerDev di_SPM_Tibber_Start
#     triggerEvents:
#       starttimeseconds: 25080
#       e_di_SPM_Tibber_Start_starttimeseconds: 25080
#     triggerEventsState:
#       starttimeseconds: 25080
#   internals:
#   perlblock:
#     0          SPM_Start
#   readings:
#     all         di_SPM_Tibber_Start:loglevel SN75ZX49CE:doorState SN75ZX49CE:operationalState di_SPM_Tibber_Start:starttimeseconds di_SPM_Tibber_Start:nichtVor
#   trigger:
#   uiState:
#   uiTable:
#
setstate di_SPM_Tibber_Start Start um 03:00 Uhr mit 0.181 € durchschnittlich!
setstate di_SPM_Tibber_Start 2024-12-18 19:50:28 Device SN75ZX49CE
setstate di_SPM_Tibber_Start 2024-11-30 10:33:22 FertigUmWE 8
setstate di_SPM_Tibber_Start 2024-11-30 10:33:27 FertigUmWerktags 6
setstate di_SPM_Tibber_Start 2024-12-18 20:02:29 avgPrice 0.1815
setstate di_SPM_Tibber_Start 2024-12-18 20:02:29 block_SPM_Start executed
setstate di_SPM_Tibber_Start 2024-12-18 19:50:08 e_SN75ZX49CE_doorState Closed
setstate di_SPM_Tibber_Start 2024-12-18 19:50:28 e_SN75ZX49CE_operationalState DelayedStart
setstate di_SPM_Tibber_Start 2024-12-05 14:14:01 e_di_SPM_Tibber_Start_loglevel 5
setstate di_SPM_Tibber_Start 2024-12-18 20:02:29 e_di_SPM_Tibber_Start_starttimeseconds 25080
setstate di_SPM_Tibber_Start 2024-12-05 14:14:01 loglevel 5
setstate di_SPM_Tibber_Start 2024-12-18 20:02:29 minPriceHour 3
setstate di_SPM_Tibber_Start 2024-12-04 20:01:37 mode enabled
setstate di_SPM_Tibber_Start 2024-12-18 06:25:35 rtHours 2
setstate di_SPM_Tibber_Start 2024-12-18 20:02:29 starttimeseconds 25080
setstate di_SPM_Tibber_Start 2024-12-04 20:01:37 state initialized


Wie gesagt hinreichend bzw übermäßig kompliziert gewachsen. Müsste das mal überarbeiten und "strukturiert" vereinfachen.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Adimarantis

Danke.
Deine Stromberechnung machts natürlich recht komplex. Mein Ansatz war wie gesagt aktuell nur, dass die Maschine morgens fertig ist - muss ich vielleicht noch mit WE unterscheiden - da darfs ja auch später sein, mit mehr Chance auf Solarstrom (mein Stromtarif ist nicht variabel).
Hauptproblem dürfte jetzt sein, es meiner Familie beizubringen, die Maschine auf "Fernstart" zu setzen, statt direkt zu starten. Mein Test letzte Nacht wurde davon sabotiert, dass eins meiner Kinder um Mitternacht noch was eingeräumt hat und dann normal gestartet hat :)

Ich denke ich werde das jetzt versuchen so zu lösen, dass wir immer auf Fernstart gehen und wenn genug Strom da ist, setze ich das Delay eben auf 10 Sekunden oder so, damit die Maschine gleich losrennt. Nur noch die Frage wie ich das in der dunklen Jahreszeit mache - da ist eigentlich nie Solarstrom da und da unsere Maschine 2-3 mal am Tag läuft (6 Personen) ist einmal am frühen Morgen keine Option.

Wie sieht es eigentlich mit der Pflege des Moduls aus?
Da gibt es ja auch das update von PAH - was ist da jetzt besser gepflegt?
Wollte nämlich auch den Trockner (und ggf. die Waschmaschine) angehen - da ist das erste Problem schon mal das "startProgram" beim Original Modul zwingend ein Programm erfordert statt einfach zu nehmen, was eingestellt ist.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)