Autor Thema: Restlaufzeit umrechnen  (Gelesen 529 mal)

Offline no_Legend

  • Hero Member
  • *****
  • Beiträge: 1094
Restlaufzeit umrechnen
« am: 05 Februar 2019, 11:36:05 »
Hallo Leute,

hat jemand sich schon drum gekümmert, die Restlaufzeit in Stunden, Minuten und Sekunden umzurechnen?

Danke und Gruß Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Offline peterk_de

  • Sr. Member
  • ****
  • Beiträge: 746
Antw:Restlaufzeit umrechnen
« Antwort #1 am: 14 Februar 2019, 09:24:45 »
Jain. Die Restlaufzeit rechnet bei mir für FHEM und TabletUI nicedates (Siehe https://forum.fhem.de/index.php/topic,30385.msg249939.html#msg249939) mit Live-Countdown aus. Dazu erzeuge ich über Userreadings einen kompletten Perlzeitstempel für das voraussichtliche Programmende (in dem Userreading readyAt, siehe unten) bzw. "0" wenn es keine Restlaufzeit gibt - und nicedates macht daraus sowas wie "in 5 Minuten".

Im Reading readyAtReadable generiere ich zusätzlich die Uhrzeit vom Ende in Stunden:Minuten, weil das meine Frau lieber mag als die Restlaufzeit.

Das kannst du Dir ja aber nach deinen Wünschen anpassen. Hier der Code für meine Spüler-Userreadings, Waschmaschine sähe etwas anders aus, hätte ich bei Interesse auch noch. Generiert auch noch andere hübsche Readings (lesbarer Programmname, Status auf Deutsch inkl. Endzeitpunkt etc.):

programNameDe {
  my $program = ReadingsVal("kueche.geschirrspueler_hc","BSH.Common.Root.SelectedProgram","");

  if ($program =~ /Eco50/) {"Eco-Programm 50°C"}
  elsif ($program=~ /Auto2/) {"Auto-Programm 45-65°C"}
  elsif ($program=~ /Intensiv70/) {"Intensivprogramm 70°C"}
  elsif ($program=~ /Kurz60/) {"Kurzprogramm 60°C"}
  elsif ($program=~ /Quick45/) {"Kurzprogramm 45°C"}
  elsif ($program=~ /NightWash/) {"Nachtprogramm"}
  elsif ($program=~ /Glas40/) {"Glas-Programm 40°C"}
  elsif ($program=~ /PreRinse/) {"Nur Vorspülen"}
  elsif ($program=~ /MachineCare/) {"Maschinenpflege"}
  else {"Unbekanntes Programm"}
},
readyAt {

  my $deviceName = "kueche.geschirrspueler_hc";

  my $operationState = ReadingsVal($deviceName,"BSH.Common.Status.OperationState","");
  if ($operationState =~/Run/ || $operationState =~/DelayedStart/) {
    my $nowInSeconds  = time();
   
    my $programmDuration = ReadingsVal($deviceName,"BSH.Common.Option.RemainingProgramTime",0);
    if ($programmDuration =~ /(\d+)/) {
      $programmDuration = $1;
    }
   
    my $delayDuration = 0;
   
    if ($operationState =~/DelayedStart/) {
   
      $delayDuration = ReadingsVal($deviceName,"BSH.Common.Option.StartInRelative",0);
      if ($delayDuration =~ /(\d+)/) {
        $delayDuration = $1;
      }   
    }
   
    my $readyTimeSec = $nowInSeconds + $programmDuration + $delayDuration;
   
    my $oldReadyTimeSec = str2time(ReadingsVal($deviceName,"readyAt",0));
   
    if (abs($oldReadyTimeSec - $readyTimeSec) < 120) {
      $readyTimeSec = $oldReadyTimeSec;
    }
    strftime("%Y-%m-%d %H:%M:%S", localtime($readyTimeSec));

  } else {
   "0";
  }
},
readyAtReadable {

  my $deviceName = "kueche.geschirrspueler_hc";

  my $operationState = ReadingsVal($deviceName,"BSH.Common.Status.OperationState","");
  if ($operationState =~/Run/ || $operationState =~/DelayedStart/) {
    my $nowInSeconds  = time();
   
    my $programmDuration = ReadingsVal($deviceName,"BSH.Common.Option.RemainingProgramTime",0);
    if ($programmDuration =~ /(\d+)/) {
      $programmDuration = $1;
    }
   
    my $delayDuration = 0;
   
    if ($operationState =~/DelayedStart/) {
   
      $delayDuration = ReadingsVal($deviceName,"BSH.Common.Option.StartInRelative",0);
      if ($delayDuration =~ /(\d+)/) {
        $delayDuration = $1;
      }   
    }
   
    my $readyTimeSec = $nowInSeconds + $programmDuration + $delayDuration;
   
    my $oldReadyTimeSec = str2time(ReadingsVal($deviceName,"readyAt",0));
   
    if (abs($oldReadyTimeSec - $readyTimeSec) < 120) {
      $readyTimeSec = $oldReadyTimeSec;
    }
    strftime("%H:%M", localtime($readyTimeSec));

  } else {
   "0";
  }
},
stateDe {
  my $operationState = ReadingsVal("kueche.geschirrspueler_hc","BSH.Common.Status.OperationState","");
  my $program = ReadingsVal("kueche.geschirrspueler_hc","programNameDe","");
  my $readyAt = ReadingsVal("kueche.geschirrspueler_hc","readyAtReadable","");

  if ($operationState =~/Run/) {
     "Läuft noch bis $readyAt ($program)";
  } elsif ($operationState =~/Delay/)  {
     "Timer gestellt auf $readyAt ($program)";
  } elsif ($operationState =~/Finished/)  {
     "Fertig";
  } elsif ($operationState =~/Ready/)  {
     "Bereit";
  } elsif ($operationState =~/Inactive/)  {
     "aus";
  } elsif ($operationState =~/Aborting/)  {
     "Abbruch";
  }
}
« Letzte Änderung: 14 Februar 2019, 09:28:21 von peterk_de »
FHEM auf 2x NUC Proxmox Cluster
FHEM2FHEM-Roomnodes: 6x Raspi, 1xNUC
Frontends: 4x TabletUI, HomeKit, Grafana, StreamDeck
IOdevs: 3xHM, 2xHueBridge, CUL868, HarmonyHub
Devices: 73xHomematic, 53xZigBee, 19xTechem, 17xLAN/WiFi, 12xBTLE, 5xIPCAM, 4xSONOS, 2xHomeConnect, DENON, Kfz-GPS-Tracker, ...
Gefällt mir Gefällt mir x 1 Liste anzeigen