Seite 1 von 1

UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 3. Mai 2021 21:57
von OliverCJ
Hallo zusammen,

ich muss jetzt noch mal ganz konkret fragen. Ich habe folgendes Item:

Code: Alles auswählen

Number:Time Kueche_Geschirrspueler_RemainingProgramTimeState
	"Verbleibende Zeit"
	(gKuecheGeschirrspueler)
	{channel="homeconnect:dishwasher:api_bridge_at_home:dishwasher1:remaining_program_time_state"}
Der Channel liefert die Restlaufzeit einer Spülmaschine in Sekunden. Ich hätte aber gerne ein Darstellung in Minuten, besser noch in Stunden und Minuten.

Wenn ich mir nun die Doku zu Units of Measurement durchlese, dann kann :Time die Einheiten s, min, h, d, week und y darstellen. Und wenn ich einige Beiträge zu UoM nicht völlig falsch verstanden habe, dann übernimmt UoM quasi die Umrechnung.

Auf der anderen Seite habe ich gestern im englischen Forum einen Beitrag - zugegeben von 2017 - gefunden, dass genau das nicht gehen würde. Wenn ein Channel Sekunden liefert, dann werden eben die angezeigt und ein umrechnen muss über eine rule erfolgen.

Ja was denn nun? Kann mir vielleicht jemand auf die Sprünge helfen?

Danke!

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 4. Mai 2021 16:21
von int5749
OliverCJ hat geschrieben: 3. Mai 2021 21:57
Ja was denn nun? Kann mir vielleicht jemand auf die Sprünge helfen?

Danke!
Wenn so nett gefragt wird 8-)

Ich habe dies bei mir über JS Transformation gelöst. Diese muss natürlich zunächst installiert sein

Item

Code: Alles auswählen

Number:Time Kueche_Geschirrspueler_RemainingProgramTimeState  "Verbleibende Zeit [JS(minstohours.js):%s]"
JS welches im richtigen Verzeichnis liegen muss

Code: Alles auswählen

/*
Javascript transform function to change the number
of minutes of CPU time from the System Info Binding
into a more readable format
eg: 2365 into '1 day 15 hours 25 minutes

The item in the items file is defined as follow:
Number LocalComputer_Cpu_SystemUptime "[JS(CPUTime.js):%s]"
and linked via PaperUI to the System uptime channel
of the System Info Thing
*/

(function(i) {
    if (i == 'NULL') { return i; }
    if (i == '-') { return 'Undefined'; }
    var val = parseInt(i); // The value sent by OH is a string so we parse into an integer
    var days = 0; // Initialise variables
    var hours = 0;
    var minutes = 0;
    if (val >= 1440) { // 1440 minutes in a days
        days = Math.floor(val / 1440); // Number of days
        val = val - (days * 1440); // Remove days from val
    }
    if (val >= 60) { // 60 minutes in an hour
       hours = Math.floor(val /60); // Number of hours
        val = val - (hours * 60); // Remove hours from val
    }
    minutes = Math.floor(val); // Number of minutes

    var stringDays = ''; // Initialse string variables
    var stringHours = '';
    var stringMinutes = '';
    if (days === 1) {
        stringDays = '1 day '; // Only 1 day so no 's'
    } else if (days > 1) {
        stringDays = days + ' days '; // More than 1 day so 's'
    } // If days = 0 then stringDays remains ''

    if (hours === 1) {
        stringHours = '1 hour '; // Only 1 hour so no 's'
    } else if (hours > 1) {
        stringHours = hours + ' hours '; // More than 1 hour so 's'
    } // If hours = 0 then stringHours remains ''

    if (minutes === 1) {
        stringMinutes = '1 minute'; // Only 1 minute so no 's'
    } else if (minutes > 1) {
        stringMinutes = minutes + ' minutes'; // More than 1 minute so 's'
    } // If minutes = 0 then stringMinutes remains ''

    var returnString =  stringDays + stringHours + stringMinutes
    return returnString.trim(); // Removes the extraneous space at the end

})(input)
Viele Grüße

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 4. Mai 2021 16:58
von Quautiputzli
Hi, bei meiner Waschmaschiene kommt die Zeit eigentlich auch in Sekunden. Ich habe in der state description einfach stehen "%.0f min" und schon zeigt er es in Minuten an.

