Umrechnung Sekunden in Minuten und Endzeitangabe
Moderator: Co-Administratoren
Umrechnung Sekunden in Minuten und Endzeitangabe
Hallo zusammen,
ich habe folgendes Problem, beim Auslesen der Druckzeiten aus Octoprint bekomme ich diese nur in Sekunden dargestellt. Da es sich auch öfters um längere Drucke handelt, dauert es schon mal einige Stunden. Daher würde ich gerne der Übersicht halber die Sekunden in Stunden, Minuten und Sekunden umrechnen und in eine Systemvariable speichern. Dann ausgeben zum Beispiel als "Der Druck dauern noch hh:mm:ss".
Des Weiteren würde ich auch gerne zusätzlich direkt die Endzeit in eine Systemvariable ausgeben. Hier müsste ich dann wahrscheinlich mit totime arbeiten. Ich könnte schwören ich habe hier letzte Woche einen Beitrag gefunden, der genau diese Sachen thematisiert hat, finde ich aber irgend nicht mehr. Kann mir da einer eventuell helfen.
Besten Dank
Gruß
Arthy
ich habe folgendes Problem, beim Auslesen der Druckzeiten aus Octoprint bekomme ich diese nur in Sekunden dargestellt. Da es sich auch öfters um längere Drucke handelt, dauert es schon mal einige Stunden. Daher würde ich gerne der Übersicht halber die Sekunden in Stunden, Minuten und Sekunden umrechnen und in eine Systemvariable speichern. Dann ausgeben zum Beispiel als "Der Druck dauern noch hh:mm:ss".
Des Weiteren würde ich auch gerne zusätzlich direkt die Endzeit in eine Systemvariable ausgeben. Hier müsste ich dann wahrscheinlich mit totime arbeiten. Ich könnte schwören ich habe hier letzte Woche einen Beitrag gefunden, der genau diese Sachen thematisiert hat, finde ich aber irgend nicht mehr. Kann mir da einer eventuell helfen.
Besten Dank
Gruß
Arthy
-
- Beiträge: 10660
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 321 Mal
- Danksagung erhalten: 501 Mal
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Vielleicht hilft dir mein kleines Skript in diesem Beitrag etwas weiter.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Hallo,
Dankeschön dtp für die Antwort, das mit der Duration ist ein Ansatz. Ich habe mir das bezüglich dem ersten Teil der Umrechnung in der Theorie so vorgestellt:
Dauer z.B.: 4000 s
Restdivision in s: 4000%60 = 40 s
Volle Minuten: (4000-40)/60 = 66 min
Restdivision in min: 66%60 = 6 min
Volle Stunden: (66-6)/60= 1 h
Da ich mich in der Scriptsprache nicht so auskenne, weiß ich nicht wie ich das am besten in die gewünschte Darstellungsform in eine Systemvariable einfüge (hh:mm:ss -> 01:06:40 ="Volle Stunden:Restdivision(in min):Restdivision (in s)").
Gruß
Arthy
Dankeschön dtp für die Antwort, das mit der Duration ist ein Ansatz. Ich habe mir das bezüglich dem ersten Teil der Umrechnung in der Theorie so vorgestellt:
Dauer z.B.: 4000 s
Restdivision in s: 4000%60 = 40 s
Volle Minuten: (4000-40)/60 = 66 min
Restdivision in min: 66%60 = 6 min
Volle Stunden: (66-6)/60= 1 h
Da ich mich in der Scriptsprache nicht so auskenne, weiß ich nicht wie ich das am besten in die gewünschte Darstellungsform in eine Systemvariable einfüge (hh:mm:ss -> 01:06:40 ="Volle Stunden:Restdivision(in min):Restdivision (in s)").
Gruß
Arthy
-
- Beiträge: 1573
- Registriert: 28.05.2015, 12:48
- Wohnort: Willich
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 10 Mal
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Wie wäre es mit so einer Berechnung? Vielleicht hilft dir das auch?
Code: Alles auswählen
! Rückgabewert in Sekunden
integer sek = 4000;
! Jetzt-Zeit in Variable schreiben
time now = system.Date("%F %T").ToTime();
! Endzeit berechnen
time Ende = now + sek.ToTime();
! Endzeit ausgeben
WriteLine("Ende: " # Ende);
! Dauer berechnen in H
time dauer = sek.ToTime();
! Sommerzeit beachten, da es hier eine Zeitrechnung ist und keine echte Stundenrechnung
if (system.Date("%F").ToTime().IsDST() == 0)
{
! Wenn Winterzeit, dann 1 Stunde abziehen!
dauer = dauer - 3600;
}
! Dauer ausgeben
WriteLine("Dauer: " # dauer.Format("%H:%M:%S"));
Gruß Carsten
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Hi Bratmaxe,
das Skript hat mir super geholfen, besten Dank. Habe es auch schon entsprechend angepasst. Habe nur ein kleines Problem. Hole mir die Zeit aus einer Systemvariable namens octoprint_printTime. Diese ist wie man der Ausgabe unten entnehmen kann 6595.000000 (Sekunden). Damit bekomme ich mit dem Skript zwar die korrekte Endzeit ausgegeben, die Dauer des Drucks zeigt er mir jedoch nicht an. Habt ihr eine Idee warum dies nicht funktioniert? Setze ich eine feste Variable manuell auf diesen Wert funktioniert das Ganze seltsamerweise.
Vielen Dank
Gruß
Arthy
das Skript hat mir super geholfen, besten Dank. Habe es auch schon entsprechend angepasst. Habe nur ein kleines Problem. Hole mir die Zeit aus einer Systemvariable namens octoprint_printTime. Diese ist wie man der Ausgabe unten entnehmen kann 6595.000000 (Sekunden). Damit bekomme ich mit dem Skript zwar die korrekte Endzeit ausgegeben, die Dauer des Drucks zeigt er mir jedoch nicht an. Habt ihr eine Idee warum dies nicht funktioniert? Setze ich eine feste Variable manuell auf diesen Wert funktioniert das Ganze seltsamerweise.
Vielen Dank
Gruß
Arthy
Code: Alles auswählen
! Rückgabewert in Sekunden
var sek = dom.GetObject("octoprint_printTime");
WriteLine("sek: " # sek.Variable());
! Jetzt-Zeit in Variable schreiben
time now = system.Date("%F %T").ToTime();
! Endzeit berechnen
time Ende = now + sek.ToTime();
string endTime = Ende.Format("%H:%M:%S"); ! Ausgabe in hh:mm:ss
! Endzeit ausgeben
WriteLine("Ende: " # endTime);
dom.GetObject("octoprint_endTimeTest").State(endTime);! endTimeTest ist die Systemvariable
! Dauer berechnen in H
time dauer = sek.ToTime();
! Sommerzeit beachten, da es hier eine Zeitrechnung ist und keine echte Stundenrechnung
if (system.Date("%F").ToTime().IsDST() == 0)
{
! Wenn Winterzeit, dann 1 Stunde abziehen!
dauer = dauer - 3600;
}
! Dauer ausgeben
WriteLine("Dauer: " # dauer.Format("%H:%M:%S"));
dom.GetObject("octoprint_printTimeLeftTest").State(dauer.Format("%H:%M:%S"));
Code: Alles auswählen
sek: 6595.000000
Ende: 02:26:10
Dauer:
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
sek in Zeile 2 ist im besten Fall der Name des Objektes aber nicht dessen Wert. Zeile 3 Gibt dann zwar den Wert aus
(ich würde auch .Variable() jedoch komplett verzichten und immer auf .Value() zum Lesen bz. .State() zum Schreiben von Werten greifen.)
Jedenfalls lässt sich mit einem String wie octoprint_printTime nicht rechnen. z:B. dann gleich in
und es sollte auch ein ScriptRuntimeError im Fehlerprotokoll erzeugt werden.
Dein gepostetes Script darf eigentlich nur
ausgeben. Habs aber nicht getestet.
Lösung ist also erstmal auf den Wert des Objektes zuzugreifen vor Wandlung in eine Zeit oder Rechnen.
Alchy
(ich würde auch .Variable() jedoch komplett verzichten und immer auf .Value() zum Lesen bz. .State() zum Schreiben von Werten greifen.)
Jedenfalls lässt sich mit einem String wie octoprint_printTime nicht rechnen. z:B. dann gleich in
Code: Alles auswählen
time Ende = now + sek.ToTime();
Dein gepostetes Script darf eigentlich nur
Code: Alles auswählen
sek: 6595.000000
Lösung ist also erstmal auf den Wert des Objektes zuzugreifen vor Wandlung in eine Zeit oder Rechnen.
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
- Black
- Beiträge: 5483
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
auf die schnelle in Quick & dirty, kannst du ja anpassen nach Bedarf:
Laufzeit muss du mit dem Inhalt des Wertes aus dem Drucker vorbesetzen.
Dann werfen dir diese beiden Zeilen Laufzeit formatiert und Endzeit aus.
Wen die in Sysvars brauchst, dann halt den WriteLine Ausdruck in ein sysvar.State () packen
Gruss, Black
Code: Alles auswählen
real Laufzeit= 1200.0;
WriteLine ("Laufzeit: " # (Laufzeit.ToTime () -3600).Format ("%H:%M:%S"));
WriteLine ("Fertig : " # (localtime+Laufzeit).Format ("%H:%M:%S"));
Dann werfen dir diese beiden Zeilen Laufzeit formatiert und Endzeit aus.
Wen die in Sysvars brauchst, dann halt den WriteLine Ausdruck in ein sysvar.State () packen
Gruss, Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
-
- Beiträge: 1573
- Registriert: 28.05.2015, 12:48
- Wohnort: Willich
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 10 Mal
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Das man localtime so direkt abrufen kann war mir bisher nicht bekannt, danke für die Info!
Gruß Carsten
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Hallo Alchy,
vielen Dank fürs Sichten. Ich verstehe nur nicht warum das bei der Endzeit funktioniert und bei der Dauer nicht. Das ist wirklich die Ausgabe des Skripts. Wenn ich dich aber richtig verstehe, müsste ich statt .Variable() .Value() in der dritten Zeile ändern und dann würd es gehen?
Danke
Gruß
Arthy
vielen Dank fürs Sichten. Ich verstehe nur nicht warum das bei der Endzeit funktioniert und bei der Dauer nicht. Das ist wirklich die Ausgabe des Skripts. Wenn ich dich aber richtig verstehe, müsste ich statt .Variable() .Value() in der dritten Zeile ändern und dann würd es gehen?
Danke
Gruß
Arthy
alchy hat geschrieben: ↑19.02.2019, 07:18sek in Zeile 2 ist im besten Fall der Name des Objektes aber nicht dessen Wert. Zeile 3 Gibt dann zwar den Wert aus
(ich würde auch .Variable() jedoch komplett verzichten und immer auf .Value() zum Lesen bz. .State() zum Schreiben von Werten greifen.)
Jedenfalls lässt sich mit einem String wie octoprint_printTime nicht rechnen. z:B. dann gleich inund es sollte auch ein ScriptRuntimeError im Fehlerprotokoll erzeugt werden.Code: Alles auswählen
time Ende = now + sek.ToTime();
Dein gepostetes Script darf eigentlich nurausgeben. Habs aber nicht getestet.Code: Alles auswählen
sek: 6595.000000
Lösung ist also erstmal auf den Wert des Objektes zuzugreifen vor Wandlung in eine Zeit oder Rechnen.
Alchy
Re: Umrechnung Sekunden in Minuten und Endzeitangabe
Hi Black,
das ist ja wirklich quick, schaue ich mir heut Abend auf jeden Fall auch an. Wie meinst du das mit den WriteLine Ausdruck in sysvar.State() packen? Sorry, muss echt noch einiges Lernen.
Besten Dank
Arthy
das ist ja wirklich quick, schaue ich mir heut Abend auf jeden Fall auch an. Wie meinst du das mit den WriteLine Ausdruck in sysvar.State() packen? Sorry, muss echt noch einiges Lernen.
Besten Dank
Arthy
Black hat geschrieben: ↑19.02.2019, 08:23auf die schnelle in Quick & dirty, kannst du ja anpassen nach Bedarf:
Laufzeit muss du mit dem Inhalt des Wertes aus dem Drucker vorbesetzen.Code: Alles auswählen
real Laufzeit= 1200.0; WriteLine ("Laufzeit: " # (Laufzeit.ToTime () -3600).Format ("%H:%M:%S")); WriteLine ("Fertig : " # (localtime+Laufzeit).Format ("%H:%M:%S"));
Dann werfen dir diese beiden Zeilen Laufzeit formatiert und Endzeit aus.
Wen die in Sysvars brauchst, dann halt den WriteLine Ausdruck in ein sysvar.State () packen
Gruss, Black