Hallo,
ich möchte für meine Heimautomatisierung gerne auf besondere Art und Weise anzeigen, wann ein Zustand sich das letzte mal geändert hat. Das klappt auch alles soweit. Hab da eine Vorlage gefunden und auf meine Bedürfnisse angepasst.
Jetzt ist es so, dass die beiden Punkte "var name" und "var startStamp" sich immer ändern, da ich an unterschiedlichen Punkten mir die Zeit anzeigen lassen möchte.
Hier auf der "ersten" Seite wäre dies nur für die Anzeige, wann das letzte mal eine Anwesenheit festgestellt worden ist im Treppenhaus.
Soweit so gut - bis jetzt funktioniert alles!
Das Problem was ich jetzt habe ist, dass sich wie erwähnt "var name" & "var startStamp" immer ändern müssen, weil....
Zur Erläuterung:
"Oben" ist jeweils der Name für die Ausgabe, welchen ich mir vorstelle. [var name]
"Unten" ist immer der Datenpunkt, welcher mir bei einem Aufruf eine Zeit ausgibt. [var startStamp].
Endergebnis der ganzen Aktion ist immer, dass an definierter Stelle beispielsweise steht:
"Steckdose - Vor 1 Stunde und 25 Minuten"
Ich verstehe nicht, wie ich jetzt es hinkriege, dass für die unterschiedlichen Positionen immer eine Berechnung der vergangenen Zeit stattfindet.
Ich habe es auch schon mit Classen probiert... aber hatte kein Erfolg dabei..
Bei diesem Versuch habe ich tatsächlich auch immer den Namen herausbekommen welchen ich wollte. Schien perfekt! Aber es ist immer irgendwie Text geblieben, also ich habe nie meinen Zeitstempel abrufen können.
Kurzum:
var startStamp = knx.0.Obergeschoss.Status.SA_P_Treppenhaus_Licht_schalten_status.ts; -> Direkt Eingeben -> FUNKTIONIERTE!
var startStamp = {collection[0].id+".ts"}; -> mit Ergebnis: knx.0.Obergeschoss.Status.SA_P_Treppenhaus_Licht_schalten_status.ts -> aus ID entnommen -> GEHT NICHT!
Ich hab zwar gesehen, dass es ne Lösung wäre, das Script 16x mit unterschiedlichen var Namen einzufügen... aber das geht doch bestimmt auch anders?
Nebenbei: Das ist alles nur Hobbysache bei mir, deshalb bitte ich um Nachtsicht sollte ich etwas unterirdisch schlecht erklärt haben oder ich die einfachsten Sachen nicht weiß...
Danke schon mal im voraus
ich möchte für meine Heimautomatisierung gerne auf besondere Art und Weise anzeigen, wann ein Zustand sich das letzte mal geändert hat. Das klappt auch alles soweit. Hab da eine Vorlage gefunden und auf meine Bedürfnisse angepasst.
Javascript:
// Spezifische zu ändernde Variablen.
var name = "time_treppenhaus"
var startStamp = {knx.0.Obergeschoss.Status.SA_P_Treppenhaus_Licht_schalten_status.ts};
// Keine weiteren Eingaben.
var newDate = new Date();
var newStamp = newDate.getTime();
var timer;
function updateClock() {
newDate = new Date();
newStamp = newDate.getTime();
var diff = Math.round((newStamp-startStamp)/1000);
var d = Math.floor(diff/(24*60*60));
diff = diff-(d*24*60*60);
var h = Math.floor(diff/(60*60));
diff = diff-(h*60*60);
var m = Math.floor(diff/(60));
diff = diff-(m*60);
var s = diff;
if (d == 0 && h == 0 && m == 0) {
document.getElementById(name).innerHTML ="Vor "+s+" Sekunden.";}
else if (d == 0 && h == 0) {
document.getElementById(name).innerHTML ="Vor "+m+" Minuten und "+s+" Sekunden.";}
else if (d == 0) {
document.getElementById(name).innerHTML ="Vor "+h+" Stunden, "+m+" Minuten.";}
else if (d != 0) {
document.getElementById(name).innerHTML ="Vor "+d+" Tagen, "+h+" Stunden.";}
}
setInterval(updateClock, 1000);
Jetzt ist es so, dass die beiden Punkte "var name" und "var startStamp" sich immer ändern, da ich an unterschiedlichen Punkten mir die Zeit anzeigen lassen möchte.
Hier auf der "ersten" Seite wäre dies nur für die Anzeige, wann das letzte mal eine Anwesenheit festgestellt worden ist im Treppenhaus.
HTML:
<td>Letzte Anwesenheit:</td>
<td><p class="timeklein" id="time_treppenhaus"></p>
</td>
Soweit so gut - bis jetzt funktioniert alles!
Das Problem was ich jetzt habe ist, dass sich wie erwähnt "var name" & "var startStamp" immer ändern müssen, weil....
Code:
kuche_herd
knx.0.Obergeschoss.Status.SA_A_E_Herd_schalten_status.ts
kuche_spuhlmaschine
knx.0.Obergeschoss.Status.WL_C_Spuehlmaschine_schalten_status.ts
kuche_steckdosen
knx.0.Obergeschoss.Status.SA_D_Steckdosen_Kuche_schalten_status.ts
schlafzimmer_steckdosen
knx.0.Obergeschoss.Status.SA_E_Steckdosen_Schlafzimmer_schalten_status.ts
und noch 12 weitere.......
"Oben" ist jeweils der Name für die Ausgabe, welchen ich mir vorstelle. [var name]
"Unten" ist immer der Datenpunkt, welcher mir bei einem Aufruf eine Zeit ausgibt. [var startStamp].
Endergebnis der ganzen Aktion ist immer, dass an definierter Stelle beispielsweise steht:
"Steckdose - Vor 1 Stunde und 25 Minuten"
Ich verstehe nicht, wie ich jetzt es hinkriege, dass für die unterschiedlichen Positionen immer eine Berechnung der vergangenen Zeit stattfindet.
Ich habe es auch schon mit Classen probiert... aber hatte kein Erfolg dabei..
Javascript:
<div class="datenpunkt" id="knx.0.Obergeschoss.Status.SA_P_Treppenhaus_Licht_schalten_status"></div>
<div class="datenpunkt" id="knx.0.Außenbereich.Status.SA_A_Steckdosen_Anbau_schalten_status"></div>
<script>
const collection = document.getElementsByClassName("datenpunkt");
var startStamp = {collection[0].id+".ts"}; // Geschwungene Klammern sind -manchmal- notwendig für den Zugriff auf den Datenpunkt, aber auch schon ohne Probiert. Ohne Erfolg!
var newDate = new Date();
...und so weiter ...
Kurzum:
var startStamp = knx.0.Obergeschoss.Status.SA_P_Treppenhaus_Licht_schalten_status.ts; -> Direkt Eingeben -> FUNKTIONIERTE!
var startStamp = {collection[0].id+".ts"}; -> mit Ergebnis: knx.0.Obergeschoss.Status.SA_P_Treppenhaus_Licht_schalten_status.ts -> aus ID entnommen -> GEHT NICHT!
Ich hab zwar gesehen, dass es ne Lösung wäre, das Script 16x mit unterschiedlichen var Namen einzufügen... aber das geht doch bestimmt auch anders?
Nebenbei: Das ist alles nur Hobbysache bei mir, deshalb bitte ich um Nachtsicht sollte ich etwas unterirdisch schlecht erklärt haben oder ich die einfachsten Sachen nicht weiß...
Danke schon mal im voraus