Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
-
- Beiträge: 123
- Registriert: 5. Jan 2020 14:26
Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Huhu.
Der liebe Shelly liefert seine Betriebszeit in Sekunden an ein Item. Diese Zahl wird natürlich sehr groß mit der Zeit und sieht auf der Sitemap unanschaulich und unüberschaubar aus.
Was für möglichkeiten hat man, um sich das in Tag : Stunden : Minuten : Sekunden anzeigen zu lassen?
Kann man das direkt in der Sitemap irgendwie formatieren, ähnlich wie das nach Komma abrunden?
Oder muß man da sogar eine Rule erstellen?
Wenn ja, muss man dann für jeden Shelly eine Rule erstellen? Oder kann man da irgendwie eine allgemein gültige Rule erstellen?
Der liebe Shelly liefert seine Betriebszeit in Sekunden an ein Item. Diese Zahl wird natürlich sehr groß mit der Zeit und sieht auf der Sitemap unanschaulich und unüberschaubar aus.
Was für möglichkeiten hat man, um sich das in Tag : Stunden : Minuten : Sekunden anzeigen zu lassen?
Kann man das direkt in der Sitemap irgendwie formatieren, ähnlich wie das nach Komma abrunden?
Oder muß man da sogar eine Rule erstellen?
Wenn ja, muss man dann für jeden Shelly eine Rule erstellen? Oder kann man da irgendwie eine allgemein gültige Rule erstellen?
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Es bietet sich an, das mit einer Transformation zu machen, in diesem Fall Java Script.
Das Script kommt ins Verzeichnis transform, unter dem Namen sectohms.js
Im Label der Items setzt Du dann jeweils das Script zur Transformation:
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.
Das Script kommt ins Verzeichnis transform, unter dem Namen sectohms.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)
Code: Alles auswählen
Number myNumber "Betriebsdauer [JS(sectohms.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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 123
- Registriert: 5. Jan 2020 14:26
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Danke, bin erst heute dazu gekommen.
Es zeigt mir auf der Sitemap aber "104:6252:29" an bei 375270 Sekunden. Da scheint noch etwas nicht ganz zu stimmen?
Mal etwas damit ich es besser verstehe. Math.floor rundet ab?
Ich vermute die Stunden werden von den Minuten nicht abgezogen. Mal sehen ob ich da etwas selber zusammen frikeln kann.
--------------------------------------------------------------------------------
Edit 1:
Ich habe noch hinzugefügt. Damit funktioniert es.
Damit ich es richtig verstehe. gibt den Rest von geteilt durch 60 an? Oder wie genau kann man das verstehen? Gibt es irgendwo eine deutsche Doku zu diesen Befehlen?
Und Danke
--------------------------------------------------------------------------------
Edit 2:
So, nun habe ich es mal Final für mich angepasst.
Auf der Sitemap kommt dann folgendes herraus
Es zeigt mir auf der Sitemap aber "104:6252:29" an bei 375270 Sekunden. Da scheint noch etwas nicht ganz zu stimmen?
Mal etwas damit ich es besser verstehe. Math.floor rundet ab?
Ich vermute die Stunden werden von den Minuten nicht abgezogen. Mal sehen ob ich da etwas selber zusammen frikeln kann.
--------------------------------------------------------------------------------
Edit 1:
Ich habe noch
Code: Alles auswählen
minutes = minutes % 60
Damit ich es richtig verstehe.
Code: Alles auswählen
% 60
Und Danke

