Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
-
- Beiträge: 21
- Registriert: 15. Dez 2020 10:03
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Du hast dabei das /24 übersehen... 3600*24 = 86400...
Gesendet von iPad mit Tapatalk
Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 10
- Registriert: 5. Dez 2020 13:32
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Hi @ all,
ich werf die Frage von N1d45 noch einmal in den Raum:
ich werf die Frage von N1d45 noch einmal in den Raum:
Ich habe eine Ausgabe in mA (DPT 7.012) und möchte diese gern in A ausgegeben haben.Gibt es irgendwo eine deutsche Doku zu diesen Befehlen?
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 10
- Registriert: 5. Dez 2020 13:32
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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?
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?
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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:
und im Verzeichnis ./transform/ die Datei divideby1000.js mit folgendem Inhalt:
Ganz grob sollte es so gehen:
Code: Alles auswählen
Number myNumber "Strom [JS(divideby1000.js):%d]" {channel="knx:device:bridge:mydevice:mychannel"}
Code: Alles auswählen
(function(in){
return in / 1000;
})(input)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- openHAB-Rookie
- Beiträge: 21
- Registriert: 7. Jul 2021 18:22
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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.
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:
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"
openHAB-Rookie / Tommy
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.

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'
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)
viele Grüße und Dank vorabudo1toni 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"
Im Label der Items setzt Du dann jeweils das Script zur Transformation: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)
Natürlich muss die JS-Transformation installiert sein.Code: Alles auswählen
Number myNumber "Betriebsdauer [JS(secs2hms.js):%d]"
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.
openHAB-Rookie / Tommy
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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.
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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- lenschith
- Beiträge: 313
- Registriert: 11. Dez 2020 22:36
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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
Aber leider habe ich eine Ahnung wo ich das jetzt in der UI hinterlegen muss damit das Item gleich übersetzt wird.
Vielen Dank
Gruß Lenschi
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)
- Habe es unter den Metadata als Pattern in der State Description JS(SecToDayHourMinutesSeconds.js):%s) versucht. Aber klappt nicht
- Oder im Channel
Vielen Dank
Gruß Lenschi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
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...
Stattdessen konfigurierst Du das State Description Pattern auf %1$tjd %1$tHh %1$tMm %1$tSs und das sollte es gewesen sein...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet