Seite 2 von 3

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 15. Dez 2020 10:09
von tanzehn
Entschuldigung aber hier ist ein Fehler in deinem Script 1 Tag hat 86400 sekunden und nicht 3600 sekunden. Ich wollte das nur richtig stellen das jeder der das sieht das richtige kopiert. MFG

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 15. Dez 2020 13:50
von udo1toni
Du hast dabei das /24 übersehen... 3600*24 = 86400...


Gesendet von iPad mit Tapatalk

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 18. Dez 2020 19:14
von aujdi
Hi @ all,

ich werf die Frage von N1d45 noch einmal in den Raum:
Gibt es irgendwo eine deutsche Doku zu diesen Befehlen?
Ich habe eine Ausgabe in mA (DPT 7.012) und möchte diese gern in A ausgegeben haben.

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 18. Dez 2020 21:13
von udo1toni
aujdi hat geschrieben: 18. Dez 2020 19:14 Hi @ all,

ich werf die Frage von N1d45 noch einmal in den Raum:
Gibt es irgendwo eine deutsche Doku zu diesen Befehlen?
Ich habe eine Ausgabe in mA (DPT 7.012) und möchte diese gern in A ausgegeben haben.
Ja, sorry, das ist durchgerutscht. Meines Wissens gibt es keine deutsche Dokumentation zur Rules DSL.

Was den DPT betrifft, so musst Du ein 2. Items anlegen und per Rule umrechnen. Um von Milliampere auf Ampere zu kommen, braucht es ja nur ein Teilen durch 1000.

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 19. Dez 2020 13:58
von aujdi
Hallo udo1toni,
von meiner Seite bezog sich die Frage auf die Transformation mittels Javascript.
Wenn man die reinen Zahlen (aus mA, Wh usw.) dann mit der Transformation umrechnet und die Endgröße (A, kWh usw.) im label= einfügt, sollte das doch einfacher sein.
Oder unterliege ich da einem Denkfehler?

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 19. Dez 2020 14:09
von udo1toni
Solange es nur um die Anzeige geht, kannst Du das mit der Transformation machen. Doku dazu wäre JavaScript (JavaScript != Java).

Ganz grob sollte es so gehen:

Code: Alles auswählen

Number myNumber "Strom [JS(divideby1000.js):%d]"  {channel="knx:device:bridge:mydevice:mychannel"}
und im Verzeichnis ./transform/ die Datei divideby1000.js mit folgendem Inhalt:

Code: Alles auswählen

(function(in){
    return in / 1000;
})(input)

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 30. Dez 2021 12:25
von openHAB-Rookie
Hallo udo1toni,
darf ich zu dem zitierten Teil nochmal was nachfragen?

Was ist mein Systemstand:

1.) Windows-basierendes System eines Tiny-PCs habe ich gestern auf OH 3.2.0 aktualisiert.
2.) Habe wegen paar Fehlern nach dem Updatescript (meine 3.1.0 er Installation war arg angeschossen) dann eine neue OH 3.2.0 aufgesetzt und wieder initialisiert.
3.) aus dem letzten gesicherten Backup den Stand Anfang Dezember wieder hin bekommen mit selektiven zusammenkopieren.
4.) Zugriff auf die ausgelagerte MariaDB auf einem Synology läuft wieder, alte historische Daten (Solarertrag z.B.) alle wieder da.

Also erstmal läuft meine frische OH 3.2.0 wieder korrekt, meine überwachten Sensoren und gesteuerten Aktoren (zeitlich oder von Sensoren geführt) sind da, es klappt wieder alles.

Mein MANKO ist, dass ich eher von der Hardwareecke komme und immer so einige Verständnisprobleme bei den Softwarethemen habe, mir fehlt da irgendie die Ader. :geek:

Was ist mein Problem:

Ich scheitere seit etlichen Wochen daran, Umrechnungen von Items hin zu bekommen, wenn diese Werte im nicht gewünschten Format vorliegen.
Konkret habe ich den Stand:

- die Javascript Transformation ist lt. OpenHAB-Menü installiert
- Mein Script "secs2hms.js" ist im Verzeichnis transform (Inhalt siehe unten im Zitat, die im Verlauf erwähnte korrigierte Variante)
- meine Fritzbox 7590 ist eingebunden
- die Uptime in Sekunden liegt vor als Item (wird aller 60 Sekunden aktualisiert)
- mit dem Channel Link zur Fritzbox Uptime
- im Channel das Profile "JS" ausgewählt (ist sicher nur da, wenn "JS Transformation" installiert ist).
- und die Datei "secs2hms.js" in der Menüauswahl auch angeboten bekommen und direkt ausgewählt.
- Speichern, der Teil m.E. korrekt erledigt.

Ab diesem Zeitpunkt habe ich aber bereits in den Logs von OpenHAB (openhab.log) folgende Einträge stehen:

Code: Alles auswählen

2021-12-30 12:15:40.200 [WARN ] [iles.JavaScriptTransformationProfile] - Could not transform state '1370470 s' with function 'secs2hms.js' and format '%s'
Die dargestellte Zeit bleibt in Sekunden im Item.