--------------------------------------------------------------------------------
Edit 2:
So, nun habe ich es mal Final für mich angepasst.
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)
Code: Alles auswählen
Betriebsdauer 4d 8h 31m 36s
Zuletzt geändert von N1d45 am 30. Jan 2020 21:26, insgesamt 2-mal geändert.
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Ach, Mist, ja, ich hatte die falsche Datei kopiert und war dann zu faul, noch mal nachzuschauen...
% ist der Modulo Operator. Das ist der Rest einer Division. (also z.B. 5 % 3 ergibt 2)
% ist der Modulo Operator. Das ist der Rest einer Division. (also z.B. 5 % 3 ergibt 2)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 2
- Registriert: 29. Mai 2020 01:16
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Hallo,
auf meiner sitemap wird für die Batterie Time to go sekunden angezeigt .
Failed transforming the state '83279.9921875'
Wie kann ich diese in Tage und stunden Tage , h
umformatieren.
Was muss ich bei dem Skript ändern.
Wie kann ich das Skript in den items ansprechen.
%d wars ja nicht.
Gruß
Rudi
auf meiner sitemap wird für die Batterie Time to go sekunden angezeigt .
Failed transforming the state '83279.9921875'
Wie kann ich diese in Tage und stunden Tage , h
umformatieren.
Was muss ich bei dem Skript ändern.
Wie kann ich das Skript in den items ansprechen.
%d wars ja nicht.
Gruß
Rudi
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Das ist ein Float Wert... Aber ob das tatsächlich Sekunden sein sollen?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 2
- Registriert: 29. Mai 2020 01:16
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
Hallo,
ich habe die Funktion folgendermassen in .items eingesetzt
Number PV_battery_time_to_go "Battery TimeToGo [JS(sectohms.js):%d]" {mqtt="<[ccgx:N/b827eb74cb1f/system/0/Dc/Battery/TimeToGo:state:JSONPATH($.value)]"}
Die Fehlermeldung lautet
2020-05-29 23:49:43.695 [WARN ] [rest.core.item.EnrichedItemDTOMapper] - Failed transforming the state '103139.9921875' on item 'PV_battery_time_to_go' with pattern 'JS(sectohms.js):%d': Cannot format state '103139.9921875' to format '%d'
Wie muss die Funktion aufgerufen werden?
Gruß
Rudi
ich habe die Funktion folgendermassen in .items eingesetzt
Number PV_battery_time_to_go "Battery TimeToGo [JS(sectohms.js):%d]" {mqtt="<[ccgx:N/b827eb74cb1f/system/0/Dc/Battery/TimeToGo:state:JSONPATH($.value)]"}
Die Fehlermeldung lautet
2020-05-29 23:49:43.695 [WARN ] [rest.core.item.EnrichedItemDTOMapper] - Failed transforming the state '103139.9921875' on item 'PV_battery_time_to_go' with pattern 'JS(sectohms.js):%d': Cannot format state '103139.9921875' to format '%d'
Wie muss die Funktion aufgerufen werden?
Gruß
Rudi
-
- Beiträge: 247
- Registriert: 7. Jan 2020 14:45
- Kontaktdaten:
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
ich speichere die Zeit als Sekunden (leichter zum bearbeiten in Rules) und mache den Transform in der Sitemap
Variable und Scriptname an Deine anpassen
Code: Alles auswählen
Text item=Laufzeit_Today label="Laufzeit ist [JS(secToHM.js):%s]"
BYe
Harald
Harald
-
- Beiträge: 21
- Registriert: 15. Dez 2020 10:03
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
N1d45 hat geschrieben: ↑30. Jan 2020 21:10 Danke, bin erst heute dazu gekommen.
Es zeigt mir auf der Sitemap aber "104:6252:29" an bei 375270 Sekunden. Da scheint noch etwas nicht ganz zu stimmen?
Mal etwas damit ich es besser verstehe. Math.floor rundet ab?
Ich vermute die Stunden werden von den Minuten nicht abgezogen. Mal sehen ob ich da etwas selber zusammen frikeln kann.
--------------------------------------------------------------------------------
Edit 1:
Ich habe nochhinzugefügt. Damit funktioniert es.Code: Alles auswählen
minutes = minutes % 60
Damit ich es richtig verstehe.gibt den Rest von geteilt durch 60 an? Oder wie genau kann man das verstehen? Gibt es irgendwo eine deutsche Doku zu diesen Befehlen?Code: Alles auswählen
% 60
Und Danke
--------------------------------------------------------------------------------
Edit 2:
So, nun habe ich es mal Final für mich angepasst.
Auf der Sitemap kommt dann folgendes herrausCode: Alles auswählen
(function(seconds){ var retval = ""; var days = Math.floor(seconds / 86400 / 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)
Code: Alles auswählen
Betriebsdauer 4d 8h 31m 36s
-
- Beiträge: 21
- Registriert: 15. Dez 2020 10:03
Re: Sitemap Sekunden als Tag:stunden:minuten:sekunden anzeigen lassen.
N1d45 hat geschrieben: ↑30. Jan 2020 21:10 Danke, bin erst heute dazu gekommen.
Es zeigt mir auf der Sitemap aber "104:6252:29" an bei 375270 Sekunden. Da scheint noch etwas nicht ganz zu stimmen?
Mal etwas damit ich es besser verstehe. Math.floor rundet ab?
Ich vermute die Stunden werden von den Minuten nicht abgezogen. Mal sehen ob ich da etwas selber zusammen frikeln kann.
--------------------------------------------------------------------------------
Edit 1:
Ich habe nochhinzugefügt. Damit funktioniert es.Code: Alles auswählen
minutes = minutes % 60
Damit ich es richtig verstehe.gibt den Rest von geteilt durch 60 an? Oder wie genau kann man das verstehen? Gibt es irgendwo eine deutsche Doku zu diesen Befehlen?Code: Alles auswählen
% 60
Und Danke
--------------------------------------------------------------------------------
Edit 2:
So, nun habe ich es mal Final für mich angepasst.
Auf der Sitemap kommt dann folgendes herrausCode: Alles auswählen
(function(seconds){ var retval = ""; var days = Math.floor(seconds / 86400 / 24) [b]<---- ein Tag hat 86400 sekunden[/b] 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)
Code: Alles auswählen
Betriebsdauer 4d 8h 31m 36s