Edit:
Ich denke aber, Voraussetzung dafür ist, dass der Channel als Number angelegt ist und in der Zeile unit muss dann eben "s" für Sekunden stehen.

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 4. Mai 2021 19:51
von OliverCJ
Hallo und vielen Dank euch beiden für die Antworten!

Das war übrigens tatsächlich nett gemeint, ich war zu dem Zeitpunkt nur sehr verwirrt, dass die Aussagen so unterschiedlich waren und ich tatsächlich viele Beispiele gefunden habe, wo Leute das mit rules umgerechnet haben. Aber da konnte ich mir halt nicht vorstellen, dass das der Sinn von UoM sein soll.

Und tatsächlich hat Quautiputzli die Lösung geliefert... Aber warum steht das so nirgendwo? Oder doch und ich habe es nur nicht gesehen/verstanden?
Egal... so läuft es... Danke noch mal!

Viele Grüße
Oliver

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 11. Mai 2021 15:57
von Galadriel13
Hallo zusammen,

anlehnend an diese Frage habe ich auch eine Frage an euch:
Ein Item für die Bewässerungsdauer gibt die Laufzeit in Sekunden aus z.B. 300s für 5 Minuten).
Dies möchte ich aber in Minuten mit Einheit angezeigt bekommen.

Wichtig ist, dass nur die Ausgabe in Minuten erfolgt, die Eingabe (als Slider) muss in Sekunden bleiben, da sonst die SPS zickt.

Wie kann ich das anstellen?

Danke im Voraus.

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 11. Mai 2021 17:58
von OliverCJ
Hi,

Stell doch das item mal hier rein, dann könnten wir vielleicht helfen...

Gesendet von meinem SM-N975F mit Tapatalk



Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 11. Mai 2021 18:24
von Galadriel13
OliverCJ hat geschrieben: 11. Mai 2021 17:58 Hi,

Stell doch das item mal hier rein, dann könnten wir vielleicht helfen...

Gesendet von meinem SM-N975F mit Tapatalk

Hi, ich nutze openHAB3.

Die Frage ist, wie ich ggf. mit einer Transformation/Java das lösen kann.

Unter Metadata --> State Description funktioniert das scheinbar nicht.

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 11. Mai 2021 23:34
von udo1toni
Der oben beschriebene Weg funktioniert nur mit UoM Items (also Number:Time). Wenn Du ein "gewöhnliches" Number Item verwendest, kannst Du mit einer JavaScript Transformation arbeiten. Bitte Java und JavaScript nicht miteinander verwechseln ;)
Ich nutze dieses Script:

Code: Alles auswählen

(function(seconds){
    var retval = "";
    var minutes = Math.floor(seconds / 60)
    seconds = seconds % 60
    if (minutes < 10)
        retval = retval + "0";
    retval = retval + minutes + "'";
    if (seconds < 10)
        retval = retval + "0";
    retval = retval + seconds + "\"";
    return retval;
})(input)
Der Aufruf sieht dann ungefähr so aus:

Code: Alles auswählen

Number MyTimeItem "Zeit [JS(minsec.js):%s]"
Die Datei mit dem Code heißt bei mit minsec.js und sie befindet sich im Ordner transform (nicht etwas unter scripts), denn JS ist hier ein Transformation Service.

Die Ausgabe sieht dann so aus: Zeit 5'35"

Re: UoM: Sekunden in Stunden und/oder Minuten darstellen

Verfasst: 12. Mai 2021 22:28
von Galadriel13
Vielen Dank, das ist es.