Sicher nur ein trivialer Fehler, aber ich kriege es nicht gebacken :( :(

Und dabei bin ich noch nichtmal am Schritt 2 angekommen "Im Label der Items setzt Du dann jeweils das Script zur Transformation:"
Was mir als DAU / OpenHAb Einsteiger noch etwas zu kryptisch ist...

Meine Datei "secs2hms.js"

Code: Alles auswählen

(function(seconds){
    var retval  = "";
    var days    = Math.floor(seconds / 3600 / 24)
    var hours   = Math.floor(seconds / 3600)
    var minutes = Math.floor(seconds / 60)
    hours       = hours % 24
    minutes     = minutes % 60
    seconds     = seconds % 60
    retval      = retval + days + "Tage " + hours + "Stunden ";
    if (Minuten < 10)
        retval      = retval + "0";
    retval      = retval + minutes + "m ";
    if (seconds < 10)
        retval      = retval + "0";
    retval      = retval + seconds + "s";
    return retval;
})(input)


udo1toni hat geschrieben: 28. Jan 2020 00:30 Es bietet sich an, das mit einer Transformation zu machen, in diesem Fall Java Script.

Das Script ist im Verzeichnis transform, unter dem Namen "secs2hms.js"

Code: Alles auswählen

(function(seconds){
    var retval = "";
    var hours = Math.floor(seconds / 3600)
    var minutes = Math.floor(seconds / 60)
    seconds = seconds % 60
    retval = retval + hours + ":";
    if (minutes < 10)
        retval = retval + "0";
    retval = retval + minutes + ":";
    if (seconds < 10)
        retval = retval + "0";
    retval = retval + seconds;
    return retval;
})(input)
Im Label der Items setzt Du dann jeweils das Script zur Transformation:

Code: Alles auswählen

Number myNumber "Betriebsdauer [JS(secs2hms.js):%d]"
Natürlich muss die JS-Transformation installiert sein.
Die Transformation kann auch entsprechend erweitert werden, um auch die Anzahl Tage auszugeben, oder gar nur dann Tage, Stunden oder Minuten anzuzeigen, wenn die jeweiligen Grenzen überschritten werden.
viele Grüße und Dank vorab
openHAB-Rookie / Tommy

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 31. Dez 2021 13:24
von udo1toni
Das Problem ist, Du setzt die Transformation an der falschen Stelle ein.

Es gibt seit openHAB3 drei verschiedene Möglichkeiten, die Transformation einzusetzen, in der Reihenfolge, wie der Signalweg ist:

1. Innerhalb der Channel Definition (steht nicht bei allen Bindings zur Verfügung) -> Der Channeltyp muss zum Zielformat passen.
2. Zwischen Channel und Item. Der Channel muss zum Ausgangsformat passen, das Item muss zum Zielformat passen.
3. Im Itemlabel. Channel und Item müssen zum Ausgangsformat passen.

Meine Definition oben nutzt die Version 3. Diese hat den Vorteil, dass der Zahlenwert nach wie vor im selben Item als Status zur Verfügung steht.
Beim Umbau auf 3.1 hast Du nun von 3. auf 2. gewechselt. Der Ausgangswert der Funktion ist eine Integer Zahl, der Zielwert ist jedoch ein String. Du musst also entweder das Item Label mit der Transformation versehen (so wie ursprünglich gedacht -> Metadaten des Items -> State Description -> Pattern -> exakt so eintragen wie bei openHAB2, also JS(secs2hms.js):%d)
Oder Du änderst den verknüpften Itemtyp auf String ab.

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 7. Jan 2024 11:36
von lenschith
Hallo Udo,
ich bin beim suchen einer Problemlösung auf diesen Artikel gestoßen aber irgendwie bin ich wieder einmal zu doof das in OH4.1.0 zu implementieren. Ich hoffe du kann mir wieder einen Tipp geben wo ich falsch bin.
Zum Ausgangspunkt bei mir.
Uptime meiner Fritzbox ist in Sekunden. Das Item ist Type:Number Dimension:Time(s)
Ich habe das Script in der UI angelegt Name: SecToDayHourMinutesSeconds.js

Code: Alles auswählen

(function(seconds){
    var retval  = "";
    var days    = Math.floor(seconds / 3600 / 24)
    var hours   = Math.floor(seconds / 3600)
    var minutes = Math.floor(seconds / 60)
    hours       = hours % 24
    minutes     = minutes % 60
    seconds     = seconds % 60
    retval      = retval + days + "d " + hours + "h ";
    if (minutes < 10)
        retval      = retval + "0";
    retval      = retval + minutes + "m ";
    if (seconds < 10)
        retval      = retval + "0";
    retval      = retval + seconds + "s";
    return retval;
})(input)
Aber leider habe ich eine Ahnung wo ich das jetzt in der UI hinterlegen muss damit das Item gleich übersetzt wird.
  • Habe es unter den Metadata als Pattern in der State Description JS(SecToDayHourMinutesSeconds.js):%s) versucht. Aber klappt nicht
  • Oder im Channel
    Screenshot 2024-01-07 113304.png
Wo ist mein Fehler?

Vielen Dank
Gruß Lenschi

Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.

Verfasst: 7. Jan 2024 16:03
von udo1toni
Wenn die Einheit schon in Sekunden als Number:Time in Sekunden kommt, lässt Du das Script einfach weg.
Stattdessen konfigurierst Du das State Description Pattern auf %1$tjd %1$tHh %1$tMm %1$tSs und das sollte es gewesen sein...